package core import "crypto/ecdsa" type Input struct { TxId Hash Vout int // index of the output from the TxId Value uint64 } type Output struct { Value uint64 } // Tx holds the data structure of a transaction type Tx struct { From *ecdsa.PublicKey To *ecdsa.PublicKey InputCount uint64 Inputs []Input Outputs []Output Signature []byte } func NewTx(from, to *ecdsa.PublicKey, in []Input, out []Output) *Tx { tx := &Tx{ From: from, To: to, InputCount: uint64(len(in)), Inputs: in, Outputs: out, } return tx } // CheckTx checks if the transaction is consistent func CheckTx(tx *Tx) bool { // TODO check that inputs and outputs are not empty // check that inputs == outputs totalIn := 0 for _, in := range tx.Inputs { totalIn = totalIn + int(in.Value) } totalOut := 0 for _, out := range tx.Outputs { totalOut = totalOut + int(out.Value) } if totalIn < totalOut { return false } // TODO check signature return true }