Skip to content

Commit bf05c3e

Browse files
authored
feat: add token abi (#177)
1 parent f979ea5 commit bf05c3e

File tree

6 files changed

+393
-0
lines changed

6 files changed

+393
-0
lines changed

crypto/enums/contract_abi_type.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ class ContractAbiType(Enum):
44
CUSTOM = 'custom'
55
CONSENSUS = 'consensus'
66
MULTIPAYMENT = 'multipayment'
7+
TOKEN = 'token'
78
USERNAMES = 'usernames'
Lines changed: 345 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,345 @@
1+
{
2+
"_format": "hh-sol-artifact-1",
3+
"contractName": "TOKEN",
4+
"sourceName": "*/TOKEN.sol",
5+
"abi": [
6+
{
7+
"inputs": [],
8+
"stateMutability": "nonpayable",
9+
"type": "constructor"
10+
},
11+
{
12+
"inputs": [
13+
{
14+
"internalType": "address",
15+
"name": "spender",
16+
"type": "address"
17+
},
18+
{
19+
"internalType": "uint256",
20+
"name": "allowance",
21+
"type": "uint256"
22+
},
23+
{
24+
"internalType": "uint256",
25+
"name": "needed",
26+
"type": "uint256"
27+
}
28+
],
29+
"name": "ERC20InsufficientAllowance",
30+
"type": "error"
31+
},
32+
{
33+
"inputs": [
34+
{
35+
"internalType": "address",
36+
"name": "sender",
37+
"type": "address"
38+
},
39+
{
40+
"internalType": "uint256",
41+
"name": "balance",
42+
"type": "uint256"
43+
},
44+
{
45+
"internalType": "uint256",
46+
"name": "needed",
47+
"type": "uint256"
48+
}
49+
],
50+
"name": "ERC20InsufficientBalance",
51+
"type": "error"
52+
},
53+
{
54+
"inputs": [
55+
{
56+
"internalType": "address",
57+
"name": "approver",
58+
"type": "address"
59+
}
60+
],
61+
"name": "ERC20InvalidApprover",
62+
"type": "error"
63+
},
64+
{
65+
"inputs": [
66+
{
67+
"internalType": "address",
68+
"name": "receiver",
69+
"type": "address"
70+
}
71+
],
72+
"name": "ERC20InvalidReceiver",
73+
"type": "error"
74+
},
75+
{
76+
"inputs": [
77+
{
78+
"internalType": "address",
79+
"name": "sender",
80+
"type": "address"
81+
}
82+
],
83+
"name": "ERC20InvalidSender",
84+
"type": "error"
85+
},
86+
{
87+
"inputs": [
88+
{
89+
"internalType": "address",
90+
"name": "spender",
91+
"type": "address"
92+
}
93+
],
94+
"name": "ERC20InvalidSpender",
95+
"type": "error"
96+
},
97+
{
98+
"anonymous": false,
99+
"inputs": [
100+
{
101+
"indexed": true,
102+
"internalType": "address",
103+
"name": "owner",
104+
"type": "address"
105+
},
106+
{
107+
"indexed": true,
108+
"internalType": "address",
109+
"name": "spender",
110+
"type": "address"
111+
},
112+
{
113+
"indexed": false,
114+
"internalType": "uint256",
115+
"name": "value",
116+
"type": "uint256"
117+
}
118+
],
119+
"name": "Approval",
120+
"type": "event"
121+
},
122+
{
123+
"anonymous": false,
124+
"inputs": [
125+
{
126+
"indexed": true,
127+
"internalType": "address",
128+
"name": "from",
129+
"type": "address"
130+
},
131+
{
132+
"indexed": true,
133+
"internalType": "address",
134+
"name": "to",
135+
"type": "address"
136+
},
137+
{
138+
"indexed": false,
139+
"internalType": "uint256",
140+
"name": "value",
141+
"type": "uint256"
142+
}
143+
],
144+
"name": "Transfer",
145+
"type": "event"
146+
},
147+
{
148+
"inputs": [
149+
{
150+
"internalType": "address",
151+
"name": "owner",
152+
"type": "address"
153+
},
154+
{
155+
"internalType": "address",
156+
"name": "spender",
157+
"type": "address"
158+
}
159+
],
160+
"name": "allowance",
161+
"outputs": [
162+
{
163+
"internalType": "uint256",
164+
"name": "",
165+
"type": "uint256"
166+
}
167+
],
168+
"stateMutability": "view",
169+
"type": "function"
170+
},
171+
{
172+
"inputs": [
173+
{
174+
"internalType": "address",
175+
"name": "spender",
176+
"type": "address"
177+
},
178+
{
179+
"internalType": "uint256",
180+
"name": "value",
181+
"type": "uint256"
182+
}
183+
],
184+
"name": "approve",
185+
"outputs": [
186+
{
187+
"internalType": "bool",
188+
"name": "",
189+
"type": "bool"
190+
}
191+
],
192+
"stateMutability": "nonpayable",
193+
"type": "function"
194+
},
195+
{
196+
"inputs": [
197+
{
198+
"internalType": "address",
199+
"name": "account",
200+
"type": "address"
201+
}
202+
],
203+
"name": "balanceOf",
204+
"outputs": [
205+
{
206+
"internalType": "uint256",
207+
"name": "",
208+
"type": "uint256"
209+
}
210+
],
211+
"stateMutability": "view",
212+
"type": "function"
213+
},
214+
{
215+
"inputs": [
216+
{
217+
"internalType": "address[]",
218+
"name": "recipients",
219+
"type": "address[]"
220+
},
221+
{
222+
"internalType": "uint256[]",
223+
"name": "amounts",
224+
"type": "uint256[]"
225+
}
226+
],
227+
"name": "batchTransfer",
228+
"outputs": [
229+
{
230+
"internalType": "bool",
231+
"name": "",
232+
"type": "bool"
233+
}
234+
],
235+
"stateMutability": "nonpayable",
236+
"type": "function"
237+
},
238+
{
239+
"inputs": [],
240+
"name": "decimals",
241+
"outputs": [
242+
{
243+
"internalType": "uint8",
244+
"name": "",
245+
"type": "uint8"
246+
}
247+
],
248+
"stateMutability": "view",
249+
"type": "function"
250+
},
251+
{
252+
"inputs": [],
253+
"name": "name",
254+
"outputs": [
255+
{
256+
"internalType": "string",
257+
"name": "",
258+
"type": "string"
259+
}
260+
],
261+
"stateMutability": "view",
262+
"type": "function"
263+
},
264+
{
265+
"inputs": [],
266+
"name": "symbol",
267+
"outputs": [
268+
{
269+
"internalType": "string",
270+
"name": "",
271+
"type": "string"
272+
}
273+
],
274+
"stateMutability": "view",
275+
"type": "function"
276+
},
277+
{
278+
"inputs": [],
279+
"name": "totalSupply",
280+
"outputs": [
281+
{
282+
"internalType": "uint256",
283+
"name": "",
284+
"type": "uint256"
285+
}
286+
],
287+
"stateMutability": "view",
288+
"type": "function"
289+
},
290+
{
291+
"inputs": [
292+
{
293+
"internalType": "address",
294+
"name": "to",
295+
"type": "address"
296+
},
297+
{
298+
"internalType": "uint256",
299+
"name": "value",
300+
"type": "uint256"
301+
}
302+
],
303+
"name": "transfer",
304+
"outputs": [
305+
{
306+
"internalType": "bool",
307+
"name": "",
308+
"type": "bool"
309+
}
310+
],
311+
"stateMutability": "nonpayable",
312+
"type": "function"
313+
},
314+
{
315+
"inputs": [
316+
{
317+
"internalType": "address",
318+
"name": "from",
319+
"type": "address"
320+
},
321+
{
322+
"internalType": "address",
323+
"name": "to",
324+
"type": "address"
325+
},
326+
{
327+
"internalType": "uint256",
328+
"name": "value",
329+
"type": "uint256"
330+
}
331+
],
332+
"name": "transferFrom",
333+
"outputs": [
334+
{
335+
"internalType": "bool",
336+
"name": "",
337+
"type": "bool"
338+
}
339+
],
340+
"stateMutability": "nonpayable",
341+
"type": "function"
342+
}
343+
],
344+
"bytecode": "0x608060405234801561001057600080fd5b506040518060400160405280600681526020017f4441524b323000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4441524b32300000000000000000000000000000000000000000000000000000815250816003908161008c91906105bc565b50806004908161009c91906105bc565b5050506100ba336a52b7d2dcc80cd2e40000006100bf60201b60201c565b6107ae565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101315760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161012891906106cf565b60405180910390fd5b6101436000838361014760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361019957806002600082825461018d9190610719565b9250508190555061026c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610225578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161021c9392919061075c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b55780600260008282540392505081905550610302565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161035f9190610793565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806103ed57607f821691505b602082108103610400576103ff6103a6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026104687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261042b565b610472868361042b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006104b96104b46104af8461048a565b610494565b61048a565b9050919050565b6000819050919050565b6104d38361049e565b6104e76104df826104c0565b848454610438565b825550505050565b600090565b6104fc6104ef565b6105078184846104ca565b505050565b5b8181101561052b576105206000826104f4565b60018101905061050d565b5050565b601f8211156105705761054181610406565b61054a8461041b565b81016020851015610559578190505b61056d6105658561041b565b83018261050c565b50505b505050565b600082821c905092915050565b600061059360001984600802610575565b1980831691505092915050565b60006105ac8383610582565b9150826002028217905092915050565b6105c58261036c565b67ffffffffffffffff8111156105de576105dd610377565b5b6105e882546103d5565b6105f382828561052f565b600060209050601f8311600181146106265760008415610614578287015190505b61061e85826105a0565b865550610686565b601f19841661063486610406565b60005b8281101561065c57848901518255600182019150602085019450602081019050610637565b868310156106795784890151610675601f891682610582565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106b98261068e565b9050919050565b6106c9816106ae565b82525050565b60006020820190506106e460008301846106c0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006107248261048a565b915061072f8361048a565b9250828201905080821115610747576107466106ea565b5b92915050565b6107568161048a565b82525050565b600060608201905061077160008301866106c0565b61077e602083018561074d565b61078b604083018461074d565b949350505050565b60006020820190506107a8600083018461074d565b92915050565b611156806107bd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806370a082311161006657806370a082311461015d57806388d695b21461018d57806395d89b41146101bd578063a9059cbb146101db578063dd62ed3e1461020b5761009e565b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100f157806323b872dd1461010f578063313ce5671461013f575b600080fd5b6100ab61023b565b6040516100b89190610ba8565b60405180910390f35b6100db60048036038101906100d69190610c68565b6102cd565b6040516100e89190610cc3565b60405180910390f35b6100f96102f0565b6040516101069190610ced565b60405180910390f35b61012960048036038101906101249190610d08565b6102fa565b6040516101369190610cc3565b60405180910390f35b610147610329565b6040516101549190610d77565b60405180910390f35b61017760048036038101906101729190610d92565b610332565b6040516101849190610ced565b60405180910390f35b6101a760048036038101906101a29190610e7a565b61037a565b6040516101b49190610cc3565b60405180910390f35b6101c561043e565b6040516101d29190610ba8565b60405180910390f35b6101f560048036038101906101f09190610c68565b6104d0565b6040516102029190610cc3565b60405180910390f35b61022560048036038101906102209190610efb565b6104f3565b6040516102329190610ced565b60405180910390f35b60606003805461024a90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461027690610f6a565b80156102c35780601f10610298576101008083540402835291602001916102c3565b820191906000526020600020905b8154815290600101906020018083116102a657829003601f168201915b5050505050905090565b6000806102d861057a565b90506102e5818585610582565b600191505092915050565b6000600254905090565b60008061030561057a565b9050610312858285610594565b61031d858585610628565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008282905085859050146103c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bb9061100d565b60405180910390fd5b60005b85859050811015610431576104246103dd61057a565b8787848181106103f0576103ef61102d565b5b90506020020160208101906104059190610d92565b8686858181106104185761041761102d565b5b90506020020135610628565b80806001019150506103c7565b5060019050949350505050565b60606004805461044d90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461047990610f6a565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b6000806104db61057a565b90506104e8818585610628565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b61058f838383600161071c565b505050565b60006105a084846104f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106225781811015610612578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106099392919061106b565b60405180910390fd5b6106218484848403600061071c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361069a5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161069191906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361070c5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161070391906110a2565b60405180910390fd5b6107178383836108f3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361078e5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161078591906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108005760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107f791906110a2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156108ed578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e49190610ced565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361094557806002600082825461093991906110ec565b92505081905550610a18565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109c89392919061106b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a615780600260008282540392505081905550610aae565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0b9190610ced565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b52578082015181840152602081019050610b37565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7a82610b18565b610b848185610b23565b9350610b94818560208601610b34565b610b9d81610b5e565b840191505092915050565b60006020820190508181036000830152610bc28184610b6f565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bff82610bd4565b9050919050565b610c0f81610bf4565b8114610c1a57600080fd5b50565b600081359050610c2c81610c06565b92915050565b6000819050919050565b610c4581610c32565b8114610c5057600080fd5b50565b600081359050610c6281610c3c565b92915050565b60008060408385031215610c7f57610c7e610bca565b5b6000610c8d85828601610c1d565b9250506020610c9e85828601610c53565b9150509250929050565b60008115159050919050565b610cbd81610ca8565b82525050565b6000602082019050610cd86000830184610cb4565b92915050565b610ce781610c32565b82525050565b6000602082019050610d026000830184610cde565b92915050565b600080600060608486031215610d2157610d20610bca565b5b6000610d2f86828701610c1d565b9350506020610d4086828701610c1d565b9250506040610d5186828701610c53565b9150509250925092565b600060ff82169050919050565b610d7181610d5b565b82525050565b6000602082019050610d8c6000830184610d68565b92915050565b600060208284031215610da857610da7610bca565b5b6000610db684828501610c1d565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610de457610de3610dbf565b5b8235905067ffffffffffffffff811115610e0157610e00610dc4565b5b602083019150836020820283011115610e1d57610e1c610dc9565b5b9250929050565b60008083601f840112610e3a57610e39610dbf565b5b8235905067ffffffffffffffff811115610e5757610e56610dc4565b5b602083019150836020820283011115610e7357610e72610dc9565b5b9250929050565b60008060008060408587031215610e9457610e93610bca565b5b600085013567ffffffffffffffff811115610eb257610eb1610bcf565b5b610ebe87828801610dce565b9450945050602085013567ffffffffffffffff811115610ee157610ee0610bcf565b5b610eed87828801610e24565b925092505092959194509250565b60008060408385031215610f1257610f11610bca565b5b6000610f2085828601610c1d565b9250506020610f3185828601610c1d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f8257607f821691505b602082108103610f9557610f94610f3b565b5b50919050565b7f726563697069656e747320616e6420616d6f756e7473206c656e677468206d6960008201527f736d617463680000000000000000000000000000000000000000000000000000602082015250565b6000610ff7602683610b23565b915061100282610f9b565b604082019050919050565b6000602082019050818103600083015261102681610fea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61106581610bf4565b82525050565b6000606082019050611080600083018661105c565b61108d6020830185610cde565b61109a6040830184610cde565b949350505050565b60006020820190506110b7600083018461105c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110f782610c32565b915061110283610c32565b925082820190508082111561111a576111196110bd565b5b9291505056fea2646970667358221220fdbfd2ff5d7f60018cd1ba9f99f9038e758419b539d4a76b8c9148f3b4c10b6b64736f6c634300081a0033"
345+
}

crypto/utils/abi_base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ def __contract_abi_path(self, abi_type: ContractAbiType, path: Optional[str] = N
6565
if abi_type == ContractAbiType.MULTIPAYMENT:
6666
return os.path.join(os.path.dirname(__file__), 'abi/json', 'Abi.Multipayment.json')
6767

68+
if abi_type == ContractAbiType.TOKEN:
69+
return os.path.join(os.path.dirname(__file__), 'abi/json', 'Abi.Token.json')
70+
6871
if abi_type == ContractAbiType.USERNAMES:
6972
return os.path.join(os.path.dirname(__file__), 'abi/json', 'Abi.Usernames.json')
7073

tests/utils/test_abi_base.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
1+
from crypto.enums.contract_abi_type import ContractAbiType
12
from crypto.utils.abi_base import AbiBase
23

34

5+
def test_it_should_load_token_abi():
6+
abi_base = AbiBase(ContractAbiType.TOKEN)
7+
function_names = [
8+
item['name'] for item in abi_base.abi if item.get('type') == 'function'
9+
]
10+
assert 'transfer' in function_names
11+
assert 'approve' in function_names
12+
assert 'balanceOf' in function_names
13+
assert 'totalSupply' in function_names
14+
assert 'allowance' in function_names
15+
16+
417
def test_it_should_validate_uppercase_addresses():
518
assert AbiBase().is_valid_address('0xC3bBE9B1CeE1ff85Ad72b87414B0E9B7F2366763') is True
619

0 commit comments

Comments
 (0)