good morning!!!!

Skip to content
Snippets Groups Projects
Commit 0edcbc69 authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Updated serialisation

parent 0747aa3a
Branches
Tags
No related merge requests found
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 {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment