add initial node

This commit is contained in:
arnaucube
2019-04-07 11:30:46 +02:00
parent cb7a4f857d
commit 67e7f532e4
9 changed files with 140 additions and 25 deletions

35
node/node.go Normal file
View File

@@ -0,0 +1,35 @@
package node
import (
"crypto/ecdsa"
"github.com/arnaucube/slowlorisdb/core"
"github.com/arnaucube/slowlorisdb/db"
)
type Node struct {
PrivK *ecdsa.PrivateKey
Addr core.Address
Bc *core.Blockchain
}
func NewNode(db *db.Db) (*Node, error) {
privK, err := core.NewKey()
if err != nil {
return nil, err
}
addr := core.AddressFromPrivK(privK)
bc := core.NewBlockchain(db)
node := &Node{
PrivK: privK,
Addr: addr,
Bc: bc,
}
return node, nil
}
func (node *Node) Sign(m []byte) (*core.Signature, error) {
return core.Sign(node.PrivK, m)
}

38
node/node_test.go Normal file
View File

@@ -0,0 +1,38 @@
package node
import (
"io/ioutil"
"testing"
"github.com/arnaucube/slowlorisdb/core"
"github.com/arnaucube/slowlorisdb/db"
"github.com/stretchr/testify/assert"
)
func TestNode(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)
assert.Nil(t, err)
assert.Equal(t, node.Addr, core.AddressFromPrivK(node.PrivK))
}
func TestNodeSignature(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)
assert.Nil(t, err)
m := []byte("test")
sig, err := node.Sign(m)
assert.Nil(t, err)
pubK := node.PrivK.PublicKey
assert.True(t, core.VerifySignature(&pubK, m, *sig))
}