MCPcopy Create free account
hub / github.com/chain/txvm / stackHook

Method stackHook

protocol/bc/tx.go:143–190  ·  view source on GitHub ↗
(vm *txvm.VM)

Source from the content-addressed store, hash-verified

141}
142
143func (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
192func (tx *Tx) entryHook(vm *txvm.VM) {
193 tx.Version = vm.Version()

Callers

nothing calls this directly

Calls 6

HashFromBytesFunction · 0.85
OpCodeMethod · 0.80
SeedMethod · 0.80
StackLenMethod · 0.80
StackItemMethod · 0.80
ProgramMethod · 0.80

Tested by

no test coverage detected