aboutsummaryrefslogtreecommitdiffstats
path: root/block.go
diff options
context:
space:
mode:
authorobscuren <obscuren@obscura.com>2013-12-29 08:36:59 +0800
committerobscuren <obscuren@obscura.com>2013-12-29 08:36:59 +0800
commita1c5d5acac542ab877aeec7814338e7638d55dbf (patch)
treec194057a1662326dc17424b09c6c986c9cfd4669 /block.go
parent5198b7b9ebdfe1ef99627dadb07b87e18a039972 (diff)
downloadgo-tangerine-a1c5d5acac542ab877aeec7814338e7638d55dbf.tar.gz
go-tangerine-a1c5d5acac542ab877aeec7814338e7638d55dbf.tar.zst
go-tangerine-a1c5d5acac542ab877aeec7814338e7638d55dbf.zip
Comments
Diffstat (limited to 'block.go')
-rw-r--r--block.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/block.go b/block.go
index 5c089137d..8c4d263fa 100644
--- a/block.go
+++ b/block.go
@@ -7,17 +7,23 @@ import (
)
type Block struct {
+ // The number of this block
number uint32
+ // Hash to the previous block
prevHash string
+ // Uncles of this block
uncles []*Block
coinbase string
// state xxx
difficulty uint32
+ // Creation time
time time.Time
nonce uint32
+ // List of transactions and/or contracts
transactions []*Transaction
}
+// Creates a new block. This is currently for testing
func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
block := &Block{
// Slice of transactions to include in this block
@@ -37,14 +43,16 @@ func NewBlock(/* TODO use raw data */transactions []*Transaction) *Block {
func (block *Block) Update() {
}
+// Returns a hash of the block
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
+ // Marshal the transactions of this block
encTx := make([]string, len(block.transactions))
for i, tx := range block.transactions {
+ // Cast it to a string (safe)
encTx[i] = string(tx.MarshalRlp())
}
@@ -64,14 +72,16 @@ func (block *Block) MarshalRlp() []byte {
// extra?
}
- encoded := Encode([]interface{}{header, encTx})
-
- return encoded
+ // Encode a slice interface which contains the header and the list of transactions.
+ return Encode([]interface{}{header, encTx})
}
func (block *Block) UnmarshalRlp(data []byte) {
t, _ := Decode(data,0)
+
+ // interface slice assertion
if slice, ok := t.([]interface{}); ok {
+ // interface slice assertion
if header, ok := slice[0].([]interface{}); ok {
if number, ok := header[0].(uint8); ok {
block.number = uint32(number)
@@ -109,11 +119,15 @@ func (block *Block) UnmarshalRlp(data []byte) {
}
if txSlice, ok := slice[1].([]interface{}); ok {
+ // Create transaction slice equal to decoded tx interface slice
block.transactions = make([]*Transaction, len(txSlice))
+ // Unmarshal transactions
for i, tx := range txSlice {
if t, ok := tx.([]byte); ok {
tx := &Transaction{}
+ // Use the unmarshaled data to unmarshal the transaction
+ // t is still decoded.
tx.UnmarshalRlp(t)
block.transactions[i] = tx