diff options
author | Wei-Ning Huang <w@cobinhood.com> | 2018-10-12 13:54:32 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-03-12 12:19:09 +0800 |
commit | cb49d3ced400076fb5d58b98c5e33edece2aa2d4 (patch) | |
tree | a53df3d3af9434e658dbb40da635936ea5538dea /core | |
parent | 99c57e329cdc2d4c75305d6df8463f77c71e608d (diff) | |
download | dexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.tar.gz dexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.tar.zst dexon-cb49d3ced400076fb5d58b98c5e33edece2aa2d4.zip |
dex: governance: implement governance interface
Diffstat (limited to 'core')
-rw-r--r-- | core/genesis.go | 5 | ||||
-rw-r--r-- | core/vm/governance.go | 29 |
2 files changed, 23 insertions, 11 deletions
diff --git a/core/genesis.go b/core/genesis.go index f7e3f7a12..1c95e9c12 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -237,10 +237,7 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { db = ethdb.NewMemDatabase() } statedb, _ := state.New(common.Hash{}, state.NewDatabase(db)) - govStateHelper := vm.GovernanceStateHelper{ - Address: vm.GovernanceContractAddress, - StateDB: statedb, - } + govStateHelper := vm.GovernanceStateHelper{statedb} for addr, account := range g.Alloc { statedb.AddBalance(addr, new(big.Int).Sub(account.Balance, account.Staked)) statedb.SetCode(addr, account.Code) diff --git a/core/vm/governance.go b/core/vm/governance.go index a84fc9646..d35fd54e4 100644 --- a/core/vm/governance.go +++ b/core/vm/governance.go @@ -776,20 +776,19 @@ const ( // State manipulation helper fro the governance contract. type GovernanceStateHelper struct { - Address common.Address StateDB StateDB } func (s *GovernanceStateHelper) getState(loc common.Hash) common.Hash { - return s.StateDB.GetState(s.Address, loc) + return s.StateDB.GetState(GovernanceContractAddress, loc) } func (s *GovernanceStateHelper) setState(loc common.Hash, val common.Hash) { - s.StateDB.SetState(s.Address, loc, val) + s.StateDB.SetState(GovernanceContractAddress, loc, val) } func (s *GovernanceStateHelper) getStateBigInt(loc *big.Int) *big.Int { - res := s.StateDB.GetState(s.Address, common.BigToHash(loc)) + res := s.StateDB.GetState(GovernanceContractAddress, common.BigToHash(loc)) return new(big.Int).SetBytes(res.Bytes()) } @@ -1115,6 +1114,22 @@ func (s *GovernanceStateHelper) maxBlockInterval() *big.Int { return s.getStateBigInt(big.NewInt(maxBlockIntervalLoc)) } +// GetConfiguration returns the current configuration. +func (s *GovernanceStateHelper) GetConfiguration() *params.DexconConfig { + return ¶ms.DexconConfig{ + NumChains: uint32(s.getStateBigInt(big.NewInt(numChainsLoc)).Uint64()), + LambdaBA: s.getStateBigInt(big.NewInt(lambdaBALoc)).Uint64(), + LambdaDKG: s.getStateBigInt(big.NewInt(lambdaDKGLoc)).Uint64(), + K: int(s.getStateBigInt(big.NewInt(kLoc)).Uint64()), + PhiRatio: float32(s.getStateBigInt(big.NewInt(phiRatioLoc)).Uint64()) / 1000000.0, + NotarySetSize: uint32(s.getStateBigInt(big.NewInt(notarySetSizeLoc)).Uint64()), + DKGSetSize: uint32(s.getStateBigInt(big.NewInt(dkgSetSizeLoc)).Uint64()), + RoundInterval: s.getStateBigInt(big.NewInt(roundIntervalLoc)).Uint64(), + MinBlockInterval: s.getStateBigInt(big.NewInt(minBlockIntervalLoc)).Uint64(), + MaxBlockInterval: s.getStateBigInt(big.NewInt(maxBlockIntervalLoc)).Uint64(), + } +} + // UpdateConfiguration updates system configuration. func (s *GovernanceStateHelper) UpdateConfiguration(cfg *params.DexconConfig) { s.setStateBigInt(big.NewInt(numChainsLoc), big.NewInt(int64(cfg.NumChains))) @@ -1132,7 +1147,7 @@ func (s *GovernanceStateHelper) UpdateConfiguration(cfg *params.DexconConfig) { // event ConfigurationChanged(); func (s *GovernanceStateHelper) emitConfigurationChangedEvent() { s.StateDB.AddLog(&types.Log{ - Address: s.Address, + Address: GovernanceContractAddress, Topics: []common.Hash{events["ConfigurationChanged"].Id()}, Data: []byte{}, }) @@ -1141,7 +1156,7 @@ func (s *GovernanceStateHelper) emitConfigurationChangedEvent() { // event CRSProposed(uint256 round, bytes32 crs); func (s *GovernanceStateHelper) emitCRSProposed(round *big.Int, crs common.Hash) { s.StateDB.AddLog(&types.Log{ - Address: s.Address, + Address: GovernanceContractAddress, Topics: []common.Hash{events["CRSProposed"].Id(), common.BigToHash(round)}, Data: crs.Bytes(), }) @@ -1157,7 +1172,7 @@ type GovernanceContract struct { func newGovernanceContract(evm *EVM, contract *Contract) *GovernanceContract { return &GovernanceContract{ evm: evm, - state: GovernanceStateHelper{contract.Address(), evm.StateDB}, + state: GovernanceStateHelper{evm.StateDB}, contract: contract, } } |