github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/txs/payload/send_tx.go (about) 1 package payload 2 3 import ( 4 "fmt" 5 6 "github.com/hyperledger/burrow/acm/acmstate" 7 "github.com/hyperledger/burrow/crypto" 8 ) 9 10 func NewSendTx() *SendTx { 11 return &SendTx{ 12 Inputs: []*TxInput{}, 13 Outputs: []*TxOutput{}, 14 } 15 } 16 17 func (tx *SendTx) GetInputs() []*TxInput { 18 return tx.Inputs 19 } 20 21 func (tx *SendTx) Type() Type { 22 return TypeSend 23 } 24 25 func (tx *SendTx) String() string { 26 return fmt.Sprintf("SendTx{%v -> %v}", tx.Inputs, tx.Outputs) 27 } 28 29 func (tx *SendTx) AddInput(st acmstate.AccountGetter, pubkey *crypto.PublicKey, amt uint64) error { 30 addr := pubkey.GetAddress() 31 acc, err := st.GetAccount(addr) 32 if err != nil { 33 return err 34 } 35 if acc == nil { 36 return fmt.Errorf("AddInput: could not find account with address %v", addr) 37 } 38 return tx.AddInputWithSequence(pubkey, amt, acc.Sequence+1) 39 } 40 41 func (tx *SendTx) AddInputWithSequence(pubkey *crypto.PublicKey, amt uint64, sequence uint64) error { 42 addr := pubkey.GetAddress() 43 tx.Inputs = append(tx.Inputs, &TxInput{ 44 Address: addr, 45 Amount: amt, 46 Sequence: sequence, 47 }) 48 return nil 49 } 50 51 func (tx *SendTx) AddOutput(addr crypto.Address, amt uint64) { 52 tx.Outputs = append(tx.Outputs, &TxOutput{ 53 Address: addr, 54 Amount: amt, 55 }) 56 } 57 58 func (tx *SendTx) Any() *Any { 59 return &Any{ 60 SendTx: tx, 61 } 62 }