| 141 | } |
| 142 | |
| 143 | func (tx *Tx) stackHook(vm *txvm.VM) { |
| 144 | switch vm.OpCode() { |
| 145 | case op.Output: |
| 146 | seed := vm.Seed() |
| 147 | var stack []txvm.Data |
| 148 | for i := 0; i < vm.StackLen(); i++ { |
| 149 | stack = append(stack, vm.StackItem(i)) |
| 150 | } |
| 151 | progTup, stack := stack[len(stack)-1], stack[:len(stack)-1] |
| 152 | prog := progTup.(txvm.Tuple)[1].(txvm.Bytes) |
| 153 | |
| 154 | tx.Outputs = append(tx.Outputs, Output{ |
| 155 | Seed: HashFromBytes(seed), |
| 156 | Program: prog, |
| 157 | Stack: stack, |
| 158 | }) |
| 159 | |
| 160 | case op.Input: |
| 161 | inputTup := vm.StackItem(vm.StackLen() - 1).(txvm.Tuple)[1].(txvm.Tuple) |
| 162 | seed := inputTup[1].(txvm.Bytes) |
| 163 | prog := inputTup[2].(txvm.Bytes) |
| 164 | var stack []txvm.Data |
| 165 | for i := 3; i < len(inputTup); i++ { |
| 166 | stack = append(stack, inputTup[i]) |
| 167 | } |
| 168 | |
| 169 | tx.Inputs = append(tx.Inputs, Input{ |
| 170 | Seed: HashFromBytes(seed), |
| 171 | Program: prog, |
| 172 | Stack: stack, |
| 173 | }) |
| 174 | |
| 175 | case op.Issue: |
| 176 | seed := vm.Seed() |
| 177 | |
| 178 | var stack []txvm.Data |
| 179 | for i := 0; i < vm.StackLen(); i++ { |
| 180 | stack = append(stack, vm.StackItem(i)) |
| 181 | } |
| 182 | |
| 183 | iss := Issuance{ |
| 184 | Seed: HashFromBytes(seed), |
| 185 | Program: vm.Program(), |
| 186 | Stack: stack, |
| 187 | } |
| 188 | tx.Issuances = append(tx.Issuances, iss) |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | func (tx *Tx) entryHook(vm *txvm.VM) { |
| 193 | tx.Version = vm.Version() |