You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
931 B

package core
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 Address
To Address
InputCount uint64
Inputs []Input
Outputs []Output
Signature []byte
}
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
}
// 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
}
return true
}