aboutsummaryrefslogtreecommitdiffstats
path: root/consensus/dexcon
diff options
context:
space:
mode:
authorWei-Ning Huang <w@byzantine-lab.io>2019-07-25 20:41:46 +0800
committerWei-Ning Huang <w@byzantine-lab.io>2019-09-17 16:57:31 +0800
commit174f6bfcdf4e2c7fea3a071653908b477ad9a3b3 (patch)
tree7990bd656bd9cc7ef3014534ad2fee5163da3790 /consensus/dexcon
parenta9a85fa746c727063015d6e70881426ce8b3a3fb (diff)
downloadgo-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar.gz
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar.bz2
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar.lz
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar.xz
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.tar.zst
go-tangerine-174f6bfcdf4e2c7fea3a071653908b477ad9a3b3.zip
core: add GovUtil to unify governance state related access
Add GovUtil so we could use the same logic in everywhere that requires access to governance state, such as configuration and CRS.
Diffstat (limited to 'consensus/dexcon')
-rw-r--r--consensus/dexcon/dexcon.go19
-rw-r--r--consensus/dexcon/dexcon_test.go4
2 files changed, 16 insertions, 7 deletions
diff --git a/consensus/dexcon/dexcon.go b/consensus/dexcon/dexcon.go
index e47a8a8e2..8ececb469 100644
--- a/consensus/dexcon/dexcon.go
+++ b/consensus/dexcon/dexcon.go
@@ -32,7 +32,7 @@ import (
)
type GovernanceStateFetcher interface {
- GetStateForConfigAtRound(round uint64) *vm.GovernanceState
+ GetConfigState(round uint64) (*vm.GovernanceState, error)
DKGSetNodeKeyAddresses(round uint64) (map[common.Address]struct{}, error)
}
@@ -114,7 +114,10 @@ func (d *Dexcon) Prepare(chain consensus.ChainReader, header *types.Header) erro
func (d *Dexcon) inExtendedRound(header *types.Header, state *state.StateDB) bool {
gs := vm.GovernanceState{state}
- rgs := d.govStateFetcer.GetStateForConfigAtRound(header.Round)
+ rgs, err := d.govStateFetcer.GetConfigState(header.Round)
+ if err != nil {
+ panic(err)
+ }
roundEnd := gs.RoundHeight(new(big.Int).SetUint64(header.Round)).Uint64() + rgs.RoundLength().Uint64()
@@ -126,7 +129,10 @@ func (d *Dexcon) inExtendedRound(header *types.Header, state *state.StateDB) boo
}
func (d *Dexcon) calculateBlockReward(round uint64) *big.Int {
- gs := d.govStateFetcer.GetStateForConfigAtRound(round)
+ gs, err := d.govStateFetcer.GetConfigState(round)
+ if err != nil {
+ panic(err)
+ }
config := gs.Configuration()
blocksPerRound := config.RoundLength
@@ -169,7 +175,10 @@ func (d *Dexcon) Finalize(chain consensus.ChainReader, header *types.Header, sta
panic(err)
}
- gcs := d.govStateFetcer.GetStateForConfigAtRound(header.Round - 1)
+ gcs, err := d.govStateFetcer.GetConfigState(header.Round - 1)
+ if err != nil {
+ panic(err)
+ }
for addr := range addrs {
offset := gcs.NodesOffsetByNodeKeyAddress(addr)
@@ -182,7 +191,7 @@ func (d *Dexcon) Finalize(chain consensus.ChainReader, header *types.Header, sta
prevRoundHeight := gs.RoundHeight(big.NewInt(int64(header.Round - 1)))
if lastHeight.Uint64() < prevRoundHeight.Uint64() {
- log.Info("Disqualify node", "round", header.Round, "nodePubKey", hex.EncodeToString(node.PublicKey))
+ log.Debug("Disqualify node", "round", header.Round, "nodePubKey", hex.EncodeToString(node.PublicKey))
err = gs.Disqualify(node)
if err != nil {
log.Error("Failed to disqualify node", "err", err)
diff --git a/consensus/dexcon/dexcon_test.go b/consensus/dexcon/dexcon_test.go
index 09b7281ef..3478b911b 100644
--- a/consensus/dexcon/dexcon_test.go
+++ b/consensus/dexcon/dexcon_test.go
@@ -35,8 +35,8 @@ type govStateFetcher struct {
statedb *state.StateDB
}
-func (g *govStateFetcher) GetStateForConfigAtRound(_ uint64) *vm.GovernanceState {
- return &vm.GovernanceState{g.statedb}
+func (g *govStateFetcher) GetConfigState(_ uint64) (*vm.GovernanceState, error) {
+ return &vm.GovernanceState{g.statedb}, nil
}
func (g *govStateFetcher) DKGSetNodeKeyAddresses(round uint64) (map[common.Address]struct{}, error) {