-
Notifications
You must be signed in to change notification settings - Fork 151
Expand file tree
/
Copy pathgenerate_contract_function_param_methods.py
More file actions
executable file
·90 lines (85 loc) · 3.25 KB
/
generate_contract_function_param_methods.py
File metadata and controls
executable file
·90 lines (85 loc) · 3.25 KB
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
#!/usr/bin/env python3
int_versions = []
uint_versions = []
int_array_versions = []
uint_array_versions = []
# Does not generate 8 bit versions because those require some special treatment.
def add_with_param_type(bit_width, param_type, map_method_name, exception_comment=""):
int_versions.append(f"""/**
* Add a {bit_width}-bit integer.
*
* @param value The integer to be added
* @return {{@code this}}
*/
public ContractFunctionParameters addInt{bit_width}({param_type} value) {{
args.add(new Argument(\"int{bit_width}\", int256(value, {bit_width}), false));
return this;
}}
""")
uint_versions.append(f"""/**
* Add a {bit_width}-bit unsigned integer.
*
* The value will be treated as unsigned during encoding (it will be zero-padded instead of
* sign-extended to 32 bytes).
*
* @param value The integer to be added
* @return {{@code this}}
{exception_comment}*/
public ContractFunctionParameters addUint{bit_width}({param_type} value) {{
args.add(new Argument(\"uint{bit_width}\", uint256(value, {bit_width}), false));
return this;
}}
""")
int_array_versions.append(f"""/**
* Add a dynamic array of {bit_width}-bit integers.
*
* @param intArray The array of integers to be added
* @return {{@code this}}
*/
public ContractFunctionParameters addInt{bit_width}Array({param_type}[] intArray) {{
ByteString arrayBytes = ByteString.copyFrom(
J8Arrays.stream(intArray).{map_method_name}(i -> int256(i, {bit_width}))
.collect(Collectors.toList()));
arrayBytes = uint256(intArray.length, 32).concat(arrayBytes);
args.add(new Argument(\"int{bit_width}[]\", arrayBytes, true));
return this;
}}
""")
uint_array_versions.append(f"""/**
* Add a dynamic array of {bit_width}-bit unsigned integers.
*
* The value will be treated as unsigned during encoding (it will be zero-padded instead of
* sign-extended to 32 bytes).
*
* @param intArray The array of integers to be added
* @return {{@code this}}
{exception_comment}*/
public ContractFunctionParameters addUint{bit_width}Array({param_type}[] intArray) {{
ByteString arrayBytes = ByteString.copyFrom(
J8Arrays.stream(intArray).{map_method_name}(i -> uint256(i, {bit_width}))
.collect(Collectors.toList()));
arrayBytes = uint256(intArray.length, 32).concat(arrayBytes);
args.add(new Argument(\"uint{bit_width}[]\", arrayBytes, true));
return this;
}}
""")
for bit_width in range(16, 257, 8):
if bit_width <= 32:
add_with_param_type(bit_width, "int", "mapToObj")
elif bit_width <= 64:
add_with_param_type(bit_width, "long", "mapToObj")
else:
add_with_param_type(bit_width, "BigInteger", "map", "* @throws IllegalArgumentException if {@code bigInt.signum() < 0}.\n")
with open("output.txt", "w") as f:
f.write("// XXXXXXXXXXXXXXXXXXXX INT VERSIONS XXXXXXXXXXXXXXXXXXXX\n\n")
for v in int_versions:
f.write(v + "\n")
f.write("// XXXXXXXXXXXXXXXXXXXX UINT VERSIONS XXXXXXXXXXXXXXXXXXXX\n\n")
for v in uint_versions:
f.write(v + "\n")
f.write("// XXXXXXXXXXXXXXXXXXXX INT ARRAY VERSIONS XXXXXXXXXXXXXXXXXXXX\n\n")
for v in int_array_versions:
f.write(v + "\n")
f.write("// XXXXXXXXXXXXXXXXXXXX UINT ARRAY VERSIONS XXXXXXXXXXXXXXXXXXXX\n\n")
for v in uint_array_versions:
f.write(v + "\n")