diff --git a/docker/demo/docker-compose.yml b/docker/demo/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..8cb4ed158f32ecc7d296f1bede3ae5d3f27c7f00 --- /dev/null +++ b/docker/demo/docker-compose.yml @@ -0,0 +1,106 @@ +version: "3.9" + +services: + ## INITIALIZE GENESIS AND SECRETS + init: + build: + context: ../../ + dockerfile: docker/demo/init/Dockerfile + volumes: + - ecomobicoin-data:/data + + simulation-data: + image: registry.gitlab.limos.fr/ecomobicoin/data/movement-data + volumes: + - simulation-data:/data + + ## RUN NODES + node-1: + image: registry.gitlab.limos.fr/ecomobicoin/truite + platform: linux/amd64/r + command: sh -c "truite --datadir /data/data-1 --chain-spec-file /data/local-1.ron --max-block 0 --exit-after-sync && truite --datadir /data/data-1 --chain-spec-file /data/local-1.ron --rpc-listen-address 0.0.0.0:8545 --no-dns-discovery" + depends_on: + init: + condition: service_completed_successfully + ports: + - "41000:7545" + - "41002:8545" + - "41303:30303/tcp" + - "41303:30303/udp" + volumes: + - ecomobicoin-data:/data + restart: on-failure + + node-2: + image: registry.gitlab.limos.fr/ecomobicoin/truite + platform: linux/amd64/r + command: [ + "truite", + "--datadir", + "/data/data-2", + "--chain-spec-file", + "/data/local-2.ron", + # "--no-discovery", + "--no-dns-discovery", + "--rpc-listen-address", + "0.0.0.0:8545", + ] + depends_on: + init: + condition: service_completed_successfully + ports: + - "42000:7545" + - "42002:8545" + - "42303:30303/tcp" + - "42303:30303/udp" + volumes: + - ecomobicoin-data:/data + restart: on-failure + + explorer: + image: registry.gitlab.limos.fr/ecomobicoin/block-explorer + environment: + - ERIGON_URL=http://localhost:42002 + depends_on: + - node-2 + ports: + - "40100:80" + restart: on-failure + + tickets-api: + image: registry.gitlab.limos.fr/ecomobicoin/tickets_api + environment: + - SIGNING_KEY= + ports: + - "3001:3001" + # - "43001:3001" + restart: on-failure + + front: + image: registry.gitlab.limos.fr/ecomobicoin/example-app + ports: + - "43000:3000" + restart: on-failure + # front env vars are set in docker build. + + testnet-injector: + image: registry.gitlab.limos.fr/ecomobicoin/testnet-injector:modify-docker-image + container_name: testnet-injector + platform: linux/amd64/r + depends_on: + - simulation-data + - node-1 + - node-2 + environment: + - RPC_URL=http://node-1:8545 + - RPC_URL_MINER_1=http://node-1:8545 + - RPC_URL_MINER_2=http://node-2:8545 + - BLOCK_TIME=12 + - TOTAL_SIMULATION_TIME=1800 + volumes: + - simulation-data:/data + command: ./scripts/run_simulation_2_nodes.sh + +volumes: + ecomobicoin-data: + simulation-data: diff --git a/docker/demo/init.sh b/docker/demo/init.sh new file mode 100755 index 0000000000000000000000000000000000000000..344b8f9fe738a104b6cb9b4bbaa66dfafcb80874 --- /dev/null +++ b/docker/demo/init.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +set -e + +if [ -f "$GENESIS_PATH" ]; then + echo "Secrets have already been generated." +else + echo "Generating secrets..." + # secrets=$("$POLYGON_EDGE_BIN" secrets init --insecure --num 4 --data-dir /data/data- --json) + # echo "Secrets have been successfully generated" + # mkdir -p /data/data-1 /data/data-2 + echo -n "6cc26b8e1321d771f5bf3af188aca546941b7c35941ba426d4bfc38ec54bbe46" > /data/data-1/nodekey + echo -n"433d2cd42ec425403903ecffefd7cbcdc582e34575e2b5b8d2d7bb7958045162" > /data/data-1/jwt.hex + + echo -n "a0e7c71661af160e5b71be81672629d4960b9736e2d5568e153650253f2cfbd8" > /data/data-2/nodekey + echo -n "fa927d7eb2051cf226df5c21d44cb27c035ea4227dea435a8dd8ca983e6335e1" > /data/data-2/jwt.hex + + chown truite:truite /data/data-{1,2}/nodekey + chown truite:truite /data/data-{1,2}/jwt.hex + + echo "Added keys for node-1, node-2" + + # Need root user to create file + cp ./local.ron /data/local.ron + cp ./local.ron /data/local-1.ron + cp ./local.ron /data/local-2.ron + + sed -i 's/\/\/"enode:\/\/NODE1/"enode:\/\/0bcddc979717e692c7e05e281db4febb96fa566fbe43ae6b3f7860bec62af336393c3443d9a9dc746d66b7712f5b6742cd90d22afdc8ad2c08d1cd9b958964cd/g' /data/local.ron + sed -i 's/\/\/"enode:\/\/NODE2/"enode:\/\/e4ac9a8b6b779d482e74ee2f7b35b58269757dbd2d53364fe683a90935b7866d0262cf6cb947e06bf28b0563964edef15be15ff472c2c232ec7d1bb20764394a/g' /data/local.ron + + sed -i 's/\/\/"enode:\/\/NODE2/"enode:\/\/e4ac9a8b6b779d482e74ee2f7b35b58269757dbd2d53364fe683a90935b7866d0262cf6cb947e06bf28b0563964edef15be15ff472c2c232ec7d1bb20764394a/g' /data/local-1.ron + + sed -i 's/\/\/"enode:\/\/NODE1/"enode:\/\/0bcddc979717e692c7e05e281db4febb96fa566fbe43ae6b3f7860bec62af336393c3443d9a9dc746d66b7712f5b6742cd90d22afdc8ad2c08d1cd9b958964cd/g' /data/local-2.ron + + echo "Updated local.ron" + + # cd /data && /polygon-edge/polygon-edge genesis $CHAIN_CUSTOM_OPTIONS \ + # --bootnode "/dns4/node-1/tcp/1478/p2p/$(echo "$secrets" | jq -r '.[0] | .node_id')" \ + # --bootnode "/dns4/node-2/tcp/1478/p2p/$(echo "$secrets" | jq -r '.[1] | .node_id')" +fi \ No newline at end of file diff --git a/docker/demo/init/Dockerfile b/docker/demo/init/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a04af5e456745999f988c623a26be8711aa92bdf --- /dev/null +++ b/docker/demo/init/Dockerfile @@ -0,0 +1,18 @@ +FROM fedora:36 as builder + +ARG UID=1000 +ARG GID=1000 + +RUN groupadd -g $GID truite +RUN adduser --uid $UID --gid $GID truite + +RUN mkdir -p /data/data-1 /data/data-2 +RUN chown truite:truite /data/data-1 /data/data-2 + +USER truite +COPY src/res/chainspec/local-demo-docker.ron ./local.ron + +USER root +COPY docker/demo/init.sh . +RUN chmod +x ./init.sh +CMD ./init.sh \ No newline at end of file diff --git a/src/res/chainspec/local-demo-docker.ron b/src/res/chainspec/local-demo-docker.ron new file mode 100644 index 0000000000000000000000000000000000000000..169c36a5350c5fb5b161fbf28314ef8826dfe74b --- /dev/null +++ b/src/res/chainspec/local-demo-docker.ron @@ -0,0 +1,69 @@ +( + name: "Local Demo", + consensus: ( + seal_verification: Pob( + int_size_bits: 1024, + // 0 < k′′ < k′ < k. + miner_behavior_reward_per_quantity: { + 0: "0xBB8", // k 3000 + }, + behavior_reward_per_quantity: { + 0: "0x7D0", // k' 2000 + }, + miner_included_behavior_reward_per_quantity: { + 0: "0x3E8", // k'' 1000 + }, + ), + eip1559_block: 12965000, + ), + upgrades: ( + homestead: 1150000, + tangerine: 2463000, + spurious: 2675000, + byzantium: 4370000, + constantinople: 7280000, + petersburg: 7280000, + istanbul: 9069000, + berlin: 12244000, + london: 12965000, + paris: 15537394, + ), + params: ( + chain_id: 636363, + network_id: 636363, + additional_forks: [9200000, 13773000, 15050000], + expiration_time_limit: 86400, // EXP + desired_average_mining_time_in_ms: 10000, // ∆t + desired_demurrage_percent_per_day: 1000, // 10% + difficulty_adjustment_period: 10, // P + min_update_network_difficulty_percent: 25, + max_update_network_difficulty_percent: 4, + transaction_fees_percentage: 1000, // fr + miner_fixed_reward_per_transaction: "0x5208", // tr + ), + genesis: ( + number: 0, + author: "0x0000000000000000000000000000000000000000", + timestamp: 0, + gas_limit: 5000, + seal: Pob( + vanity: "0x5365706f6c69612c20417468656e732c204174746963612c2047726565636521", + difficulty: "0x20000", + nonce: "0x0000000000000000", + output: "0x0000000000000000000000000000000000000000000000000000000000000000", + ), + ), + balances: { + 0: { + "0x2c7536e3605d9c16a7a3d7b1898e529396a65c23":"0x7a120", + }, + }, + p2p: ( + // Bootnodes needs IPv4 no alias + bootnodes: [ + // REPLACE 172.17.0.1 (docker's IP on linux) with your IP address + //"enode://NODE1@172.17.0.1:41303", + //"enode://NODE2@172.17.0.1:42303", + ], + ), +)