-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathabihelper_unit_test.gd
190 lines (171 loc) · 25.4 KB
/
abihelper_unit_test.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
extends Label
const CONTRACT_ABI := """
[{"inputs":[{"components":[{"internalType":"uint32","name":"a","type":"uint32"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"components":[{"internalType":"string[]","name":"t","type":"string[]"}],"internalType":"struct Test.C[]","name":"x","type":"tuple[]"},{"internalType":"bytes10","name":"y","type":"bytes10"}],"internalType":"struct Test.T[]","name":"c","type":"tuple[]"},{"internalType":"int256[3]","name":"d","type":"int256[3]"}],"internalType":"struct Test.S","name":"s","type":"tuple"},{"components":[{"components":[{"internalType":"string[]","name":"t","type":"string[]"}],"internalType":"struct Test.C[]","name":"x","type":"tuple[]"},{"internalType":"bytes10","name":"y","type":"bytes10"}],"internalType":"struct Test.T","name":"t","type":"tuple"},{"internalType":"uint256","name":"u","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes10","name":"b10","type":"bytes10"}],"name":"f","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"g","outputs":[{"components":[{"internalType":"uint32","name":"a","type":"uint32"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"components":[{"internalType":"string[]","name":"t","type":"string[]"}],"internalType":"struct Test.C[]","name":"x","type":"tuple[]"},{"internalType":"bytes10","name":"y","type":"bytes10"}],"internalType":"struct Test.T[]","name":"c","type":"tuple[]"},{"internalType":"int256[3]","name":"d","type":"int256[3]"}],"internalType":"struct Test.S","name":"","type":"tuple"},{"components":[{"components":[{"internalType":"string[]","name":"t","type":"string[]"}],"internalType":"struct Test.C[]","name":"x","type":"tuple[]"},{"internalType":"bytes10","name":"y","type":"bytes10"}],"internalType":"struct Test.T","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"h","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
"""
const CONTRACT_ADDRESS := "0x1aDC57565484113e0f62752e26A214349e8C5dC0"
const CONTRACT_BYTECODE := "608060405234801561001057600080fd5b5061168e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634815d6c314610046578063af41211914610062578063e2179b8e14610092575b600080fd5b610060600480360381019061005b9190610d27565b6100b3565b005b61007c60048036038101906100779190610cfe565b6100ba565b6040516100899190611242565b60405180910390f35b61009a61014f565b6040516100aa94939291906111ef565b60405180910390f35b5050505050565b600060016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610157610784565b61015f6107b8565b60008061016a610784565b6001816000019063ffffffff16908163ffffffff1681525050600267ffffffffffffffff8111801561019b57600080fd5b506040519080825280602002602001820160405280156101ca5781602001602082028036833780820191505090505b508160200181905250600281602001516000815181106101e657fe5b6020026020010181815250506003816020015160018151811061020557fe5b602002602001018181525050600167ffffffffffffffff8111801561022957600080fd5b5060405190808252806020026020018201604052801561026357816020015b6102506107b8565b8152602001906001900390816102485790505b508160400181905250600167ffffffffffffffff8111801561028457600080fd5b506040519080825280602002602001820160405280156102be57816020015b6102ab6107eb565b8152602001906001900390816102a35790505b5081604001516000815181106102d057fe5b602002602001015160000181905250600267ffffffffffffffff811180156102f757600080fd5b5060405190808252806020026020018201604052801561032b57816020015b60608152602001906001900390816103165790505b50816040015160008151811061033d57fe5b60200260200101516000015160008151811061035557fe5b6020026020010151600001819052506040518060400160405280600b81526020017f535452494e475f5445535400000000000000000000000000000000000000000081525081604001516000815181106103ab57fe5b6020026020010151600001516000815181106103c357fe5b6020026020010151600001516000815181106103db57fe5b60200260200101819052506040518060400160405280600b81526020017f737472696e675f74657374000000000000000000000000000000000000000000815250816040015160008151811061042d57fe5b60200260200101516000015160008151811061044557fe5b60200260200101516000015160018151811061045d57fe5b6020026020010181905250690400000000000000000060b01b816040015160008151811061048757fe5b60200260200101516020019075ffffffffffffffffffffffffffffffffffffffffffff1916908175ffffffffffffffffffffffffffffffffffffffffffff1916815250507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81606001516000600381106104fd57fe5b6020020181815250507f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe816060015160016003811061053857fe5b6020020181815250507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19816060015160026003811061057457fe5b6020020181815250506105856107b8565b600167ffffffffffffffff8111801561059d57600080fd5b506040519080825280602002602001820160405280156105d757816020015b6105c46107eb565b8152602001906001900390816105bc5790505b508160000181905250600267ffffffffffffffff811180156105f857600080fd5b5060405190808252806020026020018201604052801561062c57816020015b60608152602001906001900390816106175790505b50816000015160008151811061063e57fe5b6020026020010151600001819052506040518060400160405280600b81526020017f535452494e475f74657374000000000000000000000000000000000000000000815250816000015160008151811061069457fe5b6020026020010151600001516000815181106106ac57fe5b60200260200101819052506040518060800160405280604d815260200161160c604d913981600001516000815181106106e157fe5b6020026020010151600001516001815181106106f957fe5b6020026020010181905250690800000000000000000060b01b816020019075ffffffffffffffffffffffffffffffffffffffffffff1916908175ffffffffffffffffffffffffffffffffffffffffffff1916815250506000738eee12bd33ec72a277ffa9ddf246759878589d3b90506000600990508383838397509750975097505050505090919293565b6040518060800160405280600063ffffffff16815260200160608152602001606081526020016107b26107fe565b81525090565b604051806040016040528060608152602001600075ffffffffffffffffffffffffffffffffffffffffffff191681525090565b6040518060200160405280606081525090565b6040518060600160405280600390602082028036833780820191505090505090565b600061083361082e8461128e565b61125d565b9050808285602086028201111561084957600080fd5b60005b85811015610879578161085f8882610b3d565b84526020840193506020830192505060018101905061084c565b5050509392505050565b6000610896610891846112b4565b61125d565b9050808382526020820190508260005b858110156108d657813585016108bc8882610b52565b8452602084019350602083019250506001810190506108a6565b5050509392505050565b60006108f36108ee846112e0565b61125d565b9050808382526020820190508260005b8581101561093357813585016109198882610b7c565b845260208401935060208301925050600181019050610903565b5050509392505050565b600061095061094b8461130c565b61125d565b9050808382526020820190508260005b8581101561099057813585016109768882610c70565b845260208401935060208301925050600181019050610960565b5050509392505050565b60006109ad6109a884611338565b61125d565b905080838252602082019050828560208602820111156109cc57600080fd5b60005b858110156109fc57816109e28882610cd4565b8452602084019350602083019250506001810190506109cf565b5050509392505050565b6000610a19610a1484611364565b61125d565b905082815260208101848484011115610a3157600080fd5b610a3c848285611543565b509392505050565b600081359050610a5381611598565b92915050565b600082601f830112610a6a57600080fd5b6003610a77848285610820565b91505092915050565b600082601f830112610a9157600080fd5b8135610aa1848260208601610883565b91505092915050565b600082601f830112610abb57600080fd5b8135610acb8482602086016108e0565b91505092915050565b600082601f830112610ae557600080fd5b8135610af584826020860161093d565b91505092915050565b600082601f830112610b0f57600080fd5b8135610b1f84826020860161099a565b91505092915050565b600081359050610b37816115af565b92915050565b600081359050610b4c816115c6565b92915050565b600082601f830112610b6357600080fd5b8135610b73848260208601610a06565b91505092915050565b600060208284031215610b8e57600080fd5b610b98602061125d565b9050600082013567ffffffffffffffff811115610bb457600080fd5b610bc084828501610a80565b60008301525092915050565b600060c08284031215610bde57600080fd5b610be8608061125d565b90506000610bf884828501610ce9565b600083015250602082013567ffffffffffffffff811115610c1857600080fd5b610c2484828501610afe565b602083015250604082013567ffffffffffffffff811115610c4457600080fd5b610c5084828501610ad4565b6040830152506060610c6484828501610a59565b60608301525092915050565b600060408284031215610c8257600080fd5b610c8c604061125d565b9050600082013567ffffffffffffffff811115610ca857600080fd5b610cb484828501610aaa565b6000830152506020610cc884828501610b28565b60208301525092915050565b600081359050610ce3816115dd565b92915050565b600081359050610cf8816115f4565b92915050565b600060208284031215610d1057600080fd5b6000610d1e84828501610a44565b91505092915050565b600080600080600060a08688031215610d3f57600080fd5b600086013567ffffffffffffffff811115610d5957600080fd5b610d6588828901610bcc565b955050602086013567ffffffffffffffff811115610d8257600080fd5b610d8e88828901610c70565b9450506040610d9f88828901610cd4565b9350506060610db088828901610a44565b9250506080610dc188828901610b28565b9150509295509295909350565b6000610dda838361106c565b60208301905092915050565b6000610df2838361107b565b905092915050565b6000610e0683836110b4565b905092915050565b6000610e1a8383611148565b905092915050565b6000610e2e83836111c2565b60208301905092915050565b610e43816114c1565b82525050565b610e52816113de565b610e5c8184611461565b9250610e6782611394565b8060005b83811015610e98578151610e7f8782610dce565b9650610e8a83611420565b925050600181019050610e6b565b505050505050565b6000610eab826113e9565b610eb5818561146c565b935083602082028501610ec78561139e565b8060005b85811015610f035784840389528151610ee48582610de6565b9450610eef8361142d565b925060208a01995050600181019050610ecb565b50829750879550505050505092915050565b6000610f20826113f4565b610f2a818561147d565b935083602082028501610f3c856113ae565b8060005b85811015610f785784840389528151610f598582610dfa565b9450610f648361143a565b925060208a01995050600181019050610f40565b50829750879550505050505092915050565b6000610f95826113ff565b610f9f818561148e565b935083602082028501610fb1856113be565b8060005b85811015610fed5784840389528151610fce8582610e0e565b9450610fd983611447565b925060208a01995050600181019050610fb5565b50829750879550505050505092915050565b600061100a8261140a565b611014818561149f565b935061101f836113ce565b8060005b838110156110505781516110378882610e22565b975061104283611454565b925050600181019050611023565b5085935050505092915050565b611066816114d3565b82525050565b611075816114ff565b82525050565b600061108682611415565b61109081856114b0565b93506110a0818560208601611552565b6110a981611587565b840191505092915050565b600060208301600083015184820360008601526110d18282610ea0565b9150508091505092915050565b600060c0830160008301516110f660008601826111e0565b506020830151848203602086015261110e8282610fff565b915050604083015184820360408601526111288282610f8a565b915050606083015161113d6060860182610e49565b508091505092915050565b600060408301600083015184820360008601526111658282610f15565b915050602083015161117a602086018261105d565b508091505092915050565b600060408301600083015184820360008601526111a28282610f15565b91505060208301516111b7602086018261105d565b508091505092915050565b6111cb81611529565b82525050565b6111da81611529565b82525050565b6111e981611533565b82525050565b6000608082019050818103600083015261120981876110de565b9050818103602083015261121d8186611185565b905061122c6040830185610e3a565b61123960608301846111d1565b95945050505050565b600060208201905061125760008301846111d1565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561128457611283611585565b5b8060405250919050565b600067ffffffffffffffff8211156112a9576112a8611585565b5b602082029050919050565b600067ffffffffffffffff8211156112cf576112ce611585565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156112fb576112fa611585565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561132757611326611585565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561135357611352611585565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561137f5761137e611585565b5b601f19601f8301169050602081019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600060039050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006114cc82611509565b9050919050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015611570578082015181840152602081019050611555565b8381111561157f576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b6115a1816114c1565b81146115ac57600080fd5b50565b6115b8816114d3565b81146115c357600080fd5b50565b6115cf816114ff565b81146115da57600080fd5b50565b6115e681611529565b81146115f157600080fd5b50565b6115fd81611533565b811461160857600080fd5b5056fe535452494e475f544553545f4d4f52455f5448414e5f33325f42595445535f6162636465666768696a6b6c6d6e6f707172737475767778797a5f30303030303030313131313131323232323232a264697066735822122016c15da2d91928dc1c91b3479f50e848d808803d2bd0ae609c009b0370f61dc764736f6c63430007060033"
func validate_result_dictionary(result) -> bool:
var expected_output = {
"0": {
"a": 1,
"b": ["2", "3"],
"c": [{
"x": [{
"t": ["STRING_TEST", "string_test"]
}],
"y": PackedByteArray([4, 0, 0, 0, 0, 0, 0, 0, 0, 0])
}],
"d": [
"57896044618658097711785492504343953926634992332820282019728792003956564819967",
"57896044618658097711785492504343953926634992332820282019728792003956564819966",
"-57896044618658097711785492504343953926634992332820282019728792003956564819968"
]
},
"1": {
"x": [{
"t": ["STRING_test", "STRING_TEST_MORE_THAN_32_BYTES_abcdefghijklmnopqrstuvwxyz_0000000111111222222"]
}],
"y": PackedByteArray([8, 0, 0, 0, 0, 0, 0, 0, 0, 0])
},
"2": "8eee12bd33ec72a277ffa9ddf246759878589d3b",
"3": "9"
}
var result_json = JSON.stringify(result)
var expected_json = JSON.stringify(expected_output)
if result_json == expected_json:
print("Result is correct")
return true
else:
print("Result is incorrect")
print("Expected:", expected_json)
print("Got:", result_json)
return false
func validate_result_array(result) -> bool:
var expected_output = [
[1, ["2", "3"], [[[[["STRING_TEST", "string_test"]]], PackedByteArray([4, 0, 0, 0, 0, 0, 0, 0, 0, 0])]], ["57896044618658097711785492504343953926634992332820282019728792003956564819967", "57896044618658097711785492504343953926634992332820282019728792003956564819966", "-57896044618658097711785492504343953926634992332820282019728792003956564819968"]],
[[[["STRING_test", "STRING_TEST_MORE_THAN_32_BYTES_abcdefghijklmnopqrstuvwxyz_0000000111111222222"]]], PackedByteArray([8, 0, 0, 0, 0, 0, 0, 0, 0, 0])],
"8eee12bd33ec72a277ffa9ddf246759878589d3b",
"9"
]
var result_json = JSON.stringify(result)
var expected_json = JSON.stringify(expected_output)
if result_json == expected_json:
print("Result is correct")
return true
else:
print("Result is incorrect")
print("Expected:", expected_json)
print("Got:", result_json)
return false
func test_abipack() -> void:
# create a new instance of the ABIHelper class and unmarshal the ABI JSON string into it
var h = ABIHelper.new()
var res = h.unmarshal_from_json(CONTRACT_ABI)
# var params = [
# [
# 1, # s.a
# [2, 3], # s.b
# [
# [
# [
# [
# ["test1ABCDEFGHIJKLMNOPQRSTUVWXYZ_000000000_more_than_32_bytes", "test2"], # s.c[0].x[0].t
# ], # s.c[0].x[0]
# # [],# s.c[0].x[1]
# # [],# s.c[0].x[1]
# ], # s.c[0].x
# 4, # s.c[0].y
# ], # s.c[0]
# ], # s.c
# [21,22,23], # s.d
# ], # s
# [
# [
# [
# ["test3", "test4"], # t.x[0].t
# ], # t.x[0].t
# ],
# 5, # t.y
# ], # t
# 6, # u
# "0x8eee12Bd33Ec72a277ffA9ddF246759878589D3b", # user
# [116, 119, 111, 101, 102, 103, 104, 105, 106, 107] #b10
# ]
var params = [
[
1, # s.a
[2, 3], # s.b
[
[
[
[
["STRING_TEST", "string_test"], # s.c[0].x[0].t
], # s.c[0].x[0]
], # s.c[0].x
[4, 0, 0, 0, 0, 0, 0, 0, 0, 0], # s.c[0].y
], # s.c[0]
], # s.c
[
# 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
"57896044618658097711785492504343953926634992332820282019728792003956564819967", # s.d[0]
# 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
"57896044618658097711785492504343953926634992332820282019728792003956564819966", # s.d[1]
146 # s.d[2]
], # s.d
], # s
[
[
[
["STRING_test", "STRING_TEST_MORE_THAN_32_BYTES_abcdefghijklmnopqrstuvwxyz_0000000111111222222"], # t.x[0].t
], # t.x[0]
], # t.x
[8, 0, 0, 0, 0, 0, 0, 0, 0, 0], # t.y
], # t
9, # u
"0x8eee12Bd33Ec72a277ffA9ddF246759878589D3b", # user
[116, 119, 111, 101, 102, 103, 104, 105, 106, 107] # b10
]
var packed = h.pack("f", params)
print("abi pack result: ", packed.hex_encode())
# Validate if the pack result is correct
var correct_packed = "4815d6c300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000090000000000000000000000008eee12bd33ec72a277ffa9ddf246759878589d3b74776f65666768696a6b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b535452494e475f54455354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b737472696e675f7465737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b535452494e475f74657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d535452494e475f544553545f4d4f52455f5448414e5f33325f42595445535f6162636465666768696a6b6c6d6e6f707172737475767778797a5f3030303030303031313131313132323232323200000000000000000000000000000000000000"
assert(correct_packed == packed.hex_encode(), "abi pack test failed!")
return
func test_abiunpack() -> void:
# create a new instance of the ABIHelper class and unmarshal the ABI JSON string into it
var h = ABIHelper.new()
var res = h.unmarshal_from_json(CONTRACT_ABI)
var callret = "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003600000000000000000000000008eee12bd33ec72a277ffa9ddf246759878589d3b0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b535452494e475f54455354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b737472696e675f7465737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b535452494e475f74657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d535452494e475f544553545f4d4f52455f5448414e5f33325f42595445535f6162636465666768696a6b6c6d6e6f707172737475767778797a5f3030303030303031313131313132323232323200000000000000000000000000000000000000"
print("========= unpack to dictionary ==============\n")
var result = {}
var err = h.unpack_into_dictionary("g", callret.hex_decode(), result)
if err != OK:
assert(false, "unpack_into_dictionary failed!")
# example correct output:
# { "0": { "a": 1, "b": ["2", "3"], "c": [{ "x": [{ "t": ["STRING_TEST", "string_test"] }], "y": [4, 0, 0, 0, 0, 0, 0, 0, 0, 0] }], "d": ["57896044618658097711785492504343953926634992332820282019728792003956564819967", "57896044618658097711785492504343953926634992332820282019728792003956564819966", "-57896044618658097711785492504343953926634992332820282019728792003956564819968"] }, "1": { "x": [{ "t": ["STRING_test", "STRING_TEST_MORE_THAN_32_BYTES_abcdefghijklmnopqrstuvwxyz_0000000111111222222"] }], "y": [8, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, "2": "8eee12bd33ec72a277ffa9ddf246759878589d3b", "3": "9" }
print("unpack_into_dictionary result: ", result)
assert(validate_result_dictionary(result), "unpack_into_dictionary validate result failed!")
print("\n========= unpack to array ==============\n")
result = []
err = h.unpack_into_array("g", callret.hex_decode(), result)
if err != OK:
assert(false, "unpack_into_array failed!")
# example correct output:
# [[1, ["2", "3"], [[[[["STRING_TEST", "string_test"]]], [4, 0, 0, 0, 0, 0, 0, 0, 0, 0]]], ["57896044618658097711785492504343953926634992332820282019728792003956564819967", "57896044618658097711785492504343953926634992332820282019728792003956564819966", "-57896044618658097711785492504343953926634992332820282019728792003956564819968"]], [[[["STRING_test", "STRING_TEST_MORE_THAN_32_BYTES_abcdefghijklmnopqrstuvwxyz_0000000111111222222"]]], [8, 0, 0, 0, 0, 0, 0, 0, 0, 0]], "8eee12bd33ec72a277ffa9ddf246759878589d3b", "9"]
print("unpack_into_array result: ", result)
assert(validate_result_array(result), "unpack_into_array validate result failed!")
print("\n=============== done ===================\n")
return
# The test case
func test_expected_behavior():
print("------> start test abi helper expected behavior <------")
test_abipack()
test_abiunpack()
print("------> abi helper expected behavior test done <------")
pass
func test_unexpected_behavior():
pass
# Run the test case
func _ready() -> void:
test_expected_behavior()
# test_unexpected_behavior()