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  }