OSDN Git Service

add the index (#1716)
[bytom/bytom.git] / protocol / vm / vmutil / script.go
index 1f0d82f..cc23ab6 100644 (file)
@@ -56,9 +56,12 @@ func P2WSHProgram(hash []byte) ([]byte, error) {
 }
 
 // RetireProgram generates the script for retire output
-func RetireProgram(comment []byte) ([]byte, error) {
+func RetireProgram(index string, comment []byte) ([]byte, error) {
        builder := NewBuilder()
        builder.AddOp(vm.OP_FAIL)
+       if index != "" {
+               builder.AddData([]byte(index))
+       }
        if len(comment) != 0 {
                builder.AddData(comment)
        }
@@ -146,3 +149,25 @@ func GetIssuanceProgramRestrictHeight(program []byte) (int64, error) {
        }
        return 0, nil
 }
+
+func GetRetireIndex(program []byte) string {
+       insts, err := vm.ParseProgram(program)
+       if err != nil {
+               return ""
+       }
+
+       if len(insts) == 3 && insts[0].Op == vm.OP_FAIL && insts[1].IsPushdata() && insts[2].IsPushdata() {
+               return string(insts[1].Data)
+       }
+
+       return ""
+}
+
+func GetRetireData(program []byte) []byte {
+       insts, err := vm.ParseProgram(program)
+       if err != nil {
+               return []byte{}
+       }
+
+       return insts[len(insts)-1].Data
+}