From ac9ad1c8220c0877655cf08bfe25fe92f12db90f Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Thu, 4 Jan 2024 15:10:06 +0400 Subject: [PATCH] Squashed commit of the following: commit 782ba794f04f6018d1c33015aea72803a44e4ebc Author: wanwiset25 Date: Thu Jan 4 15:08:39 2024 +0400 bump relayer commit 676f3073407c4366af7cd692e83e9aae3a36c8e8 Author: wanwiset25 Date: Thu Jan 4 14:49:53 2024 +0400 rm files commit dfeb315b74ddb00055019feefc8b91546b9679dd Author: wanwiset25 Date: Wed Jan 3 16:28:19 2024 +0400 trig commit 8aa3991a75eac6051862453bc4e9afbcca65e71d Author: wanwiset25 Date: Wed Jan 3 16:25:35 2024 +0400 remove old csc style cicd commit 1e6e14e82dded21d145a150d2594186fdfbf6ef6 Author: wanwiset25 Date: Wed Jan 3 15:03:31 2024 +0400 fix wrong entrypoint commit 0ce0ddfa78baadf1bd43c4ff1892921ee2c9bda7 Author: wanwiset25 Date: Wed Jan 3 15:03:10 2024 +0400 rm old csc deploy style commit 539246666e7a796fe4b20c8704e8e2c18d285026 Author: wanwiset25 Date: Wed Jan 3 14:27:20 2024 +0400 rm debug to force exit code 1 when fails commit a5f2921ee728f12ac46c22b12b970252c6a39a8e Author: wanwiset25 Date: Thu Dec 21 21:35:22 2023 +0400 fix mount path commit 2041ef3d0bc5a2673885608ccff78696f52680e4 Author: wanwiset25 Date: Thu Dec 21 21:16:45 2023 +0400 update for csc commit 26d190bbda24e3acb68d7b064025232a3807ac16 Author: wanwiset25 Date: Wed Dec 20 16:06:31 2023 +0400 update generate sh commit 8869924546fe1f28095669196f4d173b351b8e5c Author: wanwiset25 Date: Tue Dec 19 15:54:30 2023 +0400 upd dockerfile commit f3330bf911987d1620cb775e95584e216a77503a Author: wanwiset25 Date: Tue Dec 19 15:49:30 2023 +0400 update new way generation commit 34f152bb0848d6e30c849ed1d57bc014c87c4022 Author: wanwiset25 Date: Tue Dec 19 15:07:55 2023 +0400 update config --- .github/workflows/ci.yml | 6 -- .gitignore | 8 +-- subnet/deployment-generator/docker/Dockerfile | 34 +---------- .../deployment-generator/docker/deploy_csc.sh | 33 ----------- .../docker/puppeth_csc_commit.env | 1 - subnet/deployment-generator/docker/start.sh | 10 +--- .../script/docker.env.example | 23 ++++++++ .../deployment-generator/script/generate.sh | 46 +++++++++++++++ .../{script => src}/config_gen.js | 19 +++--- .../{script => src}/gen.js | 30 ++++------ .../{script => src}/gen_compose.js | 3 +- .../{script => src}/gen_env.js | 4 -- .../{script => src}/gen_other.js | 59 ++++++++----------- .../{script => src}/package.json | 0 14 files changed, 124 insertions(+), 152 deletions(-) delete mode 100755 subnet/deployment-generator/docker/deploy_csc.sh delete mode 100644 subnet/deployment-generator/docker/puppeth_csc_commit.env create mode 100644 subnet/deployment-generator/script/docker.env.example create mode 100755 subnet/deployment-generator/script/generate.sh rename subnet/deployment-generator/{script => src}/config_gen.js (93%) rename subnet/deployment-generator/{script => src}/gen.js (84%) rename subnet/deployment-generator/{script => src}/gen_compose.js (98%) rename subnet/deployment-generator/{script => src}/gen_env.js (95%) rename subnet/deployment-generator/{script => src}/gen_other.js (72%) rename subnet/deployment-generator/{script => src}/package.json (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6275d27..40be144 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,12 +39,6 @@ jobs: echo "name=xinfinorg/subnet-generator:${{github.ref_name}}" >> $GITHUB_OUTPUT fi - - name: Load Subnet commit/branch config (used for genesis gen) - id: commit - run: | - cat docker/puppeth_csc_commit.env - echo commit=$(cat docker/puppeth_csc_commit.env) >> $GITHUB_OUTPUT - - name: Build and push image run: | docker build . --file docker/Dockerfile \ diff --git a/.gitignore b/.gitignore index 7b8dc72..2d23609 100644 --- a/.gitignore +++ b/.gitignore @@ -10,10 +10,10 @@ subnet/bootnodes/* subnet/logs subnet/relayer subnet/stats-service +subnet/deployment-generator/script/gen.env* XDC-Subnet keys.json node_modules -subnet/deployment-generator/generated -subnet/deployment-generator/script/gen.env* -subnet/scripts/faucet/*.env -package-lock.json \ No newline at end of file +package-lock.json +generated +*.env \ No newline at end of file diff --git a/subnet/deployment-generator/docker/Dockerfile b/subnet/deployment-generator/docker/Dockerfile index 01c95a8..ee96710 100644 --- a/subnet/deployment-generator/docker/Dockerfile +++ b/subnet/deployment-generator/docker/Dockerfile @@ -1,42 +1,12 @@ - -FROM golang:1.14 as builder - -ARG SUBNET_BRANCH=master - -RUN git clone https://github.com/XinFinOrg/XDC-Subnet - -#it is called 'BRANCH' but commits also work -RUN cd XDC-Subnet && git checkout ${SUBNET_BRANCH} && make puppeth - - - - - FROM node:18.15 -ARG SUBNET_BRANCH=master -ARG IMAGE_NAME=latest -#inject build arg as ENV -ENV SUBNET_BRANCH=${SUBNET_BRANCH} -ENV IMAGE_NAME=${IMAGE_NAME} -RUN echo SUBNET_BRANCH=${SUBNET_BRANCH} -RUN echo IMAGE_NAME=${IMAGE_NAME} - WORKDIR /app -COPY --from=builder /go/XDC-Subnet/build/bin/puppeth /bin/puppeth -# COPY --from=builder /go/XDC-Subnet/mainnet_contract /app/contract - -#this step here for caching -# RUN cd contract && yarn - -COPY ./script /app/script +COPY ./src /app/src COPY ./docker/start.sh /app/start.sh -COPY ./docker/deploy_csc.sh /app/deploy_csc.sh RUN chmod +x /app/start.sh -RUN chmod +x /app/deploy_csc.sh -RUN cd script && npm install +RUN cd src && npm install ENTRYPOINT ["bash","/app/start.sh"] diff --git a/subnet/deployment-generator/docker/deploy_csc.sh b/subnet/deployment-generator/docker/deploy_csc.sh deleted file mode 100755 index 25e6d9f..0000000 --- a/subnet/deployment-generator/docker/deploy_csc.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -cd /app/contract -remove0x=${PARENTNET_WALLET_PK:2} -echo "PRIVATE_KEY=${remove0x}" >> .env -cp /app/generated/deployment.config.json /app/contract/deployment.config.json -echo "RELAYER_MODE=${RELAYER_MODE}" -if [[ $RELAYER_MODE == 'full' ]] -then - echo "Deploying full CSC" - npx hardhat run /app/contract/scripts/FullCheckpointDeploy.js --network xdcparentnet 2>&1 | tee csc.log -elif [[ $RELAYER_MODE == 'lite' ]] -then - echo "Deploying lite CSC" - npx hardhat run /app/contract/scripts/LiteCheckpointDeploy.js --network xdcparentnet 2>&1 | tee csc.log -else - echo "Unknown RELAYER_MODE" - exit 1 -fi - -found=$(cat csc.log | grep -m 1 "deployed to") -echo $found - -if [[ $found == '' ]] -then - echo 'CSC deployment failed' - exit 1 -else - echo 'Replacing CSC address in common.env file' - contract=${found: -42} - echo $contract - cat /app/generated/common.env | sed -e "s/CHECKPOINT_CONTRACT.*/CHECKPOINT_CONTRACT=$contract/" > temp.env - mv temp.env /app/generated/common.env -fi \ No newline at end of file diff --git a/subnet/deployment-generator/docker/puppeth_csc_commit.env b/subnet/deployment-generator/docker/puppeth_csc_commit.env deleted file mode 100644 index a172752..0000000 --- a/subnet/deployment-generator/docker/puppeth_csc_commit.env +++ /dev/null @@ -1 +0,0 @@ -880f749 \ No newline at end of file diff --git a/subnet/deployment-generator/docker/start.sh b/subnet/deployment-generator/docker/start.sh index f4d7de5..30c7447 100755 --- a/subnet/deployment-generator/docker/start.sh +++ b/subnet/deployment-generator/docker/start.sh @@ -1,10 +1,2 @@ #!/bin/bash -node /app/script/gen.js && puppeth --file /app/generated/genesis_input.yml --out /app/generated/ - - -if [[ -n "${SLEEP}" ]]; then - echo "sleep ${SLEEP}" - sleep ${SLEEP} -else - echo "docker run finished" -fi \ No newline at end of file +node /app/src/gen.js \ No newline at end of file diff --git a/subnet/deployment-generator/script/docker.env.example b/subnet/deployment-generator/script/docker.env.example new file mode 100644 index 0000000..49f2a26 --- /dev/null +++ b/subnet/deployment-generator/script/docker.env.example @@ -0,0 +1,23 @@ +CONFIG_PATH=~/subnet +#your current directory + + +#genesis config +NETWORK_NAME=localsubnet +NUM_MACHINE=1 +NUM_SUBNET=3 +MAIN_IP=192.168.1.1 + +#parentchain config +PARENTCHAIN=devnet +PARENTCHAIN_WALLET_PK=0x1111111111111111111111111111111111111111111111111111111111111111 + +# OS=mac + +#docker image versions, default to stable +# VERSION_SUBNET +# VERSION_BOOTNODE +# VERSION_OBSERVER +# VERSION_RELAYER +# VERSION_STATS +# VERSION_FRONTEND diff --git a/subnet/deployment-generator/script/generate.sh b/subnet/deployment-generator/script/generate.sh new file mode 100755 index 0000000..8ed32b9 --- /dev/null +++ b/subnet/deployment-generator/script/generate.sh @@ -0,0 +1,46 @@ +#!/bin/bash +VERSION_GENERATOR="generator-csc" +VERSION_CSC="generator-update" +VERSION_SUBNET="feature-puppeth-docker-2" + +current_dir="$(cd "$(dirname "$0")" && pwd)" +echo 'checking for docker.env' +if [ ! -f "docker.env" ]; then + echo 'docker.env not found' + exit 1 +fi + +if ! grep -q "CONFIG_PATH" "docker.env"; then + line="#current directory"$'\n'"CONFIG_PATH=$(pwd)" + echo "$line" | cat - "docker.env" > temp && mv temp "docker.env" + echo 'added CONFIG_PATH to docker.env' +fi + +echo 'checking docker images' +if [[ -z "$(docker images -q xinfinorg/subnet-generator:$VERSION_GENERATOR)" ]]; then # || echo "doesn't exist" + docker pull xinfinorg/subnet-generator:$VERSION_GENERATOR +fi +if [[ -z "$(docker images -q xinfinorg/csc:$VERSION_CSC)" ]]; then # || echo "doesn't exist" + docker pull xinfinorg/csc:$VERSION_CSC +fi +if [[ -z "$(docker images -q xinfinorg/xdcsubnets:$VERSION_SUBNET)" ]]; then # || echo "doesn't exist" + docker pull xinfinorg/xdcsubnets:$VERSION_SUBNET +fi + +echo '' +echo 'generating configs' +mkdir -p generated +docker run --env-file docker.env -v $current_dir/generated:/app/generated xinfinorg/subnet-generator:$VERSION_GENERATOR || gen_success=false +if [[ $gen_success == false ]]; then + echo 'configs generation failed' + exit 1 +fi + +echo 'generating genesis.json' +docker run -v $current_dir/generated/:/app/generated/ --entrypoint 'bash' xinfinorg/xdcsubnets:$VERSION_SUBNET /work/puppeth.sh || pup_success=false +if [[ $pup_success == false ]]; then + echo 'genesis.json generation failed' + exit 1 +fi + +echo 'subnet generation successful' \ No newline at end of file diff --git a/subnet/deployment-generator/script/config_gen.js b/subnet/deployment-generator/src/config_gen.js similarity index 93% rename from subnet/deployment-generator/script/config_gen.js rename to subnet/deployment-generator/src/config_gen.js index b0a51ee..f98cee0 100644 --- a/subnet/deployment-generator/script/config_gen.js +++ b/subnet/deployment-generator/src/config_gen.js @@ -6,7 +6,7 @@ const { off } = require('process'); dotenv.config({ path: `${__dirname}/gen.env` }); // console.log(__dirname) -var config = { +let config = { deployment_path: (process.env.CONFIG_PATH || ''), num_machines: parseInt(process.env.NUM_MACHINE), num_subnet: parseInt(process.env.NUM_SUBNET), @@ -14,17 +14,17 @@ var config = { network_name: (process.env.NETWORK_NAME), network_id: parseInt(process.env.NETWORK_ID || Math.floor(Math.random() * (65536 - 1) + 1)), secret_string: (process.env.SERVICES_SECRET || crypto.randomBytes(10).toString('hex')), - relayer_mode: (process.env.RELAYER_MODE || 'full'), //full or lite + relayer_mode: (process.env.RELAYER_MODE || 'full'), //full or lite //in upgradable csc both are deployed docker_image_name: (process.env.IMAGE_NAME || 'xinfinorg/subnet-generator:latest'), operating_system: (process.env.OS || 'linux'), version: { subnet: (process.env.VERSION_SUBNET || 'v0.2.1'), bootnode: (process.env.VERSION_BOOTNODE || 'v0.2.1'), - observer: (process.env.VERSION_OBSERVER || 'latest'), - relayer: (process.env.VERSION_RELAYER || 'v0.2.1'), + // observer: (process.env.VERSION_OBSERVER || 'latest'), + relayer: (process.env.VERSION_RELAYER || 'v0.2.2'), stats: (process.env.VERSION_STATS || 'v0.1.8'), frontend: (process.env.VERSION_FRONTEND || 'v0.1.8'), - // csc: (process.env.VERSION_CSC || 'v0.1.1'), + csc: (process.env.VERSION_CSC || 'v0.1.1'), // zero: (process.env.VERSION_ZERO || 'v0.1.1') }, parentnet:{ @@ -92,15 +92,16 @@ function configSanityCheck(config){ process.exit(1) } - if (!(config.parentnet.network === 'devnet' || - config.parentnet.network === 'testnet' || - config.parentnet.network === 'mainnet' )){ - var official_urls = { + if (config.parentnet.network === 'devnet' || + config.parentnet.network === 'testnet' || + config.parentnet.network === 'mainnet' ){ + let official_urls = { 'devnet':'https://devnetstats.apothem.network/devnet' , 'testnet':'https://erpc.apothem.network/' , 'mainnet': 'https://devnetstats.apothem.network/mainnet' //confirm url } config.parentnet.url = official_urls[config.parentnet.network] + } else { console.log('PARENTNET must be devnet, testnet, or mainnet ') process.exit(1) } diff --git a/subnet/deployment-generator/script/gen.js b/subnet/deployment-generator/src/gen.js similarity index 84% rename from subnet/deployment-generator/script/gen.js rename to subnet/deployment-generator/src/gen.js index 6a9d0bc..9568b32 100644 --- a/subnet/deployment-generator/script/gen.js +++ b/subnet/deployment-generator/src/gen.js @@ -19,9 +19,9 @@ Object.freeze(config) // const output_path = `${__dirname}/../generated/` -keys = gen_other.genSubnetKeys() +let keys = gen_other.genSubnetKeys() -var num_per_machine = Array(config.num_machines) +let num_per_machine = Array(config.num_machines) //integer division for (let i=0; i { const [key, value] = entry; doc['services'][key]=value }); +//checkpoint smartcontract deployment config +let deployment_json = gen_other.genDeploymentJson(keys) if (config.operating_system === 'mac'){ doc, ip_record = gen_compose.injectMacConfig(doc) @@ -63,30 +65,24 @@ if (config.operating_system === 'mac'){ for (let i=1; i<=config.num_subnet; i++){ subnetconf.push(gen_env.genSubnetConfigMac(i, keys, ip_record)) } - //checkpoint smartcontract deployment config - deployment_json = gen_other.genDeploymentJsonMac(keys, ip_record) - } else if(config.operating_system === 'linux'){ commonconf = gen_env.genServicesConfig() subnetconf=[] for (let i=1; i<=config.num_subnet; i++){ subnetconf.push(gen_env.genSubnetConfig(i, keys)) } - //checkpoint smartcontract deployment config - deployment_json = gen_other.genDeploymentJson(keys) - } else { console.log(`ERROR: unknown OS ${config.operating_system} not supported`) process.exit(1) } -compose_content = yaml.dump(doc,{}) -compose_conf = gen_compose.genComposeEnv() +let compose_content = yaml.dump(doc,{}) +let compose_conf = gen_compose.genComposeEnv() //deployment commands list -commands = gen_other.genCommands() -genesis_input = gen_other.genGenesisInputFile(config.network_name, config.network_id, config.num_subnet, keys) -genesis_input_file = yaml.dump(genesis_input, {}) +let commands = gen_other.genCommands() +let genesis_input = gen_other.genGenesisInputFile(config.network_name, config.network_id, config.num_subnet, keys) +let genesis_input_file = yaml.dump(genesis_input, {}) writeGenerated(config.generator.output_path) @@ -119,7 +115,7 @@ function writeGenerated(output_dir){ } }); - keys_json = JSON.stringify(keys, null, 2); + let keys_json = JSON.stringify(keys, null, 2); fs.writeFile(`${output_dir}/keys.json`, keys_json, (err) => { if (err) { console.error('Error writing key file:', err); diff --git a/subnet/deployment-generator/script/gen_compose.js b/subnet/deployment-generator/src/gen_compose.js similarity index 98% rename from subnet/deployment-generator/script/gen_compose.js rename to subnet/deployment-generator/src/gen_compose.js index 1b0046d..ef985f5 100644 --- a/subnet/deployment-generator/script/gen_compose.js +++ b/subnet/deployment-generator/src/gen_compose.js @@ -81,6 +81,7 @@ function genServices(machine_id) { 'image': `xinfinorg/xdc-relayer:${config.version.relayer}`, 'restart': 'always', 'env_file': config_path, + 'ports': ['4000:4000'], 'profiles': [machine] } stats = { @@ -93,7 +94,7 @@ function genServices(machine_id) { }, bootnode=genBootNode(machine_id), - observer=genObserver(machine_id), + // observer=genObserver(machine_id), services = { diff --git a/subnet/deployment-generator/script/gen_env.js b/subnet/deployment-generator/src/gen_env.js similarity index 95% rename from subnet/deployment-generator/script/gen_env.js rename to subnet/deployment-generator/src/gen_env.js index 64dc109..8dc0ffb 100644 --- a/subnet/deployment-generator/script/gen_env.js +++ b/subnet/deployment-generator/src/gen_env.js @@ -112,10 +112,6 @@ CHECKPOINT_CONTRACT=0x0000000000000000000000000000000000000000 SLACK_WEBHOOK=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX CORS_ALLOW_ORIGIN=* -# Parent Chain Observe Node -PARENTNET_NODE_NAME=mainnet_observer -PRIVATE_KEYS=1111111111111111111111111111111111111111111111111111111111111111 - # Frontend VITE_SUBNET_URL=http://127.0.0.1:3000 diff --git a/subnet/deployment-generator/script/gen_other.js b/subnet/deployment-generator/src/gen_other.js similarity index 72% rename from subnet/deployment-generator/script/gen_other.js rename to subnet/deployment-generator/src/gen_other.js index f4d56d5..8c7a333 100644 --- a/subnet/deployment-generator/script/gen_other.js +++ b/subnet/deployment-generator/src/gen_other.js @@ -5,7 +5,6 @@ Object.freeze(config) module.exports = { genSubnetKeys, genDeploymentJson, - genDeploymentJsonMac, genCommands, genGenesisInputFile, }; @@ -40,46 +39,36 @@ function genSubnetKeys(){ } function genDeploymentJson(keys){ - num = Object.keys(keys).length-1; - validators = [] + let num = Object.keys(keys).length-1; + let validators = [] for (let i=1; i<= num; i++){ - key_name = `key${i}` - public_key = keys[key_name]['0x'] + let key_name = `key${i}` + let public_key = keys[key_name]['0x'] validators.push(public_key) } - deployment = { + let deployment = { "validators": validators, "gap": 450, "epoch": 900, - "xdcparentnet": "https://devnetstats.apothem.network/devnet", - // "xdcparentnet": "http://127.0.0.1:20302", - // "xdcsubnet": "http://127.0.0.1:8545" - "xdcsubnet": `http://${config.ip_1}:8545` } return deployment - } -function genDeploymentJsonMac(keys){ - num = Object.keys(keys).length-1; - validators = [] - for (let i=1; i<= num; i++){ - key_name = `key${i}` - public_key = keys[key_name]['0x'] - validators.push(public_key) - } - deployment = { - "validators": validators, - "gap": 450, - "epoch": 900, - "xdcparentnet": "https://devnetstats.apothem.network/devnet", - // "xdcparentnet": "http://127.0.0.1:20302", - "xdcsubnet": `http://127.0.0.1:8545` - } - return deployment - -} +// function genNetworkJson(){ //don't need this, config will overlap(duplicate) with other files, shell script in CSC docker can gen this +// let network = { +// "xdcsubnet": `http://${config.ip_1}:8545`, +// "xdcparentnet": config.parentnet.url +// } +// return network +// } +// function genNetworkJsonMac(){ +// let network = { +// "xdcsubnet": `http://127.0.0.1:8545`, +// "xdcparentnet": config.parentnet.url +// } +// return network +// } function genCommands(){ conf_path = __dirname+'/config/' @@ -98,13 +87,11 @@ function genCommands(){ } commands+=`\nmachine1: deploy checkpoint smart contract\n` // - commands+=` cd ..\n` - commands+=` docker run --env-file generated/common.env \\ - -v $(pwd)/generated/:/app/generated/ \\ + commands+=` docker run --env-file common.env \\ + -v $(pwd)/../generated/:/app/config \\ --network host \\ - --entrypoint 'bash' xinfinorg/subnet-generator:v0.1.6 ./deploy_csc.sh \n` - // commands+=` make an edit to ./config/common.env to include values for CHECKPOINT_CONTRACT \n` - commands+=` cd generated\n` + --entrypoint './docker/deploy_proxy.sh' xinfinorg/csc:${config.version.csc}\n` + commands+=`\nmachine1: start services and frontend\n` commands+=` docker compose --env-file docker-compose.env --profile services pull\n` commands+=` docker compose --env-file docker-compose.env --profile services up -d\n` diff --git a/subnet/deployment-generator/script/package.json b/subnet/deployment-generator/src/package.json similarity index 100% rename from subnet/deployment-generator/script/package.json rename to subnet/deployment-generator/src/package.json