diff --git a/parity/.env b/parity/.env index a02c5d0..c94bcb8 100755 --- a/parity/.env +++ b/parity/.env @@ -1 +1 @@ -NETWORK_NAME=ocean-protocol +NETWORK_NAME=ocean-network diff --git a/parity/README.md b/parity/README.md index 2fc41f9..1213169 100644 --- a/parity/README.md +++ b/parity/README.md @@ -1,25 +1,96 @@ -# Instructions to run a Parity dev node using Docker Compose -### Pre-requisites -* Docker -* Docker-compose +# Ocean private test net using Proof Of Authority consensus +### Setup -### Run a private network based on this repository -* Download/clone the files in this repository -`git clone https://github.com/oceanprotocol/docker-images.git` -* cd into `parity` -* Run: `docker-compose up -d` -* This will run 3 validator/authority nodes and 3 user nodes +0. Install [docker](https://docs.docker.com/engine/installation/) and [docker-compose](https://docs.docker.com/compose/install/) +1. Run `git clone https://github.com/oceanprotocol/docker-images.git` +2. Run `cd docker-images/parity` +3. Run `docker-compose up ` (add `-d` to run in daemon mode) +4. This will run 3 validator/authority nodes and 1 user node -### Add more authority nodes to the base network +### Access JSON RPC +Access JSON RPC at [http://127.0.0.1:8545](http://127.0.0.1:8545). + +### Some handy curl commands + +### Send transaction +``` +curl --data '{"jsonrpc":"2.0","method":"personal_sendTransaction","params":[{"from":"0x
","to":"0x
","value":"0x"}, ""],"id":0}' -H "Content-Type: application/json" -X POST localhost:8545 +``` + +#### Unlock account +replace `null` with number of seconds to indicate how long account will be unlocked +Account address goes in the first param (here is's just "0x") +``` +curl --data '{"method":"personal_unlockAccount","params":["0x","hunter2",null],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 + +``` + +### New account +Using just a password +``` +curl --data '{"method":"personal_newAccount","params":["password-hunter2"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 +``` + +Using a recovery phrase and password +``` +curl --data '{"method":"parity_newAccountFromPhrase","params":["stylus outing overhand dime radial seducing harmless uselessly evasive tastiness eradicate imperfect","hunter2"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 +``` + +Refer to these sources for more goodies: +* https://github.com/paritytech/wiki +* https://github.com/paritytech/wiki/blob/master/JSONRPC-personal-module.md +* https://github.com/paritytech/wiki/blob/master/JSONRPC-parity_accounts-module.md + +### Instructions to add a validator node using Docker Compose * Run the private network as described above * Create a new validator account: - `curl --data '{"jsonrpc":"2.0","method":"parity_newAccountFromPhrase","params":["nodeX", "nodeX"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8545` + `curl --data '{"jsonrpc":"2.0","method":"parity_newAccountFromPhrase","params":["nodeX-phrase", "nodeX-password"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8545` * Returns something like this: `{"jsonrpc":"2.0","result":"0x00aa39d30f0d20ff03a22ccfc30b7efbfca597c2","id":0}` -* Copy the file `parity/keys/UTC--2018-05-22T13-53-28Z--ed4d9a7c-4206-bbf3-673c-fdd1d41b4dcb` to `parity/authorities` and rename it to `validatorX.json` (pick a better name) then modify the contents to indent properly -* Add a simple text file named `validatorX.pwd` in `parity/authorities` and add the password `nodeX` (or whatever was specified in the "params":["nodeX", "nodeX"]) -* Copy/paste one of the validator specs in the docker-compose.yml file and modify it to reflect the new node name and make sure to point to the new `validatorX.json` and `validayorX.pwd` files. - * Also specify the address in the --engine-signer option - * And add the name in the volumes section in the compose file -* Make a copy of `parity/node0.network.key` and modify the key inside this file (anything should do) +* Copy the file `parity/keys/UTC--2018-05-22T13-53-28Z--ed4d9a7c-4206-bbf3-673c-fdd1d41b4dcb` to `parity/authorities` and rename it to `validatorX.json` (pick a better name) then modify the contents to improve indentation (optional) +* Add a simple text file named `validatorX.pwd` in `parity/authorities` and add the password `nodeX-password` (or whatever was specified in the "params":["nodeX-phrase", "nodeX-password"]) +* Copy/paste a validator image definition section in the docker-compose.yml file and modify it to reflect the new node name and make sure to point to the new `validatorX.json` and `validayorX.pwd` files. + * This is what will be added to the docker-compose.yml file: +``` + validatorX: + image: parity/parity:stable + command: + --config /parity/config/validator.toml + --engine-signer 0x00aa39d30f0d20ff03a22ccfc30b7efbfca597c2 + volumes: + - ./parity/config:/parity/config:ro + - validatorX:/root/.local/share/io.parity.ethereum/ + - ./parity/authorities/validatorX.json:/root/.local/share/io.parity.ethereum/keys/${NETWORK_NAME}/validator.json:ro + - ./parity/authorities/validatorX.pwd:/parity/validator.pwd:ro + - ./parity/nodeX.network.key:/root/.local/share/io.parity.ethereum/network/key:ro + networks: + my_net: + ipv4_address: 172.16.0.13 +``` + * Make sure to assign a new `ipv4_address` address + * Specify the new account address in the --engine-signer option + * And add the name in the volumes section in the compose file: +``` +volumes: + validator0: + validator1: + validator2: + validatorX: + +``` +* Generate a new bootnode key and add it here `docker-images/parity/parity/nodeX.network.key` +* Get an enode address and add it in both `member.toml` and `validator.toml` files in the bootnodes list under `[network]` +* Update the validators list in `chain.json` by adding the new account to the existing list + + +## Notes +* We ran into an issue with running smart contracts where a function in one contract fails if it calls a function of another contract + * This problem is fixed by adding the following lines to the `chain.json` file to enable byzantium mode in the EVM: +``` + "eip140Transition": 0, + "eip211Transition": 0, + "eip214Transition": 0, + "eip658Transition": 0 +``` + * The problem is reported in `https://github.com/paritytech/parity/issues/8503` and `https://github.com/ethereum/solidity/issues/3969` \ No newline at end of file diff --git a/parity/dashboard/ws_secret.json b/parity/dashboard/ws_secret.json deleted file mode 100755 index 97ff85f..0000000 --- a/parity/dashboard/ws_secret.json +++ /dev/null @@ -1 +0,0 @@ -["123"] \ No newline at end of file diff --git a/parity/docker-compose.yml b/parity/docker-compose.yml index a06eea6..1c658cc 100644 --- a/parity/docker-compose.yml +++ b/parity/docker-compose.yml @@ -1,11 +1,11 @@ version: '2.1' services: validator0: - image: parity/parity:latest + image: parity/parity:stable command: --config /parity/config/validator.toml --engine-signer 0x00bd138abd70e2f00903268f3db08f2d25677c9e - --dapps-interface 0.0.0.0 + --jsonrpc-interface 0.0.0.0 --ws-interface 0.0.0.0 --ui-interface 0.0.0.0 --unsafe-expose @@ -25,7 +25,7 @@ services: ipv4_address: 172.16.0.10 validator1: - image: parity/parity:latest + image: parity/parity:stable command: --config /parity/config/validator.toml --engine-signer 0x00aa39d30f0d20ff03a22ccfc30b7efbfca597c2 @@ -40,7 +40,7 @@ services: ipv4_address: 172.16.0.11 validator2: - image: parity/parity:latest + image: parity/parity:stable command: --config /parity/config/validator.toml --engine-signer 0x002e28950558fbede1a9675cb113f0bd20912019 @@ -55,10 +55,10 @@ services: ipv4_address: 172.16.0.12 user0: - image: parity/parity:latest + image: parity/parity:stable command: --config /parity/config/member.toml - --dapps-interface 0.0.0.0 + --jsonrpc-interface 0.0.0.0 --ws-interface 0.0.0.0 --ui-interface 0.0.0.0 --unsafe-expose diff --git a/parity/monitor/app.json b/parity/monitor/app.json deleted file mode 100755 index 91db950..0000000 --- a/parity/monitor/app.json +++ /dev/null @@ -1,149 +0,0 @@ -[ - { - "name" : "validator0", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "validator0", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "validator0", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "validator1", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "validator1", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "validator1", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "validator2", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "validator2", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "validator2", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "validator3", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "validator3", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "validator3", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "user0", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "user0", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "user0", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "user1", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "user1", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "user1", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - }, - { - "name" : "user2", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : true, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "user2", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "30303", - "INSTANCE_NAME" : "user2", - "WS_SERVER" : "ws://dashboard:3000", - "WS_SECRET" : "123", - "VERBOSITY" : 3 - } - } -] diff --git a/parity/parity/config/chain.json b/parity/parity/config/chain.json index 52d24bc..5d266e4 100644 --- a/parity/parity/config/chain.json +++ b/parity/parity/config/chain.json @@ -1,5 +1,5 @@ { - "name": "ocean-protocol", + "name": "ocean-network", "engine": { "authorityRound": { "params": { @@ -7,7 +7,7 @@ "validators": { "list": [ "0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e", - "0x00aa39d30f0d20ff03a22ccfc30b7efbfca597c2", + "0x00Aa39d30F0D20FF03a22cCfc30B7EfbFca597C2", "0x002e28950558fbede1a9675cb113f0bd20912019" ] }, @@ -20,8 +20,13 @@ "params": { "maximumExtraDataSize": "0x20", "minGasLimit": "0x1388", - "networkID": "0x2323", - "gasLimitBoundDivisor": "0x400" + "networkID": "0x2323", + "gasLimitBoundDivisor": "0x400", + "eip140Transition": 0, + "eip211Transition": 0, + "eip214Transition": 0, + "eip658Transition": 0 + }, "genesis": { "seal": { @@ -83,10 +88,10 @@ } }, "0x6B0c56d1Ad5144b4d37fa6e27DC9afd5C2435c3B": { - "balance": "10" + "balance": "1000" }, "0x0011598De1016A350ad719D23586273804076774": { - "balance": "10" + "balance": "100500" }, @@ -95,4 +100,4 @@ } } -} +} \ No newline at end of file diff --git a/parity/parity/keys/dapps_history.json b/parity/parity/keys/dapps_history.json deleted file mode 100644 index 61e5b61..0000000 --- a/parity/parity/keys/dapps_history.json +++ /dev/null @@ -1 +0,0 @@ -{"parity://1.ui.parity":{"last_accessed":1529334413},"":{"last_accessed":1529074407}} \ No newline at end of file