github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/txs/payload/bond_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 NewBondTx(address crypto.Address, amount uint64) *BondTx {
    11  	return &BondTx{
    12  		Input: &TxInput{
    13  			Address: address,
    14  			Amount:  amount,
    15  		},
    16  	}
    17  }
    18  
    19  func (tx *BondTx) Type() Type {
    20  	return TypeBond
    21  }
    22  
    23  func (tx *BondTx) GetInputs() []*TxInput {
    24  	return []*TxInput{tx.Input}
    25  }
    26  
    27  func (tx *BondTx) String() string {
    28  	return fmt.Sprintf("BondTx{%v}", tx.Input)
    29  }
    30  
    31  func (tx *BondTx) AddInput(st acmstate.AccountGetter, pubkey *crypto.PublicKey, amt uint64) error {
    32  	addr := pubkey.GetAddress()
    33  	acc, err := st.GetAccount(addr)
    34  	if err != nil {
    35  		return err
    36  	}
    37  	if acc == nil {
    38  		return fmt.Errorf("invalid address %s from pubkey %s", addr, pubkey)
    39  	}
    40  	return tx.AddInputWithSequence(pubkey, amt, acc.Sequence+uint64(1))
    41  }
    42  
    43  func (tx *BondTx) AddInputWithSequence(pubkey *crypto.PublicKey, amt uint64, sequence uint64) error {
    44  	tx.Input = &TxInput{
    45  		Address:  pubkey.GetAddress(),
    46  		Amount:   amt,
    47  		Sequence: sequence,
    48  	}
    49  	return nil
    50  }
    51  
    52  func (tx *BondTx) Any() *Any {
    53  	return &Any{
    54  		BondTx: tx,
    55  	}
    56  }