mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-19 13:21:37 +00:00
build universe docker image (#309)
* build universe docker image * build universe docker image * build universe docker image --------- Co-authored-by: Liam Lai <liam.lai@datameshgroup.com.au>
This commit is contained in:
parent
7155e722e4
commit
7997dc68c1
17 changed files with 733 additions and 124 deletions
49
.travis.yml
49
.travis.yml
|
|
@ -1,10 +1,12 @@
|
|||
sudo: required
|
||||
language: go
|
||||
go_import_path: github.com/XinFinOrg/XDPoSChain
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev-upgrade
|
||||
|
||||
on:
|
||||
branches:
|
||||
- master
|
||||
- dev-upgrade
|
||||
tags: true
|
||||
|
||||
env:
|
||||
global:
|
||||
|
|
@ -88,7 +90,31 @@ jobs:
|
|||
env:
|
||||
- GO111MODULE=auto
|
||||
name: T-Z tests
|
||||
|
||||
- stage: TAG Build
|
||||
if: tag IS present
|
||||
services:
|
||||
- docker
|
||||
install: skip
|
||||
before_script:
|
||||
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||
- docker --version # document the version travis is using
|
||||
- docker build -t xinfinorg/xdposchain:$TRAVIS_TAG -f cicd/Dockerfile .
|
||||
script:
|
||||
- docker push xinfinorg/xdposchain:$TRAVIS_TAG
|
||||
|
||||
- stage: (Devnet) Build, and push images
|
||||
if: branch = dev-upgrade AND type = push AND tag IS blank
|
||||
services:
|
||||
- docker
|
||||
install: skip
|
||||
before_script:
|
||||
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||
- docker --version # document the version travis is using
|
||||
- docker build -t xinfinorg/devnet:latest -f cicd/Dockerfile .
|
||||
script:
|
||||
- docker push xinfinorg/devnet:latest
|
||||
|
||||
- stage: (Devnet)Terraform plan
|
||||
if: branch = dev-upgrade AND type = pull_request
|
||||
dist: xenial
|
||||
|
|
@ -106,20 +132,7 @@ jobs:
|
|||
- terraform validate $tf_validation_cli_options
|
||||
- terraform plan $tf_plan_cli_options
|
||||
|
||||
- stage: (Devnet) Build, and push images
|
||||
if: branch = dev-upgrade AND type = push AND tag IS blank
|
||||
services:
|
||||
- docker
|
||||
install: skip
|
||||
before_script:
|
||||
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||
- docker --version # document the version travis is using
|
||||
- docker build -t xdc-devnet -f cicd/devnet/Dockerfile .
|
||||
script:
|
||||
- docker tag xdc-devnet:latest xinfinorg/devnet:latest # Always push to the latest
|
||||
- docker push xinfinorg/devnet:latest
|
||||
|
||||
- stage: Terraform apply
|
||||
- stage: (Devnet) Terraform apply
|
||||
if: branch = dev-upgrade AND type = push AND tag IS blank
|
||||
dist: xenial
|
||||
language: bash
|
||||
|
|
|
|||
1
cicd/.dockerignore
Normal file
1
cicd/.dockerignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
Dockerfile
|
||||
41
cicd/Dockerfile
Normal file
41
cicd/Dockerfile
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
FROM golang:1.14-alpine as builder
|
||||
|
||||
RUN apk add make build-base linux-headers
|
||||
|
||||
COPY . /builder
|
||||
RUN cd /builder && make && mv /builder/build/bin/XDC /builder/build/bin/XDC-mainnet
|
||||
|
||||
RUN mv /builder/common/constants/constants.go.devnet /builder/common/constants.go
|
||||
RUN cd /builder && make && mv /builder/build/bin/XDC /builder/build/bin/XDC-devnet
|
||||
|
||||
RUN mv /builder/common/constants/constants.go.testnet /builder/common/constants.go
|
||||
RUN cd /builder && make && mv /builder/build/bin/XDC /builder/build/bin/XDC-testnet
|
||||
|
||||
# The runtime image
|
||||
FROM alpine:3
|
||||
|
||||
WORKDIR /work
|
||||
|
||||
RUN apk add --no-cache bash curl
|
||||
|
||||
COPY --from=builder /builder/build/bin/XDC-devnet /usr/bin
|
||||
COPY --from=builder /builder/build/bin/XDC-testnet /usr/bin
|
||||
COPY --from=builder /builder/build/bin/XDC-mainnet /usr/bin
|
||||
|
||||
# # Copy over files
|
||||
ADD cicd/devnet /work/devnet
|
||||
ADD cicd/testnet /work/testnet
|
||||
ADD cicd/mainnet /work/mainnet
|
||||
ADD cicd/entry.sh /work/
|
||||
|
||||
# Create an empty pwd file
|
||||
RUN touch /work/.pwd
|
||||
|
||||
# rpc
|
||||
EXPOSE 8545
|
||||
# ws
|
||||
EXPOSE 8555
|
||||
# port
|
||||
EXPOSE 30303
|
||||
|
||||
ENTRYPOINT ["bash","/work/entry.sh"]
|
||||
|
|
@ -1,52 +1,10 @@
|
|||
# CI/CD pipeline for XDC
|
||||
This directory contains CI/CD scripts used for each of the XDC environments.
|
||||
# Docker Command
|
||||
|
||||
## How to deploy more nodes
|
||||
Adjust the number of variable `num_of_nodes` under file `.env`. (**Maximum supported is 58**)
|
||||
|
||||
## Devnet
|
||||
Each PR merged into `dev-upgrade` will trigger below actions:
|
||||
- Tests
|
||||
- Terraform to apply infrascture changes(if any)
|
||||
- Docker build of XDC with devnet configurations with tag of `:latest`
|
||||
- Docker push to docker hub. https://hub.docker.com/repository/docker/xinfinorg/devnet
|
||||
- Deployment of the latest XDC image(from above) to devnet run by AWS ECS
|
||||
|
||||
### First time set up an new environment
|
||||
1. Pre-generate a list of node private keys in below format
|
||||
## Docker Build
|
||||
```
|
||||
{
|
||||
"xdc0": {
|
||||
"pk": {{PRIVATE KEY}},
|
||||
"address": {{XDC wallet address}},
|
||||
"imageTag": {{Optional field to run different version of XDC}},
|
||||
"logLevel": {{Optional field to adjust the log level for the container}}
|
||||
},
|
||||
"xdc1": {...},
|
||||
"xdc{{NUMBER}}: {...}
|
||||
}
|
||||
docker build -f cicd/Dockerfile .
|
||||
```
|
||||
2. Access to aws console, create a bucket with name `tf-devnet-bucket`:
|
||||
- You can choose any name, just make sure update the name in the s3 bucket name variable in `variables.tf`
|
||||
- And update the name of the terraform.backend.s3.bucket from `s3.tf`
|
||||
3. Upload the file from step 1 into the above bucket with name `node-config.json`
|
||||
4. In order to allow pipeline able to push and deploy via ECR and ECS, we require below environment variables to be injected into the CI pipeline:
|
||||
1. DOCKER_USERNAME
|
||||
2. DOCKER_PASSWORD
|
||||
3. AWS_ACCESS_KEY_ID
|
||||
4. AWS_SECRET_ACCESS_KEY
|
||||
|
||||
You are all set!
|
||||
|
||||
## How to run different version of XDC on selected nodes
|
||||
1. Create a new image tag:
|
||||
- Check out the repo
|
||||
- Run docker build `docker build -t xdc-devnet -f cicd/devnet/Dockerfile .`
|
||||
- Run docker tag `docker tag xdc-devnet:latest xinfinorg/devnet:test-{{put your version number here}}`
|
||||
- Run docker push `docker push xinfinorg/devnet:test-{{Version number from step above}}`
|
||||
2. Adjust node-config.json
|
||||
- Download the node-config.json from s3
|
||||
- Add/update the `imageTag` field with value of `test-{{version number you defined in step 1}}` for the selected number of nodes you want to test with
|
||||
- Optional: Adjust the log level by add/updating the field of `logLevel`
|
||||
- Save and upload to s3
|
||||
3. Make a dummy PR and get merged. Wait it to be updated.
|
||||
## Docker Run
|
||||
```
|
||||
docker run -it -e NETWORK=devnet -e PRIVATE_KEYS=$KEY $IMAGE
|
||||
``
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
FROM golang:1.14 as builder
|
||||
|
||||
RUN apt-get update && apt-get install -y git build-essential
|
||||
|
||||
COPY . /builder
|
||||
RUN mv /builder/common/constants/constants.go.devnet /builder/common/constants.go
|
||||
|
||||
RUN cd /builder && make
|
||||
|
||||
|
||||
# The actual image for devnet containers
|
||||
FROM golang:1.14
|
||||
|
||||
RUN apt-get update && apt-get install -y git build-essential
|
||||
|
||||
WORKDIR /work
|
||||
|
||||
COPY --from=builder /builder/build/bin/XDC /usr/bin
|
||||
RUN chmod +x /usr/bin/XDC
|
||||
|
||||
# Copy over files
|
||||
ADD cicd/devnet/genesis.json /work/genesis.json
|
||||
ADD cicd/devnet/bootnodes.list /work/bootnodes.list
|
||||
ADD cicd/devnet/start.sh /work/start.sh
|
||||
|
||||
# Create an empty pwd file
|
||||
RUN touch /work/.pwd
|
||||
|
||||
# rpc
|
||||
EXPOSE 8545
|
||||
# ws
|
||||
EXPOSE 8555
|
||||
# port
|
||||
EXPOSE 30303
|
||||
|
||||
ENTRYPOINT ["bash","/work/start.sh"]
|
||||
52
cicd/devnet/README.md
Normal file
52
cicd/devnet/README.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# CI/CD pipeline for XDC
|
||||
This directory contains CI/CD scripts used for each of the XDC environments.
|
||||
|
||||
## How to deploy more nodes
|
||||
Adjust the number of variable `num_of_nodes` under file `.env`. (**Maximum supported is 58**)
|
||||
|
||||
## Devnet
|
||||
Each PR merged into `dev-upgrade` will trigger below actions:
|
||||
- Tests
|
||||
- Terraform to apply infrascture changes(if any)
|
||||
- Docker build of XDC with devnet configurations with tag of `:latest`
|
||||
- Docker push to docker hub. https://hub.docker.com/repository/docker/xinfinorg/devnet
|
||||
- Deployment of the latest XDC image(from above) to devnet run by AWS ECS
|
||||
|
||||
### First time set up an new environment
|
||||
1. Pre-generate a list of node private keys in below format
|
||||
```
|
||||
{
|
||||
"xdc0": {
|
||||
"pk": {{PRIVATE KEY}},
|
||||
"address": {{XDC wallet address}},
|
||||
"imageTag": {{Optional field to run different version of XDC}},
|
||||
"logLevel": {{Optional field to adjust the log level for the container}}
|
||||
},
|
||||
"xdc1": {...},
|
||||
"xdc{{NUMBER}}: {...}
|
||||
}
|
||||
```
|
||||
2. Access to aws console, create a bucket with name `tf-devnet-bucket`:
|
||||
- You can choose any name, just make sure update the name in the s3 bucket name variable in `variables.tf`
|
||||
- And update the name of the terraform.backend.s3.bucket from `s3.tf`
|
||||
3. Upload the file from step 1 into the above bucket with name `node-config.json`
|
||||
4. In order to allow pipeline able to push and deploy via ECR and ECS, we require below environment variables to be injected into the CI pipeline:
|
||||
1. DOCKER_USERNAME
|
||||
2. DOCKER_PASSWORD
|
||||
3. AWS_ACCESS_KEY_ID
|
||||
4. AWS_SECRET_ACCESS_KEY
|
||||
|
||||
You are all set!
|
||||
|
||||
## How to run different version of XDC on selected nodes
|
||||
1. Create a new image tag:
|
||||
- Check out the repo
|
||||
- Run docker build `docker build -t xdc-devnet -f cicd/devnet/Dockerfile .`
|
||||
- Run docker tag `docker tag xdc-devnet:latest xinfinorg/devnet:test-{{put your version number here}}`
|
||||
- Run docker push `docker push xinfinorg/devnet:test-{{Version number from step above}}`
|
||||
2. Adjust node-config.json
|
||||
- Download the node-config.json from s3
|
||||
- Add/update the `imageTag` field with value of `test-{{version number you defined in step 1}}` for the selected number of nodes you want to test with
|
||||
- Optional: Adjust the log level by add/updating the field of `logLevel`
|
||||
- Save and upload to s3
|
||||
3. Make a dummy PR and get merged. Wait it to be updated.
|
||||
|
|
@ -18,11 +18,11 @@ then
|
|||
|
||||
echo "${private_key}" >> ./tmp/key
|
||||
echo "Creating a new wallet"
|
||||
wallet=$(../../build/bin/XDC account import --password ./tmp/.pwd --datadir ./tmp/xdcchain ./tmp/key | awk -v FS="({|})" '{print $2}')
|
||||
wallet=$(../../build/bin/XDC account import --password ./tmp/.pwd --datadir ./tmp/xdcchain ./tmp/key | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
../../build/bin/XDC --datadir ./tmp/xdcchain init ./genesis.json
|
||||
else
|
||||
echo "Wallet already exist, re-use the same one. If you have changed the private key, please manually inspect the key if matches. Otherwise, delete the 'tmp' directory and start again!"
|
||||
wallet=$(../../build/bin/XDC account list --datadir ./tmp/xdcchain | head -n 1 | awk -v FS="({|})" '{print $2}')
|
||||
wallet=$(../../build/bin/XDC account list --datadir ./tmp/xdcchain | head -n 1 | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
fi
|
||||
|
||||
input="./bootnodes.list"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "Preparing to start the XDC chain, it's likely to take up to 1 minute"
|
||||
# Update AWS Max Health can resolve below issue, and it's already addressed
|
||||
# echo "Preparing to start the XDC chain, it's likely to take up to 1 minute"
|
||||
# Sleep for > 30 as we need to wait for the ECS tasks container being killed by fargate. Otherwise it will ended up with two same nodes running on a single /work/xdcchain directory
|
||||
sleep 60
|
||||
# sleep 60
|
||||
|
||||
if [ ! -d /work/xdcchain/XDC/chaindata ]
|
||||
then
|
||||
|
|
@ -17,11 +18,11 @@ then
|
|||
|
||||
echo "${private_key}" >> /tmp/key
|
||||
echo "Creating a new wallet"
|
||||
wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | awk -v FS="({|})" '{print $2}')
|
||||
wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
XDC --datadir /work/xdcchain init /work/genesis.json
|
||||
else
|
||||
echo "Wallet already exist, re-use the same one"
|
||||
wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | awk -v FS="({|})" '{print $2}')
|
||||
wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
fi
|
||||
|
||||
input="/work/bootnodes.list"
|
||||
|
|
@ -64,4 +65,4 @@ XDC --ethstats ${netstats} --gcmode=full \
|
|||
--gasprice "1" --targetgaslimit "420000000" --verbosity ${log_level} \
|
||||
--periodicprofile --debugdatadir /work/xdcchain \
|
||||
--ws --wsaddr=0.0.0.0 --wsport 8555 \
|
||||
--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee --append /work/xdcchain/xdc.log
|
||||
--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee -a /work/xdcchain/xdc.log
|
||||
|
|
|
|||
13
cicd/entry.sh
Executable file
13
cicd/entry.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
if test -z "$NETWORK"
|
||||
then
|
||||
echo "NETWORK env Must be set, mainnet/testnet/devnet"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Select to run $NETWORK..."
|
||||
ln -s /usr/bin/XDC-$NETWORK /usr/bin/XDC
|
||||
cp /work/$NETWORK/* /work
|
||||
|
||||
echo "Start Node..."
|
||||
/work/start.sh
|
||||
36
cicd/mainnet/bootnodes.list
Normal file
36
cicd/mainnet/bootnodes.list
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
enode://11299e930438a12a7171d540e7ed594172babd7856aa518c4ca0a25564d6cf7fe4abaf74a68fd626118c205095f5aa40badf5f16f9651e1743383040f74323ca@154.53.57.144:30303
|
||||
enode://4ebfb7b3dd8d335fb5160410b9d4b494224caf7e2b5a2630f000a69b9edc83382b7c45536981a60e217876a1f553ed351846f14623e969df0796fb2d5d55b947@209.126.1.10:30303
|
||||
enode://ad638c179f9f72565bd78db98aa68d3c33b3a476421faeb07e185b18fa95d5999e72c15b9811526a65c0cf27573d25dc1905a5bf09d7de634b5fc5ef1cd661de@209.126.11.108:30303
|
||||
enode://1e331800102e30f83418b5b6eb59a7e325aaa05f9efb9756e6c6ba1624c8e17ba1dd4334a32c87f9022afe2bb3a53410d9f96a0b4ae3aecd574b08785d5f6014@209.126.2.33:30303
|
||||
enode://70e471eb021a3bca37407fabe461873380f100823a1ad610d564dd11514e7db2a9c79a74456adda3e3a48f6364ee08f390e3e0df9288eaceae1fc2d084647c92@209.126.0.250:30303
|
||||
enode://4406a66a21b7c242c4fa9605301e889419e4c0d4f503baed88b24f7521dc783a9259f9fb23ca4748cbad8d48cf59164419438b317a889488cc7bcf0d44023296@161.97.164.153:30303
|
||||
enode://021fb5b586c865f31db4fc82c9aa9e21110328fe88e1e99a65ca87031bcd6544785c68d47efe15e106c71b0066509d94a1379fb2a95ecdebab77d518b222422f@161.97.131.6:30303
|
||||
enode://25ce413f1f20ec9099d7c93ea583c749454f0523e906a4d2ad835fbd12eaf296976bd89a3ff1ab7a34d7afe25cc61572a4da5cd6f72c0551240c590f5a1affa2@161.97.131.145:30303
|
||||
enode://25faf1b866535701790398623ac86705a91dff419a6e460eaf80325220dc2525c97bbf0812085fd8dc9745d1d2a7ff024b7b36aa27f6e4fcb7a10ac508e3078a@161.97.172.27:30303
|
||||
enode://fc0caeb94dc942f06c56885e07206a0431f6f1045a46de6f7c65a93826220c84f1b72894ffae9091e2e05472f7926b59ed159ffc145ac0225dfb2ac1325b3629@161.97.128.201:30303
|
||||
enode://6358dd8ba702f8666259d07513f760d897739956e7b8ee4da29cc2461020f04c1d80f3d17becf69f1f0b9bfe5ed83754a5ebbad5a193e9d56266c668cf0ab4ba@161.97.129.254:30303
|
||||
enode://c5ab74d3cc2a7f68cf16b421ec0c19d1de2aa10de20d6fd4b6589174b216c81e930a7d395cd64099218838f7adb2fd9302a9b5d0650123930ce3ec553369e32b@212.38.189.120:30303
|
||||
enode://7698c7dd2f5ca348c2237bc62751c3bd8432d89cf082233540d9512a4d49b6d90fea395f0a2d79ccb90ef663c1cb9baa5204a494b904acb91fb42d7ef2991c1b@212.38.189.121:30303
|
||||
enode://7698c7dd2f5ca348c2237bc62751c3bd8432d89cf082233540d9512a4d49b6d90fea395f0a2d79ccb90ef663c1cb9baa5204a494b904acb91fb42d7ef2991c1b@212.38.189.122:30303
|
||||
enode://7923727ebf54d1fc9d9fef1508df7235b123b7d74a7dbd900f78ce169e5e3f30171291f22e7c9ea7c66e97ea405f75ad460073434e6f282b0c902fd0eb99047f@23.111.13.177:30303
|
||||
enode://c225c4954add10563b34f230ef9ae076760fb3cb347f15b2629ca94054b2c7b92593ae198830beb601a5515ca464af709229c7cbbaa0512bca4d3ef113ac8241@103.101.130.85:30303
|
||||
enode://c225c4954add10563b34f230ef9ae076760fb3cb347f15b2629ca94054b2c7b92593ae198830beb601a5515ca464af709229c7cbbaa0512bca4d3ef113ac8241@103.101.130.199:30303
|
||||
enode://f9b52fa47ef04a94d71b0e9723df4a453f42cb359573175acdc2eb693c36cd64c0afb697a04ad2c61d74bd3e60fb84d3077e3ce92d5bcaa642177064e77f4587@103.101.129.198:30303
|
||||
enode://c225c4954add10563b34f230ef9ae076760fb3cb347f15b2629ca94054b2c7b92593ae198830beb601a5515ca464af709229c7cbbaa0512bca4d3ef113ac8241@103.101.130.199:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@154.53.42.5:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@194.146.12.183:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@194.146.12.181:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@154.53.56.28:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@144.126.150.58:30303
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@107.191.63.81:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@108.61.208.82:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@137.220.52.242:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@137.220.53.156:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@139.180.188.238:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@139.180.207.188:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@149.248.57.56:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@149.248.7.129:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@155.138.129.23:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@155.138.132.39:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@155.138.135.5:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@155.138.136.247:30301
|
||||
113
cicd/mainnet/genesis.json
Normal file
113
cicd/mainnet/genesis.json
Normal file
File diff suppressed because one or more lines are too long
62
cicd/mainnet/start.sh
Executable file
62
cicd/mainnet/start.sh
Executable file
|
|
@ -0,0 +1,62 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ ! -d /work/xdcchain/XDC/chaindata ]
|
||||
then
|
||||
# Randomly select a key from environment variable, seperated by ','
|
||||
if test -z "$PRIVATE_KEYS"
|
||||
then
|
||||
echo "PRIVATE_KEYS environment variable has not been set. You need to pass at least one PK, or you can pass multiple PK seperated by ',', we will randomly choose one for you"
|
||||
exit 1
|
||||
fi
|
||||
IFS=', ' read -r -a private_keys <<< "$PRIVATE_KEYS"
|
||||
private_key=${private_keys[ $RANDOM % ${#private_keys[@]} ]}
|
||||
|
||||
echo "${private_key}" >> /tmp/key
|
||||
echo "Creating a new wallet"
|
||||
wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
XDC --datadir /work/xdcchain init /work/genesis.json
|
||||
else
|
||||
echo "Wallet already exist, re-use the same one"
|
||||
wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
fi
|
||||
|
||||
input="/work/bootnodes.list"
|
||||
bootnodes=""
|
||||
while IFS= read -r line
|
||||
do
|
||||
if [ -z "${bootnodes}" ]
|
||||
then
|
||||
bootnodes=$line
|
||||
else
|
||||
bootnodes="${bootnodes},$line"
|
||||
fi
|
||||
done < "$input"
|
||||
|
||||
log_level=3
|
||||
if test -z "$LOG_LEVEL"
|
||||
then
|
||||
echo "Log level not set, default to verbosity of 3"
|
||||
else
|
||||
echo "Log level found, set to $LOG_LEVEL"
|
||||
log_level=$LOG_LEVEL
|
||||
fi
|
||||
|
||||
INSTANCE_IP=$(curl https://checkip.amazonaws.com)
|
||||
netstats="${NODE_NAME}-${wallet}-${INSTANCE_IP}:xinfin_xdpos_hybrid_network_stats@stats.xinfin.network:3000"
|
||||
|
||||
echo "Running a node with wallet: ${wallet} at IP: ${INSTANCE_IP}"
|
||||
echo "Starting nodes with $bootnodes ..."
|
||||
|
||||
# Note: --gcmode=archive means node will store all historical data. This will lead to high memory usage. Only needed if you need the node to perform historical operations
|
||||
XDC --ethstats ${netstats} --gcmode=full \
|
||||
--nat extip:${INSTANCE_IP} \
|
||||
--bootnodes ${bootnodes} --syncmode full \
|
||||
--datadir /work/xdcchain --networkid 50 \
|
||||
-port 30303 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 \
|
||||
--rpcport 8545 \
|
||||
--rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS \
|
||||
--rpcvhosts "*" --unlock "${wallet}" --password /work/.pwd --mine \
|
||||
--gasprice "1" --targetgaslimit "420000000" --verbosity ${log_level} \
|
||||
--periodicprofile --debugdatadir /work/xdcchain \
|
||||
--ws --wsaddr=0.0.0.0 --wsport 8555 \
|
||||
--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee -a /work/xdcchain/xdc.log
|
||||
9
cicd/testnet/bootnodes.list
Normal file
9
cicd/testnet/bootnodes.list
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@188.227.164.51:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@95.179.217.201:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@149.28.167.190:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@194.233.77.19:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@144.91.108.231:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@207.244.240.232:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@66.94.121.62:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@144.126.150.69:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@161.97.93.168:30301
|
||||
141
cicd/testnet/genesis.json
Normal file
141
cicd/testnet/genesis.json
Normal file
File diff suppressed because one or more lines are too long
63
cicd/testnet/start.sh
Executable file
63
cicd/testnet/start.sh
Executable file
|
|
@ -0,0 +1,63 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ ! -d /work/xdcchain/XDC/chaindata ]
|
||||
then
|
||||
# Randomly select a key from environment variable, seperated by ','
|
||||
if test -z "$PRIVATE_KEYS"
|
||||
then
|
||||
echo "PRIVATE_KEYS environment variable has not been set. You need to pass at least one PK, or you can pass multiple PK seperated by ',', we will randomly choose one for you"
|
||||
exit 1
|
||||
fi
|
||||
IFS=', ' read -r -a private_keys <<< "$PRIVATE_KEYS"
|
||||
private_key=${private_keys[ $RANDOM % ${#private_keys[@]} ]}
|
||||
|
||||
echo "${private_key}" >> /tmp/key
|
||||
echo "Creating a new wallet"
|
||||
wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
XDC --datadir /work/xdcchain init /work/genesis.json
|
||||
else
|
||||
echo "Wallet already exist, re-use the same one"
|
||||
wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | sed -n 's/Address: {\(.*\)}/\1/p')
|
||||
fi
|
||||
|
||||
input="/work/bootnodes.list"
|
||||
bootnodes=""
|
||||
while IFS= read -r line
|
||||
do
|
||||
if [ -z "${bootnodes}" ]
|
||||
then
|
||||
bootnodes=$line
|
||||
else
|
||||
bootnodes="${bootnodes},$line"
|
||||
fi
|
||||
done < "$input"
|
||||
|
||||
log_level=3
|
||||
if test -z "$LOG_LEVEL"
|
||||
then
|
||||
echo "Log level not set, default to verbosity of 3"
|
||||
else
|
||||
echo "Log level found, set to $LOG_LEVEL"
|
||||
log_level=$LOG_LEVEL
|
||||
fi
|
||||
|
||||
INSTANCE_IP=$(curl https://checkip.amazonaws.com)
|
||||
netstats="${NODE_NAME}-${wallet}-${INSTANCE_IP}:xdc_xinfin_apothem_network_stats@stats.apothem.network:2000"
|
||||
|
||||
|
||||
echo "Running a node with wallet: ${wallet} at IP: ${INSTANCE_IP}"
|
||||
echo "Starting nodes with $bootnodes ..."
|
||||
|
||||
# Note: --gcmode=archive means node will store all historical data. This will lead to high memory usage. Only needed if you need the node to perform historical operations
|
||||
XDC --ethstats ${netstats} --gcmode=full \
|
||||
--nat extip:${INSTANCE_IP} \
|
||||
--bootnodes ${bootnodes} --syncmode full \
|
||||
--datadir /work/xdcchain --networkid 51 \
|
||||
-port 30303 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 \
|
||||
--rpcport 8545 \
|
||||
--rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,XDPoS \
|
||||
--rpcvhosts "*" --unlock "${wallet}" --password /work/.pwd --mine \
|
||||
--gasprice "1" --targetgaslimit "420000000" --verbosity ${log_level} \
|
||||
--periodicprofile --debugdatadir /work/xdcchain \
|
||||
--ws --wsaddr=0.0.0.0 --wsport 8555 \
|
||||
--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee -a /work/xdcchain/xdc.log
|
||||
150
common/constants/constants.go.testnet
Normal file
150
common/constants/constants.go.testnet
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
package common
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
)
|
||||
|
||||
const (
|
||||
RewardMasterPercent = 90
|
||||
RewardVoterPercent = 0
|
||||
RewardFoundationPercent = 10
|
||||
HexSignMethod = "e341eaa4"
|
||||
HexSetSecret = "34d38600"
|
||||
HexSetOpening = "e11f5ba2"
|
||||
EpocBlockSecret = 800
|
||||
EpocBlockOpening = 850
|
||||
EpocBlockRandomize = 900
|
||||
MaxMasternodes = 18
|
||||
MaxMasternodesV2 = 108
|
||||
LimitPenaltyEpoch = 4
|
||||
LimitPenaltyEpochV2 = 0
|
||||
BlocksPerYearTest = uint64(200000)
|
||||
BlocksPerYear = uint64(15768000)
|
||||
LimitThresholdNonceInQueue = 10
|
||||
DefaultMinGasPrice = 250000000
|
||||
MergeSignRange = 15
|
||||
RangeReturnSigner = 150
|
||||
MinimunMinerBlockPerEpoch = 1
|
||||
|
||||
OneYear = uint64(365 * 86400)
|
||||
LiquidateLendingTradeBlock = uint64(100)
|
||||
)
|
||||
|
||||
var Rewound = uint64(0)
|
||||
|
||||
var TIP2019Block = big.NewInt(1)
|
||||
var TIPSigning = big.NewInt(3000000)
|
||||
var TIPRandomize = big.NewInt(3464000)
|
||||
|
||||
var TIPV2SwitchBlock = big.NewInt(99999999999)
|
||||
|
||||
var TIPIncreaseMasternodes = big.NewInt(5000000) // Upgrade MN Count at Block.
|
||||
var TIPNoHalvingMNReward = big.NewInt(38383838) // hardfork no halving masternodes reward
|
||||
var BlackListHFNumber = uint64(38383838)
|
||||
var TIPXDCX = big.NewInt(38383838)
|
||||
var TIPXDCXLending = big.NewInt(38383838)
|
||||
var TIPXDCXCancellationFee = big.NewInt(38383838)
|
||||
var TIPXDCXCancellationFeeTestnet = big.NewInt(38383838)
|
||||
|
||||
var TIPXDCXTestnet = big.NewInt(38383838)
|
||||
var IsTestnet bool = false
|
||||
var Enable0xPrefix bool = false
|
||||
var StoreRewardFolder string
|
||||
var RollbackHash Hash
|
||||
var BasePrice = big.NewInt(1000000000000000000) // 1
|
||||
var RelayerLockedFund = big.NewInt(20000) // 20000 XDC
|
||||
var RelayerFee = big.NewInt(1000000000000000) // 0.001
|
||||
var XDCXBaseFee = big.NewInt(10000) // 1 / XDCXBaseFee
|
||||
var RelayerCancelFee = big.NewInt(100000000000000) // 0.0001
|
||||
var XDCXBaseCancelFee = new(big.Int).Mul(XDCXBaseFee, big.NewInt(10)) // 1/ (XDCXBaseFee *10)
|
||||
var RelayerLendingFee = big.NewInt(10000000000000000) // 0.01
|
||||
var RelayerLendingCancelFee = big.NewInt(1000000000000000) // 0.001
|
||||
var BaseLendingInterest = big.NewInt(100000000) // 1e8
|
||||
|
||||
var MinGasPrice = big.NewInt(DefaultMinGasPrice)
|
||||
var RelayerRegistrationSMC = "0x16c63b79f9C8784168103C0b74E6A59EC2de4a02"
|
||||
var RelayerRegistrationSMCTestnet = "0xA1996F69f47ba14Cb7f661010A7C31974277958c"
|
||||
var LendingRegistrationSMC = "0x7d761afd7ff65a79e4173897594a194e3c506e57"
|
||||
var LendingRegistrationSMCTestnet = "0x28d7fC2Cf5c18203aaCD7459EFC6Af0643C97bE8"
|
||||
var TRC21IssuerSMCTestNet = HexToAddress("0x0E2C88753131CE01c7551B726b28BFD04e44003F")
|
||||
var TRC21IssuerSMC = HexToAddress("0x8c0faeb5C6bEd2129b8674F262Fd45c4e9468bee")
|
||||
var XDCXListingSMC = HexToAddress("0xDE34dD0f536170993E8CFF639DdFfCF1A85D3E53")
|
||||
var XDCXListingSMCTestNet = HexToAddress("0x14B2Bf043b9c31827A472CE4F94294fE9a6277e0")
|
||||
var TRC21GasPriceBefore = big.NewInt(2500)
|
||||
var TRC21GasPrice = big.NewInt(250000000)
|
||||
var RateTopUp = big.NewInt(90) // 90%
|
||||
var BaseTopUp = big.NewInt(100)
|
||||
var BaseRecall = big.NewInt(100)
|
||||
var TIPTRC21Fee = big.NewInt(38383838)
|
||||
var TIPTRC21FeeTestnet = big.NewInt(38383838)
|
||||
var LimitTimeFinality = uint64(30) // limit in 30 block
|
||||
|
||||
var IgnoreSignerCheckBlockArray = map[uint64]bool{
|
||||
uint64(1032300): true,
|
||||
uint64(1033200): true,
|
||||
uint64(27307800): true,
|
||||
uint64(28270800): true,
|
||||
}
|
||||
var Blacklist = map[Address]bool{
|
||||
HexToAddress("0x5248bfb72fd4f234e062d3e9bb76f08643004fcd"): true,
|
||||
HexToAddress("0x5ac26105b35ea8935be382863a70281ec7a985e9"): true,
|
||||
HexToAddress("0x09c4f991a41e7ca0645d7dfbfee160b55e562ea4"): true,
|
||||
HexToAddress("0xb3157bbc5b401a45d6f60b106728bb82ebaa585b"): true,
|
||||
HexToAddress("0x741277a8952128d5c2ffe0550f5001e4c8247674"): true,
|
||||
HexToAddress("0x10ba49c1caa97d74b22b3e74493032b180cebe01"): true,
|
||||
HexToAddress("0x07048d51d9e6179578a6e3b9ee28cdc183b865e4"): true,
|
||||
HexToAddress("0x4b899001d73c7b4ec404a771d37d9be13b8983de"): true,
|
||||
HexToAddress("0x85cb320a9007f26b7652c19a2a65db1da2d0016f"): true,
|
||||
HexToAddress("0x06869dbd0e3a2ea37ddef832e20fa005c6f0ca39"): true,
|
||||
HexToAddress("0x82e48bc7e2c93d89125428578fb405947764ad7c"): true,
|
||||
HexToAddress("0x1f9a78534d61732367cbb43fc6c89266af67c989"): true,
|
||||
HexToAddress("0x7c3b1fa91df55ff7af0cad9e0399384dc5c6641b"): true,
|
||||
HexToAddress("0x5888dc1ceb0ff632713486b9418e59743af0fd20"): true,
|
||||
HexToAddress("0xa512fa1c735fc3cc635624d591dd9ea1ce339ca5"): true,
|
||||
HexToAddress("0x0832517654c7b7e36b1ef45d76de70326b09e2c7"): true,
|
||||
HexToAddress("0xca14e3c4c78bafb60819a78ff6e6f0f709d2aea7"): true,
|
||||
HexToAddress("0x652ce195a23035114849f7642b0e06647d13e57a"): true,
|
||||
HexToAddress("0x29a79f00f16900999d61b6e171e44596af4fb5ae"): true,
|
||||
HexToAddress("0xf9fd1c2b0af0d91b0b6754e55639e3f8478dd04a"): true,
|
||||
HexToAddress("0xb835710c9901d5fe940ef1b99ed918902e293e35"): true,
|
||||
HexToAddress("0x04dd29ce5c253377a9a3796103ea0d9a9e514153"): true,
|
||||
HexToAddress("0x2b4b56846eaf05c1fd762b5e1ac802efd0ab871c"): true,
|
||||
HexToAddress("0x1d1f909f6600b23ce05004f5500ab98564717996"): true,
|
||||
HexToAddress("0x0dfdcebf80006dc9ab7aae8c216b51c6b6759e86"): true,
|
||||
HexToAddress("0x2b373890a28e5e46197fbc04f303bbfdd344056f"): true,
|
||||
HexToAddress("0xa8a3ef3dc5d8e36aee76f3671ec501ec31e28254"): true,
|
||||
HexToAddress("0x4f3d18136fe2b5665c29bdaf74591fc6625ef427"): true,
|
||||
HexToAddress("0x175d728b0e0f1facb5822a2e0c03bde93596e324"): true,
|
||||
HexToAddress("0xd575c2611984fcd79513b80ab94f59dc5bab4916"): true,
|
||||
HexToAddress("0x0579337873c97c4ba051310236ea847f5be41bc0"): true,
|
||||
HexToAddress("0xed12a519cc15b286920fc15fd86106b3e6a16218"): true,
|
||||
HexToAddress("0x492d26d852a0a0a2982bb40ec86fe394488c419e"): true,
|
||||
HexToAddress("0xce5c7635d02dc4e1d6b46c256cae6323be294a32"): true,
|
||||
HexToAddress("0x8b94db158b5e78a6c032c7e7c9423dec62c8b11c"): true,
|
||||
HexToAddress("0x0e7c48c085b6b0aa7ca6e4cbcc8b9a92dc270eb4"): true,
|
||||
HexToAddress("0x206e6508462033ef8425edc6c10789d241d49acb"): true,
|
||||
HexToAddress("0x7710e7b7682f26cb5a1202e1cff094fbf7777758"): true,
|
||||
HexToAddress("0xcb06f949313b46bbf53b8e6b2868a0c260ff9385"): true,
|
||||
HexToAddress("0xf884e43533f61dc2997c0e19a6eff33481920c00"): true,
|
||||
HexToAddress("0x8b635ef2e4c8fe21fc2bda027eb5f371d6aa2fc1"): true,
|
||||
HexToAddress("0x10f01a27cf9b29d02ce53497312b96037357a361"): true,
|
||||
HexToAddress("0x693dd49b0ed70f162d733cf20b6c43dc2a2b4d95"): true,
|
||||
HexToAddress("0xe0bec72d1c2a7a7fb0532cdfac44ebab9f6f41ee"): true,
|
||||
HexToAddress("0xc8793633a537938cb49cdbbffd45428f10e45b64"): true,
|
||||
HexToAddress("0x0d07a6cbbe9fa5c4f154e5623bfe47fb4d857d8e"): true,
|
||||
HexToAddress("0xd4080b289da95f70a586610c38268d8d4cf1e4c4"): true,
|
||||
HexToAddress("0x8bcfb0caf41f0aa1b548cae76dcdd02e33866a1b"): true,
|
||||
HexToAddress("0xabfef22b92366d3074676e77ea911ccaabfb64c1"): true,
|
||||
HexToAddress("0xcc4df7a32faf3efba32c9688def5ccf9fefe443d"): true,
|
||||
HexToAddress("0x7ec1e48a582475f5f2b7448a86c4ea7a26ea36f8"): true,
|
||||
HexToAddress("0xe3de67289080f63b0c2612844256a25bb99ac0ad"): true,
|
||||
HexToAddress("0x3ba623300cf9e48729039b3c9e0dee9b785d636e"): true,
|
||||
HexToAddress("0x402f2cfc9c8942f5e7a12c70c625d07a5d52fe29"): true,
|
||||
HexToAddress("0xd62358d42afbde095a4ca868581d85f9adcc3d61"): true,
|
||||
HexToAddress("0x3969f86acb733526cd61e3c6e3b4660589f32bc6"): true,
|
||||
HexToAddress("0x67615413d7cdadb2c435a946aec713a9a9794d39"): true,
|
||||
HexToAddress("0xfe685f43acc62f92ab01a8da80d76455d39d3cb3"): true,
|
||||
HexToAddress("0x3538a544021c07869c16b764424c5987409cba48"): true,
|
||||
HexToAddress("0xe187cf86c2274b1f16e8225a7da9a75aba4f1f5f"): true,
|
||||
HexToAddress("0x0000000000000000000000000000000000000011"): true,
|
||||
}
|
||||
|
|
@ -47,21 +47,14 @@ var (
|
|||
TimeoutPeriod: 60,
|
||||
MinePeriod: 10,
|
||||
},
|
||||
9999999999: {
|
||||
SwitchRound: 9999999999,
|
||||
CertThreshold: 73, // based on masternode is 108
|
||||
TimeoutSyncThreshold: 3,
|
||||
TimeoutPeriod: 60,
|
||||
MinePeriod: 10,
|
||||
},
|
||||
}
|
||||
|
||||
TestnetV2Configs = map[uint64]*V2Config{
|
||||
Default: {
|
||||
SwitchRound: 0,
|
||||
CertThreshold: 3,
|
||||
TimeoutSyncThreshold: 2,
|
||||
TimeoutPeriod: 4,
|
||||
CertThreshold: 7,
|
||||
TimeoutSyncThreshold: 3,
|
||||
TimeoutPeriod: 60,
|
||||
MinePeriod: 2,
|
||||
},
|
||||
}
|
||||
|
|
@ -159,10 +152,9 @@ var (
|
|||
Gap: 450,
|
||||
FoudationWalletAddr: common.HexToAddress("xdc746249c61f5832c5eed53172776b460491bdcd5c"),
|
||||
V2: &V2{
|
||||
SwitchBlock: common.TIPV2SwitchBlock,
|
||||
CurrentConfig: TestnetV2Configs[0],
|
||||
AllConfigs: TestnetV2Configs,
|
||||
SkipV2Validation: true,
|
||||
SwitchBlock: common.TIPV2SwitchBlock,
|
||||
CurrentConfig: TestnetV2Configs[0],
|
||||
AllConfigs: TestnetV2Configs,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue