mirror of
https://github.com/arnaucube/slowlorisdb.git
synced 2026-02-28 05:46:48 +01:00
updated data structures, moved NewBlock under Node functions
This commit is contained in:
36
node/node.go
36
node/node.go
@@ -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
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user