// serflag variables for input types.
const (
- IssuanceInputType uint8 = iota
+ CrossChainInputType uint8 = iota
SpendInputType
CoinbaseInputType
UnvoteInputType
case *SpendInput:
return inp.AssetAmount
+ case *CrossChainInput:
+ return inp.AssetAmount
+
case *UnvoteInput:
return inp.AssetAmount
}
+
return bc.AssetAmount{}
}
case *SpendInput:
return *inp.AssetId
+ case *CrossChainInput:
+ return *inp.AssetAmount.AssetId
+
case *UnvoteInput:
return *inp.AssetId
+
}
return bc.AssetID{}
}
case *SpendInput:
return inp.Amount
+ case *CrossChainInput:
+ return inp.AssetAmount.Amount
+
case *UnvoteInput:
return inp.Amount
+
}
return 0
}
case *SpendInput:
return inp.ControlProgram
+ case *CrossChainInput:
+ return inp.ControlProgram
+
case *UnvoteInput:
return inp.ControlProgram
+
}
return nil
case *SpendInput:
return inp.Arguments
+ case *CrossChainInput:
+ return inp.Arguments
+
case *UnvoteInput:
return inp.Arguments
}
case *SpendInput:
inp.Arguments = args
+ case *CrossChainInput:
+ inp.Arguments = args
+
case *UnvoteInput:
inp.Arguments = args
}
if _, err = io.ReadFull(r, icType[:]); err != nil {
return errors.Wrap(err, "reading input commitment type")
}
+
switch icType[0] {
case SpendInputType:
si := new(SpendInput)
return err
}
+ case CrossChainInputType:
+ ci := new(CrossChainInput)
+ t.TypedInput = ci
+ if ci.SpendCommitmentSuffix, err = ci.SpendCommitment.readFrom(r, 1); err != nil {
+ return err
+ }
+
case UnvoteInputType:
ui := new(UnvoteInput)
t.TypedInput = ui
if ui.UnvoteCommitmentSuffix, err = ui.SpendCommitment.readFrom(r, 1); err != nil {
+
return err
}
return err
}
+ case *CrossChainInput:
+ if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
+ return err
+ }
+
case *UnvoteInput:
if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
return err
}
return nil
})
+ if err != nil {
+ return err
+ }
+
+ switch inp := t.TypedInput.(type) {
+ case *CrossChainInput:
+ if inp.AssetDefinition, err = blockchain.ReadVarstr31(r); err != nil {
+ return err
+ }
+ }
- return err
+ return nil
}
func (t *TxInput) writeTo(w io.Writer) error {
return errors.Wrap(err, "writing input commitment")
}
- _, err := blockchain.WriteExtensibleString(w, t.WitnessSuffix, t.writeInputWitness)
- return errors.Wrap(err, "writing input witness")
+ if _, err := blockchain.WriteExtensibleString(w, t.WitnessSuffix, t.writeInputWitness); err != nil {
+ return errors.Wrap(err, "writing input witness")
+ }
+
+ switch inp := t.TypedInput.(type) {
+ case *CrossChainInput:
+ if _, err := blockchain.WriteVarstr31(w, inp.AssetDefinition); err != nil {
+ return errors.Wrap(err, "writing AssetDefinition")
+ }
+ }
+
+ return nil
}
func (t *TxInput) writeInputCommitment(w io.Writer) (err error) {
}
return inp.SpendCommitment.writeExtensibleString(w, inp.SpendCommitmentSuffix, t.AssetVersion)
+ case *CrossChainInput:
+ if _, err = w.Write([]byte{SpendInputType}); err != nil {
+ return err
+ }
+ return inp.SpendCommitment.writeExtensibleString(w, inp.SpendCommitmentSuffix, t.AssetVersion)
+
case *CoinbaseInput:
if _, err = w.Write([]byte{CoinbaseInputType}); err != nil {
return err
_, err := blockchain.WriteVarstrList(w, inp.Arguments)
return err
+ case *CrossChainInput:
+ _, err := blockchain.WriteVarstrList(w, inp.Arguments)
+ return err
case *UnvoteInput:
if _, err := blockchain.WriteVarstrList(w, inp.Arguments); err != nil {
return err