OSDN Git Service

Hulk did something
[bytom/vapor.git] / protocol / vm / introspection.go
1 package vm
2
3 func opCheckOutput(vm *virtualMachine) error {
4         err := vm.applyCost(16)
5         if err != nil {
6                 return err
7         }
8
9         code, err := vm.pop(true)
10         if err != nil {
11                 return err
12         }
13         vmVersion, err := vm.popInt64(true)
14         if err != nil {
15                 return err
16         }
17         if vmVersion < 0 {
18                 return ErrBadValue
19         }
20         assetID, err := vm.pop(true)
21         if err != nil {
22                 return err
23         }
24         amount, err := vm.popInt64(true)
25         if err != nil {
26                 return err
27         }
28         if amount < 0 {
29                 return ErrBadValue
30         }
31         index, err := vm.popInt64(true)
32         if err != nil {
33                 return err
34         }
35         if index < 0 {
36                 return ErrBadValue
37         }
38
39         if vm.context.CheckOutput == nil {
40                 return ErrContext
41         }
42
43         ok, err := vm.context.CheckOutput(uint64(index), uint64(amount), assetID, uint64(vmVersion), code, vm.expansionReserved)
44         if err != nil {
45                 return err
46         }
47         return vm.pushBool(ok, true)
48 }
49
50 func opAsset(vm *virtualMachine) error {
51         err := vm.applyCost(1)
52         if err != nil {
53                 return err
54         }
55
56         if vm.context.AssetID == nil {
57                 return ErrContext
58         }
59         return vm.push(*vm.context.AssetID, true)
60 }
61
62 func opAmount(vm *virtualMachine) error {
63         err := vm.applyCost(1)
64         if err != nil {
65                 return err
66         }
67
68         if vm.context.Amount == nil {
69                 return ErrContext
70         }
71         return vm.pushInt64(int64(*vm.context.Amount), true)
72 }
73
74 func opProgram(vm *virtualMachine) error {
75         err := vm.applyCost(1)
76         if err != nil {
77                 return err
78         }
79
80         return vm.push(vm.context.Code, true)
81 }
82
83 func opIndex(vm *virtualMachine) error {
84         err := vm.applyCost(1)
85         if err != nil {
86                 return err
87         }
88
89         if vm.context.DestPos == nil {
90                 return ErrContext
91         }
92         return vm.pushInt64(int64(*vm.context.DestPos), true)
93 }
94
95 func opEntryID(vm *virtualMachine) error {
96         err := vm.applyCost(1)
97         if err != nil {
98                 return err
99         }
100         return vm.push(vm.context.EntryID, true)
101 }
102
103 func opOutputID(vm *virtualMachine) error {
104         err := vm.applyCost(1)
105         if err != nil {
106                 return err
107         }
108
109         if vm.context.SpentOutputID == nil {
110                 return ErrContext
111         }
112         return vm.push(*vm.context.SpentOutputID, true)
113 }
114
115 func opBlockHeight(vm *virtualMachine) error {
116         err := vm.applyCost(1)
117         if err != nil {
118                 return err
119         }
120
121         if vm.context.BlockHeight == nil {
122                 return ErrContext
123         }
124         return vm.pushInt64(int64(*vm.context.BlockHeight), true)
125 }