mirror of
https://github.com/arnaucube/slowlorisdb.git
synced 2026-02-28 05:46:48 +01:00
add node create blocks from pending txs
This commit is contained in:
29
node/node.go
29
node/node.go
@@ -8,19 +8,20 @@ import (
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
PrivK *ecdsa.PrivateKey
|
||||
Addr core.Address
|
||||
Bc *core.Blockchain
|
||||
PrivK *ecdsa.PrivateKey
|
||||
Addr core.Address
|
||||
Bc *core.Blockchain
|
||||
PendingTxs []core.Tx
|
||||
}
|
||||
|
||||
func NewNode(db *db.Db) (*Node, error) {
|
||||
func NewNode(db *db.Db, dif uint64) (*Node, error) {
|
||||
privK, err := core.NewKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
addr := core.AddressFromPrivK(privK)
|
||||
|
||||
bc := core.NewBlockchain(db)
|
||||
bc := core.NewBlockchain(db, dif)
|
||||
|
||||
node := &Node{
|
||||
PrivK: privK,
|
||||
@@ -33,3 +34,21 @@ func NewNode(db *db.Db) (*Node, error) {
|
||||
func (node *Node) Sign(m []byte) (*core.Signature, error) {
|
||||
return core.Sign(node.PrivK, m)
|
||||
}
|
||||
|
||||
func (node *Node) AddToPendingTxs(tx core.Tx) {
|
||||
node.PendingTxs = append(node.PendingTxs, tx)
|
||||
}
|
||||
|
||||
func (node *Node) BlockFromPendingTxs() (*core.Block, error) {
|
||||
block := node.Bc.NewBlock(node.PendingTxs)
|
||||
err := block.CalculatePoW(node.Bc.Difficulty)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sig, err := node.Sign(block.Bytes())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
block.Signature = sig.Bytes()
|
||||
return block, nil
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ func TestNode(t *testing.T) {
|
||||
db, err := db.New(dir)
|
||||
assert.Nil(t, err)
|
||||
|
||||
node, err := NewNode(db)
|
||||
node, err := NewNode(db, uint64(1))
|
||||
assert.Nil(t, err)
|
||||
|
||||
assert.Equal(t, node.Addr, core.AddressFromPrivK(node.PrivK))
|
||||
@@ -27,7 +27,7 @@ func TestNodeSignature(t *testing.T) {
|
||||
db, err := db.New(dir)
|
||||
assert.Nil(t, err)
|
||||
|
||||
node, err := NewNode(db)
|
||||
node, err := NewNode(db, uint64(1))
|
||||
assert.Nil(t, err)
|
||||
|
||||
m := []byte("test")
|
||||
@@ -36,3 +36,38 @@ func TestNodeSignature(t *testing.T) {
|
||||
pubK := node.PrivK.PublicKey
|
||||
assert.True(t, core.VerifySignature(&pubK, m, *sig))
|
||||
}
|
||||
|
||||
func TestBlockFromPendingTxs(t *testing.T) {
|
||||
dir, err := ioutil.TempDir("", "db")
|
||||
assert.Nil(t, err)
|
||||
db, err := db.New(dir)
|
||||
assert.Nil(t, err)
|
||||
|
||||
node, err := NewNode(db, uint64(1))
|
||||
assert.Nil(t, err)
|
||||
|
||||
addr0 := core.Address(core.HashBytes([]byte("addr0")))
|
||||
addr1 := core.Address(core.HashBytes([]byte("addr1")))
|
||||
tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
|
||||
node.AddToPendingTxs(*tx)
|
||||
block, err := node.BlockFromPendingTxs()
|
||||
assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
|
||||
// TODO add VerifyBlockSignature
|
||||
}
|
||||
|
||||
// func TestBlockFromPendingTxsIteration(t *testing.T) {
|
||||
// dir, err := ioutil.TempDir("", "db")
|
||||
// assert.Nil(t, err)
|
||||
// db, err := db.New(dir)
|
||||
// assert.Nil(t, err)
|
||||
//
|
||||
// node, err := NewNode(db, uint64(1))
|
||||
// assert.Nil(t, err)
|
||||
//
|
||||
// addr0 := core.Address(core.HashBytes([]byte("addr0")))
|
||||
// addr1 := core.Address(core.HashBytes([]byte("addr1")))
|
||||
// for i := 0; i < 10; i++ {
|
||||
// tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
|
||||
//
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user