diff --git a/docker/compose-examples/live-template.docker-compose.yml b/docker/compose-examples/live-template.docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..7592a235b469ed06ff076c17e38382b1f29d6815 --- /dev/null +++ b/docker/compose-examples/live-template.docker-compose.yml @@ -0,0 +1,105 @@ +version: "3.4" + +services: + db: + image: postgres:12 + restart: always + volumes: + - /var/lib/postgresql/data + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + + duniter-rpc: + image: duniter/duniter-v2s:debug-sha-acaf89a4 + restart: unless-stopped + ports: + - "9944:9944" + - "30333:30333" + volumes: + - ./duniter-rpc/:/var/lib/duniter/ + environment: + - DUNITER_CHAIN_NAME=/var/lib/duniter/genesis-raw.json + command: + - "--bootnodes" + - "/dns/duniter-validator/tcp/30333/p2p/VALIDATOR_NODE_KEY" + - "--node-key-file" + - "/var/lib/duniter/node-key" + - "--unsafe-rpc-external" + - "--rpc-cors" + - "all" + + duniter-validator: + image: duniter/duniter-v2s:debug-sha-acaf89a4 + restart: unless-stopped + ports: + - "127.0.0.1:9945:9944" + - "30334:30333" + volumes: + - ./duniter-validator/:/var/lib/duniter/ + environment: + - DUNITER_CHAIN_NAME=/var/lib/duniter/genesis.json + command: + - "--bootnodes" + - "/dns/duniter-rpc/tcp/30333/p2p/RPC_NODE_KEY" + - "--node-key-file" + - "/var/lib/duniter/node-key" + - "--rpc-methods=Unsafe" + - "--validator" + - "--unsafe-rpc-external" + - "--rpc-cors" + - "all" + + indexer: + image: subsquid/hydra-indexer:5 + restart: unless-stopped + environment: + - WORKERS_NUMBER=1 + - DB_NAME=indexer + - DB_HOST=db + - DB_USER=postgres + - DB_PASS=postgres + - DB_PORT=5432 + - REDIS_URI=redis://redis:6379/0 + - FORCE_HEIGHT=true + - BLOCK_HEIGHT=0 # starting block height + - WS_PROVIDER_ENDPOINT_URI=ws://duniter-rpc:9944/ + depends_on: + - db + - redis + command: > + sh -c "yarn db:bootstrap && yarn start:prod" + + indexer-gateway: + image: subsquid/hydra-indexer-gateway:5 + restart: unless-stopped + depends_on: + - redis + - db + - indexer-status-service + - indexer + ports: + - "4010:8080" + environment: + - DEV_MODE=true + - DB_NAME=indexer + - DB_HOST=db + - DB_USER=postgres + - DB_PASS=postgres + - DB_PORT=5432 + - HYDRA_INDEXER_STATUS_SERVICE=http://indexer-status-service:8081/status + + indexer-status-service: + image: subsquid/hydra-indexer-status-service:5 + restart: unless-stopped + depends_on: + - redis + environment: + REDIS_URI: redis://redis:6379/0 + PORT: 8081 + + redis: + image: redis:6.0-alpine + restart: always + ports: + - "6379" diff --git a/resources/gdev.json b/resources/gdev.json new file mode 100644 index 0000000000000000000000000000000000000000..65e51d52a5a454fb01e190ec80c4d801a323b71d --- /dev/null +++ b/resources/gdev.json @@ -0,0 +1,67 @@ +{ + "first_ud": 1000, + "identities": { + "Elois1": { + "balance": 1000, + "certs": ["Elois2", "Elois3"], + "pubkey": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY" + }, + "Elois2": { + "balance": 1000, + "certs": ["Elois1", "Elois3"], + "pubkey": "5GFEEx7kqvP4QEPCAXkALeYCG7m8DiA5LQ4YzW62j7FytQyg" + }, + "Elois3": { + "balance": 1000, + "certs": ["Elois1", "Elois2"], + "pubkey": "5HNFikZ2smaTvWSfxHBRXpPVkCVeiKs6oBjGBn95RCs1RPRB" + } + }, + "parameters": { + "babe_epoch_duration": 30, + "cert_period": 15, + "cert_max_by_issuer": 10, + "cert_min_received_cert_to_issue_cert": 2, + "cert_renewable_period": 50, + "cert_validity_period": 100000, + "idty_confirm_period": 40, + "idty_creation_period": 50, + "idty_max_disabled_period": 1000, + "membership_period": 100000, + "membership_renewable_period": 50, + "pending_membership_period": 500, + "ud_creation_period": 10, + "ud_first_reeval": 0, + "ud_reeval_period": 50, + "ud_reeval_period_in_blocks": 500, + "smith_cert_period": 15, + "smith_cert_max_by_issuer": 8, + "smith_cert_min_received_cert_to_issue_cert": 2, + "smith_cert_renewable_period": 50, + "smith_cert_validity_period": 100000, + "smith_membership_period": 100000, + "smith_membership_renewable_period": 50, + "smith_pending_membership_period": 500, + "smiths_wot_first_cert_issuable_on": 20, + "smiths_wot_min_cert_for_membership": 2, + "wot_first_cert_issuable_on": 20, + "wot_min_cert_for_create_idty_right": 2, + "wot_min_cert_for_membership": 2 + }, + "smiths": { + "Elois1": { + "authority": true, + "certs": ["Elois2", "Elois3"], + "session_keys": "0x90ea1e9059fd30860fc14370b62a3675a720763913e0aa41fa01b268c33afd3b64c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa469407864c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa469407864c9301d94f7a043ac6714c8a6301541e56e833c1b13170c19f9785fa4694078" + }, + "Elois2": { + "certs": ["Elois1", "Elois3"], + "session_keys": "0x1a1c5027d35e315efde9b9296a0ff80920a9d448a7d0480080d9773e4035ec85a270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7ca270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7ca270415a3a2f5392df3185bc9f3d2d7a3cb158f55ebdf6ccc42da8ab26d96f7c" + }, + "Elois3": { + "certs": ["Elois1", "Elois2"], + "session_keys": "0xcde37cd0d59573465dacd587f0759c93a82e9f0a40ee8f547772446abe846b86f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022f0badfddff9238d6f18ab5ef8fa5fdd3d5edd29a9f6b097416ffc87e2f774022" + } + }, + "sudo_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY" +} diff --git a/scripts/create-live-network.sh b/scripts/create-live-network.sh new file mode 100755 index 0000000000000000000000000000000000000000..7345c540ccd1df4954124740d7fc090b84635e4c --- /dev/null +++ b/scripts/create-live-network.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# This script is meant to be run on Unix/Linux based systems +set -e + +# params +VALIDATOR_SESSION_KEYS_SURI=$1 +GENESIS="${2:-resources/gdev.json}" +CURRENCY="${3:-gdev}" +WORK_DIR="${4:-tmp/$CURRENCY}" + +echo "CURRENCY=$CURRENCY" + +# constants +DUNITER_BINARY="./target/debug/duniter" + +# Clean and (re-)create working forders +rm -rf $WORK_DIR +mkdir -p $WORK_DIR/duniter-rpc +mkdir -p $WORK_DIR/duniter-validator + +# build client in debug mode +#cargo clean -p duniter && cargo build + +# generate raw_chain spec +export DUNITER_GENESIS_CONFIG=$GENESIS +$DUNITER_BINARY build-spec --chain $CURRENCY-gl --raw > $WORK_DIR/duniter-rpc/genesis-raw.json +cp $WORK_DIR/duniter-rpc/genesis-raw.json $WORK_DIR/duniter-validator/genesis-raw.json + +# generate rpc node key +RPC_NODE_KEY=$($DUNITER_BINARY key generate-node-key --file $WORK_DIR/duniter-rpc/node-key 2>&1) + +# generate validator node key +VALIDATOR_NODE_KEY=$($DUNITER_BINARY key generate-node-key --file $WORK_DIR/duniter-validator/node-key 2>&1) + +# generate docker-compose file +cp docker/compose-examples/live-template.docker-compose.yml $WORK_DIR/docker-compose.yml +sed -i -e "s/RPC_NODE_KEY/$RPC_NODE_KEY/g" $WORK_DIR/docker-compose.yml +sed -i -e "s/VALIDATOR_NODE_KEY/$VALIDATOR_NODE_KEY/g" $WORK_DIR/docker-compose.yml + +# Inject validator session keys in validator node keystore +$DUNITER_BINARY key generate-session-keys --chain "${CURRENCY}_local" --suri "$VALIDATOR_SESSION_KEYS_SURI" -d $WORK_DIR/duniter-validator +mv $WORK_DIR/duniter-validator/chains/${CURRENCY}_local $WORK_DIR/duniter-validator/chains/$CURRENCY + +# Launch the network +cd $WORK_DIR +#docker-compose up -d