}
// 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)
}
}
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
+}