// AssetAmount return the asset id and amount of the txinput.
func (t *TxInput) AssetAmount() bc.AssetAmount {
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- assetID := inp.AssetID()
- return bc.AssetAmount{
- AssetId: &assetID,
- Amount: inp.Amount,
- }
case *SpendInput:
return inp.AssetAmount
}
// AssetID return the assetID of the txinput
func (t *TxInput) AssetID() bc.AssetID {
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- return inp.AssetID()
case *SpendInput:
return *inp.AssetId
// Amount return the asset amount of the txinput
func (t *TxInput) Amount() uint64 {
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- return inp.Amount
case *SpendInput:
return inp.Amount
}
return nil
}
-// IssuanceProgram return the control program of the issuance input
-func (t *TxInput) IssuanceProgram() []byte {
- if ii, ok := t.TypedInput.(*IssuanceInput); ok {
- return ii.IssuanceProgram
- }
- return nil
-}
-
-// AssetDefinition return the asset definition of the issuance input
-func (t *TxInput) AssetDefinition() []byte {
- if ii, ok := t.TypedInput.(*IssuanceInput); ok {
- return ii.AssetDefinition
- }
- return nil
-}
-
// Arguments get the args for the input
func (t *TxInput) Arguments() [][]byte {
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- return inp.Arguments
case *SpendInput:
return inp.Arguments
}
// SetArguments set the args for the input
func (t *TxInput) SetArguments(args [][]byte) {
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- inp.Arguments = args
case *SpendInput:
inp.Arguments = args
}
return err
}
- var assetID bc.AssetID
t.CommitmentSuffix, err = blockchain.ReadExtensibleString(r, func(r *blockchain.Reader) error {
if t.AssetVersion != 1 {
return nil
return errors.Wrap(err, "reading input commitment type")
}
switch icType[0] {
- case IssuanceInputType:
- ii := new(IssuanceInput)
- t.TypedInput = ii
-
- if ii.Nonce, err = blockchain.ReadVarstr31(r); err != nil {
- return err
- }
- if _, err = assetID.ReadFrom(r); err != nil {
- return err
- }
- if ii.Amount, err = blockchain.ReadVarint63(r); err != nil {
- return err
- }
-
case SpendInputType:
si := new(SpendInput)
t.TypedInput = si
}
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- if inp.AssetDefinition, err = blockchain.ReadVarstr31(r); err != nil {
- return err
- }
- if inp.VMVersion, err = blockchain.ReadVarint63(r); err != nil {
- return err
- }
- if inp.IssuanceProgram, err = blockchain.ReadVarstr31(r); err != nil {
- return err
- }
- if inp.AssetID() != assetID {
- return errBadAssetID
- }
- if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
- return err
- }
-
case *SpendInput:
if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
return err
}
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- if _, err = w.Write([]byte{IssuanceInputType}); err != nil {
- return err
- }
- if _, err = blockchain.WriteVarstr31(w, inp.Nonce); err != nil {
- return err
- }
- assetID := t.AssetID()
- if _, err = assetID.WriteTo(w); err != nil {
- return err
- }
- _, err = blockchain.WriteVarint63(w, inp.Amount)
- return err
-
case *SpendInput:
if _, err = w.Write([]byte{SpendInputType}); err != nil {
return err
}
switch inp := t.TypedInput.(type) {
- case *IssuanceInput:
- if _, err := blockchain.WriteVarstr31(w, inp.AssetDefinition); err != nil {
- return err
- }
- if _, err := blockchain.WriteVarint63(w, inp.VMVersion); err != nil {
- return err
- }
- if _, err := blockchain.WriteVarstr31(w, inp.IssuanceProgram); err != nil {
- return err
- }
- _, err := blockchain.WriteVarstrList(w, inp.Arguments)
- return err
-
case *SpendInput:
_, err := blockchain.WriteVarstrList(w, inp.Arguments)
return err