From 44ac46f676c0c22967cdb088853dc389779f1a97 Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Wed, 26 Jun 2024 11:52:06 +0400 Subject: [PATCH 1/5] add local xdpos function add readme changes to support xdpos2 protocol from block 0 --- cicd/Dockerfile | 9 +- cicd/entry.sh | 2 +- cicd/local/README.md | 10 ++ cicd/local/start.sh | 83 +++++++++ cmd/puppeth/wizard_genesis.go | 12 +- common/constants/constants.go.local | 158 ++++++++++++++++++ consensus/XDPoS/engines/engine_v2/engine.go | 13 +- .../XDPoS/engines/engine_v2/epochSwitch.go | 20 +++ consensus/XDPoS/engines/engine_v2/snapshot.go | 4 + consensus/XDPoS/engines/engine_v2/timeout.go | 8 + consensus/XDPoS/engines/engine_v2/vote.go | 4 + eth/hooks/engine_v2_hooks.go | 9 + 12 files changed, 322 insertions(+), 10 deletions(-) create mode 100644 cicd/local/README.md create mode 100755 cicd/local/start.sh create mode 100644 common/constants/constants.go.local diff --git a/cicd/Dockerfile b/cicd/Dockerfile index 055492e548bd..c9f7de7cf6a2 100644 --- a/cicd/Dockerfile +++ b/cicd/Dockerfile @@ -5,11 +5,14 @@ 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.testnet /builder/common/constants.go +RUN cd /builder && make && mv /builder/build/bin/XDC /builder/build/bin/XDC-testnet + 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 +RUN mv /builder/common/constants/constants.go.local /builder/common/constants.go +RUN cd /builder && make && mv /builder/build/bin/XDC /builder/build/bin/XDC-local # The runtime image FROM alpine:3 @@ -18,11 +21,13 @@ WORKDIR /work RUN apk add --no-cache bash curl +COPY --from=builder /builder/build/bin/XDC-local /usr/bin 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/local /work/local ADD cicd/devnet /work/devnet ADD cicd/testnet /work/testnet ADD cicd/mainnet /work/mainnet diff --git a/cicd/entry.sh b/cicd/entry.sh index 777bd58692e6..e7518fe9f603 100755 --- a/cicd/entry.sh +++ b/cicd/entry.sh @@ -1,7 +1,7 @@ #!/bin/bash if test -z "$NETWORK" then - echo "NETWORK env Must be set, mainnet/testnet/devnet" + echo "NETWORK env Must be set, mainnet/testnet/devnet/local" exit 1 fi diff --git a/cicd/local/README.md b/cicd/local/README.md new file mode 100644 index 000000000000..83d8dad0b179 --- /dev/null +++ b/cicd/local/README.md @@ -0,0 +1,10 @@ +To set up local xdpos you need pass env NETWORK=local and inject 2 files when starting the container +1. genesis.json - deploy to path "/work/genesis.json" in the container. + - Creating genesis.json using puppeth + 1. "make puppeth" from base repo directory + 2. run the binary (genesis wizard) "./build/bin/puppeth" + 3. the output genesis.json will be in your ~/.puppeth directory + +2. bootnodes.list - deploy to path "/work/bootnodes.list" in the container. + - check example bootnode format in cicd/devnet or cicd/testnet + - REQUIRES newline at the end of the file, or the last line won't read diff --git a/cicd/local/start.sh b/cicd/local/start.sh new file mode 100755 index 000000000000..cfd877de4066 --- /dev/null +++ b/cicd/local/start.sh @@ -0,0 +1,83 @@ +#!/bin/bash +if [ ! -d /work/xdcchain/XDC/chaindata ] +then + if test -z "$PRIVATE_KEY" + then + echo "PRIVATE_KEY environment variable has not been set." + exit 1 + fi + echo $PRIVATE_KEY >> /tmp/key + wallet=$(XDC account import --password .pwd --datadir /work/xdcchain /tmp/key | awk -F '[{}]' '{print $2}') + XDC --datadir /work/xdcchain init /work/genesis.json +else + wallet=$(XDC account list --datadir /work/xdcchain | head -n 1 | awk -F '[{}]' '{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" + +log_level=3 +if test -z "$LOG_LEVEL" +then + echo "Log level not set, default to verbosity of $log_level" +else + echo "Log level found, set to $LOG_LEVEL" + log_level=$LOG_LEVEL +fi + +port=30303 +if test -z "$PORT" +then + echo "PORT not set, default to $port" +else + echo "PORT found, set to $PORT" + port=$PORT +fi + +rpc_port=8545 +if test -z "$RPC_PORT" +then + echo "RPC_PORT not set, default to $rpc_port" +else + echo "RPC_PORT found, set to $RPC_PORT" + rpc_port=$RPC_PORT +fi + +ws_port=8555 +if test -z "$WS_PORT" +then + echo "WS_PORT not set, default to $ws_port" +else + echo "WS_PORT found, set to $WS_PORT" + ws_port=$WS_PORT +fi + +netstats="${NODE_NAME}-${wallet}:xinfin_xdpos_hybrid_network_stats@devnetstats.apothem.network:2000" + + +echo "Running a node with wallet: ${wallet}" +echo "Starting nodes with $bootnodes ..." + +# Note: --gcmode=archive means node will store all historical data. This will lead to high memory usage. But sync mode require archive to sync +# https://github.com/XinFinOrg/XDPoSChain/issues/268 + +XDC --ethstats ${netstats} --gcmode archive \ +--bootnodes ${bootnodes} --syncmode full \ +--datadir /work/xdcchain --networkid 551 \ +-port $port --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 \ +--rpcport $rpc_port \ +--rpcapi db,eth,debug,net,shh,txpool,personal,web3,XDPoS \ +--rpcvhosts "*" --unlock "${wallet}" --password /work/.pwd --mine \ +--gasprice "1" --targetgaslimit "420000000" --verbosity ${log_level} \ +--debugdatadir /work/xdcchain \ +--ws --wsaddr=0.0.0.0 --wsport $ws_port \ +--wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee -a /work/xdcchain/xdc.log diff --git a/cmd/puppeth/wizard_genesis.go b/cmd/puppeth/wizard_genesis.go index d7a8f93cec02..af52abc8e459 100644 --- a/cmd/puppeth/wizard_genesis.go +++ b/cmd/puppeth/wizard_genesis.go @@ -51,11 +51,11 @@ func (w *wizard) makeGenesis() { Difficulty: big.NewInt(524288), Alloc: make(core.GenesisAlloc), Config: ¶ms.ChainConfig{ - HomesteadBlock: big.NewInt(1), - EIP150Block: big.NewInt(2), - EIP155Block: big.NewInt(3), - EIP158Block: big.NewInt(3), - ByzantiumBlock: big.NewInt(4), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), }, } // Figure out which consensus engine to choose @@ -147,7 +147,7 @@ func (w *wizard) makeGenesis() { fmt.Println() fmt.Printf("Proportion of total masternodes v2 vote collection to generate a QC (float value), should be two thirds of masternodes? (default = %f)\n", 0.667) genesis.Config.XDPoS.V2.CurrentConfig.CertThreshold = w.readDefaultFloat(0.667) - + genesis.Config.XDPoS.V2.CurrentConfig.MaxMasternodes = 108 genesis.Config.XDPoS.V2.AllConfigs[0] = genesis.Config.XDPoS.V2.CurrentConfig fmt.Println() diff --git a/common/constants/constants.go.local b/common/constants/constants.go.local new file mode 100644 index 000000000000..6c5114313728 --- /dev/null +++ b/common/constants/constants.go.local @@ -0,0 +1,158 @@ +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 // Last v1 masternodes + 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(0) +var TIPSigning = big.NewInt(0) +var TIPRandomize = big.NewInt(0) + +var TIPV2SwitchBlock = big.NewInt(0) + +var TIPIncreaseMasternodes = big.NewInt(0) // Upgrade MN Count at Block. +var TIPNoHalvingMNReward = big.NewInt(0) // hardfork no halving masternodes reward +var BlackListHFNumber = uint64(0) +var TIPXDCX = big.NewInt(0) +var TIPXDCXLending = big.NewInt(0) +var TIPXDCXCancellationFee = big.NewInt(0) +var TIPXDCXCancellationFeeTestnet = big.NewInt(0) +var TIPXDCXMinerDisable = big.NewInt(0) +var TIPXDCXReceiverDisable = big.NewInt(0) +var BerlinBlock = big.NewInt(0) +var LondonBlock = big.NewInt(0) +var MergeBlock = big.NewInt(0) +var ShanghaiBlock = big.NewInt(0) +var Eip1559Block = big.NewInt(9999999999) + +var TIPXDCXTestnet = big.NewInt(0) +var IsTestnet bool = false +var Enable0xPrefix bool = true +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 BlockNumberGas50x = big.NewInt(11818181) +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, +} diff --git a/consensus/XDPoS/engines/engine_v2/engine.go b/consensus/XDPoS/engines/engine_v2/engine.go index bcbf4651cb9f..298b18114388 100644 --- a/consensus/XDPoS/engines/engine_v2/engine.go +++ b/consensus/XDPoS/engines/engine_v2/engine.go @@ -191,7 +191,10 @@ func (x *XDPoS_v2) initial(chain consensus.ChainReader, header *types.Header) er Signatures: nil, GapNumber: header.Number.Uint64() - x.config.Gap, } - + // prevent overflow + if header.Number.Uint64() < x.config.Gap { + quorumCert.GapNumber = 0 + } // can not call processQC because round is equal to default x.currentRound = 1 x.highestQuorumCert = quorumCert @@ -210,6 +213,10 @@ func (x *XDPoS_v2) initial(chain consensus.ChainReader, header *types.Header) er // Initial first v2 snapshot lastGapNum := x.config.V2.SwitchBlock.Uint64() - x.config.Gap + // prevent overflow + if x.config.V2.SwitchBlock.Uint64() < x.config.Gap { + lastGapNum = 0 + } lastGapHeader := chain.GetHeaderByNumber(lastGapNum) snap, _ := loadSnapshot(x.db, lastGapHeader.Hash()) @@ -846,6 +853,10 @@ func (x *XDPoS_v2) verifyQC(blockChainReader consensus.ChainReader, quorumCert * } epochSwitchNumber := epochInfo.EpochSwitchBlockInfo.Number.Uint64() gapNumber := epochSwitchNumber - epochSwitchNumber%x.config.Epoch - x.config.Gap + // prevent overflow + if epochSwitchNumber-epochSwitchNumber%x.config.Epoch < x.config.Gap { + gapNumber = 0 + } if gapNumber != quorumCert.GapNumber { log.Error("[verifyQC] QC gap number mismatch", "epochSwitchNumber", epochSwitchNumber, "BlockNum", quorumCert.ProposedBlockInfo.Number, "BlockInfoHash", quorumCert.ProposedBlockInfo.Hash, "Gap", quorumCert.GapNumber, "GapShouldBe", gapNumber) return fmt.Errorf("gap number mismatch QC Gap %d, shouldBe %d", quorumCert.GapNumber, gapNumber) diff --git a/consensus/XDPoS/engines/engine_v2/epochSwitch.go b/consensus/XDPoS/engines/engine_v2/epochSwitch.go index 9928b88fb25a..5f9892e985ed 100644 --- a/consensus/XDPoS/engines/engine_v2/epochSwitch.go +++ b/consensus/XDPoS/engines/engine_v2/epochSwitch.go @@ -49,6 +49,26 @@ func (x *XDPoS_v2) getEpochSwitchInfo(chain consensus.ChainReader, header *types } if isEpochSwitch { log.Debug("[getEpochSwitchInfo] header is epoch switch", "hash", hash.Hex(), "number", h.Number.Uint64()) + if h.Number.Uint64() == 0 { + log.Warn("[getEpochSwitchInfo] block 0, init epoch differently") + // handle genesis block differently as follows + masternodes := common.ExtractAddressFromBytes(h.Extra[32 : len(h.Extra)-65]) + penalties := []common.Address{} + standbynodes := []common.Address{} + epochSwitchInfo := &types.EpochSwitchInfo{ + Penalties: penalties, + Standbynodes: standbynodes, + Masternodes: masternodes, + MasternodesLen: len(masternodes), + EpochSwitchBlockInfo: &types.BlockInfo{ + Hash: hash, + Number: h.Number, + Round: 0, + }, + } + x.epochSwitches.Add(hash, epochSwitchInfo) + return epochSwitchInfo, nil + } quorumCert, round, masternodes, err := x.getExtraFields(h) if err != nil { log.Error("[getEpochSwitchInfo] get extra field", "err", err, "number", h.Number.Uint64()) diff --git a/consensus/XDPoS/engines/engine_v2/snapshot.go b/consensus/XDPoS/engines/engine_v2/snapshot.go index de4fb76d82bf..f0ce71a2d434 100644 --- a/consensus/XDPoS/engines/engine_v2/snapshot.go +++ b/consensus/XDPoS/engines/engine_v2/snapshot.go @@ -78,6 +78,10 @@ func (x *XDPoS_v2) getSnapshot(chain consensus.ChainReader, number uint64, isGap gapBlockNum = number } else { gapBlockNum = number - number%x.config.Epoch - x.config.Gap + //prevent overflow + if number-number%x.config.Epoch < x.config.Gap { + gapBlockNum = 0 + } } gapBlockHash := chain.GetHeaderByNumber(gapBlockNum).Hash() diff --git a/consensus/XDPoS/engines/engine_v2/timeout.go b/consensus/XDPoS/engines/engine_v2/timeout.go index 169e1db7bab0..ff689f45ef0c 100644 --- a/consensus/XDPoS/engines/engine_v2/timeout.go +++ b/consensus/XDPoS/engines/engine_v2/timeout.go @@ -231,6 +231,10 @@ func (x *XDPoS_v2) sendTimeout(chain consensus.ChainReader) error { // Notice this +1 is because we expect a block whos is the child of currentHeader currentNumber := currentBlockHeader.Number.Uint64() + 1 gapNumber = currentNumber - currentNumber%x.config.Epoch - x.config.Gap + // prevent overflow + if currentNumber-currentNumber%x.config.Epoch < x.config.Gap { + gapNumber = 0 + } log.Debug("[sendTimeout] is epoch switch when sending out timeout message", "currentNumber", currentNumber, "gapNumber", gapNumber) } else { epochSwitchInfo, err := x.getEpochSwitchInfo(chain, currentBlockHeader, currentBlockHeader.Hash()) @@ -239,6 +243,10 @@ func (x *XDPoS_v2) sendTimeout(chain consensus.ChainReader) error { return err } gapNumber = epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64() - epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64()%x.config.Epoch - x.config.Gap + // prevent overflow + if epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64()-epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64()%x.config.Epoch < x.config.Gap { + gapNumber = 0 + } log.Debug("[sendTimeout] non-epoch-switch block found its epoch block and calculated the gapNumber", "epochSwitchInfo.EpochSwitchBlockInfo.Number", epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64(), "gapNumber", gapNumber) } diff --git a/consensus/XDPoS/engines/engine_v2/vote.go b/consensus/XDPoS/engines/engine_v2/vote.go index f31e95c86284..675b0ca2c9ae 100644 --- a/consensus/XDPoS/engines/engine_v2/vote.go +++ b/consensus/XDPoS/engines/engine_v2/vote.go @@ -30,6 +30,10 @@ func (x *XDPoS_v2) sendVote(chainReader consensus.ChainReader, blockInfo *types. } epochSwitchNumber := epochSwitchInfo.EpochSwitchBlockInfo.Number.Uint64() gapNumber := epochSwitchNumber - epochSwitchNumber%x.config.Epoch - x.config.Gap + // prevent overflow + if epochSwitchNumber-epochSwitchNumber%x.config.Epoch < x.config.Gap { + gapNumber = 0 + } signedHash, err := x.signSignature(types.VoteSigHash(&types.VoteForSign{ ProposedBlockInfo: blockInfo, GapNumber: gapNumber, diff --git a/eth/hooks/engine_v2_hooks.go b/eth/hooks/engine_v2_hooks.go index bd5b0ffdd1df..e549802a100e 100644 --- a/eth/hooks/engine_v2_hooks.go +++ b/eth/hooks/engine_v2_hooks.go @@ -222,6 +222,11 @@ func GetSigningTxCount(c *XDPoS.XDPoS, chain consensus.ChainReader, header *type signers := make(map[common.Address]*contracts.RewardLog) mapBlkHash := map[uint64]common.Hash{} + // prevent overflow + if number == 0 { + return signers, nil + } + data := make(map[common.Hash][]common.Address) epochCount := 0 var masternodes []common.Address @@ -256,6 +261,10 @@ func GetSigningTxCount(c *XDPoS.XDPoS, chain consensus.ChainReader, header *type from := *tx.From() data[blkHash] = append(data[blkHash], from) } + // prevent overflow + if i == 0 { + return signers, nil + } } for i := startBlockNumber; i <= endBlockNumber; i++ { From 4859d5e7db63aeac6a3e18aa1f0d505d0ae18e70 Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Wed, 18 Dec 2024 14:36:23 +0700 Subject: [PATCH 2/5] new constants and genesis.json --- cicd/devnet/bootnodes.list | 4 +- cicd/devnet/genesis.json | 273 +++++++++++++++++++++------ cicd/entry.sh | 2 +- common/constants/constants.go.devnet | 36 ++-- 4 files changed, 232 insertions(+), 83 deletions(-) diff --git a/cicd/devnet/bootnodes.list b/cicd/devnet/bootnodes.list index 618052572b94..edffbabcf4a3 100644 --- a/cicd/devnet/bootnodes.list +++ b/cicd/devnet/bootnodes.list @@ -1,2 +1,2 @@ -enode://00d49d72a48164681906ad61924568da0d3049937efdbaed0b7533e34a99f55814f1839d909cdc82f78e04a36ac04737d80b41b22905c7d6cac3c80bb5cdbbc4@66.94.98.186:30301 -enode://d6793b02a478f13ed6d01c30778935f6f8f7461a75aebedcb310def4ed9b066f995a0dca046d0c7ea7f5ffdd8e3f1f53c6b6dce909d1693650504921aad62f1a@194.163.167.177:30301 +enode://c7a38ecc7fd5849eaefb3e928f882ab2f1260d5591bd1fef1db39c8ae0d9fe21d86e2d4efee6def0f4f16d0b6103f86f92f7e910295b849266fef83f05768596@10.244.1.77:30301 +enode://9160713d41656154ce3fdaa9d0f9799dd8546652b1784edecf82ce7a5b54a977f897ea617a9b3b4db513dc6b0dc98c1c3ad8a1914075ab87ded4e367c89dcd3b@10.244.2.53:30301 diff --git a/cicd/devnet/genesis.json b/cicd/devnet/genesis.json index 4ea005d6ea7e..b92159f33089 100644 --- a/cicd/devnet/genesis.json +++ b/cicd/devnet/genesis.json @@ -1,24 +1,47 @@ { "config": { "chainId": 551, - "homesteadBlock": 1, - "eip150Block": 2, + "homesteadBlock": 0, + "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155Block": 3, - "eip158Block": 3, - "byzantiumBlock": 4, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, "XDPoS": { "period": 2, "epoch": 900, - "reward": 5000, + "reward": 10, "rewardCheckpoint": 900, "gap": 450, - "foudationWalletAddr": "0x746249c61f5832c5eed53172776b460491bdcd5c" + "foudationWalletAddr": "0xde5b54e8e7b585153add32f472e8d545e5d42a82", + "SkipV1Validation": false, + "v2": { + "switchBlock": 0, + "config": { + "maxMasternodes": 108, + "switchRound": 0, + "minePeriod": 2, + "timeoutSyncThreshold": 3, + "timeoutPeriod": 10, + "certificateThreshold": 0.667 + }, + "allConfigs": { + "0": { + "maxMasternodes": 108, + "switchRound": 0, + "minePeriod": 2, + "timeoutSyncThreshold": 3, + "timeoutPeriod": 10, + "certificateThreshold": 0.667 + } + }, + "SkipV2Validation": false + } } }, "nonce": "0x0", - "timestamp": "0x60c1b36a", - "extraData": "0x000000000000000000000000000000000000000000000000000000000000000037224936d88724f1de8686e52071d515b1af0eab52e78df27ca83be8716a77882da63a8dac227dac888c073313b36cf03cf1f739f39443551ff12bbe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x6771d3f2", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000311bdf9066246e68559816e7f636435867f824ef442a44a6fc20f5b8dfa8b304d7137581f7e6bef347318441696e9ae962633c16e04d53935272639d537fc89618edae86950e12687a612e15c4786b8473898cc3c5beca5841306b26fdb4e30411392a6a74826141342a4dc33a1045cefa4182b6212ec0317bc30fbeb7208192d1474b5f87ffbc056de43c11888c073313b36cf03cf1f739f39443551ff12bbe8d993351c0e2db739f9bcbfdeda94d73b50b16d3a242960b7ca1937e826bda6c397df74d9f9ab01aa89af636787499e81362e815e36f28763eac120babebf5a6cbe6113780cbe489e3eb0db882381aebaf81190100d82f41ad2c95898195c7a47dc59115bb5ec85408683795da2f604a5c0464868eabfcb6da489a1b4304f49aafaec938c7adc48539470624e1f9c75ce33e568d8fa3ace90497ee0c60dc921eefea93e384a6ccaaf28e33790a2d1b2625bf964dfc087e2622b02b0bb78713e872c02796ef64c8f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x47b760", "difficulty": "0x1", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -30,43 +53,151 @@ "0000000000000000000000000000000000000001": { "balance": "0x0" }, + "0000000000000000000000000000000000000068": { + "balance": "0xd3c21bcecceda10000000" + }, "0000000000000000000000000000000000000088": { "code": "0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000084595161401484a000000", "0x000000000000000000000000000000000000000000000000000000000000000c": "0x00000000000000000000000000000000000000000000054b40b1f852bda00000", "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", "0x000000000000000000000000000000000000000000000000000000000000000e": "0x000000000000000000000000000000000000000000000000000000000013c680", "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000069780", - "0x0cca6b5183395dc86a20cb86687ed86453de376e4e17bed8966e42a889c8725d": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x334b7f9d5f3d799751f76e65d323e6c91276efb6e64b0446a088d2fcf516b440": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x3657f70c5cac69bc1db087212204978b5e36fb39f142fc384dfbf897f13145e3": "0x000000000000000000000000a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0x395dbd86e0de75e9c4a1fb35427f914ce460476379d076bd1b537fb4a716bab0": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x555ff3aa35f12513cb7de85980072f5394cf6321406b8b9b091f8a2974b83943": "0x00000000000000000000000037224936d88724f1de8686e52071d515b1af0eab", - "0x555ff3aa35f12513cb7de85980072f5394cf6321406b8b9b091f8a2974b83944": "0x00000000000000000000000052e78df27ca83be8716a77882da63a8dac227dac", - "0x555ff3aa35f12513cb7de85980072f5394cf6321406b8b9b091f8a2974b83945": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe", - "0x6723efa5b718fd93a9c3fe445b0ce1acaeb21b7b0687a7a4586def1f3c294770": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x832066899179d47432d68c70d433422b9ba89f4037ef6cf4bc0b29aac1db8ae5": "0x000000000000000000000001a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0x832066899179d47432d68c70d433422b9ba89f4037ef6cf4bc0b29aac1db8ae6": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x030c4482e31df0bec3a61ba9044822c841d3be0a21a4a43d22ffabb19a238030": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x03857c1c3036c8068aecc274ccdef26c09d6bc8d7323c3b0af04944281aea3c5": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x04606a03b4103377c3cc40f7d070c9672b8c34f833337c95acd6cc3b9ef873be": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x04606a03b4103377c3cc40f7d070c9672b8c34f833337c95acd6cc3b9ef873bf": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x0f0a4bf138332e4dee2840995f18ef3f4e7ce9800a43298cd303f652f37e2760": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x0f77b98b641f695810840536460aceac3aa93db4b69360cb1e825fc50a01cbf8": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x125b08b20a070fdff51220f22ab5783fe8553385c29d73595065987e274ae2ba": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x125b08b20a070fdff51220f22ab5783fe8553385c29d73595065987e274ae2bb": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x141b2f299c67c202a3f56d8c761ef8412df00a99dc4d7df7132fea8b618710fb": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x15e82e9588701aace370d9b0ae88a15878117328c72679be3a43f1fde5480b52": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x19474e4e22de9b7e74a0e935e50e07474f1922fca9ca508d627a1753b89a04c0": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x1a53676945466c0303c4763ecd9fe35b640c62214817fc1cd445cd2df311d75e": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x1acfc824f6e62266e1ddfd5296eb428cb6235e11eb419042440ee2cd234f5064": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x206df8c61c26c41c2f5d8628f9b0af634f51cea5204c2860beac8743b789d8f9": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x213528a16906ba2c7ae2d13a88332596a8f7dba04445edce4dd35851adc6270b": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x217e08ed8a88d1aa61780ebbfa2433d8ee93fe281a28caa61609ffd7feb6ff48": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x217e08ed8a88d1aa61780ebbfa2433d8ee93fe281a28caa61609ffd7feb6ff49": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x2bbcd29309cdf0c2e0fb87eb0912eda2715ff0d0800356af3b13b1877fc96294": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x2ea8dbac375e20907f0f6064477fb65f425b25387bc4af4a9fa0d909542ad6ec": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x2f46cce9be56b195a997053b94333e3e8608e77a9049008a7867ece9434d7490": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x32f30f989a9121096e27b0ceff2143dfd8ad0a279e39b2dbdd4720d758b1235e": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x334998a4166b71bbee90c9a5395d45b437458344b336983ce195ac15c4cabf41": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x37bbbe931ce8669c7360584cc0c8719480098d88b382fa5147ab6070f6a995e9": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x383c8c93b8864dd3dd80dcce451bff3ccecfe0ef316daeffc3429e8c734ca219": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x424c760de55550140740213338215fb5e72732d77ff28c6fcdce25cc0da4b4df": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x42b4293dae5548c9e2c405a2d603c1b7c254591f10e1a19d475c9573a806ddbf": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x4315dd31061c8b8e85c5b7d9df3c6dda7f6e48ad32c7bd25549115df18f68eb7": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x433573bf8c109958dcd2a79e075574b3fa76ee1309194d6985ec9eb993cfc4a8": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x433573bf8c109958dcd2a79e075574b3fa76ee1309194d6985ec9eb993cfc4a9": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x471f33d3408681a476d422388b3e426fc8fd1f4db2b3cf07127fc0430da13d5a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x48ddfeab6816c7d8ea504eaceba35584eed68f73e8bca46561c49f828945d870": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x4bcc08cdec386d590e3c1b686244142bf6e504749f55207aea8cba6292b4a05c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930991": "0x000000000000000000000000311bdf9066246e68559816e7f636435867f824ef", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930992": "0x000000000000000000000000442a44a6fc20f5b8dfa8b304d7137581f7e6bef3", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930993": "0x00000000000000000000000047318441696e9ae962633c16e04d53935272639d", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930994": "0x000000000000000000000000537fc89618edae86950e12687a612e15c4786b84", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930995": "0x00000000000000000000000073898cc3c5beca5841306b26fdb4e30411392a6a", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930996": "0x00000000000000000000000074826141342a4dc33a1045cefa4182b6212ec031", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930997": "0x0000000000000000000000007bc30fbeb7208192d1474b5f87ffbc056de43c11", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930998": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930999": "0x0000000000000000000000008d993351c0e2db739f9bcbfdeda94d73b50b16d3", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099a": "0x000000000000000000000000a242960b7ca1937e826bda6c397df74d9f9ab01a", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099b": "0x000000000000000000000000a89af636787499e81362e815e36f28763eac120b", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099c": "0x000000000000000000000000abebf5a6cbe6113780cbe489e3eb0db882381aeb", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099d": "0x000000000000000000000000af81190100d82f41ad2c95898195c7a47dc59115", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099e": "0x000000000000000000000000bb5ec85408683795da2f604a5c0464868eabfcb6", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099f": "0x000000000000000000000000da489a1b4304f49aafaec938c7adc48539470624", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a0": "0x000000000000000000000000e1f9c75ce33e568d8fa3ace90497ee0c60dc921e", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a1": "0x000000000000000000000000efea93e384a6ccaaf28e33790a2d1b2625bf964d", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a2": "0x000000000000000000000000fc087e2622b02b0bb78713e872c02796ef64c8f1", + "0x4df12e1188de9c93b847240eddba997020037c5f8010088c71c6f497ea6865ab": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x5479b436a6706e20dbebc992f8b75e09f5ef33b9bfc92f6eb52af893bc9f3ef5": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x5a72b959cac93391bff267c6c91f4da4895e3f8769bb512241703807da099182": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x6528b6895a372dd9abf5c9b1e2d763877056e06dcadeefb947482c05a58f1a46": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x6528b6895a372dd9abf5c9b1e2d763877056e06dcadeefb947482c05a58f1a47": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x690ae50193386ef0c1f3aecb62d156ec48e51576b8faca760d2e782148d2685a": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x69dc30401af3a46fb5caf938fefd3bb163e08eed5018359c7ce99b0a6ac5bcad": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x6f24e27f6bf706ecff22e1cc7232c2b995103d66093d2976eeaa6ced126c7cf3": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x724b5bbb48fc97209628eb6b34adb8dd3cd583180ac721afdf706c4c57bbc253": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x76dfe65765497bb6461c122d3715541832ddc6bed4af9859d0afcafd98e85d3d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x78131ffee5eb0b7466641acad70a5e37f247a658acd6910a0e0159013272500f": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x78131ffee5eb0b7466641acad70a5e37f247a658acd6910a0e01590132725010": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x7860877d0fdf5b8349b69cf151013101002a515fc77b7d9ac9deea724189b49d": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x78f000d26dc5cb7bb6625ad3bbdeb559c2237595558ca062c170e72b826dcaa8": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x7c5e55320fbb9389307827678ad755ae9bbff14bc2f0b7311e273ea6f816b5e6": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x850302252de9a45ae306fefaef8c0b466423440d4916233feb535a91f5c13884": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x850302252de9a45ae306fefaef8c0b466423440d4916233feb535a91f5c13885": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x8f6c89a2950c399a6bd26ec8e4f8342cef555205270052553492ac8caab48637": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x92174186dda351528a078fccba50a5ff5332041fd6f861d5ba9f30d9e7416b01": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x9d721527fb4f716033fd64eb5c53e9ebfdcbded3e02421855e691c06bc3d0cda": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0xadf2e2b096791f125211938ba4199c02152b91d8761229ae36342002e463de86": "0x000000000000000000000001a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0xadf2e2b096791f125211938ba4199c02152b91d8761229ae36342002e463de87": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab194": "0x000000000000000000000001a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab195": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0xd6e5468fdf7c0709dc80d32848fc6c62d31a193138d0962e6edc92694d422212": "0x000000000000000000000000a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0xdbb72142c0e7c59d0ee1992f539a9bc4a22703f549c839728ce22c2c8ee01113": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xe810e986b7d9bc3e7cd3c6ce464ba1fc6c80bec03a51e6e041228d5df84e0121": "0x000000000000000000000000a12a44433e64b76a9e388d87af02ce80580cf1f8", - "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x00000000000000000000000037224936d88724f1de8686e52071d515b1af0eab", - "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x00000000000000000000000052e78df27ca83be8716a77882da63a8dac227dac", - "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe" + "0x927695b4feff242034e5b416f50ee8f8804c7c79d682e9b504e1d7ad0376d415": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x9428e90ccbc254697b04337e1bfa9ed42a163a0530cac6ed589ff0e86db639ff": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x979ead4e6ad3f623d00d4c31505cce1a654a543281a073df41b8429781a4700a": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x979ead4e6ad3f623d00d4c31505cce1a654a543281a073df41b8429781a4700b": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa0654653e606a2b16e75ace42178d92a333f7bd8fd554600cd8c0dda8959a747": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xa0654653e606a2b16e75ace42178d92a333f7bd8fd554600cd8c0dda8959a748": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa16feed71a191c25a16b840899c1130128bae680b9fb5afedfad18ee25baa3cc": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xa16feed71a191c25a16b840899c1130128bae680b9fb5afedfad18ee25baa3cd": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa40e19ad57e57cf5498a358191ef21a46727990f0833f60ef287bb2512f473b2": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xadd3379ca12eb6e907655b06c632df1dfb1d3810478f04657d0eb1f2514ada7d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xb07bd76227cbb5a5e93cd5635ab731faceb120715f763221afde9bf9c66d93e1": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xb7a1ebae33d313df562db52e6a17cc25a4fc71072bc8f38e28cca51dca772d2f": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xb7a1ebae33d313df562db52e6a17cc25a4fc71072bc8f38e28cca51dca772d30": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xbd072001a6fd52f3f36f5c32bd3ba9c4ffd3e427ab5661fb687b4b37342e32da": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xbe19bdb2daf84051554e5f7b28c240f2394dfdc01ed9931b1d2270301ce6197a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab194": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab195": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd6b02d8d4bab22276f46bd01c273377c92e6ebf28cab145c363c2ad13651ab01": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd6b02d8d4bab22276f46bd01c273377c92e6ebf28cab145c363c2ad13651ab02": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd6e5468fdf7c0709dc80d32848fc6c62d31a193138d0962e6edc92694d422212": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd71673afb2d4fa2bfb83c3892943b95ad4701e2fd78801199c07446743897d39": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd71673afb2d4fa2bfb83c3892943b95ad4701e2fd78801199c07446743897d3a": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9c5f37af5366d29a8e3839d99c1dbe7d1b1e3f1e2f5a3ac117401809b0d2501": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd9c5f37af5366d29a8e3839d99c1dbe7d1b1e3f1e2f5a3ac117401809b0d2502": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9cfd15c4a9619e16321f9e4042a566871512a8c0375122ca56a91ed5dfaa5e2": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd9cfd15c4a9619e16321f9e4042a566871512a8c0375122ca56a91ed5dfaa5e3": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9d4d93f562d5dc8184de584a08046769c25c10f1cebee1617c95d9212c093ec": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xe0d37705568ac8274db84c0b672ef9a5b02459e4607af2736a98b235c5342cf9": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xe20533b9acd093b6b21eda56a3ad045315f0999f910d7ccada9ec110917d3dc2": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xe6920aeacdafc0d4f7573369e69a8a79eaee08f9d9f620e22831ee53d8de618c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xe6a03f7a1a989ef0b5a97e8964334cc7ddb72a67de4c24b5f891847210a9db11": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xe6a03f7a1a989ef0b5a97e8964334cc7ddb72a67de4c24b5f891847210a9db12": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xea2b7d5c8733427922e04399ac310174bb0431233be39c6a708646879c299ed9": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x000000000000000000000000311bdf9066246e68559816e7f636435867f824ef", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x000000000000000000000000442a44a6fc20f5b8dfa8b304d7137581f7e6bef3", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x00000000000000000000000047318441696e9ae962633c16e04d53935272639d", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee6": "0x000000000000000000000000537fc89618edae86950e12687a612e15c4786b84", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee7": "0x00000000000000000000000073898cc3c5beca5841306b26fdb4e30411392a6a", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee8": "0x00000000000000000000000074826141342a4dc33a1045cefa4182b6212ec031", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee9": "0x0000000000000000000000007bc30fbeb7208192d1474b5f87ffbc056de43c11", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eea": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eeb": "0x0000000000000000000000008d993351c0e2db739f9bcbfdeda94d73b50b16d3", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eec": "0x000000000000000000000000a242960b7ca1937e826bda6c397df74d9f9ab01a", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eed": "0x000000000000000000000000a89af636787499e81362e815e36f28763eac120b", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eee": "0x000000000000000000000000abebf5a6cbe6113780cbe489e3eb0db882381aeb", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eef": "0x000000000000000000000000af81190100d82f41ad2c95898195c7a47dc59115", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef0": "0x000000000000000000000000bb5ec85408683795da2f604a5c0464868eabfcb6", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef1": "0x000000000000000000000000da489a1b4304f49aafaec938c7adc48539470624", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef2": "0x000000000000000000000000e1f9c75ce33e568d8fa3ace90497ee0c60dc921e", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef3": "0x000000000000000000000000efea93e384a6ccaaf28e33790a2d1b2625bf964d", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef4": "0x000000000000000000000000fc087e2622b02b0bb78713e872c02796ef64c8f1", + "0xf511943a3baf5478bbcb2a8fc05b1bd215ad2612dcea88999bb647d8a1bc497b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf6c2c7fc452bd777ae6315a05df702a9c84c84319642f738c02d7265e7b03519": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf7c5c70c003782446997bfaca3df73d3f4529e5610bd8f00aa705bd9f2b7bea5": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfb99b5de22d1e4ca0e5857616be3d3df0df3f371c6dae7e7c3df24980cae362b": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfd6dda287eb8b2e65f6136280e7f54c250f820b79064da60c2f09859788892b6": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfdc6e9ef6103a34656ae73183b1f07e0d09db52b8500c3d560707c8f426d61b7": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfdc6e9ef6103a34656ae73183b1f07e0d09db52b8500c3d560707c8f426d61b8": "0x000000000000000000000000000000000000000000000a968163f0a57b400000" }, - "balance": "0x18d0bf423c03d8de000000" + "balance": "0xbe951906eba2aa800000" }, "0000000000000000000000000000000000000089": { "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", @@ -80,50 +211,68 @@ "balance": "0x0" }, "0000000000000000000000000000000000000099": { - "balance": "0x0" + "balance": "0x92e8434aaaf80e1800000" }, - "03c0d9bc556be68870b96976e81d32ebb49d335d": { + "311bdf9066246e68559816e7f636435867f824ef": { "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "065551f0dcac6f00cae11192d462db709be3758c": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "442a44a6fc20f5b8dfa8b304d7137581f7e6bef3": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "38b20a2594939531373efcd2e6aa54d03fc534be": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "47318441696e9ae962633c16e04d53935272639d": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "42e694adfd403152cd9cad82a62fb6cd403f150a": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "537fc89618edae86950e12687a612e15c4786b84": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "4398241671b3dd484fe3213a4fb7511f30e7d7c0": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "73898cc3c5beca5841306b26fdb4e30411392a6a": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "4e37f91e3bc69725326af96facf85c14128b07ed": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "74826141342a4dc33a1045cefa4182b6212ec031": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "664c4a7b15d91b07c468162f535909114c038b91": { - "balance": "0x7912752226cec5131e000000" + "7bc30fbeb7208192d1474b5f87ffbc056de43c11": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "746249c61f5832c5eed53172776b460491bdcd5c": { - "balance": "0x0" + "888c073313b36cf03cf1f739f39443551ff12bbe": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "a12a44433e64b76a9e388d87af02ce80580cf1f8": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "8d993351c0e2db739f9bcbfdeda94d73b50b16d3": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "7aa125338be075260e77c6a66a56c90a5dec4c58": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "a242960b7ca1937e826bda6c397df74d9f9ab01a": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "9a3787688fd210ec8f8d0224c6c50b8178d75bc0": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "a89af636787499e81362e815e36f28763eac120b": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "a65010026b83368ca05df6e8b467985d6de3eac5": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "abebf5a6cbe6113780cbe489e3eb0db882381aeb": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "03c0d9bc556BE68870B96976e81D32ebb49d335D": { - "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "af81190100d82f41ad2c95898195c7a47dc59115": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "bb5ec85408683795da2f604a5c0464868eabfcb6": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "da489a1b4304f49aafaec938c7adc48539470624": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "de5b54e8e7b585153add32f472e8d545e5d42a82": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "e1f9c75ce33e568d8fa3ace90497ee0c60dc921e": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "efea93e384a6ccaaf28e33790a2d1b2625bf964d": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "fc087e2622b02b0bb78713e872c02796ef64c8f1": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" } - }, "number": "0x0", "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null } \ No newline at end of file diff --git a/cicd/entry.sh b/cicd/entry.sh index e7518fe9f603..0cd11b4ea474 100755 --- a/cicd/entry.sh +++ b/cicd/entry.sh @@ -7,7 +7,7 @@ fi echo "Select to run $NETWORK..." ln -s /usr/bin/XDC-$NETWORK /usr/bin/XDC -cp /work/$NETWORK/* /work +cp -n /work/$NETWORK/* /work echo "Start Node..." /work/start.sh \ No newline at end of file diff --git a/common/constants/constants.go.devnet b/common/constants/constants.go.devnet index 81e8c0487cd2..712bfac8c57e 100644 --- a/common/constants/constants.go.devnet +++ b/common/constants/constants.go.devnet @@ -32,26 +32,26 @@ const ( var Rewound = uint64(0) -var TIP2019Block = big.NewInt(1) -var TIPSigning = big.NewInt(225000) -var TIPRandomize = big.NewInt(225000) +var TIP2019Block = big.NewInt(0) +var TIPSigning = big.NewInt(0) +var TIPRandomize = big.NewInt(0) -var TIPV2SwitchBlock = big.NewInt(7074000) +var TIPV2SwitchBlock = big.NewInt(0) -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 TIPXDCXMinerDisable = big.NewInt(15894900) -var TIPXDCXReceiverDisable = big.NewInt(18018000) -var BerlinBlock = big.NewInt(16832700) -var LondonBlock = big.NewInt(16832700) -var MergeBlock = big.NewInt(16832700) -var ShanghaiBlock = big.NewInt(16832700) -var Eip1559Block = big.NewInt(23035500) +var TIPIncreaseMasternodes = big.NewInt(0) // Upgrade MN Count at Block. +var TIPNoHalvingMNReward = big.NewInt(0) // hardfork no halving masternodes reward +var BlackListHFNumber = uint64(0) +var TIPXDCX = big.NewInt(0) +var TIPXDCXLending = big.NewInt(0) +var TIPXDCXCancellationFee = big.NewInt(0) +var TIPXDCXCancellationFeeTestnet = big.NewInt(0) +var TIPXDCXMinerDisable = big.NewInt(0) +var TIPXDCXReceiverDisable = big.NewInt(0) +var BerlinBlock = big.NewInt(0) +var LondonBlock = big.NewInt(0) +var MergeBlock = big.NewInt(0) +var ShanghaiBlock = big.NewInt(0) +var Eip1559Block = big.NewInt(0) var TIPXDCXTestnet = big.NewInt(0) var IsTestnet bool = false From 654be4d8746724e13bd49aba154bab588b6f696d Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Mon, 30 Dec 2024 17:10:27 -0500 Subject: [PATCH 3/5] add cicd --- .github/workflows/ci.yml | 55 ++++++++++++++++++++++++++++ common/constants/constants.go.devnet | 2 +- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b6b7db7ffe5b..7ca0550c3db1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,6 +100,61 @@ jobs: echo "image_name=$image_name" echo "image_name=$image_name" >> "$GITHUB_OUTPUT" + devnet_k8_apply: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/dev-upgrade' && !startsWith(github.ref, 'refs/tags/') + needs: devnet_build_push + steps: + - uses: actions/checkout@v4 + - name: Set up kubectl + uses: azure/setup-kubectl@v4 + with: + version: 'v1.19.11' + - name: Decode and configure kubeconfig + run: | + mkdir -p $HOME/.kube + echo "${{ secrets.KUBE_CONFIG }}" | base64 --decode > $HOME/.kube/config + chmod 600 $HOME/.kube/config + git_hash=$(git rev-parse --short "$GITHUB_SHA") + kubectl set image deployment/devnet1 devnet1=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet2 devnet2=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet3 devnet3=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet4 devnet4=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet5 devnet5=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet6 devnet6=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet7 devnet7=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet8 devnet8=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet9 devnet9=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet10 devnet10=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet11 devnet11=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet12 devnet12=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet13 devnet13=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet14 devnet14=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet15 devnet15=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet16 devnet16=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet17 devnet17=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/devnet18 devnet18=xinfinorg/devnet:dev-upgrade-${git_hash} + + rpc_k8_apply: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/dev-upgrade' && !startsWith(github.ref, 'refs/tags/') + needs: devnet_build_push + steps: + - uses: actions/checkout@v4 + - name: Set up kubectl + uses: azure/setup-kubectl@v4 + with: + version: 'v1.19.11' + - name: Decode and configure kubeconfig + run: | + mkdir -p $HOME/.kube + echo "${{ secrets.KUBE_CONFIG }}" | base64 --decode > $HOME/.kube/config + chmod 600 $HOME/.kube/config + git_hash=$(git rev-parse --short "$GITHUB_SHA") + kubectl set image deployment/devnetrpc devnetrpc=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/testnetrpc testnetrpc=xinfinorg/devnet:dev-upgrade-${git_hash} + kubectl set image deployment/mainnetrpc mainnetrpc=xinfinorg/devnet:dev-upgrade-${git_hash} + rpcnode_terraform_apply: runs-on: ubuntu-latest if: github.ref == 'refs/heads/dev-upgrade' && !startsWith(github.ref, 'refs/tags/') diff --git a/common/constants/constants.go.devnet b/common/constants/constants.go.devnet index 712bfac8c57e..a71257ae6fc1 100644 --- a/common/constants/constants.go.devnet +++ b/common/constants/constants.go.devnet @@ -36,7 +36,7 @@ var TIP2019Block = big.NewInt(0) var TIPSigning = big.NewInt(0) var TIPRandomize = big.NewInt(0) -var TIPV2SwitchBlock = big.NewInt(0) +var TIPV2SwitchBlock = big.NewInt(1800) var TIPIncreaseMasternodes = big.NewInt(0) // Upgrade MN Count at Block. var TIPNoHalvingMNReward = big.NewInt(0) // hardfork no halving masternodes reward From 0404803366dd1ec0991cfef13dd55ae275a55d4f Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Mon, 30 Dec 2024 20:44:01 -0500 Subject: [PATCH 4/5] optimize shell script --- cicd/local/start.sh | 62 +++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 39 deletions(-) diff --git a/cicd/local/start.sh b/cicd/local/start.sh index cfd877de4066..30a4ed44642e 100755 --- a/cicd/local/start.sh +++ b/cicd/local/start.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -eo pipefail + if [ ! -d /work/xdcchain/XDC/chaindata ] then if test -z "$PRIVATE_KEY" @@ -25,41 +27,13 @@ do fi done < "$input" -log_level=3 -if test -z "$LOG_LEVEL" -then - echo "Log level not set, default to verbosity of $log_level" -else - echo "Log level found, set to $LOG_LEVEL" - log_level=$LOG_LEVEL -fi +log_level="${LOG_LEVEL:-3}" -port=30303 -if test -z "$PORT" -then - echo "PORT not set, default to $port" -else - echo "PORT found, set to $PORT" - port=$PORT -fi +port="${PORT:-30303}" -rpc_port=8545 -if test -z "$RPC_PORT" -then - echo "RPC_PORT not set, default to $rpc_port" -else - echo "RPC_PORT found, set to $RPC_PORT" - rpc_port=$RPC_PORT -fi +rpc_port="${RPC_PORT:-8545}" -ws_port=8555 -if test -z "$WS_PORT" -then - echo "WS_PORT not set, default to $ws_port" -else - echo "WS_PORT found, set to $WS_PORT" - ws_port=$WS_PORT -fi +ws_port="${WS_PORT:-8555}" netstats="${NODE_NAME}-${wallet}:xinfin_xdpos_hybrid_network_stats@devnetstats.apothem.network:2000" @@ -70,14 +44,24 @@ echo "Starting nodes with $bootnodes ..." # Note: --gcmode=archive means node will store all historical data. This will lead to high memory usage. But sync mode require archive to sync # https://github.com/XinFinOrg/XDPoSChain/issues/268 -XDC --ethstats ${netstats} --gcmode archive \ ---bootnodes ${bootnodes} --syncmode full \ ---datadir /work/xdcchain --networkid 551 \ --port $port --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 \ +XDC --ethstats ${netstats} \ +--gcmode archive \ +--bootnodes ${bootnodes} \ +--syncmode full \ +--datadir /work/xdcchain \ +--networkid 551 \ +-port $port \ +--rpc --rpccorsdomain "*" \ +--rpcaddr 0.0.0.0 \ --rpcport $rpc_port \ --rpcapi db,eth,debug,net,shh,txpool,personal,web3,XDPoS \ ---rpcvhosts "*" --unlock "${wallet}" --password /work/.pwd --mine \ ---gasprice "1" --targetgaslimit "420000000" --verbosity ${log_level} \ +--rpcvhosts "*" \ +--unlock "${wallet}" \ +--password /work/.pwd --mine \ +--gasprice "1" --targetgaslimit "420000000" \ +--verbosity ${log_level} \ --debugdatadir /work/xdcchain \ ---ws --wsaddr=0.0.0.0 --wsport $ws_port \ +--ws \ +--wsaddr=0.0.0.0 \ +--wsport $ws_port \ --wsorigins "*" 2>&1 >>/work/xdcchain/xdc.log | tee -a /work/xdcchain/xdc.log From 12488b86ed7f5e61085551da3f7672cfc42458bb Mon Sep 17 00:00:00 2001 From: wanwiset25 Date: Wed, 1 Jan 2025 21:51:11 -0500 Subject: [PATCH 5/5] add bootnodes --- cicd/devnet/bootnodes.list | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cicd/devnet/bootnodes.list b/cicd/devnet/bootnodes.list index edffbabcf4a3..d3b1228edd76 100644 --- a/cicd/devnet/bootnodes.list +++ b/cicd/devnet/bootnodes.list @@ -1,2 +1,4 @@ +enode://00d49d72a48164681906ad61924568da0d3049937efdbaed0b7533e34a99f55814f1839d909cdc82f78e04a36ac04737d80b41b22905c7d6cac3c80bb5cdbbc4@66.94.98.186:30301 +enode://d6793b02a478f13ed6d01c30778935f6f8f7461a75aebedcb310def4ed9b066f995a0dca046d0c7ea7f5ffdd8e3f1f53c6b6dce909d1693650504921aad62f1a@194.163.167.177:30301 enode://c7a38ecc7fd5849eaefb3e928f882ab2f1260d5591bd1fef1db39c8ae0d9fe21d86e2d4efee6def0f4f16d0b6103f86f92f7e910295b849266fef83f05768596@10.244.1.77:30301 enode://9160713d41656154ce3fdaa9d0f9799dd8546652b1784edecf82ce7a5b54a977f897ea617a9b3b4db513dc6b0dc98c1c3ad8a1914075ab87ded4e367c89dcd3b@10.244.2.53:30301