diff --git a/core/genesis.go b/core/genesis.go index 78c7a353a5..f675be53fb 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -23,13 +23,13 @@ var EmptyShaList = crypto.Sha3(ethutil.Encode([]interface{}{})) var EmptyListRoot = crypto.Sha3(ethutil.Encode("")) func GenesisBlock(db ethutil.Database) *types.Block { - genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, big.NewInt(131072), 42, "") + genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, big.NewInt(2048), 42, "") genesis.Header().Number = ethutil.Big0 genesis.Header().GasLimit = big.NewInt(1000000) genesis.Header().GasUsed = ethutil.Big0 genesis.Header().Time = 0 - genesis.Header().MixDigest = make([]byte, 32) genesis.Header().SeedHash = make([]byte, 32) + genesis.Header().MixDigest = make([]byte, 32) genesis.Td = ethutil.Big0 @@ -59,6 +59,10 @@ func GenesisBlock(db ethutil.Database) *types.Block { } var genesisData = []byte(`{ + "0000000000000000000000000000000000000001": {"balance": "1"}, + "0000000000000000000000000000000000000002": {"balance": "1"}, + "0000000000000000000000000000000000000003": {"balance": "1"}, + "0000000000000000000000000000000000000004": {"balance": "1"}, "dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, "e4157b34ea9615cfbde6b4fda419828124b70c78": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, "b9c015918bdaba24b4ff057a92a3873d6eb201be": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, @@ -66,9 +70,5 @@ var genesisData = []byte(`{ "cd2a3d9f938e13cd947ec05abc7fe734df8dd826": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, "2ef47100e0787b915105fd5e3f4ff6752079d5cb": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, "e6716f9544a56c530d868e4bfbacb172315bdead": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, - "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": {"balance": "1606938044258990275541962092341162602522202993782792835301376"}, - "b0afc46d9ce366d06ab4952ca27db1d9557ae9fd": {"balance": "154162184000000000000000"}, - "f6b1e9dc460d4d62cc22ec5f987d726929c0f9f0": {"balance": "102774789000000000000000"}, - "cc45122d8b7fa0b1eaa6b29e0fb561422a9239d0": {"balance": "51387394000000000000000"}, - "b7576e9d314df41ec5506494293afb1bd5d3f65d": {"balance": "69423399000000000000000"} + "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": {"balance": "1606938044258990275541962092341162602522202993782792835301376"} }`) diff --git a/core/types/block.go b/core/types/block.go index 358d0bc2d7..18a21e8c6c 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -2,6 +2,7 @@ package types import ( "bytes" + "encoding/binary" "fmt" "math/big" "sort" @@ -40,7 +41,7 @@ type Header struct { // Extra data Extra string // Nonce - Nonce uint64 + Nonce []byte // Mix digest for quick checking to prevent DOS MixDigest ethutil.Bytes // SeedHash used for light client verification @@ -63,7 +64,7 @@ func (self *Header) rlpData(withNonce bool) []interface{} { self.Time, self.Extra} if withNonce { - fields = append(fields, self.Nonce, self.MixDigest, self.SeedHash) + fields = append(fields, self.SeedHash, self.MixDigest, self.Nonce) } return fields @@ -100,18 +101,23 @@ func NewBlock(parentHash []byte, coinbase []byte, root []byte, difficulty *big.I ParentHash: parentHash, Coinbase: coinbase, Difficulty: difficulty, - Nonce: nonce, Time: uint64(time.Now().Unix()), Extra: extra, GasUsed: new(big.Int), GasLimit: new(big.Int), } + header.setNonce(nonce) block := &Block{header: header, Reward: new(big.Int)} return block } +func (self *Header) setNonce(nonce uint64) { + self.Nonce = make([]byte, 8) + binary.BigEndian.PutUint64(self.Nonce, nonce) +} + func NewBlockWithHeader(header *Header) *Block { return &Block{header: header} } @@ -191,11 +197,17 @@ func (self *Block) RlpDataForStorage() interface{} { } // Header accessors (add as you need them) -func (self *Block) Number() *big.Int { return self.header.Number } -func (self *Block) NumberU64() uint64 { return self.header.Number.Uint64() } -func (self *Block) MixDigest() []byte { return self.header.MixDigest } -func (self *Block) SeedHash() []byte { return self.header.SeedHash } -func (self *Block) Nonce() uint64 { return self.header.Nonce } +func (self *Block) Number() *big.Int { return self.header.Number } +func (self *Block) NumberU64() uint64 { return self.header.Number.Uint64() } +func (self *Block) MixDigest() []byte { return self.header.MixDigest } +func (self *Block) SeedHash() []byte { return self.header.SeedHash } +func (self *Block) Nonce() uint64 { + return binary.BigEndian.Uint64(self.header.Nonce) +} +func (self *Block) SetNonce(nonce uint64) { + self.header.setNonce(nonce) +} + func (self *Block) Bloom() []byte { return self.header.Bloom } func (self *Block) Coinbase() []byte { return self.header.Coinbase } func (self *Block) Time() int64 { return int64(self.header.Time) } @@ -267,11 +279,10 @@ func (self *Header) String() string { GasUsed: %v Time: %v Extra: %v - Nonce: %d - MixDigest: %x SeedHash: %x - -`, self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra, self.Nonce, self.MixDigest, self.SeedHash) + MixDigest: %x + Nonce: %x`, + self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra, self.SeedHash, self.MixDigest, self.Nonce) } type Blocks []*Block diff --git a/miner/worker.go b/miner/worker.go index 8904c99730..38fc81ea5f 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -151,7 +151,7 @@ func (self *worker) wait() { // Someone Successfully Mined! block := self.current.block if block.Number().Uint64() == work.Number && block.Nonce() == 0 { - self.current.block.Header().Nonce = work.Nonce + self.current.block.SetNonce(work.Nonce) self.current.block.Header().MixDigest = work.MixDigest self.current.block.Header().SeedHash = work.SeedHash