Sfoglia il codice sorgente

types: block json unmarshal method added

obscuren 10 anni fa
parent
commit
b26f5e0bb7
3 ha cambiato i file con 30 aggiunte e 6 eliminazioni
  1. 4 4
      common/big.go
  2. 2 2
      core/genesis.go
  3. 24 0
      core/types/block.go

+ 4 - 4
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)

+ 2 - 2
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"},

+ 24 - 0
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)