From c4e7e5e338e57995a9d709129d8d5c22863432c0 Mon Sep 17 00:00:00 2001 From: Wei-Ning Huang Date: Fri, 9 Nov 2018 14:16:06 +0800 Subject: core: genesis: make ToBlock() compatible with legacy ethereum code (#3) Make ToBlock() compatible with legacy ethereum code so we can run tests normally. --- core/genesis.go | 64 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/core/genesis.go b/core/genesis.go index 38b8c360b..b444ea4fe 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{ -- cgit v1.2.3