855 lines
32 KiB
Go
855 lines
32 KiB
Go
package systemcontracts
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"fmt"
|
|
"math/big"
|
|
"strings"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/core/state"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/bruno"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/euler"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/feynman"
|
|
feynmanFix "github.com/ethereum/go-ethereum/core/systemcontracts/feynman_fix"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/gibbs"
|
|
haberFix "github.com/ethereum/go-ethereum/core/systemcontracts/haber_fix"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/kepler"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/luban"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/mirror"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/moran"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/niels"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/planck"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/plato"
|
|
"github.com/ethereum/go-ethereum/core/systemcontracts/ramanujan"
|
|
"github.com/ethereum/go-ethereum/log"
|
|
"github.com/ethereum/go-ethereum/params"
|
|
)
|
|
|
|
type UpgradeConfig struct {
|
|
BeforeUpgrade upgradeHook
|
|
AfterUpgrade upgradeHook
|
|
ContractAddr common.Address
|
|
CommitUrl string
|
|
Code string
|
|
}
|
|
|
|
type Upgrade struct {
|
|
UpgradeName string
|
|
Configs []*UpgradeConfig
|
|
}
|
|
|
|
type upgradeHook func(blockNumber *big.Int, contractAddr common.Address, statedb *state.StateDB) error
|
|
|
|
const (
|
|
mainNet = "Mainnet"
|
|
chapelNet = "Chapel"
|
|
rialtoNet = "Rialto"
|
|
defaultNet = "Default"
|
|
)
|
|
|
|
var (
|
|
GenesisHash common.Hash
|
|
// upgrade config
|
|
ramanujanUpgrade = make(map[string]*Upgrade)
|
|
|
|
nielsUpgrade = make(map[string]*Upgrade)
|
|
|
|
mirrorUpgrade = make(map[string]*Upgrade)
|
|
|
|
brunoUpgrade = make(map[string]*Upgrade)
|
|
|
|
eulerUpgrade = make(map[string]*Upgrade)
|
|
|
|
gibbsUpgrade = make(map[string]*Upgrade)
|
|
|
|
moranUpgrade = make(map[string]*Upgrade)
|
|
|
|
planckUpgrade = make(map[string]*Upgrade)
|
|
|
|
lubanUpgrade = make(map[string]*Upgrade)
|
|
|
|
platoUpgrade = make(map[string]*Upgrade)
|
|
|
|
keplerUpgrade = make(map[string]*Upgrade)
|
|
|
|
feynmanUpgrade = make(map[string]*Upgrade)
|
|
|
|
feynmanFixUpgrade = make(map[string]*Upgrade)
|
|
|
|
haberFixUpgrade = make(map[string]*Upgrade)
|
|
)
|
|
|
|
func init() {
|
|
// For contract upgrades, the following information is from `bsc-genesis-contract`, to be specifically,
|
|
// 1) `CommitUrl` is the specific git commit, based on which the byte code is compiled from;
|
|
// 2) `Code` is the byte code of the contract, which is generated by compiling `bsc-genesis-contract`.
|
|
// You can refer to `https://github.com/bnb-chain/bsc-genesis-contract` to compile the smart contracts and do the verification.
|
|
|
|
ramanujanUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "ramanujan",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelSystemRewardContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(LightClientContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelLightClientContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerIncentivizeContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelRelayerIncentivizeContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelGovHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenManagerContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelTokenManagerContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: ramanujan.ChapelCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
nielsUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "niels",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelSystemRewardContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(LightClientContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelLightClientContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerIncentivizeContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelRelayerIncentivizeContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelGovHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenManagerContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelTokenManagerContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/823b953232a344ba3c32d6690e70a245477e5760",
|
|
Code: niels.ChapelCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
mirrorUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "mirror",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenManagerContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.MainnetTokenManagerContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.MainnetTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerIncentivizeContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.MainnetRelayerIncentivizeContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
mirrorUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "mirror",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenManagerContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.ChapelTokenManagerContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerIncentivizeContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/af4f3993303213052222f55c721e661862d19638",
|
|
Code: mirror.ChapelRelayerIncentivizeContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
brunoUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "bruno",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ce622fef469d84ee418fa6181f3ac962412a5f4f",
|
|
Code: bruno.MainnetValidatorContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
brunoUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "bruno",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/ce622fef469d84ee418fa6181f3ac962412a5f4f",
|
|
Code: bruno.ChapelValidatorContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
eulerUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "euler",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/db8bb560ac5a1265c685b719c7e976dced162310",
|
|
Code: euler.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/db8bb560ac5a1265c685b719c7e976dced162310",
|
|
Code: euler.MainnetSlashContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
eulerUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "euler",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/db8bb560ac5a1265c685b719c7e976dced162310",
|
|
Code: euler.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/db8bb560ac5a1265c685b719c7e976dced162310",
|
|
Code: euler.ChapelSlashContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
gibbsUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "gibbs",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/8cfa94e657670d60ac1ff0563cddcf4664f77227",
|
|
Code: gibbs.MainnetTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakingContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/8cfa94e657670d60ac1ff0563cddcf4664f77227",
|
|
Code: gibbs.MainnetStakingContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
gibbsUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "gibbs",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d45b31c12b2c04757284717f4351cb44e81a3a7",
|
|
Code: gibbs.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakingContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d45b31c12b2c04757284717f4351cb44e81a3a7",
|
|
Code: gibbs.ChapelStakingContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
moranUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "moran",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.MainnetRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(LightClientContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.MainnetLightClientContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.MainnetCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
moranUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "moran",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.ChapelRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(LightClientContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.ChapelLightClientContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/c184a00160b6a2d884b4d6efebe1358a047e9e57",
|
|
Code: moran.ChapelCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
planckUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "planck",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.MainnetSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.MainnetTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.MainnetCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
planckUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "planck",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.ChapelCrossChainContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakingContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/78e13b1d3a5a1b08c9208af94a9b14fc1efda213",
|
|
Code: planck.ChapelStakingContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
lubanUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "luban",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.MainnetSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.MainnetSystemRewardContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.MainnetRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.MainnetCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
lubanUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "luban",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.ChapelSystemRewardContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(RelayerHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.ChapelRelayerHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b144718e94d7a1ebb24a7103202300f08826f369",
|
|
Code: luban.ChapelCrossChainContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
platoUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "plato",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/0f352c4623898d92664a46cbfc26c52b79aad838",
|
|
Code: plato.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/0f352c4623898d92664a46cbfc26c52b79aad838",
|
|
Code: plato.MainnetSlashContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
platoUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "plato",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/0f352c4623898d92664a46cbfc26c52b79aad838",
|
|
Code: plato.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/0f352c4623898d92664a46cbfc26c52b79aad838",
|
|
Code: plato.ChapelSlashContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
keplerUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "kepler",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.MainnetSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.MainnetSystemRewardContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
keplerUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "kepler",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SystemRewardContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b3a5c1fa8882c0e546dc5ba913ce4db77ec9befe",
|
|
Code: kepler.ChapelSystemRewardContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
feynmanUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "feynman",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetGovHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetCrossChainContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakingContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetStakingContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakeHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetStakeHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakeCreditContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetStakeCreditContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovernorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetGovernorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovTokenContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetGovTokenContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TimelockContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetTimelockContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenRecoverPortalContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2dbebb57a0d436d6a30b78c1f123395035249035",
|
|
Code: feynman.MainnetTokenRecoverPortalContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
feynmanUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "feynman",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelSlashContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelTokenHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelGovHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(CrossChainContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelCrossChainContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakingContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelStakingContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakeHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelStakeHubContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakeCreditContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.MainnetStakeCreditContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovernorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelGovernorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(GovTokenContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.MainnetGovTokenContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TimelockContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelTimelockContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(TokenRecoverPortalContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/9d09d0a3d6332460a810188261ec8195e05aa218",
|
|
Code: feynman.ChapelTokenRecoverPortalContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
// This upgrade is to fix an error on testnet only. So the upgrade config of mainnet is empty.
|
|
feynmanFixUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "feynmanFix",
|
|
Configs: []*UpgradeConfig{},
|
|
}
|
|
|
|
feynmanFixUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "feynmanFix",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2d6372ddba77902ef01e45887a425938376d5a5c",
|
|
Code: feynmanFix.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(StakeHubContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/2d6372ddba77902ef01e45887a425938376d5a5c",
|
|
Code: feynmanFix.ChapelStakeHubContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
haberFixUpgrade[mainNet] = &Upgrade{
|
|
UpgradeName: "haberFix",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b",
|
|
Code: haberFix.MainnetValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b",
|
|
Code: haberFix.MainnetSlashContract,
|
|
},
|
|
},
|
|
}
|
|
|
|
haberFixUpgrade[chapelNet] = &Upgrade{
|
|
UpgradeName: "haberFix",
|
|
Configs: []*UpgradeConfig{
|
|
{
|
|
ContractAddr: common.HexToAddress(ValidatorContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b",
|
|
Code: haberFix.ChapelValidatorContract,
|
|
},
|
|
{
|
|
ContractAddr: common.HexToAddress(SlashContract),
|
|
CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/b743ce3f1f1e94c349b175cd6593bc263463b33b",
|
|
Code: haberFix.ChapelSlashContract,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb *state.StateDB) {
|
|
if config == nil || blockNumber == nil || statedb == nil {
|
|
return
|
|
}
|
|
var network string
|
|
switch GenesisHash {
|
|
/* Add mainnet genesis hash */
|
|
case params.BSCGenesisHash:
|
|
network = mainNet
|
|
case params.ChapelGenesisHash:
|
|
network = chapelNet
|
|
case params.RialtoGenesisHash:
|
|
network = rialtoNet
|
|
default:
|
|
network = defaultNet
|
|
}
|
|
|
|
logger := log.New("system-contract-upgrade", network)
|
|
if config.IsOnRamanujan(blockNumber) {
|
|
applySystemContractUpgrade(ramanujanUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnNiels(blockNumber) {
|
|
applySystemContractUpgrade(nielsUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnMirrorSync(blockNumber) {
|
|
applySystemContractUpgrade(mirrorUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnBruno(blockNumber) {
|
|
applySystemContractUpgrade(brunoUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnEuler(blockNumber) {
|
|
applySystemContractUpgrade(eulerUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnGibbs(blockNumber) {
|
|
applySystemContractUpgrade(gibbsUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnMoran(blockNumber) {
|
|
applySystemContractUpgrade(moranUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnPlanck(blockNumber) {
|
|
applySystemContractUpgrade(planckUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnLuban(blockNumber) {
|
|
applySystemContractUpgrade(lubanUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnPlato(blockNumber) {
|
|
applySystemContractUpgrade(platoUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnShanghai(blockNumber, lastBlockTime, blockTime) {
|
|
logger.Info("Empty upgrade config for shanghai", "height", blockNumber.String())
|
|
}
|
|
|
|
if config.IsOnKepler(blockNumber, lastBlockTime, blockTime) {
|
|
applySystemContractUpgrade(keplerUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnFeynman(blockNumber, lastBlockTime, blockTime) {
|
|
applySystemContractUpgrade(feynmanUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnFeynmanFix(blockNumber, lastBlockTime, blockTime) {
|
|
applySystemContractUpgrade(feynmanFixUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
if config.IsOnHaberFix(blockNumber, lastBlockTime, blockTime) {
|
|
applySystemContractUpgrade(haberFixUpgrade[network], blockNumber, statedb, logger)
|
|
}
|
|
|
|
/*
|
|
apply other upgrades
|
|
*/
|
|
}
|
|
|
|
func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb *state.StateDB, logger log.Logger) {
|
|
if upgrade == nil {
|
|
logger.Info("Empty upgrade config", "height", blockNumber.String())
|
|
return
|
|
}
|
|
|
|
logger.Info(fmt.Sprintf("Apply upgrade %s at height %d", upgrade.UpgradeName, blockNumber.Int64()))
|
|
for _, cfg := range upgrade.Configs {
|
|
logger.Info(fmt.Sprintf("Upgrade contract %s to commit %s", cfg.ContractAddr.String(), cfg.CommitUrl))
|
|
|
|
if cfg.BeforeUpgrade != nil {
|
|
err := cfg.BeforeUpgrade(blockNumber, cfg.ContractAddr, statedb)
|
|
if err != nil {
|
|
panic(fmt.Errorf("contract address: %s, execute beforeUpgrade error: %s", cfg.ContractAddr.String(), err.Error()))
|
|
}
|
|
}
|
|
|
|
newContractCode, err := hex.DecodeString(strings.TrimSpace(cfg.Code))
|
|
if err != nil {
|
|
panic(fmt.Errorf("failed to decode new contract code: %s", err.Error()))
|
|
}
|
|
statedb.SetCode(cfg.ContractAddr, newContractCode)
|
|
|
|
if cfg.AfterUpgrade != nil {
|
|
err := cfg.AfterUpgrade(blockNumber, cfg.ContractAddr, statedb)
|
|
if err != nil {
|
|
panic(fmt.Errorf("contract address: %s, execute afterUpgrade error: %s", cfg.ContractAddr.String(), err.Error()))
|
|
}
|
|
}
|
|
}
|
|
}
|