slither.utils.erc

  1from collections import namedtuple
  2from typing import List
  3
  4ERC = namedtuple("ERC", ["name", "parameters", "return_type", "view", "required", "events"])
  5ERC_EVENT = namedtuple("ERC_EVENT", ["name", "parameters", "indexes"])
  6
  7
  8def erc_to_signatures(erc: List[ERC]):
  9    """
 10    Return the list of mandatory signatures
 11    :param erc:
 12    :return:
 13    """
 14    return [f'{e.name}({",".join(e.parameters)})' for e in erc if e.required]
 15
 16
 17# Final
 18# https://eips.ethereum.org/EIPS/eip-20
 19
 20ERC20_transfer_event = ERC_EVENT("Transfer", ["address", "address", "uint256"], [True, True, False])
 21ERC20_approval_event = ERC_EVENT("Approval", ["address", "address", "uint256"], [True, True, False])
 22ERC20_EVENTS = [ERC20_transfer_event, ERC20_approval_event]
 23
 24ERC20 = [
 25    ERC("totalSupply", [], "uint256", True, True, []),
 26    ERC("balanceOf", ["address"], "uint256", True, True, []),
 27    ERC("transfer", ["address", "uint256"], "bool", False, True, [ERC20_transfer_event]),
 28    ERC(
 29        "transferFrom",
 30        ["address", "address", "uint256"],
 31        "bool",
 32        False,
 33        True,
 34        [ERC20_transfer_event],
 35    ),
 36    ERC("approve", ["address", "uint256"], "bool", False, True, [ERC20_approval_event]),
 37    ERC("allowance", ["address", "address"], "uint256", True, True, []),
 38]
 39
 40ERC20_OPTIONAL = [
 41    ERC("name", [], "string", True, False, []),
 42    ERC("symbol", [], "string", True, False, []),
 43    ERC("decimals", [], "uint8", True, False, []),
 44]
 45
 46ERC20 = ERC20 + ERC20_OPTIONAL
 47
 48ERC20_signatures = erc_to_signatures(ERC20)
 49
 50# Draft
 51# https://github.com/ethereum/eips/issues/223
 52
 53ERC223_transfer_event = ERC_EVENT(
 54    "Transfer", ["address", "address", "uint256", "bytes"], [True, True, False, False]
 55)
 56
 57ERC223_EVENTS = [ERC223_transfer_event]
 58
 59ERC223 = [
 60    ERC("name", [], "string", True, True, []),
 61    ERC("symbol", [], "string", True, True, []),
 62    ERC("decimals", [], "uint8", True, True, []),
 63    ERC("totalSupply", [], "uint256", True, True, []),
 64    ERC("balanceOf", ["address"], "uint256", True, True, []),
 65    ERC("transfer", ["address", "uint256"], "bool", False, True, [ERC223_transfer_event]),
 66    ERC(
 67        "transfer",
 68        ["address", "uint256", "bytes"],
 69        "bool",
 70        False,
 71        True,
 72        [ERC223_transfer_event],
 73    ),
 74    ERC(
 75        "transfer",
 76        ["address", "uint256", "bytes", "string"],
 77        "bool",
 78        False,
 79        True,
 80        [ERC223_transfer_event],
 81    ),
 82]
 83ERC223_signatures = erc_to_signatures(ERC223)
 84
 85# Final
 86# https://eips.ethereum.org/EIPS/eip-165
 87
 88ERC165_EVENTS: List = []
 89
 90ERC165 = [ERC("supportsInterface", ["bytes4"], "bool", True, True, [])]
 91ERC165_signatures = erc_to_signatures(ERC165)
 92
 93# Final
 94# https://eips.ethereum.org/EIPS/eip-721
 95# Must have ERC165
 96
 97ERC721_transfer_event = ERC_EVENT("Transfer", ["address", "address", "uint256"], [True, True, True])
 98ERC721_approval_event = ERC_EVENT("Approval", ["address", "address", "uint256"], [True, True, True])
 99ERC721_approvalforall_event = ERC_EVENT(
100    "ApprovalForAll", ["address", "address", "bool"], [True, True, False]
101)
102ERC721_EVENTS = [
103    ERC721_transfer_event,
104    ERC721_approval_event,
105    ERC721_approvalforall_event,
106]
107
108ERC721 = [
109    ERC("balanceOf", ["address"], "uint256", True, True, []),
110    ERC("ownerOf", ["uint256"], "address", True, True, []),
111    ERC(
112        "safeTransferFrom",
113        ["address", "address", "uint256", "bytes"],
114        "",
115        False,
116        True,
117        [ERC721_transfer_event],
118    ),
119    ERC(
120        "safeTransferFrom",
121        ["address", "address", "uint256"],
122        "",
123        False,
124        True,
125        [ERC721_transfer_event],
126    ),
127    ERC(
128        "transferFrom",
129        ["address", "address", "uint256"],
130        "",
131        False,
132        True,
133        [ERC721_transfer_event],
134    ),
135    ERC("approve", ["address", "uint256"], "", False, True, [ERC721_approval_event]),
136    ERC(
137        "setApprovalForAll",
138        ["address", "bool"],
139        "",
140        False,
141        True,
142        [ERC721_approvalforall_event],
143    ),
144    ERC("getApproved", ["uint256"], "address", True, True, []),
145    ERC("isApprovedForAll", ["address", "address"], "bool", True, True, []),
146] + ERC165
147
148ERC721_OPTIONAL = [
149    ERC("name", [], "string", True, False, []),
150    ERC("symbol", [], "string", False, False, []),
151    ERC("tokenURI", ["uint256"], "string", False, False, []),
152]
153
154ERC721 = ERC721 + ERC721_OPTIONAL
155
156ERC721_signatures = erc_to_signatures(ERC721)
157
158# Final
159# https://eips.ethereum.org/EIPS/eip-1820
160ERC1820_EVENTS: List = []
161ERC1820 = [
162    ERC(
163        "canImplementInterfaceForAddress",
164        ["bytes32", "address"],
165        "bytes32",
166        True,
167        True,
168        [],
169    )
170]
171ERC1820_signatures = erc_to_signatures(ERC1820)
172
173# Last Call
174# https://eips.ethereum.org/EIPS/eip-777
175ERC777_sent_event = ERC_EVENT(
176    "Sent",
177    ["address", "address", "address", "uint256", "bytes", "bytes"],
178    [True, True, True, False, False, False],
179)
180ERC777_minted_event = ERC_EVENT(
181    "Minted",
182    ["address", "address", "uint256", "bytes", "bytes"],
183    [True, True, False, False, False],
184)
185ERC777_burned_event = ERC_EVENT(
186    "Burned",
187    ["address", "address", "uint256", "bytes", "bytes"],
188    [True, True, False, False, False],
189)
190ERC777_authorizedOperator_event = ERC_EVENT(
191    "AuthorizedOperator", ["address", "address"], [True, True]
192)
193ERC777_revokedoperator_event = ERC_EVENT("RevokedOperator", ["address", "address"], [True, True])
194ERC777_EVENTS = [
195    ERC777_sent_event,
196    ERC777_minted_event,
197    ERC777_burned_event,
198    ERC777_authorizedOperator_event,
199    ERC777_revokedoperator_event,
200]
201
202ERC777 = [
203    ERC("name", [], "string", True, True, []),
204    ERC("symbol", [], "string", True, True, []),
205    ERC("totalSupply", [], "uint256", True, True, []),
206    ERC("balanceOf", ["address"], "uint256", True, True, []),
207    ERC("granularity", [], "uint256", True, True, []),
208    ERC("defaultOperators", [], "address[]", True, True, []),
209    ERC("isOperatorFor", ["address", "address"], "bool", True, True, []),
210    ERC(
211        "authorizeOperator",
212        ["address"],
213        "",
214        False,
215        True,
216        [ERC777_authorizedOperator_event],
217    ),
218    ERC("revokeOperator", ["address"], "", False, True, [ERC777_revokedoperator_event]),
219    ERC("send", ["address", "uint256", "bytes"], "", False, True, [ERC777_sent_event]),
220    ERC(
221        "operatorSend",
222        ["address", "address", "uint256", "bytes", "bytes"],
223        "",
224        False,
225        True,
226        [ERC777_sent_event],
227    ),
228    ERC("burn", ["uint256", "bytes"], "", False, True, [ERC777_burned_event]),
229    ERC(
230        "operatorBurn",
231        ["address", "uint256", "bytes", "bytes"],
232        "",
233        False,
234        True,
235        [ERC777_burned_event],
236    ),
237]
238ERC777_signatures = erc_to_signatures(ERC777)
239
240# Final
241# https://eips.ethereum.org/EIPS/eip-1155
242# Must have ERC165
243
244ERC1155_transfersingle_event = ERC_EVENT(
245    "TransferSingle",
246    ["address", "address", "address", "uint256", "uint256"],
247    [True, True, True, False, False],
248)
249
250ERC1155_transferbatch_event = ERC_EVENT(
251    "TransferBatch",
252    ["address", "address", "address", "uint256[]", "uint256[]"],
253    [True, True, True, False, False],
254)
255
256ERC1155_approvalforall_event = ERC_EVENT(
257    "ApprovalForAll",
258    ["address", "address", "bool"],
259    [True, True, False],
260)
261
262ERC1155_uri_event = ERC_EVENT(
263    "URI",
264    ["string", "uint256"],
265    [False, True],
266)
267
268ERC1155_EVENTS = [
269    ERC1155_transfersingle_event,
270    ERC1155_transferbatch_event,
271    ERC1155_approvalforall_event,
272    ERC1155_uri_event,
273]
274
275ERC1155 = [
276    ERC(
277        "safeTransferFrom",
278        ["address", "address", "uint256", "uint256", "bytes"],
279        "",
280        False,
281        True,
282        [ERC1155_transfersingle_event],
283    ),
284    ERC(
285        "safeBatchTransferFrom",
286        ["address", "address", "uint256[]", "uint256[]", "bytes"],
287        "",
288        False,
289        True,
290        [],
291    ),
292    ERC("balanceOf", ["address", "uint256"], "uint256", True, True, []),
293    ERC("balanceOfBatch", ["address[]", "uint256[]"], "uint256[]", True, True, []),
294    ERC("setApprovalForAll", ["address", "bool"], "", False, True, [ERC1155_approvalforall_event]),
295    ERC("isApprovedForAll", ["address", "address"], "bool", True, True, []),
296] + ERC165
297
298ERC1155_TOKEN_RECEIVER = [
299    ERC(
300        "onERC1155Received",
301        ["address", "address", "uint256", "uint256", "bytes"],
302        "bytes4",
303        False,
304        False,
305        [],
306    ),
307    ERC(
308        "onERC1155BatchReceived",
309        ["address", "address", "uint256[]", "uint256[]", "bytes"],
310        "bytes4",
311        False,
312        False,
313        [],
314    ),
315]
316
317ERC1155_METADATA = [ERC("uri", ["uint256"], "string", True, False, [])]
318
319ERC1155 = ERC1155 + ERC1155_TOKEN_RECEIVER + ERC1155_METADATA
320
321ERC1155_signatures = erc_to_signatures(ERC1155)
322
323# Review
324# https://eips.ethereum.org/EIPS/eip-2612
325# Must have ERC20
326
327ERC2612_EVENTS = []
328ERC2612 = [
329    ERC(
330        "permit",
331        ["address", "address", "uint256", "uint256", "uint8", "bytes32", "bytes32"],
332        "",
333        False,
334        True,
335        [],
336    ),
337    ERC("nonces", ["address"], "uint256", True, True, []),
338    ERC("DOMAIN_SEPARATOR", [], "bytes32", True, True, []),
339] + ERC20
340
341ERC2612_signatures = erc_to_signatures(ERC2612)
342
343# Review
344# https://eips.ethereum.org/EIPS/eip-1363
345# Must have ERC20 and ERC165
346
347ERC1363_EVENTS = []
348ERC1363 = (
349    [
350        ERC("transferAndCall", ["address", "uint256"], "bool", False, True, []),
351        ERC("transferAndCall", ["address", "uint256", "bytes"], "bool", False, True, []),
352        ERC("transferFromAndCall", ["address", "address", "uint256"], "bool", False, True, []),
353        ERC(
354            "transferFromAndCall",
355            ["address", "address", "uint256", "bytes"],
356            "bool",
357            False,
358            True,
359            [],
360        ),
361        ERC("approveAndCall", ["address", "uint256"], "bool", False, True, []),
362        ERC("approveAndCall", ["address", "uint256", "bytes"], "bool", False, True, []),
363    ]
364    + ERC20
365    + ERC165
366)
367
368ERC1363_signatures = erc_to_signatures(ERC1363)
369
370# Review
371# https://eips.ethereum.org/EIPS/eip-4524
372# Must have ERC20 and ERC165
373
374ERC4524_EVENTS = []
375ERC4524 = (
376    [
377        ERC("safeTransfer", ["address", "uint256"], "bool", False, True, []),
378        ERC("safeTransfer", ["address", "uint256", "bytes"], "bool", False, True, []),
379        ERC("safeTransferFrom", ["address", "address", "uint256"], "bool", False, True, []),
380        ERC(
381            "safeTransferFrom", ["address", "address", "uint256", "bytes"], "bool", False, True, []
382        ),
383    ]
384    + ERC20
385    + ERC165
386)
387
388ERC4524_signatures = erc_to_signatures(ERC4524)
389
390# Final
391# https://eips.ethereum.org/EIPS/eip-4626
392# Must have ERC20
393
394ERC4626_deposit_event = ERC_EVENT(
395    "Deposit",
396    ["address", "address", "uint256", "uint256"],
397    [True, True, False, False],
398)
399
400ERC4626_withdraw_event = ERC_EVENT(
401    "Withdraw",
402    ["address", "address", "address", "uint256", "uint256"],
403    [True, True, True, False, False],
404)
405
406ERC4626_EVENTS = [
407    ERC4626_deposit_event,
408    ERC4626_withdraw_event,
409]
410
411ERC4626 = [
412    ERC("asset", [], "address", True, True, []),
413    ERC("totalAssets", [], "uint256", True, True, []),
414    ERC("convertToShares", ["uint256"], "uint256", True, True, []),
415    ERC("convertToAssets", ["uint256"], "uint256", True, True, []),
416    ERC("maxDeposit", ["address"], "uint256", True, True, []),
417    ERC("previewDeposit", ["uint256"], "uint256", True, True, []),
418    ERC("deposit", ["uint256", "address"], "uint256", False, True, [ERC4626_deposit_event]),
419    ERC("maxMint", ["address"], "uint256", True, True, []),
420    ERC("previewMint", ["uint256"], "uint256", True, True, []),
421    ERC("mint", ["uint256", "address"], "uint256", False, True, [ERC4626_deposit_event]),
422    ERC("maxWithdraw", ["address"], "uint256", True, True, []),
423    ERC("previewWithdraw", ["uint256"], "uint256", True, True, []),
424    ERC(
425        "withdraw",
426        ["uint256", "address", "address"],
427        "uint256",
428        False,
429        True,
430        [ERC4626_withdraw_event],
431    ),
432    ERC("maxRedeem", ["address"], "uint256", True, True, []),
433    ERC("previewRedeem", ["uint256"], "uint256", True, True, []),
434    ERC(
435        "redeem",
436        ["uint256", "address", "address"],
437        "uint256",
438        False,
439        True,
440        [ERC4626_withdraw_event],
441    ),
442] + ERC20
443
444ERC4626_signatures = erc_to_signatures(ERC4626)
445
446ERCS = {
447    "ERC20": (ERC20, ERC20_EVENTS),
448    "ERC223": (ERC223, ERC223_EVENTS),
449    "ERC165": (ERC165, ERC165_EVENTS),
450    "ERC721": (ERC721, ERC721_EVENTS),
451    "ERC1820": (ERC1820, ERC1820_EVENTS),
452    "ERC777": (ERC777, ERC777_EVENTS),
453    "ERC1155": (ERC1155, ERC1155_EVENTS),
454    "ERC2612": (ERC2612, ERC2612_EVENTS),
455    "ERC1363": (ERC1363, ERC1363_EVENTS),
456    "ERC4524": (ERC4524, ERC4524_EVENTS),
457    "ERC4626": (ERC4626, ERC4626_EVENTS),
458}
class ERC(builtins.tuple):

