|
|
|
@ -1,352 +0,0 @@ |
|
|
|
|
|
|
|
|
|
## Start Pantheon with Privacy |
|
|
|
|
|
|
|
|
|
The EEA methods are not enabled by default, follow the steps above to |
|
|
|
|
use the command line options. Pantheon/Enclave(Orion) needs to be started |
|
|
|
|
when using privacy. |
|
|
|
|
|
|
|
|
|
### Pantheon |
|
|
|
|
|
|
|
|
|
#### rpc-http-api |
|
|
|
|
|
|
|
|
|
```bash tab="Example Command Line" |
|
|
|
|
--rpc-http-api=EEA |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Example Configuration File" |
|
|
|
|
rpc-http-api=["EEA"] |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Comma-separated APIs to enable on the HTTP JSON-RPC channel. |
|
|
|
|
When you use this option, the `--rpc-http-enabled` option must also be specified. |
|
|
|
|
The available API options are: `ADMIN`, `ETH`, `NET`, `WEB3`, `CLIQUE`, `IBFT`, `PERM`, `DEBUG`, `MINER`, and `EEA`. |
|
|
|
|
The default is: `ETH`, `NET`, `WEB3`. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
EEA methods are for privacy features. Privacy features are under development and will be available in v1.1. |
|
|
|
|
|
|
|
|
|
!!!tip |
|
|
|
|
The singular `--rpc-http-api` and plural `--rpc-http-apis` are available and are just two |
|
|
|
|
names for the same option. |
|
|
|
|
|
|
|
|
|
#### privacy-enabled |
|
|
|
|
|
|
|
|
|
```bash tab="Example Command Line" |
|
|
|
|
--privacy-enabled=true |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Example Configuration File" |
|
|
|
|
privacy-enabled=true |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Set to enable private transactions. |
|
|
|
|
The default is false. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
Privacy is under development and will be available in v1.1. |
|
|
|
|
|
|
|
|
|
#### privacy-precompiled-address |
|
|
|
|
|
|
|
|
|
```bash tab="Example Command Line" |
|
|
|
|
--privacy-precompiled-address=125 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Example Configuration File" |
|
|
|
|
privacy-precompiled-address=125 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Address to which the privacy pre-compiled contract is mapped. |
|
|
|
|
The default is 126. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
Privacy is under development and will be available in v1.1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Enclave (Orion) |
|
|
|
|
|
|
|
|
|
#### privacy-public-key-file |
|
|
|
|
|
|
|
|
|
```bash tab="Syntax" |
|
|
|
|
--privacy-public-key-file=<privacyPublicKeyFile> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Path to the public key for the enclave. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
Privacy is under development and will be available in v1.1. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
This option is not used when running Pantheon from the [Docker image](../Getting-Started/Run-Docker-Image.md#privacy-public-key-file). |
|
|
|
|
|
|
|
|
|
#### privacy-url |
|
|
|
|
|
|
|
|
|
```bash tab="Syntax" |
|
|
|
|
--privacy-url=<privacyUrl> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
URL on which the Enclave is running. |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
Privacy is under development and will be available in v1.1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Privacy JSON-RPC API method |
|
|
|
|
|
|
|
|
|
The [EEA methods](../Reference/JSON-RPC-API-Methods.md#eea_sendRawTransaction) were created to |
|
|
|
|
provide and support privacy. |
|
|
|
|
|
|
|
|
|
### Set-up Privacy |
|
|
|
|
|
|
|
|
|
## Prerequisites |
|
|
|
|
|
|
|
|
|
[Pantheon](../Installation/Install-Binaries.md) |
|
|
|
|
|
|
|
|
|
[Curl (or similar web service client)](https://curl.haxx.se/download.html) |
|
|
|
|
|
|
|
|
|
## Steps |
|
|
|
|
|
|
|
|
|
To create a private network: |
|
|
|
|
|
|
|
|
|
1. [Create Folders](#1-create-folders) |
|
|
|
|
2. [Create Genesis File](#2-create-genesis-file) |
|
|
|
|
3. [Start instances of Orion for each node](#3-start-instances-of-orion-for-each-node) |
|
|
|
|
4. [Get Public Key of First Node](#4-get-public-key-of-first-node) |
|
|
|
|
5. [Start First Node as Bootnode](#5-restart-first-node-as-bootnode) |
|
|
|
|
6. [Start Node-2](#6-start-node-2) |
|
|
|
|
7. [Start Node-3-non-privacy](#7-start-node-3) |
|
|
|
|
8. [Confirm the private network is working](#8-confirm-private-network-is-working) |
|
|
|
|
9. [Create a Private Transaction between Node-1 with Node-2](#9-create-a-private-transaction-node-1-with-node-2) |
|
|
|
|
10. [Confirm Node-3 can't interact with private Transaction](#10-confirm-node-3-can't-interact-with-private-transaction) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Create Folders |
|
|
|
|
|
|
|
|
|
Each node requires a data directory for the blockchain data. When the |
|
|
|
|
node is started, the node key is saved in this directory. |
|
|
|
|
|
|
|
|
|
Create directories for your private network, each of the three nodes, and a data directory for each node: |
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
Private-Network/ |
|
|
|
|
├── Node-1 |
|
|
|
|
│ ├── Node-1-data-path |
|
|
|
|
├── Node-2 |
|
|
|
|
│ ├── Node-2-data-path |
|
|
|
|
└── Node-3-non-privacy |
|
|
|
|
├── Node-3-data-path |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
### 2. Create Genesis File |
|
|
|
|
|
|
|
|
|
The genesis file defines the genesis block of the blockchain (that is, the initial state of the blockchain). |
|
|
|
|
The genesis file includes entries for configuring the blockchain such as the mining difficulty and initial |
|
|
|
|
accounts and balances. |
|
|
|
|
|
|
|
|
|
All nodes in a network must use the same genesis file. The [network ID](../Configuring-Pantheon/NetworkID-And-ChainID.md) |
|
|
|
|
defaults to the `chainID` in the genesis file. The `fixeddifficulty` enables blocks to be mined quickly. |
|
|
|
|
|
|
|
|
|
Copy the following genesis definition to a file called `privateNetworkGenesis.json` and save it in the `Private-Network` directory: |
|
|
|
|
|
|
|
|
|
```json |
|
|
|
|
{ |
|
|
|
|
"config": { |
|
|
|
|
"constantinoplefixblock": 0, |
|
|
|
|
"ethash": { |
|
|
|
|
"fixeddifficulty": 1000 |
|
|
|
|
}, |
|
|
|
|
"chainID": 1981 |
|
|
|
|
}, |
|
|
|
|
"nonce": "0x42", |
|
|
|
|
"gasLimit": "0x1000000", |
|
|
|
|
"difficulty": "0x10000", |
|
|
|
|
"alloc": { |
|
|
|
|
"fe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
|
|
|
|
"privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", |
|
|
|
|
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored", |
|
|
|
|
"balance": "0xad78ebc5ac6200000" |
|
|
|
|
}, |
|
|
|
|
"f17f52151EbEF6C7334FAD080c5704D77216b732": { |
|
|
|
|
"privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", |
|
|
|
|
"comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored", |
|
|
|
|
"balance": "90000000000000000000000" |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
!!! warning |
|
|
|
|
Do not use the accounts in the genesis file above on mainnet or any public network except for testing. |
|
|
|
|
The private keys are displayed so the accounts are not secure. |
|
|
|
|
|
|
|
|
|
### 3. Start instances of Orion for each node |
|
|
|
|
|
|
|
|
|
Download and install [*Orion*](https://github.com/PegaSysEng/orion/blob/master/documentation/install/running.md) |
|
|
|
|
to be used as an enclave to store and communicate the private transactions in Pantheon. |
|
|
|
|
|
|
|
|
|
We can generate key pairs for Orion to use using the following command `orion -f foo`. This will generate |
|
|
|
|
a public-private key pair which will be used to connect to Orion instance. The public key generated |
|
|
|
|
link the Pantheon node to Orion instance. |
|
|
|
|
|
|
|
|
|
Refer to [Configuring Orion](https://github.com/PegaSysEng/orion/blob/master/documentation/install/configure.md) |
|
|
|
|
for a detailed configuration options. |
|
|
|
|
|
|
|
|
|
Start one instance of Orion for each Pantheon node which we intend to perform private transactions using |
|
|
|
|
`orion foo.conf` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 4. Get Public Key of First Node |
|
|
|
|
|
|
|
|
|
To enable nodes to discover each other, a network requires one or more nodes to be bootnodes. |
|
|
|
|
For this private network, we will use Node-1 as the bootnode. This requires obtaining the public key for the [enode URL](../Configuring-Pantheon/Node-Keys.md#enode-url). |
|
|
|
|
|
|
|
|
|
In the `Node-1` directory, use the [`public-key` subcommand](../Reference/Pantheon-CLI-Syntax.md#public-key) to write |
|
|
|
|
the [node public key](../Configuring-Pantheon/Node-Keys.md#node-public-key) to the specified file (`publicKeyNode1` in this example): |
|
|
|
|
|
|
|
|
|
```bash tab="MacOS" |
|
|
|
|
pantheon --data-path=Node-1-data-path --genesis-file=../privateNetworkGenesis.json public-key export --to=Node-1-data-path/publicKeyNode1 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Windows" |
|
|
|
|
pantheon --data-path=Node-1-data-path --genesis-file=..\privateNetworkGenesis.json public-key export --to=Node-1-data-path\publicKeyNode1 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
!!!note |
|
|
|
|
The [`--data-path`](../Reference/Pantheon-CLI-Syntax.md#data-path) and [`--genesis-file`](../Reference/Pantheon-CLI-Syntax.md#genesis-file) |
|
|
|
|
options are not used when running Pantheon from the [Docker image](../Getting-Started/Run-Docker-Image.md). |
|
|
|
|
Use a bind mount to [specify a configuration file with Docker](../Getting-Started/Run-Docker-Image.md#custom-genesis-file) |
|
|
|
|
and volume to [specify the data directory](../Getting-Started/Run-Docker-Image.md#data-directory). |
|
|
|
|
|
|
|
|
|
Your node 1 directory now contains: |
|
|
|
|
```bash |
|
|
|
|
├── Node-1 |
|
|
|
|
├── Node-1-data-path |
|
|
|
|
├── database |
|
|
|
|
├── key |
|
|
|
|
├── publicKeyNode1 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
The `database` directory contains the blockchain data. |
|
|
|
|
|
|
|
|
|
### 5. Start First Node as Bootnode |
|
|
|
|
|
|
|
|
|
Start Node-1: |
|
|
|
|
|
|
|
|
|
```bash tab="MacOS" |
|
|
|
|
pantheon --data-path=Node-1-data-path --genesis-file=../privateNetworkGenesis.json --bootnodes |
|
|
|
|
--miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled |
|
|
|
|
--host-whitelist=* --rpc-http-cors-origins="all" --privacy-enabled=true --privacy-precompiled-address=125 |
|
|
|
|
--privacy-url=127.0.0.1:8888 --privacy-public-key-file=../pathToOrion1PublicKey.pub --rpc-http-api=EEA |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Windows" |
|
|
|
|
pantheon --data-path=Node-1-data-path --genesis-file=..\privateNetworkGenesis.json --bootnodes |
|
|
|
|
--miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled |
|
|
|
|
--host-whitelist=* --rpc-http-cors-origins="all" --privacy-enabled=true --privacy-precompiled-address=125 |
|
|
|
|
--privacy-url=127.0.0.1:8888 --privacy-public-key-file=..\pathToOrion1PublicKey.pub --rpc-http-api=EEA |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
The command line specifies: |
|
|
|
|
|
|
|
|
|
* No arguments for the [`--bootnodes`](../Reference/Pantheon-CLI-Syntax.md#bootnodes) option because this is your bootnode. |
|
|
|
|
* Mining is enabled and the account to which mining rewards are paid using the [`--miner-enabled`](../Reference/Pantheon-CLI-Syntax.md#miner-enabled) |
|
|
|
|
and [`--miner-coinbase`](../Reference/Pantheon-CLI-Syntax.md#miner-coinbase) options. |
|
|
|
|
* JSON-RPC API is enabled using the [`--rpc-http-enabled`](../Reference/Pantheon-CLI-Syntax.md#rpc-http-enabled) option. |
|
|
|
|
* All hosts can access the HTTP JSON-RPC API using the [`--host-whitelist`](../Reference/Pantheon-CLI-Syntax.md#host-whitelist) option. |
|
|
|
|
* All domains can access the node using the HTTP JSON-RPC API using the [`--rpc-http-cors-origins`](../Reference/Pantheon-CLI-Syntax.md#rpc-http-cors-origins) option. |
|
|
|
|
* [`--privacy-enabled=true`](../Reference/Pantheon-CLI-Syntax.md#privacy-enabled) |
|
|
|
|
set true to enable the privacy. |
|
|
|
|
* Changes the default Privacy PreCompiled address |
|
|
|
|
[`--privacy-precompiled-address=125`](../Reference/Pantheon-CLI-Syntax.md#privacy-precompiled-address) |
|
|
|
|
* Setup the enclave(orion) URL |
|
|
|
|
[`--privacy-url=127.0.0.1:8888`](../Reference/Pantheon-CLI-Syntax.md#privacy-url) |
|
|
|
|
* Pass the enclave(orion) public Key |
|
|
|
|
[`--privacy-public-key-file`](../Reference/Pantheon-CLI-Syntax.md#privacy-public-key-file) |
|
|
|
|
* Enable EEA methods |
|
|
|
|
[`--rpc-http-api=EEA`](../Reference/Pantheon-CLI-Syntax.md#rpc-http-api) |
|
|
|
|
|
|
|
|
|
!!! info The miner coinbase account is one of the accounts defined in |
|
|
|
|
the genesis file. |
|
|
|
|
|
|
|
|
|
!!! info The Privacy PreCompiled address need to be |
|
|
|
|
the same address for each node interacting through the private |
|
|
|
|
transaction. |
|
|
|
|
|
|
|
|
|
### 6. Start Node-2 |
|
|
|
|
|
|
|
|
|
You need the [enode URL](../Configuring-Pantheon/Node-Keys.md#enode-url) for Node-1 to specify Node-1 as the bootnode for Node-2 and Node-3. |
|
|
|
|
|
|
|
|
|
Start another terminal, change to the `Node-2` directory and start Node-2 replacing the enode URL with your bootnode: |
|
|
|
|
|
|
|
|
|
```bash tab="MacOS" |
|
|
|
|
pantheon --data-path=Node-2-data-path --genesis-file=../privateNetworkGenesis.json |
|
|
|
|
--bootnodes="enode://<node public key ex 0x>@127.0.0.1:30303" --p2p-port=30304 |
|
|
|
|
--privacy-enabled=true --privacy-precompiled-address=125 |
|
|
|
|
--privacy-url=127.0.0.1:8888 --privacy-public-key-file=../pathToOrion2PublicKey.pub --rpc-http-api=EEA |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Windows" |
|
|
|
|
pantheon --data-path=Node-2-data-path --genesis-file=..\privateNetworkGenesis.json --bootnodes="enode://<node public key ex 0x>@127.0.0.1:30303" --p2p-port=30304 |
|
|
|
|
--privacy-enabled=true --privacy-precompiled-address=125 --privacy-url=127.0.0.1:8888 --privacy-public-key-file=..\pathToOrion2PublicKey.pub --rpc-http-api=EEA |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
The command line specifies: |
|
|
|
|
|
|
|
|
|
* Different port to Node-1 for P2P peer discovery using the [`--p2p-port`](../Reference/Pantheon-CLI-Syntax.md#p2p-port) option. |
|
|
|
|
* Enode URL for Node-1 using the [`--bootnodes`](../Reference/Pantheon-CLI-Syntax.md#bootnodes) option. |
|
|
|
|
* Data directory for Node-2 using the [`--data-path`](../Reference/Pantheon-CLI-Syntax.md#data-path) option. |
|
|
|
|
* Genesis file as for Node-1.confirm-private-network-is-working |
|
|
|
|
* [`--privacy-enabled=true`](../Reference/Pantheon-CLI-Syntax.md#privacy-enabled) |
|
|
|
|
set true to enable privacy. |
|
|
|
|
* Changes the default Privacy PreCompiled address |
|
|
|
|
[`--privacy-precompiled-address=125`](../Reference/Pantheon-CLI-Syntax.md#privacy-precompiled-address) |
|
|
|
|
* Setup the enclave(orion) URL |
|
|
|
|
[`--privacy-url=127.0.0.1:8888`](../Reference/Pantheon-CLI-Syntax.md#privacy-url) |
|
|
|
|
* Enable EEA methods |
|
|
|
|
[`--rpc-http-api=EEA`](../Reference/Pantheon-CLI-Syntax.md#rpc-http-api) |
|
|
|
|
|
|
|
|
|
### 7. Start Node-3 |
|
|
|
|
|
|
|
|
|
Start another terminal, change to the `Node-3` directory and start Node-3 replacing the enode URL with your bootnode: |
|
|
|
|
|
|
|
|
|
```bash tab="MacOS" |
|
|
|
|
pantheon --data-path=Node-3-data-path --genesis-file=../privateNetworkGenesis.json |
|
|
|
|
--bootnodes="enode://<node public key ex 0x>@127.0.0.1:30303" --p2p-port30305 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
```bash tab="Windows" |
|
|
|
|
pantheon --data-path=Node-3-data-path --genesis-file=..\privateNetworkGenesis.json |
|
|
|
|
--bootnodes="enode://<node public key ex 0x>@127.0.0.1:30303" --p2p-port=30305 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
The command line specifies: |
|
|
|
|
|
|
|
|
|
* Different port to Node-1 and Node-2 for P2P peer discovery. |
|
|
|
|
* Data directory for Node-3 using the [`--data-path`](../Reference/Pantheon-CLI-Syntax.md#data-path) option. |
|
|
|
|
* Bootnode and genesis file as for Node-2. |
|
|
|
|
* Without privacy commandline. |
|
|
|
|
|
|
|
|
|
### 8. Confirm Private Network is Working |
|
|
|
|
|
|
|
|
|
Start another terminal, use curl to call the JSON-RPC API [`net_peerCount`](../Reference/JSON-RPC-API-Methods.md#net_peercount) method and confirm the nodes are functioning as peers: |
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' localhost:8545 |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
The result confirms Node-1 (the node running the JSON-RPC service) has two peers (Node-2 and Node-3): |
|
|
|
|
```json |
|
|
|
|
{ |
|
|
|
|
"jsonrpc" : "2.0", |
|
|
|
|
"id" : 1, |
|
|
|
|
"result" : "0x2" |
|
|
|
|
} |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9. Create a Private Transaction between Node-1 with Node-2 |
|
|
|
|
|
|
|
|
|
### 10. Confirm Node-3 can't interact with private Transaction |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!!!note EEA methods are for privacy features. Privacy features are under development and will be available in v1.1. |