aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <obscuren@obscura.com>2013-12-30 06:53:12 +0800
committerobscuren <obscuren@obscura.com>2013-12-30 06:53:12 +0800
commit0edcbc695e3e80d2f417467905621505f9971b4f (patch)
tree2b2ca44c55893cf7060594813e212ea3c0ed2a10
parent0747aa3a3bd78cc9b99ea72cf45e4cc4bfc301f5 (diff)
downloaddexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar.gz
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar.bz2
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar.lz
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar.xz
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.tar.zst
dexon-0edcbc695e3e80d2f417467905621505f9971b4f.zip
Updated serialisation
-rw-r--r--block.go42
1 files changed, 31 insertions, 11 deletions
diff --git a/block.go b/block.go
index 8c4d263fa..9aa3c8bb5 100644
--- a/block.go
+++ b/block.go
@@ -1,7 +1,7 @@
package main
import (
- "fmt"
+ _"fmt"
"time"
_"bytes"
)
@@ -17,14 +17,24 @@ type Block struct {
// state xxx
difficulty uint32
// Creation time
- time time.Time
+ time int64
nonce uint32
// List of transactions and/or contracts
transactions []*Transaction
+
+ extra string
+}
+
+// New block takes a raw encoded string
+func NewBlock(raw []byte) *Block {
+ block := &Block{}
+ block.UnmarshalRlp(raw)
+
+ return block
}
// Creates a new block. This is currently for testing
-func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
+func CreateBlock(/* TODO use raw data */transactions []*Transaction) *Block {
block := &Block{
// Slice of transactions to include in this block
transactions: transactions,
@@ -33,8 +43,7 @@ func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
coinbase: "me",
difficulty: 10,
nonce: 0,
-
- time: time.Now(),
+ time: time.Now().Unix(),
}
return block
@@ -65,15 +74,18 @@ func (block *Block) MarshalRlp() []byte {
block.coinbase,
// root state
"",
- string(Sha256Bin([]byte(RlpEncode(encTx)))),
+ // Sha of tx
+ string(Sha256Bin([]byte(Encode(encTx)))),
block.difficulty,
- block.time.String(),
+ uint64(block.time),
block.nonce,
- // extra?
+ block.extra,
}
+ // TODO
+ uncles := []interface{}{}
// Encode a slice interface which contains the header and the list of transactions.
- return Encode([]interface{}{header, encTx})
+ return Encode([]interface{}{header, encTx, uncles})
}
func (block *Block) UnmarshalRlp(data []byte) {
@@ -109,13 +121,21 @@ func (block *Block) UnmarshalRlp(data []byte) {
block.difficulty = uint32(difficulty)
}
- if time, ok := header[7].([]byte); ok {
- fmt.Sprintf("Time is: ", string(time))
+ // It's either 8bit or 64
+ if time, ok := header[7].(uint8); ok {
+ block.time = int64(time)
+ }
+ if time, ok := header[7].(uint64); ok {
+ block.time = int64(time)
}
if nonce, ok := header[8].(uint8); ok {
block.nonce = uint32(nonce)
}
+
+ if extra, ok := header[9].([]byte); ok {
+ block.extra = string(extra)
+ }
}
if txSlice, ok := slice[1].([]interface{}); ok {