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 PendingTxs []core.Tx } 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, dif) 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) } func (node *Node) SignBlock(block *core.Block) (*core.Signature, error) { return core.Sign(node.PrivK, block.Hash[:]) } 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.SignBlock(block) if err != nil { return nil, err } block.Signature = sig.Bytes() return block, nil }