OSDN Git Service

fix(cross_chain): add asset_id check in cross_chain_in request (#177)
[bytom/vapor.git] / protocol / bc / types / txinput.go
index 47831cc..4918841 100644 (file)
@@ -210,6 +210,18 @@ func (t *TxInput) readFrom(r *blockchain.Reader) (err error) {
                                return err
                        }
 
+                       if inp.VMVersion, err = blockchain.ReadVarint63(r); err != nil {
+                               return err
+                       }
+
+                       if inp.AssetDefinition, err = blockchain.ReadVarstr31(r); err != nil {
+                               return err
+                       }
+
+                       if inp.IssuanceProgram, err = blockchain.ReadVarstr31(r); err != nil {
+                               return err
+                       }
+
                case *VetoInput:
                        if inp.Arguments, err = blockchain.ReadVarstrList(r); err != nil {
                                return err
@@ -225,13 +237,6 @@ func (t *TxInput) readFrom(r *blockchain.Reader) (err error) {
                return err
        }
 
-       switch inp := t.TypedInput.(type) {
-       case *CrossChainInput:
-               if inp.AssetDefinition, err = blockchain.ReadVarstr31(r); err != nil {
-                       return err
-               }
-       }
-
        return nil
 }
 
@@ -248,13 +253,6 @@ 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
 }
 
@@ -304,7 +302,20 @@ func (t *TxInput) writeInputWitness(w io.Writer) error {
                return err
 
        case *CrossChainInput:
-               _, err := blockchain.WriteVarstrList(w, inp.Arguments)
+               if _, err := blockchain.WriteVarstrList(w, inp.Arguments); err != nil {
+                       return err
+               }
+
+               if _, err := blockchain.WriteVarint63(w, inp.VMVersion); err != nil {
+                       return err
+               }
+
+               if _, err := blockchain.WriteVarstr31(w, inp.AssetDefinition); err != nil {
+                       return err
+               }
+
+               _, err := blockchain.WriteVarstr31(w, inp.IssuanceProgram)
+
                return err
        case *VetoInput:
                if _, err := blockchain.WriteVarstrList(w, inp.Arguments); err != nil {