|
|
package core
import ( "encoding/json" "time" )
type Input struct { } type Output struct { }
// Tx holds the data structure of a transaction
type Tx struct { From Address To Address InputCount uint64 Inputs []Input Outputs []Output }
func NewTx(from, to Address, in []Input, out []Output) *Tx { tx := &Tx{ From: from, To: to, InputCount: uint64(len(in)), Inputs: in, Outputs: out, } return tx }
// Block holds the data structure for the block
type Block struct { Height uint64 PrevHash Hash NextHash Hash Txs []Tx Miner Address Timestamp time.Time Nonce uint64 Hash Hash Signature []byte }
// Bytes outputs a byte array containing the data of the Block
func (blk Block) Bytes() []byte { b, _ := json.Marshal(blk) return b }
func (blk *Block) GetNonce() uint64 { return blk.Nonce }
func (blk *Block) IncrementNonce() { blk.Nonce++ } func (block *Block) CalculatePoW(difficulty int) error { hash := HashBytes(block.Bytes()) for !CheckPoW(hash, difficulty) { block.IncrementNonce() hash = HashBytes(block.Bytes()) } block.Hash = hash return nil }
func BlockFromBytes(b []byte) (*Block, error) { var block *Block err := json.Unmarshal(b, &block) return block, err }
|