diff options
author | Wei-Ning Huang <aitjcize@gmail.com> | 2018-11-09 14:16:06 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-03-12 12:19:09 +0800 |
commit | 215235cb1d3544afc2ad046fcf99f28a1050b085 (patch) | |
tree | bcc249795c85aed53d3e7901ec9c4119363c3b77 /core | |
parent | f28fece79933816d1eed57b758d211760639cb58 (diff) | |
download | dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar.gz dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar.bz2 dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar.lz dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar.xz dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.tar.zst dexon-215235cb1d3544afc2ad046fcf99f28a1050b085.zip |
core: genesis: make ToBlock() compatible with legacy ethereum code (#3)
Make ToBlock() compatible with legacy ethereum code so we can run tests
normally.
Diffstat (limited to 'core')
-rw-r--r-- | core/genesis.go | 64 |
1 files changed, 36 insertions, 28 deletions
diff --git a/core/genesis.go b/core/genesis.go index 552de19f3..9ba42bacf 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -266,48 +266,56 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { totalStaked := big.NewInt(0) for addr, account := range g.Alloc { - if account.Staked == nil { + // For DEXON consensus genesis staking. + if g.Config != nil && g.Config.Dexcon != nil { account.Staked = big.NewInt(0) + statedb.AddBalance(addr, new(big.Int).Sub(account.Balance, account.Staked)) + totalStaked = new(big.Int).Add(totalStaked, account.Staked) + } else { + statedb.AddBalance(addr, account.Balance) } - statedb.AddBalance(addr, new(big.Int).Sub(account.Balance, account.Staked)) + statedb.SetCode(addr, account.Code) statedb.SetNonce(addr, account.Nonce) for key, value := range account.Storage { statedb.SetState(addr, key, value) } - totalStaked = new(big.Int).Add(totalStaked, account.Staked) } - // Move staked balance to governance contract. - statedb.AddBalance(vm.GovernanceContractAddress, totalStaked) - - // Stake in governance state. - keys := AllocKey{} - for addr := range g.Alloc { - keys = append(keys, addr) - } - sort.Sort(keys) + // For DEXON consensus genesis staking. + if g.Config != nil && g.Config.Dexcon != nil { + // Move staked balance to governance contract. + statedb.AddBalance(vm.GovernanceContractAddress, totalStaked) - for _, addr := range keys { - account := g.Alloc[addr] - if account.Staked == nil { - account.Staked = big.NewInt(0) + // Stake in governance state. + keys := AllocKey{} + for addr := range g.Alloc { + keys = append(keys, addr) } - if account.Staked.Cmp(big.NewInt(0)) > 0 { - govStateHelper.Stake(addr, account.PublicKey, account.Staked, - account.NodeInfo.Name, account.NodeInfo.Email, - account.NodeInfo.Location, account.NodeInfo.Url) + sort.Sort(keys) + + for _, addr := range keys { + account := g.Alloc[addr] + if account.Staked == nil { + account.Staked = big.NewInt(0) + } + if account.Staked.Cmp(big.NewInt(0)) > 0 { + govStateHelper.Stake(addr, account.PublicKey, account.Staked, + account.NodeInfo.Name, account.NodeInfo.Email, + account.NodeInfo.Location, account.NodeInfo.Url) + } } - } - // Genesis CRS. - crs := crypto.Keccak256([]byte(g.Config.Dexcon.GenesisCRSText)) - govStateHelper.PushCRS(common.BytesToHash(crs)) - // Owner. - govStateHelper.SetOwner(g.Config.Dexcon.Owner) + // Genesis CRS. + crs := crypto.Keccak256([]byte(g.Config.Dexcon.GenesisCRSText)) + govStateHelper.PushCRS(common.BytesToHash(crs)) - // Governance configuration. - govStateHelper.UpdateConfiguration(g.Config.Dexcon) + // Owner. + govStateHelper.SetOwner(g.Config.Dexcon.Owner) + + // Governance configuration. + govStateHelper.UpdateConfiguration(g.Config.Dexcon) + } root := statedb.IntermediateRoot(false) head := &types.Header{ |