ERC(name, parameters, return_type, view, required, events)

ERC(name, parameters, return_type, view, required, events)

Create new instance of ERC(name, parameters, return_type, view, required, events)

name

Alias for field number 0

parameters

Alias for field number 1

return_type

Alias for field number 2

view

Alias for field number 3

required

Alias for field number 4

events

Alias for field number 5

Inherited Members
builtins.tuple
index
count
class ERC_EVENT(builtins.tuple):

ERC_EVENT(name, parameters, indexes)

ERC_EVENT(name, parameters, indexes)

Create new instance of ERC_EVENT(name, parameters, indexes)

name

Alias for field number 0

parameters

Alias for field number 1

indexes

Alias for field number 2

Inherited Members
builtins.tuple
index
count
def erc_to_signatures(erc: List[ERC]):
 9def erc_to_signatures(erc: List[ERC]):
10    """
11    Return the list of mandatory signatures
12    :param erc:
13    :return:
14    """
15    return [f'{e.name}({",".join(e.parameters)})' for e in erc if e.required]

Return the list of mandatory signatures

Parameters
  • erc:
Returns
ERC20_transfer_event = ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])
ERC20_approval_event = ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])
ERC20_EVENTS = [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False]), ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]
ERC20 = [ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])]
ERC20_OPTIONAL = [ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])]
ERC20_signatures = ['totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'allowance(address,address)']
ERC223_transfer_event = ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])
ERC223_EVENTS = [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]
ERC223 = [ERC(name='name', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]), ERC(name='transfer', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]), ERC(name='transfer', parameters=['address', 'uint256', 'bytes', 'string'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])])]
ERC223_signatures = ['name()', 'symbol()', 'decimals()', 'totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transfer(address,uint256,bytes)', 'transfer(address,uint256,bytes,string)']
ERC165_EVENTS: List = []
ERC165 = [ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])]
ERC165_signatures = ['supportsInterface(bytes4)']
ERC721_transfer_event = ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])
ERC721_approval_event = ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])
ERC721_approvalforall_event = ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])
ERC721_EVENTS = [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True]), ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, True]), ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]
ERC721 = [ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='ownerOf', parameters=['uint256'], return_type='address', view=True, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='setApprovalForAll', parameters=['address', 'bool'], return_type='', view=False, required=True, events=[ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]), ERC(name='getApproved', parameters=['uint256'], return_type='address', view=True, required=True, events=[]), ERC(name='isApprovedForAll', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=False, required=False, events=[]), ERC(name='tokenURI', parameters=['uint256'], return_type='string', view=False, required=False, events=[])]
ERC721_OPTIONAL = [ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=False, required=False, events=[]), ERC(name='tokenURI', parameters=['uint256'], return_type='string', view=False, required=False, events=[])]
ERC721_signatures = ['balanceOf(address)', 'ownerOf(uint256)', 'safeTransferFrom(address,address,uint256,bytes)', 'safeTransferFrom(address,address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'setApprovalForAll(address,bool)', 'getApproved(uint256)', 'isApprovedForAll(address,address)', 'supportsInterface(bytes4)']
ERC1820_EVENTS: List = []
ERC1820 = [ERC(name='canImplementInterfaceForAddress', parameters=['bytes32', 'address'], return_type='bytes32', view=True, required=True, events=[])]
ERC1820_signatures = ['canImplementInterfaceForAddress(bytes32,address)']
ERC777_sent_event = ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False])
ERC777_minted_event = ERC_EVENT(name='Minted', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])
ERC777_burned_event = ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])
ERC777_authorizedOperator_event = ERC_EVENT(name='AuthorizedOperator', parameters=['address', 'address'], indexes=[True, True])
ERC777_revokedoperator_event = ERC_EVENT(name='RevokedOperator', parameters=['address', 'address'], indexes=[True, True])
ERC777_EVENTS = [ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False]), ERC_EVENT(name='Minted', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False]), ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False]), ERC_EVENT(name='AuthorizedOperator', parameters=['address', 'address'], indexes=[True, True]), ERC_EVENT(name='RevokedOperator', parameters=['address', 'address'], indexes=[True, True])]
ERC777 = [ERC(name='name', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='granularity', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='defaultOperators', parameters=[], return_type='address[]', view=True, required=True, events=[]), ERC(name='isOperatorFor', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='authorizeOperator', parameters=['address'], return_type='', view=False, required=True, events=[ERC_EVENT(name='AuthorizedOperator', parameters=['address', 'address'], indexes=[True, True])]), ERC(name='revokeOperator', parameters=['address'], return_type='', view=False, required=True, events=[ERC_EVENT(name='RevokedOperator', parameters=['address', 'address'], indexes=[True, True])]), ERC(name='send', parameters=['address', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False])]), ERC(name='operatorSend', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False])]), ERC(name='burn', parameters=['uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])]), ERC(name='operatorBurn', parameters=['address', 'uint256', 'bytes', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])])]
ERC777_signatures = ['name()', 'symbol()', 'totalSupply()', 'balanceOf(address)', 'granularity()', 'defaultOperators()', 'isOperatorFor(address,address)', 'authorizeOperator(address)', 'revokeOperator(address)', 'send(address,uint256,bytes)', 'operatorSend(address,address,uint256,bytes,bytes)', 'burn(uint256,bytes)', 'operatorBurn(address,uint256,bytes,bytes)']
ERC1155_transfersingle_event = ERC_EVENT(name='TransferSingle', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])
ERC1155_transferbatch_event = ERC_EVENT(name='TransferBatch', parameters=['address', 'address', 'address', 'uint256[]', 'uint256[]'], indexes=[True, True, True, False, False])
ERC1155_approvalforall_event = ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])
ERC1155_uri_event = ERC_EVENT(name='URI', parameters=['string', 'uint256'], indexes=[False, True])
ERC1155_EVENTS = [ERC_EVENT(name='TransferSingle', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False]), ERC_EVENT(name='TransferBatch', parameters=['address', 'address', 'address', 'uint256[]', 'uint256[]'], indexes=[True, True, True, False, False]), ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False]), ERC_EVENT(name='URI', parameters=['string', 'uint256'], indexes=[False, True])]
ERC1155 = [ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='TransferSingle', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='safeBatchTransferFrom', parameters=['address', 'address', 'uint256[]', 'uint256[]', 'bytes'], return_type='', view=False, required=True, events=[]), ERC(name='balanceOf', parameters=['address', 'uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOfBatch', parameters=['address[]', 'uint256[]'], return_type='uint256[]', view=True, required=True, events=[]), ERC(name='setApprovalForAll', parameters=['address', 'bool'], return_type='', view=False, required=True, events=[ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]), ERC(name='isApprovedForAll', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[]), ERC(name='onERC1155Received', parameters=['address', 'address', 'uint256', 'uint256', 'bytes'], return_type='bytes4', view=False, required=False, events=[]), ERC(name='onERC1155BatchReceived', parameters=['address', 'address', 'uint256[]', 'uint256[]', 'bytes'], return_type='bytes4', view=False, required=False, events=[]), ERC(name='uri', parameters=['uint256'], return_type='string', view=True, required=False, events=[])]
ERC1155_TOKEN_RECEIVER = [ERC(name='onERC1155Received', parameters=['address', 'address', 'uint256', 'uint256', 'bytes'], return_type='bytes4', view=False, required=False, events=[]), ERC(name='onERC1155BatchReceived', parameters=['address', 'address', 'uint256[]', 'uint256[]', 'bytes'], return_type='bytes4', view=False, required=False, events=[])]
ERC1155_METADATA = [ERC(name='uri', parameters=['uint256'], return_type='string', view=True, required=False, events=[])]
ERC1155_signatures = ['safeTransferFrom(address,address,uint256,uint256,bytes)', 'safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)', 'balanceOf(address,uint256)', 'balanceOfBatch(address[],uint256[])', 'setApprovalForAll(address,bool)', 'isApprovedForAll(address,address)', 'supportsInterface(bytes4)']
ERC2612_EVENTS = []
ERC2612 = [ERC(name='permit', parameters=['address', 'address', 'uint256', 'uint256', 'uint8', 'bytes32', 'bytes32'], return_type='', view=False, required=True, events=[]), ERC(name='nonces', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='DOMAIN_SEPARATOR', parameters=[], return_type='bytes32', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])]
ERC2612_signatures = ['permit(address,address,uint256,uint256,uint8,bytes32,bytes32)', 'nonces(address)', 'DOMAIN_SEPARATOR()', 'totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'allowance(address,address)']
ERC1363_EVENTS = []
ERC1363 = [ERC(name='transferAndCall', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferAndCall', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferFromAndCall', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferFromAndCall', parameters=['address', 'address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='approveAndCall', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='approveAndCall', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])]
ERC1363_signatures = ['transferAndCall(address,uint256)', 'transferAndCall(address,uint256,bytes)', 'transferFromAndCall(address,address,uint256)', 'transferFromAndCall(address,address,uint256,bytes)', 'approveAndCall(address,uint256)', 'approveAndCall(address,uint256,bytes)', 'totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'allowance(address,address)', 'supportsInterface(bytes4)']
ERC4524_EVENTS = []
ERC4524 = [ERC(name='safeTransfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransfer', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])]
ERC4524_signatures = ['safeTransfer(address,uint256)', 'safeTransfer(address,uint256,bytes)', 'safeTransferFrom(address,address,uint256)', 'safeTransferFrom(address,address,uint256,bytes)', 'totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'allowance(address,address)', 'supportsInterface(bytes4)']
ERC4626_deposit_event = ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False])
ERC4626_withdraw_event = ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])
ERC4626_EVENTS = [ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False]), ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]
ERC4626 = [ERC(name='asset', parameters=[], return_type='address', view=True, required=True, events=[]), ERC(name='totalAssets', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='convertToShares', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='convertToAssets', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='maxDeposit', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewDeposit', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='deposit', parameters=['uint256', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False])]), ERC(name='maxMint', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewMint', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='mint', parameters=['uint256', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False])]), ERC(name='maxWithdraw', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewWithdraw', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='withdraw', parameters=['uint256', 'address', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='maxRedeem', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewRedeem', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='redeem', parameters=['uint256', 'address', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])]
ERC4626_signatures = ['asset()', 'totalAssets()', 'convertToShares(uint256)', 'convertToAssets(uint256)', 'maxDeposit(address)', 'previewDeposit(uint256)', 'deposit(uint256,address)', 'maxMint(address)', 'previewMint(uint256)', 'mint(uint256,address)', 'maxWithdraw(address)', 'previewWithdraw(uint256)', 'withdraw(uint256,address,address)', 'maxRedeem(address)', 'previewRedeem(uint256)', 'redeem(uint256,address,address)', 'totalSupply()', 'balanceOf(address)', 'transfer(address,uint256)', 'transferFrom(address,address,uint256)', 'approve(address,uint256)', 'allowance(address,address)']
ERCS = {'ERC20': ([ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])], [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False]), ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), 'ERC223': ([ERC(name='name', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]), ERC(name='transfer', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]), ERC(name='transfer', parameters=['address', 'uint256', 'bytes', 'string'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])])], [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256', 'bytes'], indexes=[True, True, False, False])]), 'ERC165': ([ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])], []), 'ERC721': ([ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='ownerOf', parameters=['uint256'], return_type='address', view=True, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, True])]), ERC(name='setApprovalForAll', parameters=['address', 'bool'], return_type='', view=False, required=True, events=[ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]), ERC(name='getApproved', parameters=['uint256'], return_type='address', view=True, required=True, events=[]), ERC(name='isApprovedForAll', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=False, required=False, events=[]), ERC(name='tokenURI', parameters=['uint256'], return_type='string', view=False, required=False, events=[])], [ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, True]), ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, True]), ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]), 'ERC1820': ([ERC(name='canImplementInterfaceForAddress', parameters=['bytes32', 'address'], return_type='bytes32', view=True, required=True, events=[])], []), 'ERC777': ([ERC(name='name', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='granularity', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='defaultOperators', parameters=[], return_type='address[]', view=True, required=True, events=[]), ERC(name='isOperatorFor', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='authorizeOperator', parameters=['address'], return_type='', view=False, required=True, events=[ERC_EVENT(name='AuthorizedOperator', parameters=['address', 'address'], indexes=[True, True])]), ERC(name='revokeOperator', parameters=['address'], return_type='', view=False, required=True, events=[ERC_EVENT(name='RevokedOperator', parameters=['address', 'address'], indexes=[True, True])]), ERC(name='send', parameters=['address', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False])]), ERC(name='operatorSend', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False])]), ERC(name='burn', parameters=['uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])]), ERC(name='operatorBurn', parameters=['address', 'uint256', 'bytes', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False])])], [ERC_EVENT(name='Sent', parameters=['address', 'address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, True, False, False, False]), ERC_EVENT(name='Minted', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False]), ERC_EVENT(name='Burned', parameters=['address', 'address', 'uint256', 'bytes', 'bytes'], indexes=[True, True, False, False, False]), ERC_EVENT(name='AuthorizedOperator', parameters=['address', 'address'], indexes=[True, True]), ERC_EVENT(name='RevokedOperator', parameters=['address', 'address'], indexes=[True, True])]), 'ERC1155': ([ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'uint256', 'bytes'], return_type='', view=False, required=True, events=[ERC_EVENT(name='TransferSingle', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='safeBatchTransferFrom', parameters=['address', 'address', 'uint256[]', 'uint256[]', 'bytes'], return_type='', view=False, required=True, events=[]), ERC(name='balanceOf', parameters=['address', 'uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOfBatch', parameters=['address[]', 'uint256[]'], return_type='uint256[]', view=True, required=True, events=[]), ERC(name='setApprovalForAll', parameters=['address', 'bool'], return_type='', view=False, required=True, events=[ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False])]), ERC(name='isApprovedForAll', parameters=['address', 'address'], return_type='bool', view=True, required=True, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[]), ERC(name='onERC1155Received', parameters=['address', 'address', 'uint256', 'uint256', 'bytes'], return_type='bytes4', view=False, required=False, events=[]), ERC(name='onERC1155BatchReceived', parameters=['address', 'address', 'uint256[]', 'uint256[]', 'bytes'], return_type='bytes4', view=False, required=False, events=[]), ERC(name='uri', parameters=['uint256'], return_type='string', view=True, required=False, events=[])], [ERC_EVENT(name='TransferSingle', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False]), ERC_EVENT(name='TransferBatch', parameters=['address', 'address', 'address', 'uint256[]', 'uint256[]'], indexes=[True, True, True, False, False]), ERC_EVENT(name='ApprovalForAll', parameters=['address', 'address', 'bool'], indexes=[True, True, False]), ERC_EVENT(name='URI', parameters=['string', 'uint256'], indexes=[False, True])]), 'ERC2612': ([ERC(name='permit', parameters=['address', 'address', 'uint256', 'uint256', 'uint8', 'bytes32', 'bytes32'], return_type='', view=False, required=True, events=[]), ERC(name='nonces', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='DOMAIN_SEPARATOR', parameters=[], return_type='bytes32', view=True, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])], []), 'ERC1363': ([ERC(name='transferAndCall', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferAndCall', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferFromAndCall', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='transferFromAndCall', parameters=['address', 'address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='approveAndCall', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='approveAndCall', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])], []), 'ERC4524': ([ERC(name='safeTransfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransfer', parameters=['address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[]), ERC(name='safeTransferFrom', parameters=['address', 'address', 'uint256', 'bytes'], return_type='bool', view=False, required=True, events=[]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[]), ERC(name='supportsInterface', parameters=['bytes4'], return_type='bool', view=True, required=True, events=[])], []), 'ERC4626': ([ERC(name='asset', parameters=[], return_type='address', view=True, required=True, events=[]), ERC(name='totalAssets', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='convertToShares', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='convertToAssets', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='maxDeposit', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewDeposit', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='deposit', parameters=['uint256', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False])]), ERC(name='maxMint', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewMint', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='mint', parameters=['uint256', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False])]), ERC(name='maxWithdraw', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewWithdraw', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='withdraw', parameters=['uint256', 'address', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='maxRedeem', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='previewRedeem', parameters=['uint256'], return_type='uint256', view=True, required=True, events=[]), ERC(name='redeem', parameters=['uint256', 'address', 'address'], return_type='uint256', view=False, required=True, events=[ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])]), ERC(name='totalSupply', parameters=[], return_type='uint256', view=True, required=True, events=[]), ERC(name='balanceOf', parameters=['address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='transfer', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='transferFrom', parameters=['address', 'address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Transfer', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='approve', parameters=['address', 'uint256'], return_type='bool', view=False, required=True, events=[ERC_EVENT(name='Approval', parameters=['address', 'address', 'uint256'], indexes=[True, True, False])]), ERC(name='allowance', parameters=['address', 'address'], return_type='uint256', view=True, required=True, events=[]), ERC(name='name', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='symbol', parameters=[], return_type='string', view=True, required=False, events=[]), ERC(name='decimals', parameters=[], return_type='uint8', view=True, required=False, events=[])], [ERC_EVENT(name='Deposit', parameters=['address', 'address', 'uint256', 'uint256'], indexes=[True, True, False, False]), ERC_EVENT(name='Withdraw', parameters=['address', 'address', 'address', 'uint256', 'uint256'], indexes=[True, True, True, False, False])])}