"fmt"
"io"
- "github.com/vapor/encoding/blockchain"
- "github.com/vapor/errors"
- "github.com/vapor/protocol/bc"
+ "github.com/bytom/vapor/encoding/blockchain"
+ "github.com/bytom/vapor/errors"
+ "github.com/bytom/vapor/protocol/bc"
)
// serflag variables for input types.
}
)
-var errBadAssetID = errors.New("asset ID does not match other issuance parameters")
-
// AssetAmount return the asset id and amount of the txinput.
func (t *TxInput) AssetAmount() bc.AssetAmount {
switch inp := t.TypedInput.(type) {
case *VetoInput:
o, err = ComputeOutputID(&inp.SpendCommitment, VetoInputType, inp.Vote)
+
+ case *CrossChainInput:
+ o, err = ComputeOutputID(&inp.SpendCommitment, SpendInputType, nil)
}
return o, err
return err
}
+ if ci.IssuanceVMVersion, err = blockchain.ReadVarint63(r); err != nil {
+ return err
+ }
+
+ if ci.AssetDefinition, err = blockchain.ReadVarstr31(r); err != nil {
+ return err
+ }
+
+ if ci.IssuanceProgram, err = blockchain.ReadVarstr31(r); err != nil {
+ return err
+ }
+
case VetoInputType:
ui := new(VetoInput)
t.TypedInput = ui
- if ui.UnvoteCommitmentSuffix, err = ui.SpendCommitment.readFrom(r, 1); err != nil {
+ if ui.VetoCommitmentSuffix, err = ui.SpendCommitment.readFrom(r, 1); err != nil {
+ return err
+ }
+ if ui.Vote, err = blockchain.ReadVarstr31(r); err != nil {
return err
}
return nil
}
+ var err error
switch inp := t.TypedInput.(type) {
case *SpendInput:
- if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
- return err
- }
+ inp.Arguments, err = blockchain.ReadVarstrList(r)
case *CrossChainInput:
- if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
- return err
- }
+ inp.Arguments, err = blockchain.ReadVarstrList(r)
case *VetoInput:
- if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
- return err
- }
- if inp.Vote, err = blockchain.ReadVarstr31(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
+ inp.Arguments, err = blockchain.ReadVarstrList(r)
}
- }
- return nil
+ return err
+ })
+ return err
}
func (t *TxInput) writeTo(w io.Writer) error {
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
}
if _, err = w.Write([]byte{SpendInputType}); err != nil {
return err
}
+
return inp.SpendCommitment.writeExtensibleString(w, inp.SpendCommitmentSuffix, t.AssetVersion)
case *CrossChainInput:
if _, err = w.Write([]byte{CrossChainInputType}); err != nil {
return err
}
- return inp.SpendCommitment.writeExtensibleString(w, inp.SpendCommitmentSuffix, t.AssetVersion)
+
+ if err := inp.SpendCommitment.writeExtensibleString(w, inp.SpendCommitmentSuffix, t.AssetVersion); err != nil {
+ return err
+ }
+
+ if _, err := blockchain.WriteVarint63(w, inp.IssuanceVMVersion); err != nil {
+ return err
+ }
+
+ if _, err := blockchain.WriteVarstr31(w, inp.AssetDefinition); err != nil {
+ return err
+ }
+
+ if _, err := blockchain.WriteVarstr31(w, inp.IssuanceProgram); err != nil {
+ return err
+ }
case *CoinbaseInput:
- if _, err = w.Write([]byte{CoinbaseInputType}); err != nil {
+ if _, err := w.Write([]byte{CoinbaseInputType}); err != nil {
return err
}
- if _, err = blockchain.WriteVarstr31(w, inp.Arbitrary); err != nil {
+
+ if _, err := blockchain.WriteVarstr31(w, inp.Arbitrary); err != nil {
return errors.Wrap(err, "writing coinbase arbitrary")
}
if _, err = w.Write([]byte{VetoInputType}); err != nil {
return err
}
- return inp.SpendCommitment.writeExtensibleString(w, inp.UnvoteCommitmentSuffix, t.AssetVersion)
+
+ if err := inp.SpendCommitment.writeExtensibleString(w, inp.VetoCommitmentSuffix, t.AssetVersion); err != nil {
+ return err
+ }
+
+ _, err := blockchain.WriteVarstr31(w, inp.Vote)
+ return err
}
return nil
}
return nil
}
+ var err error
switch inp := t.TypedInput.(type) {
case *SpendInput:
- _, err := blockchain.WriteVarstrList(w, inp.Arguments)
- return err
+ _, err = blockchain.WriteVarstrList(w, inp.Arguments)
case *CrossChainInput:
- _, err := blockchain.WriteVarstrList(w, inp.Arguments)
- return err
+ _, err = blockchain.WriteVarstrList(w, inp.Arguments)
+
case *VetoInput:
- if _, err := blockchain.WriteVarstrList(w, inp.Arguments); err != nil {
- return err
- }
- _, err := blockchain.WriteVarstr31(w, inp.Vote)
- return err
+ _, err = blockchain.WriteVarstrList(w, inp.Arguments)
}
- return nil
+ return err
}