MCPcopy Create free account
hub / github.com/DNAProject/DNA / BuildNeoVMParam

Function BuildNeoVMParam

core/utils/transaction_builder.go:109–187  ·  view source on GitHub ↗

buildNeoVMParamInter build neovm invoke param code

(builder *vm.ParamsBuilder, smartContractParams []interface{})

Source from the content-addressed store, hash-verified

107
108//buildNeoVMParamInter build neovm invoke param code
109func BuildNeoVMParam(builder *vm.ParamsBuilder, smartContractParams []interface{}) error {
110 //VM load params in reverse order
111 for i := len(smartContractParams) - 1; i >= 0; i-- {
112 switch v := smartContractParams[i].(type) {
113 case bool:
114 builder.EmitPushBool(v)
115 case byte:
116 builder.EmitPushInteger(big.NewInt(int64(v)))
117 case int:
118 builder.EmitPushInteger(big.NewInt(int64(v)))
119 case uint:
120 builder.EmitPushInteger(big.NewInt(int64(v)))
121 case int32:
122 builder.EmitPushInteger(big.NewInt(int64(v)))
123 case uint32:
124 builder.EmitPushInteger(big.NewInt(int64(v)))
125 case int64:
126 builder.EmitPushInteger(big.NewInt(int64(v)))
127 case common.Fixed64:
128 builder.EmitPushInteger(big.NewInt(int64(v.GetData())))
129 case uint64:
130 val := big.NewInt(0)
131 builder.EmitPushInteger(val.SetUint64(uint64(v)))
132 case string:
133 builder.EmitPushByteArray([]byte(v))
134 case *big.Int:
135 builder.EmitPushInteger(v)
136 case []byte:
137 builder.EmitPushByteArray(v)
138 case common.Address:
139 builder.EmitPushByteArray(v[:])
140 case common.Uint256:
141 builder.EmitPushByteArray(v.ToArray())
142 case []interface{}:
143 err := BuildNeoVMParam(builder, v)
144 if err != nil {
145 return err
146 }
147 builder.EmitPushInteger(big.NewInt(int64(len(v))))
148 builder.Emit(vm.PACK)
149 default:
150 object := reflect.ValueOf(v)
151 kind := object.Kind().String()
152 if kind == "ptr" {
153 object = object.Elem()
154 kind = object.Kind().String()
155 }
156 switch kind {
157 case "slice":
158 ps := make([]interface{}, 0)
159 for i := 0; i < object.Len(); i++ {
160 ps = append(ps, object.Index(i).Interface())
161 }
162 err := BuildNeoVMParam(builder, []interface{}{ps})
163 if err != nil {
164 return err
165 }
166 case "struct":

Callers 3

BuildNeoVMParamEvalStackFunction · 0.92
BuildNativeInvokeCodeFunction · 0.85
BuildNeoVMInvokeCodeFunction · 0.85

Calls 9

EmitPushBoolMethod · 0.80
EmitPushIntegerMethod · 0.80
GetDataMethod · 0.80
EmitPushByteArrayMethod · 0.80
EmitMethod · 0.80
ErrorfMethod · 0.80
ToArrayMethod · 0.65
StringMethod · 0.45
LenMethod · 0.45

Tested by

no test coverage detected