mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-19 21:31:37 +00:00
Merge pull request #175 from XinFinOrg/per-environment-constants
Build devnet image for each PR merge
This commit is contained in:
commit
b75a0dba86
9 changed files with 405 additions and 64 deletions
71
.travis.yml
71
.travis.yml
|
|
@ -83,69 +83,18 @@ jobs:
|
|||
env:
|
||||
- GO111MODULE=auto
|
||||
name: T-Z tests
|
||||
- stage: Github release
|
||||
go: '1.14.x'
|
||||
script:
|
||||
- GOARCH=amd64 GOOS=linux go build -o ./build/bin/XDC-linux-amd64 ./cmd/XDC
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key: $GITHUB_TOKEN
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
file: build/bin/XDC-*
|
||||
skip_cleanup: true
|
||||
on:
|
||||
tags: true
|
||||
|
||||
- stage: Build and push image
|
||||
|
||||
- stage: (Devnet) Build and push image
|
||||
if: branch = dev-upgrade
|
||||
services:
|
||||
- docker
|
||||
install: skip
|
||||
before_script:
|
||||
- docker build -t XinFinOrg/XDPoSChain .
|
||||
- docker build -t XinFinOrg/node -f Dockerfile.node .
|
||||
- docker --version # document the version travis is using
|
||||
- docker build -t xdc-devnet -f cicd/devnet/Dockerfile .
|
||||
script:
|
||||
- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
|
||||
- docker tag XinFinOrg/XDPoSChain XinFinOrg/XDPoSChain:latest
|
||||
- docker push XinFinOrg/XDPoSChain:latest
|
||||
- docker tag XinFinOrg/XDPoSChain XinFinOrg/XDPoSChain:$TRAVIS_BUILD_ID
|
||||
- docker push XinFinOrg/XDPoSChain:$TRAVIS_BUILD_ID
|
||||
- docker tag XinFinOrg/node XinFinOrg/node:latest
|
||||
- docker push XinFinOrg/node:latest
|
||||
- docker tag XinFinOrg/node XinFinOrg/node:$TRAVIS_BUILD_ID
|
||||
- docker push XinFinOrg/node:$TRAVIS_BUILD_ID
|
||||
|
||||
- stage: Build and push image (tagged)
|
||||
services:
|
||||
- docker
|
||||
install: skip
|
||||
before_script:
|
||||
- docker build -t XinFinOrg/XDPoSChain .
|
||||
- docker build -t XinFinOrg/XDPoSChain -f Dockerfile.node .
|
||||
script:
|
||||
- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
|
||||
- docker tag XinFinOrg/XDPoSChain XinFinOrg/XDPoSChain:latest
|
||||
- docker push XinFinOrg/XDPoSChain:latest
|
||||
- docker tag XinFinOrg/XDPoSChain XinFinOrg/XDPoSChain:$TRAVIS_TAG
|
||||
- docker push XinFinOrg/XDPoSChain:$TRAVIS_TAG
|
||||
- docker tag XinFinOrg/XDPoSChain XinFinOrg/node:latest
|
||||
- docker push XinFinOrg/node:latest
|
||||
- docker tag XinFinOrg/node XinFinOrg/node:$TRAVIS_TAG
|
||||
- docker push XinFinOrg/node:$TRAVIS_TAG
|
||||
|
||||
stages:
|
||||
# - name: Lint
|
||||
- name: Build and test
|
||||
- name: Github release
|
||||
if: type != pull_request AND branch =~ ^v AND tag IS present AND repo = XinFinOrg/XDPoSChain
|
||||
- name: Build and push image
|
||||
if: type != pull_request AND branch = master AND tag IS blank AND repo = XinFinOrg/XDPoSChain
|
||||
- name: Build and push image (tagged)
|
||||
if: type != pull_request AND branch =~ ^v AND tag IS present AND repo = XinFinOrg/XDPoSChain
|
||||
|
||||
notifications:
|
||||
slack:
|
||||
rooms:
|
||||
secure:
|
||||
on_success: change
|
||||
on_failure: always
|
||||
- pip install --user awscli # install aws cli w/o sudo
|
||||
- export PATH=$PATH:$HOME/.local/bin # put aws in the path
|
||||
- eval $(aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_BASE_URI > /dev/null 2>&1) #needs AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY envvars
|
||||
- docker tag xdc-devnet:latest $ECR_BASE_URI/$ECR_REPO_NAME:latest # Need ECR_REPO_NAME
|
||||
- docker push $ECR_BASE_URI/$ECR_REPO_NAME:latest
|
||||
23
cicd/README.md
Normal file
23
cicd/README.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# CI/CD pipeline for XDC
|
||||
This directory contains CI/CD scripts used for each of the XDC environments.
|
||||
|
||||
### Devnet
|
||||
Each PR merged into `dev-upgrade` will trigger below actions:
|
||||
- Tests
|
||||
- Docker build of XDC with devnet configurations with tag of `:latest`
|
||||
- Docker push to AWS ECR
|
||||
- Deployment of the latest XDC image(from above) to devnet run by AWS ECS
|
||||
|
||||
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. ECR_REPO_NAME
|
||||
2. ECR_BASE_URI
|
||||
3. AWS_ACCESS_KEY_ID
|
||||
4. AWS_SECRET_ACCESS_KEY
|
||||
|
||||
|
||||
|
||||
### Testnet
|
||||
**WIP**
|
||||
|
||||
### Mainnet
|
||||
**WIP**
|
||||
36
cicd/devnet/Dockerfile
Normal file
36
cicd/devnet/Dockerfile
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
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 30304
|
||||
|
||||
ENTRYPOINT ["bash","/work/start.sh"]
|
||||
2
cicd/devnet/bootnodes.list
Normal file
2
cicd/devnet/bootnodes.list
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@194.233.77.19:30301
|
||||
enode://1c20e6b46ce608c1fe739e78611225b94e663535b74a1545b1667eac8ff75ed43216306d123306c10e043f228e42cc53cb2728655019292380313393eaaf6e23@66.94.98.186:30301
|
||||
129
cicd/devnet/genesis.json
Normal file
129
cicd/devnet/genesis.json
Normal file
File diff suppressed because one or more lines are too long
50
cicd/devnet/start.sh
Executable file
50
cicd/devnet/start.sh
Executable file
|
|
@ -0,0 +1,50 @@
|
|||
#!/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
|
||||
wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | awk -v FS="({|})" '{print $2}')
|
||||
XDC --datadir /work/xdcchain init /work/genesis.json
|
||||
else
|
||||
wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | awk -v FS="({|})" '{print $2}')
|
||||
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"
|
||||
|
||||
|
||||
|
||||
netstats="aws_${wallet}:xinfin_xdpos_hybrid_network_stats@devnetstats.apothem.network:2000"
|
||||
INSTANCE_IP=$(curl https://checkip.amazonaws.com)
|
||||
|
||||
echo "Running a node with wallet: ${wallet} at IP: ${INSTANCE_IP}"
|
||||
echo "Starting nodes with $bootnodes ..."
|
||||
|
||||
XDC --ethstats ${netstats} --gcmode=archive \
|
||||
--bootnodes ${bootnodes} --syncmode full \
|
||||
--datadir /work/xdcchain --networkid 551 \
|
||||
-port 30304 --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 3 \
|
||||
--ws --wsaddr=0.0.0.0 --wsport 8555 \
|
||||
--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee --append /work/xdcchain/xdc.log
|
||||
5
common/constants/README.md
Normal file
5
common/constants/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# Constants
|
||||
This directory is used by dockerfile when builing the per environment constants.go
|
||||
The benefit of this structure is to allow devnet, testnet and mainnet to have different constants configuration setup.
|
||||
|
||||
The default file under `common` directory is for the mainnet, whereas all files under this `constants` directory will override the `constants.go` when building image. For example, when building devnet images, we will do `ADD common/constants/constants.go.devnet /work/common/constants.go`
|
||||
147
common/constants/constants.go.devnet
Normal file
147
common/constants/constants.go.devnet
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
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(225000)
|
||||
var TIPRandomize = big.NewInt(225000)
|
||||
|
||||
var TIPIncreaseMasternodes = big.NewInt(225000) // Upgrade MN Count at Block.
|
||||
var TIPNoHalvingMNReward = big.NewInt(429987) // hardfork no halving masternodes reward
|
||||
var BlackListHFNumber = uint64(225000)
|
||||
var TIPXDCX = big.NewInt(225000)
|
||||
var TIPXDCXLending = big.NewInt(225000)
|
||||
var TIPXDCXCancellationFee = big.NewInt(225000)
|
||||
var TIPXDCXCancellationFeeTestnet = big.NewInt(225000)
|
||||
|
||||
var TIPXDCXTestnet = big.NewInt(0)
|
||||
var IsTestnet 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(13523400)
|
||||
var TIPTRC21FeeTestnet = big.NewInt(225000)
|
||||
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,
|
||||
}
|
||||
|
|
@ -54,12 +54,12 @@ var (
|
|||
SkipV2Validation: true,
|
||||
}
|
||||
DevnetXDPoSV2Config = &V2{
|
||||
SwitchBlock: big.NewInt(7218000),
|
||||
SwitchBlock: big.NewInt(7060500),
|
||||
CertThreshold: 6,
|
||||
TimeoutSyncThreshold: 5,
|
||||
TimeoutPeriod: 10,
|
||||
WaitPeriod: 2,
|
||||
MinePeriod: 2,
|
||||
WaitPeriod: 5,
|
||||
MinePeriod: 5,
|
||||
}
|
||||
|
||||
// XDPoSChain mainnet config
|
||||
|
|
|
|||
Loading…
Reference in a new issue