Skip to content

Commit 3ab1509

Browse files
committed
support address[] abi type in async name to address middleware
- Look for ENS names in address lists (abi type ``address[]``) and convert to address
1 parent c521167 commit 3ab1509

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

web3/middleware/names.py

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,34 @@ def name_to_address_middleware(w3: "Web3") -> Middleware:
4747
# -- async -- #
4848

4949

50+
async def async_format_all_ens_names_to_address(
51+
async_web3: "AsyncWeb3",
52+
abi_types_for_method: Sequence[Any],
53+
data: Sequence[Any],
54+
) -> Sequence[Any]:
55+
abi_typed_params = abi_data_tree(abi_types_for_method, data)
56+
57+
formatted_params = []
58+
for param in abi_typed_params:
59+
if param.abi_type == "address[]":
60+
# handle name conversion in an address list
61+
# Note: only supports single list atm, as is true the sync middleware
62+
# TODO: handle address[][], etc...
63+
formatted_data = await async_format_all_ens_names_to_address(
64+
async_web3,
65+
[param.abi_type[:-2]] * len(param.data),
66+
[subparam.data for subparam in param.data],
67+
)
68+
else:
69+
_abi_type, formatted_data = await async_abi_ens_resolver(
70+
async_web3,
71+
param.abi_type,
72+
param.data,
73+
)
74+
formatted_params.append(formatted_data)
75+
return formatted_params
76+
77+
5078
async def async_apply_ens_to_address_conversion(
5179
async_web3: "AsyncWeb3",
5280
params: Any,
@@ -75,23 +103,6 @@ async def async_apply_ens_to_address_conversion(
75103
)
76104

77105

78-
async def async_format_all_ens_names_to_address(
79-
async_web3: "AsyncWeb3",
80-
abi_types_for_method: Sequence[Any],
81-
abi_typed_data: Sequence[Any],
82-
) -> Sequence[Any]:
83-
formatted_params = []
84-
abi_typed_params = abi_data_tree(abi_types_for_method, abi_typed_data)
85-
for param in abi_typed_params:
86-
_abi_type, formatted_data = await async_abi_ens_resolver(
87-
async_web3,
88-
param.abi_type,
89-
param.data,
90-
)
91-
formatted_params.append(formatted_data)
92-
return formatted_params
93-
94-
95106
async def async_name_to_address_middleware(
96107
make_request: Callable[[RPCEndpoint, Any], Any],
97108
async_w3: "AsyncWeb3",

0 commit comments

Comments
 (0)