From b26f5e0bb7e8922c80bc3513d1ebce2c99a081f5 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 31 May 2015 15:53:17 +0200 Subject: [PATCH] types: block json unmarshal method added --- common/big.go | 8 ++++---- core/genesis.go | 4 ++-- core/types/block.go | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/common/big.go b/common/big.go index 3257b179d..05d56daba 100644 --- a/common/big.go +++ b/common/big.go @@ -36,16 +36,16 @@ func Big(num string) *big.Int { return n } -// BigD +// Bytes2Big // -// Shortcut for new(big.Int).SetBytes(...) -func Bytes2Big(data []byte) *big.Int { +func BytesToBig(data []byte) *big.Int { n := new(big.Int) n.SetBytes(data) return n } -func BigD(data []byte) *big.Int { return Bytes2Big(data) } +func Bytes2Big(data []byte) *big.Int { return BytesToBig(data) } +func BigD(data []byte) *big.Int { return BytesToBig(data) } func String2Big(num string) *big.Int { n := new(big.Int) diff --git a/core/genesis.go b/core/genesis.go index e72834822..a9b7339f3 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -36,7 +36,7 @@ func GenesisBlock(db common.Database) *types.Block { Balance string Code string } - err := json.Unmarshal(GenesisData, &accounts) + err := json.Unmarshal(GenesisAccounts, &accounts) if err != nil { fmt.Println("enable to decode genesis json data:", err) os.Exit(1) @@ -57,7 +57,7 @@ func GenesisBlock(db common.Database) *types.Block { return genesis } -var GenesisData = []byte(`{ +var GenesisAccounts = []byte(`{ "0000000000000000000000000000000000000001": {"balance": "1"}, "0000000000000000000000000000000000000002": {"balance": "1"}, "0000000000000000000000000000000000000003": {"balance": "1"}, diff --git a/core/types/block.go b/core/types/block.go index c93452fa7..d7963981e 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -1,7 +1,9 @@ package types import ( + "bytes" "encoding/binary" + "encoding/json" "fmt" "io" "math/big" @@ -80,6 +82,28 @@ func (self *Header) RlpData() interface{} { return self.rlpData(true) } +func (h *Header) UnmarshalJSON(data []byte) error { + var ext struct { + ParentHash string + Coinbase string + Difficulty string + GasLimit string + Time uint64 + Extra string + } + dec := json.NewDecoder(bytes.NewReader(data)) + if err := dec.Decode(&ext); err != nil { + return err + } + + h.ParentHash = common.HexToHash(ext.ParentHash) + h.Coinbase = common.HexToAddress(ext.Coinbase) + h.Difficulty = common.String2Big(ext.Difficulty) + h.Time = ext.Time + h.Extra = []byte(ext.Extra) + return nil +} + func rlpHash(x interface{}) (h common.Hash) { hw := sha3.NewKeccak256() rlp.Encode(hw, x)