From 438341c2ea86bcc0db1d2d5cc947d4943dd750a9 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 27 Jul 2024 22:16:26 +0800 Subject: [PATCH 1/4] Fix crash during reorg for v2.0.0 (#590) * params: fix usage of IsXDCxDisable * internal/ethapi: fix nil block in function DoCall during reorg --- internal/ethapi/api.go | 2 +- params/config.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 2d93455f662f..c07ee54a2fe4 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1319,7 +1319,7 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.Blo // this makes sure resources are cleaned up. defer cancel() - block, err := b.BlockByHash(ctx, header.Hash()) + block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash) if err != nil { return nil, 0, false, err, nil } diff --git a/params/config.go b/params/config.go index ff2de6a7ebda..650722c4af6f 100644 --- a/params/config.go +++ b/params/config.go @@ -626,6 +626,10 @@ func (c *ChainConfig) IsTIPXDCXReceiver(num *big.Int) bool { return isForked(common.TIPXDCX, num) && !isForked(common.TIPXDCXReceiverDisable, num) } +func (c *ChainConfig) IsXDCxDisable(num *big.Int) bool { + return isForked(common.TIPXDCXReceiverDisable, num) +} + func (c *ChainConfig) IsTIPXDCXLending(num *big.Int) bool { return isForked(common.TIPXDCXLending, num) } @@ -789,7 +793,7 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { IsLondon: c.IsLondon(num), IsMerge: c.IsMerge(num), IsShanghai: c.IsShanghai(num), - IsXDCxDisable: c.IsTIPXDCXReceiver(num), + IsXDCxDisable: c.IsXDCxDisable(num), IsEIP1559: c.IsEIP1559(num), } } From 824c53132400ed1cc954d31c8a72a508e84de896 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 3 Aug 2024 07:20:24 +0800 Subject: [PATCH 2/4] make MasternodeVotingSMC tx never timeout (#598) --- internal/ethapi/api.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index c07ee54a2fe4..50c614a98a6e 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1399,7 +1399,12 @@ func (s *PublicBlockChainAPI) Call(ctx context.Context, args CallArgs, blockNrOr latest := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) blockNrOrHash = &latest } - result, _, failed, err, vmErr := DoCall(ctx, s.b, args, *blockNrOrHash, overrides, vm.Config{}, 5*time.Second, s.b.RPCGasCap()) + timeout := 5 * time.Second + MasternodeVotingSMCBinary := common.Address{19: 0x88} // xdc0000000000000000000000000000000000000088 + if args.To != nil && *args.To == MasternodeVotingSMCBinary { + timeout = 0 + } + result, _, failed, err, vmErr := DoCall(ctx, s.b, args, *blockNrOrHash, overrides, vm.Config{}, timeout, s.b.RPCGasCap()) if err != nil { return nil, err } From 31098e717aa925021928d5ce7935506fb5448e5c Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 3 Aug 2024 07:55:41 +0800 Subject: [PATCH 3/4] core: save new blocks during reorg (#599) --- core/blockchain.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index c1fefaa3d165..d9d20c43450c 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -590,7 +590,7 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error { log.Crit("Failed to write genesis block", "err", err) } bc.genesisBlock = genesis - bc.insert(bc.genesisBlock) + bc.insert(bc.genesisBlock, false) bc.currentBlock.Store(bc.genesisBlock) bc.hc.SetGenesis(bc.genesisBlock.Header()) bc.hc.SetCurrentHeader(bc.genesisBlock.Header()) @@ -680,7 +680,7 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { // or if they are on a different side chain. // // Note, this function assumes that the `mu` mutex is held! -func (bc *BlockChain) insert(block *types.Block) { +func (bc *BlockChain) insert(block *types.Block, writeBlock bool) { // If the block is on a side chain or an unknown one, force other heads onto it too updateHeads := GetCanonicalHash(bc.db, block.NumberU64()) != block.Hash() @@ -691,6 +691,11 @@ func (bc *BlockChain) insert(block *types.Block) { if err := WriteHeadBlockHash(bc.db, block.Hash()); err != nil { log.Crit("Failed to insert head block hash", "err", err) } + if writeBlock { + if err := WriteBlock(bc.db, block); err != nil { + log.Crit("Failed to insert block", "err", err) + } + } bc.currentBlock.Store(block) // save cache BlockSigners @@ -1422,7 +1427,8 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. // Set new head. if status == CanonStatTy { - bc.insert(block) + // WriteBlock has already been called, no need to write again + bc.insert(block, false) // prepare set of masternodes for the next epoch if bc.chainConfig.XDPoS != nil && ((block.NumberU64() % bc.chainConfig.XDPoS.Epoch) == (bc.chainConfig.XDPoS.Epoch - bc.chainConfig.XDPoS.Gap)) { err := bc.UpdateM1() @@ -2265,7 +2271,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { var addedTxs types.Transactions for i := len(newChain) - 1; i >= 0; i-- { // insert the block in the canonical way, re-writing history - bc.insert(newChain[i]) + bc.insert(newChain[i], true) // write lookup entries for hash based transaction/receipt searches if err := WriteTxLookupEntries(bc.db, newChain[i]); err != nil { return err From 3fb1a015e0500cdc339707ebb26db8392a30aa5d Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 19 Aug 2024 01:04:31 -0700 Subject: [PATCH 4/4] setup mainnet and testnet release block (#607) --- common/constants.go | 8 ++++---- common/constants/constants.go.testnet | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/constants.go b/common/constants.go index 4053542f30dc..e3e2d8c04de5 100644 --- a/common/constants.go +++ b/common/constants.go @@ -36,7 +36,7 @@ var TIP2019Block = big.NewInt(1) var TIPSigning = big.NewInt(3000000) var TIPRandomize = big.NewInt(3464000) -var TIPV2SwitchBlock = big.NewInt(78678000) // Target 21st Aug 2024 +var TIPV2SwitchBlock = big.NewInt(80370000) // Target 2nd Oct 2024 var TIPIncreaseMasternodes = big.NewInt(5000000) // Upgrade MN Count at Block. var TIPNoHalvingMNReward = big.NewInt(38383838) // hardfork no halving masternodes reward @@ -45,8 +45,8 @@ var TIPXDCX = big.NewInt(38383838) var TIPXDCXLending = big.NewInt(38383838) var TIPXDCXCancellationFee = big.NewInt(38383838) var TIPXDCXCancellationFeeTestnet = big.NewInt(38383838) -var TIPXDCXMinerDisable = big.NewInt(78678000) // Target 21st Aug 2024 -var TIPXDCXReceiverDisable = big.NewInt(78678900) // Target 21st Aug 2024, safer to release after disable miner +var TIPXDCXMinerDisable = big.NewInt(80370000) // Target 2nd Oct 2024 +var TIPXDCXReceiverDisable = big.NewInt(80370900) // Target 2nd Oct 2024, safer to release after disable miner var Eip1559Block = big.NewInt(9999999999) var BerlinBlock = big.NewInt(76321000) // Target 19th June 2024 var LondonBlock = big.NewInt(76321000) // Target 19th June 2024 @@ -84,7 +84,7 @@ var BaseTopUp = big.NewInt(100) var BaseRecall = big.NewInt(100) var TIPTRC21Fee = big.NewInt(38383838) var TIPTRC21FeeTestnet = big.NewInt(38383838) -var BlockNumberGas50x = big.NewInt(78678000) // Target 21st Aug 2024 +var BlockNumberGas50x = big.NewInt(80370000) // Target 2nd Oct 2024 var LimitTimeFinality = uint64(30) // limit in 30 block var IgnoreSignerCheckBlockArray = map[uint64]bool{ diff --git a/common/constants/constants.go.testnet b/common/constants/constants.go.testnet index 681f67ec2cbc..a84373fc1cca 100644 --- a/common/constants/constants.go.testnet +++ b/common/constants/constants.go.testnet @@ -46,7 +46,7 @@ var TIPXDCXLending = big.NewInt(23779191) var TIPXDCXCancellationFee = big.NewInt(23779191) var TIPXDCXCancellationFeeTestnet = big.NewInt(23779191) var TIPXDCXMinerDisable = big.NewInt(61290000) // Target 31st March 2024 -var TIPXDCXReceiverDisable = big.NewInt(9999999999) +var TIPXDCXReceiverDisable = big.NewInt(66825000) // Target 26 Aug 2024 var BerlinBlock = big.NewInt(61290000) var LondonBlock = big.NewInt(61290000) var MergeBlock = big.NewInt(61290000)