浏览代码

Use new rlp (TODO requires some refactoring)

obscuren 10 年之前
父节点
当前提交
2c454863f2
共有 1 个文件被更改,包括 23 次插入2 次删除
  1. 23 2
      state/state_object.go

+ 23 - 2
state/state_object.go

@@ -1,11 +1,13 @@
 package state
 
 import (
+	"bytes"
 	"fmt"
 	"math/big"
 
 	"github.com/ethereum/go-ethereum/crypto"
 	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/rlp"
 	"github.com/ethereum/go-ethereum/trie"
 )
 
@@ -71,8 +73,28 @@ func NewStateObject(addr []byte, db ethutil.Database) *StateObject {
 }
 
 func NewStateObjectFromBytes(address, data []byte, db ethutil.Database) *StateObject {
+	// TODO clean me up
+	var extobject struct {
+		Nonce    uint64
+		Balance  *big.Int
+		Root     []byte
+		CodeHash []byte
+	}
+	err := rlp.Decode(bytes.NewReader(data), &extobject)
+	if err != nil {
+		fmt.Println(err)
+		return nil
+	}
+
 	object := &StateObject{address: address, db: db}
-	object.RlpDecode(data)
+	//object.RlpDecode(data)
+	object.Nonce = extobject.Nonce
+	object.balance = extobject.Balance
+	object.codeHash = extobject.CodeHash
+	object.State = New(extobject.Root, db)
+	object.storage = make(map[string]*ethutil.Value)
+	object.gasPool = new(big.Int)
+	object.Code, _ = db.Get(extobject.CodeHash)
 
 	return object
 }
@@ -271,7 +293,6 @@ func (c *StateObject) CodeHash() ethutil.Bytes {
 
 func (c *StateObject) RlpDecode(data []byte) {
 	decoder := ethutil.NewValueFromBytes(data)
-
 	c.Nonce = decoder.Get(0).Uint()
 	c.balance = decoder.Get(1).BigInt()
 	c.State = New(decoder.Get(2).Bytes(), c.db) //New(trie.New(ethutil.Config.Db, decoder.Get(2).Interface()))