updated data structures, moved NewBlock under Node functions

This commit is contained in:
arnaucube
2019-04-07 23:19:06 +02:00
parent 701731ea67
commit 16f99b279a
8 changed files with 182 additions and 58 deletions

View File

@@ -2,31 +2,28 @@ package node
import (
"crypto/ecdsa"
"time"
"github.com/arnaucube/slowlorisdb/core"
"github.com/arnaucube/slowlorisdb/db"
)
type Node struct {
PrivK *ecdsa.PrivateKey
Addr core.Address
Bc *core.Blockchain
Miner bool // indicates if the node is running as a miner
PendingTxs []core.Tx
}
func NewNode(db *db.Db, dif uint64) (*Node, error) {
privK, err := core.NewKey()
if err != nil {
return nil, err
}
func NewNode(privK *ecdsa.PrivateKey, bc *core.Blockchain, isMiner bool) (*Node, error) {
addr := core.AddressFromPrivK(privK)
bc := core.NewBlockchain(db, dif)
node := &Node{
PrivK: privK,
Addr: addr,
Bc: bc,
PrivK: privK,
Addr: addr,
Bc: bc,
Miner: isMiner,
PendingTxs: []core.Tx{},
}
return node, nil
}
@@ -44,7 +41,7 @@ func (node *Node) AddToPendingTxs(tx core.Tx) {
}
func (node *Node) BlockFromPendingTxs() (*core.Block, error) {
block := node.Bc.NewBlock(node.PendingTxs)
block := node.NewBlock(node.PendingTxs)
err := block.CalculatePoW(node.Bc.Difficulty)
if err != nil {
return nil, err
@@ -56,3 +53,18 @@ func (node *Node) BlockFromPendingTxs() (*core.Block, error) {
block.Signature = sig.Bytes()
return block, nil
}
func (node *Node) NewBlock(txs []core.Tx) *core.Block {
block := &core.Block{
Height: node.Bc.GetHeight() + 1,
PrevHash: node.Bc.LastBlock.Hash,
Txs: txs,
Miner: core.Address{},
MinerPubK: &node.PrivK.PublicKey,
Timestamp: time.Now(),
Nonce: 0,
Hash: core.Hash{},
Signature: []byte{},
}
return block
}

View File

@@ -15,7 +15,12 @@ func TestNode(t *testing.T) {
db, err := db.New(dir)
assert.Nil(t, err)
node, err := NewNode(db, uint64(1))
privK, err := core.NewKey()
assert.Nil(t, err)
dif := uint64(1)
bc := core.NewBlockchain(db, dif)
node, err := NewNode(privK, bc, true)
assert.Nil(t, err)
assert.Equal(t, node.Addr, core.AddressFromPrivK(node.PrivK))
@@ -27,7 +32,12 @@ func TestNodeSignature(t *testing.T) {
db, err := db.New(dir)
assert.Nil(t, err)
node, err := NewNode(db, uint64(1))
privK, err := core.NewKey()
assert.Nil(t, err)
dif := uint64(1)
bc := core.NewBlockchain(db, dif)
node, err := NewNode(privK, bc, true)
assert.Nil(t, err)
m := []byte("test")
@@ -43,7 +53,12 @@ func TestBlockFromPendingTxs(t *testing.T) {
db, err := db.New(dir)
assert.Nil(t, err)
node, err := NewNode(db, uint64(1))
privK, err := core.NewKey()
assert.Nil(t, err)
dif := uint64(1)
bc := core.NewBlockchain(db, dif)
node, err := NewNode(privK, bc, true)
assert.Nil(t, err)
addr0 := core.Address(core.HashBytes([]byte("addr0")))
@@ -53,7 +68,7 @@ func TestBlockFromPendingTxs(t *testing.T) {
block, err := node.BlockFromPendingTxs()
assert.Nil(t, err)
assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
assert.True(t, core.VerifyBlockSignature(&node.PrivK.PublicKey, block))
assert.True(t, node.Bc.VerifyBlockSignature(block))
}
func TestBlockFromPendingTxsIteration(t *testing.T) {
@@ -62,7 +77,12 @@ func TestBlockFromPendingTxsIteration(t *testing.T) {
db, err := db.New(dir)
assert.Nil(t, err)
node, err := NewNode(db, uint64(1))
privK, err := core.NewKey()
assert.Nil(t, err)
dif := uint64(1)
bc := core.NewBlockchain(db, dif)
node, err := NewNode(privK, bc, true)
assert.Nil(t, err)
addr0 := core.Address(core.HashBytes([]byte("addr0")))
@@ -74,5 +94,5 @@ func TestBlockFromPendingTxsIteration(t *testing.T) {
block, err := node.BlockFromPendingTxs()
assert.Nil(t, err)
assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
assert.True(t, core.VerifyBlockSignature(&node.PrivK.PublicKey, block))
assert.True(t, node.Bc.VerifyBlockSignature(block))
}