From cca2a7d213e26e8bf92b48c9e7c8b3d28bf988ae Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 14:54:41 +0530 Subject: [PATCH 01/10] missing ValidatorMapping added. --- core/state/statedb_utils.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/state/statedb_utils.go b/core/state/statedb_utils.go index 694bcdd127..4a0c9d45e6 100644 --- a/core/state/statedb_utils.go +++ b/core/state/statedb_utils.go @@ -73,8 +73,14 @@ var ( "withdrawsState": 0, "validatorsState": 1, "voters": 2, + "KYCString": 3, + "invalidKYCCount": 4, + "hasVotedInvalid": 5, + "ownerToCandidate": 6, + "owners": 7, "candidates": 8, "candidateCount": 9, + "ownerCount": 10, "minCandidateCap": 11, "minVoterCap": 12, "maxValidatorNumber": 13, From abee93984b73916aa31b28774039bdedd12315dc Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 14:55:20 +0530 Subject: [PATCH 02/10] Mainnet test sync. --- common/constants.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/common/constants.go b/common/constants.go index 2972277f2a..0877ed4186 100644 --- a/common/constants.go +++ b/common/constants.go @@ -25,6 +25,7 @@ const ( RangeReturnSigner = 150 MinimunMinerBlockPerEpoch = 1 IgnoreSignerCheckBlock = uint64(27307800) + IgnoreSignerCheckBlock2 = uint64(28270800) OneYear = uint64(365 * 86400) LiquidateLendingTradeBlock = uint64(100) ) @@ -36,14 +37,14 @@ var TIPSigning = big.NewInt(3000000) var TIPRandomize = big.NewInt(3464000) var TIPIncreaseMasternodes = big.NewInt(5000000) // Upgrade MN Count at Block. -var TIPNoHalvingMNReward = big.NewInt(23779191) // hardfork no halving masternodes reward -var BlackListHFNumber = uint64(23779191) -var TIPXDCX = big.NewInt(23779191) -var TIPXDCXLending = big.NewInt(23779191) -var TIPXDCXCancellationFee = big.NewInt(23779191) -var TIPXDCXCancellationFeeTestnet = big.NewInt(23779191) +var TIPNoHalvingMNReward = big.NewInt(38888888) // hardfork no halving masternodes reward +var BlackListHFNumber = uint64(38888888) +var TIPXDCX = big.NewInt(38888888) +var TIPXDCXLending = big.NewInt(38888888) +var TIPXDCXCancellationFee = big.NewInt(38888888) +var TIPXDCXCancellationFeeTestnet = big.NewInt(38888888) -var TIPXDCXTestnet = big.NewInt(23779191) +var TIPXDCXTestnet = big.NewInt(38888888) var IsTestnet bool = false var StoreRewardFolder string var RollbackHash Hash @@ -71,8 +72,8 @@ 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(23779191) -var TIPTRC21FeeTestnet = big.NewInt(23779191) +var TIPTRC21Fee = big.NewInt(38888888) +var TIPTRC21FeeTestnet = big.NewInt(38888888) var LimitTimeFinality = uint64(30) // limit in 30 block var Blacklist = map[Address]bool{ HexToAddress("0x5248bfb72fd4f234e062d3e9bb76f08643004fcd"): true, From 1bfafade74989c87f679ff559072c1232ba9797c Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 14:57:10 +0530 Subject: [PATCH 03/10] Revert XDCValidator. --- contracts/validator/contract/XDCValidator.sol | 99 ++++++++++++++++++- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/contracts/validator/contract/XDCValidator.sol b/contracts/validator/contract/XDCValidator.sol index 34d8b4e51b..0e67746a17 100644 --- a/contracts/validator/contract/XDCValidator.sol +++ b/contracts/validator/contract/XDCValidator.sol @@ -1,7 +1,9 @@ + pragma solidity ^0.4.21; import "./libs/SafeMath.sol"; + contract XDCValidator { using SafeMath for uint256; @@ -10,6 +12,8 @@ contract XDCValidator { event Propose(address _owner, address _candidate, uint256 _cap); event Resign(address _owner, address _candidate); event Withdraw(address _owner, uint256 _blockNumber, uint256 _cap); + event UploadedKYC(address _owner,string kycHash); + event InvalidatedNode(address _masternodeOwner, address[] _masternodes); struct ValidatorState { address owner; @@ -27,9 +31,18 @@ contract XDCValidator { mapping(address => ValidatorState) validatorsState; mapping(address => address[]) voters; + + // Mapping structures added for KYC feature. + mapping(address => string[]) public KYCString; + mapping(address => uint) public invalidKYCCount; + mapping(address => mapping(address => bool)) public hasVotedInvalid; + mapping(address => address[]) public ownerToCandidate; + address[] public owners; + address[] public candidates; uint256 public candidateCount = 0; + uint256 public ownerCount =0; uint256 public minCandidateCap; uint256 public minVoterCap; uint256 public maxValidatorNumber; @@ -43,10 +56,16 @@ contract XDCValidator { } modifier onlyValidVoterCap { + require(msg.value >= minVoterCap); _; } + modifier onlyKYCWhitelisted { + require(KYCString[msg.sender].length!=0 || ownerToCandidate[msg.sender].length>0); + _; + } + modifier onlyOwner(address _candidate) { require(validatorsState[_candidate].owner == msg.sender); _; @@ -99,7 +118,8 @@ contract XDCValidator { candidateWithdrawDelay = _candidateWithdrawDelay; voterWithdrawDelay = _voterWithdrawDelay; candidateCount = _candidates.length; - + owners.push(_firstOwner); + ownerCount++; for (uint256 i = 0; i < _candidates.length; i++) { candidates.push(_candidates[i]); validatorsState[_candidates[i]] = ValidatorState({ @@ -108,11 +128,20 @@ contract XDCValidator { cap: _caps[i] }); voters[_candidates[i]].push(_firstOwner); + ownerToCandidate[_firstOwner].push(_candidates[i]); validatorsState[_candidates[i]].voters[_firstOwner] = minCandidateCap; } } - function propose(address _candidate) external payable onlyValidCandidateCap onlyNotCandidate(_candidate) { + + // uploadKYC : anyone can upload a KYC; its not equivalent to becoming an owner. + function uploadKYC(string kychash) external { + KYCString[msg.sender].push(kychash); + emit UploadedKYC(msg.sender,kychash); + } + + // propose : any non-candidate who has uploaded its KYC can become an owner by proposing a candidate. + function propose(address _candidate) external payable onlyValidCandidateCap onlyKYCWhitelisted onlyNotCandidate(_candidate) { uint256 cap = validatorsState[_candidate].cap.add(msg.value); candidates.push(_candidate); validatorsState[_candidate] = ValidatorState({ @@ -122,6 +151,11 @@ contract XDCValidator { }); validatorsState[_candidate].voters[msg.sender] = validatorsState[_candidate].voters[msg.sender].add(msg.value); candidateCount = candidateCount.add(1); + if (ownerToCandidate[msg.sender].length ==0){ + owners.push(msg.sender); + ownerCount++; + } + ownerToCandidate[msg.sender].push(_candidate); voters[_candidate].push(msg.sender); emit Propose(msg.sender, _candidate, msg.value); } @@ -198,6 +232,67 @@ contract XDCValidator { emit Resign(msg.sender, _candidate); } + // voteInvalidKYC : any candidate can vote for invalid KYC i.e. a particular candidate's owner has uploaded a bad KYC. + // On securing 75% votes against an owner ( not candidate ), owner & all its candidates will lose their funds. + function voteInvalidKYC(address _invalidCandidate) onlyValidCandidate(msg.sender) onlyValidCandidate(_invalidCandidate) public { + address candidateOwner = getCandidateOwner(msg.sender); + address _invalidMasternode = getCandidateOwner(_invalidCandidate); + require(!hasVotedInvalid[candidateOwner][_invalidMasternode]); + hasVotedInvalid[candidateOwner][_invalidMasternode] = true; + invalidKYCCount[_invalidMasternode] += 1; + if( invalidKYCCount[_invalidMasternode]*100/getOwnerCount() >= 75 ){ + // 75% owners say that the KYC is invalid + address[] memory allMasternodes = new address[](candidates.length-1) ; + uint count=0; + for (uint i=0;i Date: Mon, 8 Nov 2021 14:58:04 +0530 Subject: [PATCH 04/10] update Voter Delay Withdraw. --- contracts/validator/validator.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/validator/validator.go b/contracts/validator/validator.go index e5dd8ad79e..5aa54967a0 100644 --- a/contracts/validator/validator.go +++ b/contracts/validator/validator.go @@ -16,10 +16,11 @@ package validator import ( + "math/big" + "github.com/XinFinOrg/XDPoSChain/accounts/abi/bind" "github.com/XinFinOrg/XDPoSChain/common" "github.com/XinFinOrg/XDPoSChain/contracts/validator/contract" - "math/big" ) type Validator struct { @@ -51,8 +52,8 @@ func DeployValidator(transactOpts *bind.TransactOpts, contractBackend bind.Contr // Min Voter Cap 10 XDC // 150 masternodes // Candidate Delay Withdraw 30 days = 1296000 blocks - // Voter Delay Withdraw 2 days = 86400 blocks - validatorAddr, _, _, err := contract.DeployXDCValidator(transactOpts, contractBackend, validatorAddress, caps, ownerAddress, minDeposit, minVoterCap, big.NewInt(150), big.NewInt(1296000), big.NewInt(86400)) + // Voter Delay Withdraw 10 days = 432000 blocks + validatorAddr, _, _, err := contract.DeployXDCValidator(transactOpts, contractBackend, validatorAddress, caps, ownerAddress, minDeposit, minVoterCap, big.NewInt(18), big.NewInt(1296000), big.NewInt(432000)) if err != nil { return validatorAddr, nil, err } From 70e04961387a629c56be450e3374623fd076737a Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 14:59:32 +0530 Subject: [PATCH 05/10] fetch data from StateDB instead of Contract. --- core/blockchain.go | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 940d53d4c3..3088ea62d8 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -2428,26 +2428,21 @@ func (bc *BlockChain) UpdateM1() error { } opts := new(bind.CallOpts) - // var candidates []common.Address - // // get candidates from slot of stateDB - // // if can't get anything, request from contracts - // stateDB, err := bc.State() - // if err != nil { - - // candidates, err = validator.GetCandidates(opts) - // if err != nil { - - // return err - // } - // } else { - - // candidates = state.GetCandidates(stateDB) - - // } - - candidates, err := validator.GetCandidates(opts) + var candidates []common.Address + // get candidates from slot of stateDB + // if can't get anything, request from contracts + stateDB, err := bc.State() if err != nil { - return err + + candidates, err = validator.GetCandidates(opts) + if err != nil { + + return err + } + } else { + + candidates = state.GetCandidates(stateDB) + } var ms []utils.Masternode @@ -2487,7 +2482,7 @@ func (bc *BlockChain) UpdateM1() error { maxMasternodes = common.MaxMasternodes } if len(ms) > maxMasternodes { - err = engine.UpdateMasternodes(bc, bc.CurrentHeader(), ms[:common.MaxMasternodes]) + err = engine.UpdateMasternodes(bc, bc.CurrentHeader(), ms[:maxMasternodes]) } else { err = engine.UpdateMasternodes(bc, bc.CurrentHeader(), ms) } From adf071665a852e75abde62b60bb0adb70c9b41f9 Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 15:01:16 +0530 Subject: [PATCH 06/10] update version 1.4.2 --- params/version.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/params/version.go b/params/version.go index f9412f9e2a..871defc027 100644 --- a/params/version.go +++ b/params/version.go @@ -22,8 +22,8 @@ import ( const ( VersionMajor = 1 // Major version component of the current release - VersionMinor = 3 // Minor version component of the current release - VersionPatch = 0 // Patch version component of the current release + VersionMinor = 4 // Minor version component of the current release + VersionPatch = 2 // Patch version component of the current release VersionMeta = "unstable" // Version metadata to append to the version string ) From 18bfb102b400abbf1ece742338002b2fe84426a9 Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Mon, 8 Nov 2021 15:41:13 +0530 Subject: [PATCH 07/10] Update Test for blockchain.go - TestBlocksHashCacheUpdate - TestAreTwoBlocksSamePath Collection test for BlocksHashCache cases 1. When init new chain 2. when insertChain 3. when insertFork 4. When adding new block by mining 5. When adding new block by syncing with other nodes --- core/blockchain_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/blockchain_test.go b/core/blockchain_test.go index e70ffe3ef8..9dc4b65117 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -18,13 +18,14 @@ package core import ( "fmt" - "github.com/XinFinOrg/XDPoSChain/core/rawdb" "math/big" "math/rand" "sync" "testing" "time" + "github.com/XinFinOrg/XDPoSChain/core/rawdb" + "github.com/XinFinOrg/XDPoSChain/common" "github.com/XinFinOrg/XDPoSChain/consensus/ethash" "github.com/XinFinOrg/XDPoSChain/core/state" @@ -1323,7 +1324,7 @@ func TestLargeReorgTrieGC(t *testing.T) { } /* - Collection test for BlochsHashCache + Collection test for BlocksHashCache cases 1. When init new chain 2. when insertChain From 420a589599f23dfb3e2dd3b353ab295db026d5f6 Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Thu, 11 Nov 2021 18:48:50 +0530 Subject: [PATCH 08/10] ignoreSignerBlockList added. --- common/constants.go | 10 ++++++++-- consensus/XDPoS/engines/engine_v1/engine.go | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/common/constants.go b/common/constants.go index 0877ed4186..90fd474c9b 100644 --- a/common/constants.go +++ b/common/constants.go @@ -24,8 +24,7 @@ const ( MergeSignRange = 15 RangeReturnSigner = 150 MinimunMinerBlockPerEpoch = 1 - IgnoreSignerCheckBlock = uint64(27307800) - IgnoreSignerCheckBlock2 = uint64(28270800) + OneYear = uint64(365 * 86400) LiquidateLendingTradeBlock = uint64(100) ) @@ -75,6 +74,13 @@ var BaseRecall = big.NewInt(100) var TIPTRC21Fee = big.NewInt(38888888) var TIPTRC21FeeTestnet = big.NewInt(38888888) 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, diff --git a/consensus/XDPoS/engines/engine_v1/engine.go b/consensus/XDPoS/engines/engine_v1/engine.go index 16c8bdb441..c5e7aaf0be 100644 --- a/consensus/XDPoS/engines/engine_v1/engine.go +++ b/consensus/XDPoS/engines/engine_v1/engine.go @@ -274,8 +274,8 @@ func (x *XDPoS_v1) verifyCascadingFields(chain consensus.ChainReader, header *ty func (x *XDPoS_v1) checkSignersOnCheckpoint(chain consensus.ChainReader, header *types.Header, signers []common.Address) error { number := header.Number.Uint64() - // ignore signerCheck at checkpoint block 14458500 due to wrong snapshot at gap 14458495 - if number == common.IgnoreSignerCheckBlock { + // ignore signerCheck at checkpoint block. + if common.IgnoreSignerCheckBlockArray[number] { return nil } penPenalties := []common.Address{} From afe58d79fc6ed0d07ca825433c120d62b305e743 Mon Sep 17 00:00:00 2001 From: olumuyiwadad Date: Thu, 11 Nov 2021 18:49:57 +0530 Subject: [PATCH 09/10] fix api trace block & Change option pending block. --- XDCx/XDCx.go | 3 +++ consensus/XDPoS/utils/types.go | 1 + core/blockchain.go | 7 +++++++ eth/api.go | 6 +----- eth/api_backend.go | 9 +++------ eth/api_tracer.go | 11 ++++++----- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/XDCx/XDCx.go b/XDCx/XDCx.go index 9762bf6b50..2a8d9b299a 100644 --- a/XDCx/XDCx.go +++ b/XDCx/XDCx.go @@ -572,6 +572,9 @@ func (XDCx *XDCX) GetTradingState(block *types.Block, author common.Address) (*t } return tradingstate.New(root, XDCx.StateCache) } +func (XDCX *XDCX) GetEmptyTradingState() (*tradingstate.TradingStateDB, error) { + return tradingstate.New(tradingstate.EmptyRoot, XDCX.StateCache) +} func (XDCx *XDCX) GetStateCache() tradingstate.Database { return XDCx.StateCache diff --git a/consensus/XDPoS/utils/types.go b/consensus/XDPoS/utils/types.go index 754194c728..4f55973cfd 100644 --- a/consensus/XDPoS/utils/types.go +++ b/consensus/XDPoS/utils/types.go @@ -22,6 +22,7 @@ type Masternode struct { type TradingService interface { GetTradingStateRoot(block *types.Block, author common.Address) (common.Hash, error) GetTradingState(block *types.Block, author common.Address) (*tradingstate.TradingStateDB, error) + GetEmptyTradingState() (*tradingstate.TradingStateDB, error) HasTradingState(block *types.Block, author common.Address) bool GetStateCache() tradingstate.Database GetTriegc() *prque.Prque diff --git a/core/blockchain.go b/core/blockchain.go index 3088ea62d8..9e4c84f5ca 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -519,6 +519,13 @@ func (bc *BlockChain) OrderStateAt(block *types.Block) (*tradingstate.TradingSta } else { return nil, err } + } else { + XDCxState, err := XDCXService.GetEmptyTradingState() + if err == nil { + return XDCxState, nil + } else { + return nil, err + } } } return nil, errors.New("Get XDCx state fail") diff --git a/eth/api.go b/eth/api.go index f6e4232356..9f12db9ec2 100644 --- a/eth/api.go +++ b/eth/api.go @@ -306,11 +306,7 @@ func NewPublicDebugAPI(eth *Ethereum) *PublicDebugAPI { // DumpBlock retrieves the entire state of the database at a given block. func (api *PublicDebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error) { if blockNr == rpc.PendingBlockNumber { - // If we're dumping the pending state, we need to request - // both the pending block as well as the pending state from - // the miner and operate on those - _, stateDb := api.eth.miner.Pending() - return stateDb.RawDump(), nil + blockNr = rpc.LatestBlockNumber } var block *types.Block if blockNr == rpc.LatestBlockNumber { diff --git a/eth/api_backend.go b/eth/api_backend.go index e7c102f67e..9285afbac5 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -76,8 +76,7 @@ func (b *EthApiBackend) SetHead(number uint64) { func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) { // Pending block is only known by the miner if blockNr == rpc.PendingBlockNumber { - block := b.eth.miner.PendingBlock() - return block.Header(), nil + blockNr = rpc.LatestBlockNumber } // Otherwise resolve and return the block if blockNr == rpc.LatestBlockNumber { @@ -89,8 +88,7 @@ func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNum func (b *EthApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) { // Pending block is only known by the miner if blockNr == rpc.PendingBlockNumber { - block := b.eth.miner.PendingBlock() - return block, nil + blockNr = rpc.LatestBlockNumber } // Otherwise resolve and return the block if blockNr == rpc.LatestBlockNumber { @@ -102,8 +100,7 @@ func (b *EthApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumb func (b *EthApiBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error) { // Pending state is only known by the miner if blockNr == rpc.PendingBlockNumber { - block, state := b.eth.miner.Pending() - return state, block.Header(), nil + blockNr = rpc.LatestBlockNumber } // Otherwise resolve the block number and return its state header, err := b.HeaderByNumber(ctx, blockNr) diff --git a/eth/api_tracer.go b/eth/api_tracer.go index 752a92bd3e..aa4d74b7b2 100644 --- a/eth/api_tracer.go +++ b/eth/api_tracer.go @@ -21,13 +21,14 @@ import ( "context" "errors" "fmt" - "github.com/XinFinOrg/XDPoSChain/XDCx/tradingstate" "io/ioutil" "math/big" "runtime" "sync" "time" + "github.com/XinFinOrg/XDPoSChain/XDCx/tradingstate" + "github.com/XinFinOrg/XDPoSChain/common" "github.com/XinFinOrg/XDPoSChain/common/hexutil" "github.com/XinFinOrg/XDPoSChain/core" @@ -99,7 +100,7 @@ func (api *PrivateDebugAPI) TraceChain(ctx context.Context, start, end rpc.Block switch start { case rpc.PendingBlockNumber: - from = api.eth.miner.PendingBlock() + from = api.eth.blockchain.CurrentBlock() case rpc.LatestBlockNumber: from = api.eth.blockchain.CurrentBlock() default: @@ -107,7 +108,7 @@ func (api *PrivateDebugAPI) TraceChain(ctx context.Context, start, end rpc.Block } switch end { case rpc.PendingBlockNumber: - to = api.eth.miner.PendingBlock() + to = api.eth.blockchain.CurrentBlock() case rpc.LatestBlockNumber: to = api.eth.blockchain.CurrentBlock() default: @@ -353,7 +354,7 @@ func (api *PrivateDebugAPI) TraceBlockByNumber(ctx context.Context, number rpc.B switch number { case rpc.PendingBlockNumber: - block = api.eth.miner.PendingBlock() + block = api.eth.blockchain.CurrentBlock() case rpc.LatestBlockNumber: block = api.eth.blockchain.CurrentBlock() default: @@ -514,7 +515,7 @@ func (api *PrivateDebugAPI) computeStateDB(block *types.Block, reexec uint64) (* break } if statedb, err = state.New(block.Root(), database); err == nil { - XDCxState, err = tradingstate.New(block.Root(), tradingstate.NewDatabase(api.eth.XDCX.GetLevelDB())) + XDCxState, err = api.eth.blockchain.OrderStateAt(block) if err == nil { break } From 5112dc7564e5d0a0cbf1d26d4796d7c15d975639 Mon Sep 17 00:00:00 2001 From: AnilChinchawale Date: Mon, 15 Nov 2021 19:34:07 +0530 Subject: [PATCH 10/10] Set Network Upgrade BlockNumber and Version. --- common/constants.go | 18 +++++++++--------- params/version.go | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/common/constants.go b/common/constants.go index 90fd474c9b..fdbbdfc742 100644 --- a/common/constants.go +++ b/common/constants.go @@ -36,14 +36,14 @@ var TIPSigning = big.NewInt(3000000) var TIPRandomize = big.NewInt(3464000) var TIPIncreaseMasternodes = big.NewInt(5000000) // Upgrade MN Count at Block. -var TIPNoHalvingMNReward = big.NewInt(38888888) // hardfork no halving masternodes reward -var BlackListHFNumber = uint64(38888888) -var TIPXDCX = big.NewInt(38888888) -var TIPXDCXLending = big.NewInt(38888888) -var TIPXDCXCancellationFee = big.NewInt(38888888) -var TIPXDCXCancellationFeeTestnet = big.NewInt(38888888) +var TIPNoHalvingMNReward = big.NewInt(38383838) // hardfork no halving masternodes reward +var BlackListHFNumber = uint64(38383838) +var TIPXDCX = big.NewInt(38383838) +var TIPXDCXLending = big.NewInt(38383838) +var TIPXDCXCancellationFee = big.NewInt(38383838) +var TIPXDCXCancellationFeeTestnet = big.NewInt(38383838) -var TIPXDCXTestnet = big.NewInt(38888888) +var TIPXDCXTestnet = big.NewInt(38383838) var IsTestnet bool = false var StoreRewardFolder string var RollbackHash Hash @@ -71,8 +71,8 @@ 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(38888888) -var TIPTRC21FeeTestnet = big.NewInt(38888888) +var TIPTRC21Fee = big.NewInt(38383838) +var TIPTRC21FeeTestnet = big.NewInt(38383838) var LimitTimeFinality = uint64(30) // limit in 30 block var IgnoreSignerCheckBlockArray = map[uint64]bool{ diff --git a/params/version.go b/params/version.go index 871defc027..c8d19d47bf 100644 --- a/params/version.go +++ b/params/version.go @@ -23,8 +23,8 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 2 // Patch version component of the current release - VersionMeta = "unstable" // Version metadata to append to the version string + VersionPatch = 3 // Patch version component of the current release + VersionMeta = "stable" // Version metadata to append to the version string ) // Version holds the textual version string.