diff options
author | Wei-Ning Huang <aitjcize@gmail.com> | 2018-11-09 14:16:06 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2018-12-19 20:54:27 +0800 |
commit | 0d604d682e3642da4a06dfdce9a0215574501502 (patch) | |
tree | 0309f2acdbfa45e2bb060c3d6ecb33b4a2801f2d | |
parent | 2bc760c1e23e18bfe3807e3e4d0b9cb6c028cf89 (diff) | |
download | dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar.gz dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar.bz2 dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar.lz dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar.xz dexon-0d604d682e3642da4a06dfdce9a0215574501502.tar.zst dexon-0d604d682e3642da4a06dfdce9a0215574501502.zip |
core: genesis: make ToBlock() compatible with legacy ethereum code (#3)
Make ToBlock() compatible with legacy ethereum code so we can run tests
normally.
-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 860be7e25..e67347b1e 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{ |