good morning!!!!

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

Serializing block

parent d8c0b0c8
No related branches found
No related tags found
No related merge requests found
......@@ -2,16 +2,29 @@ package main
import (
_"fmt"
"time"
)
type Block struct {
transactions []*Transaction
RlpSerializer
number uint32
prevHash string
uncles []*Block
coinbase string
// state xxx
difficulty int
time time.Time
nonce int
transactions []*Transaction
}
func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
block := &Block{
// Slice of transactions to include in this block
transactions: transactions,
time: time.Now(),
}
return block
......@@ -19,3 +32,33 @@ func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
func (block *Block) Update() {
}
func (block *Block) Hash() string {
return Sha256Hex(block.MarshalRlp())
}
func (block *Block) MarshalRlp() []byte {
// Encoding method requires []interface{} type. It's actual a slice of strings
encTx := make([]string, len(block.transactions))
for i, tx := range block.transactions {
encTx[i] = string(tx.MarshalRlp())
}
enc := RlpEncode([]interface{}{
block.number,
block.prevHash,
// Sha of uncles
block.coinbase,
// root state
Sha256Bin([]byte(RlpEncode(encTx))),
block.difficulty,
block.time,
block.nonce,
// extra?
})
return []byte(enc)
}
func (block *Block) UnmarshalRlp(data []byte) {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment