diff --git a/ens/abis.py b/ens/abis.py index d994209c4c..cd6c71c7f3 100644 --- a/ens/abis.py +++ b/ens/abis.py @@ -518,52 +518,342 @@ }, ] -RESOLVER = [ +PUBLIC_RESOLVER_2 = [ + { + "inputs": [{"internalType": "contract ENS", "name": "_ens", "type": "address"}], + "payable": False, + "stateMutability": "nonpayable", + "type": "constructor", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": True, + "internalType": "uint256", + "name": "contentType", + "type": "uint256", + }, + ], + "name": "ABIChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "address", + "name": "a", + "type": "address", + }, + ], + "name": "AddrChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "uint256", + "name": "coinType", + "type": "uint256", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "newAddress", + "type": "bytes", + }, + ], + "name": "AddressChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": True, + "internalType": "address", + "name": "owner", + "type": "address", + }, + { + "indexed": True, + "internalType": "address", + "name": "target", + "type": "address", + }, + { + "indexed": False, + "internalType": "bool", + "name": "isAuthorised", + "type": "bool", + }, + ], + "name": "AuthorisationChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "hash", + "type": "bytes", + }, + ], + "name": "ContenthashChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "name", + "type": "bytes", + }, + { + "indexed": False, + "internalType": "uint16", + "name": "resource", + "type": "uint16", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "record", + "type": "bytes", + }, + ], + "name": "DNSRecordChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "name", + "type": "bytes", + }, + { + "indexed": False, + "internalType": "uint16", + "name": "resource", + "type": "uint16", + }, + ], + "name": "DNSRecordDeleted", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + } + ], + "name": "DNSZoneCleared", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": True, + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4", + }, + { + "indexed": False, + "internalType": "address", + "name": "implementer", + "type": "address", + }, + ], + "name": "InterfaceChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "string", + "name": "name", + "type": "string", + }, + ], + "name": "NameChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "bytes32", + "name": "x", + "type": "bytes32", + }, + { + "indexed": False, + "internalType": "bytes32", + "name": "y", + "type": "bytes32", + }, + ], + "name": "PubkeyChanged", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "bytes32", + "name": "node", + "type": "bytes32", + }, + { + "indexed": True, + "internalType": "string", + "name": "indexedKey", + "type": "string", + }, + { + "indexed": False, + "internalType": "string", + "name": "key", + "type": "string", + }, + ], + "name": "TextChanged", + "type": "event", + }, { "constant": True, - "inputs": [{"name": "interfaceID", "type": "bytes4"}], - "name": "supportsInterface", - "outputs": [{"name": "", "type": "bool"}], + "inputs": [ + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "uint256", "name": "contentTypes", "type": "uint256"}, + ], + "name": "ABI", + "outputs": [ + {"internalType": "uint256", "name": "", "type": "uint256"}, + {"internalType": "bytes", "name": "", "type": "bytes"}, + ], "payable": False, "stateMutability": "view", "type": "function", }, { - "constant": False, + "constant": True, + "inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"}], + "name": "addr", + "outputs": [{"internalType": "address payable", "name": "", "type": "address"}], + "payable": False, + "stateMutability": "view", + "type": "function", + }, + { + "constant": True, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "key", "type": "string"}, - {"name": "value", "type": "string"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "uint256", "name": "coinType", "type": "uint256"}, ], - "name": "setText", - "outputs": [], + "name": "addr", + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], "payable": False, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", }, { "constant": True, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "contentTypes", "type": "uint256"}, - ], - "name": "ABI", - "outputs": [ - {"name": "contentType", "type": "uint256"}, - {"name": "data", "type": "bytes"}, + {"internalType": "bytes32", "name": "", "type": "bytes32"}, + {"internalType": "address", "name": "", "type": "address"}, + {"internalType": "address", "name": "", "type": "address"}, ], + "name": "authorisations", + "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "payable": False, "stateMutability": "view", "type": "function", }, { "constant": False, - "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "x", "type": "bytes32"}, - {"name": "y", "type": "bytes32"}, - ], - "name": "setPubkey", + "inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"}], + "name": "clearDNSZone", "outputs": [], "payable": False, "stateMutability": "nonpayable", @@ -571,18 +861,22 @@ }, { "constant": True, - "inputs": [{"name": "node", "type": "bytes32"}], - "name": "content", - "outputs": [{"name": "ret", "type": "bytes32"}], + "inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"}], + "name": "contenthash", + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], "payable": False, "stateMutability": "view", "type": "function", }, { "constant": True, - "inputs": [{"name": "node", "type": "bytes32"}], - "name": "addr", - "outputs": [{"name": "ret", "type": "address"}], + "inputs": [ + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes32", "name": "name", "type": "bytes32"}, + {"internalType": "uint16", "name": "resource", "type": "uint16"}, + ], + "name": "dnsRecord", + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], "payable": False, "stateMutability": "view", "type": "function", @@ -590,33 +884,53 @@ { "constant": True, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "key", "type": "string"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes32", "name": "name", "type": "bytes32"}, ], - "name": "text", - "outputs": [{"name": "ret", "type": "string"}], + "name": "hasDNSRecords", + "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "payable": False, "stateMutability": "view", "type": "function", }, { - "constant": False, + "constant": True, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "contentType", "type": "uint256"}, - {"name": "data", "type": "bytes"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes4", "name": "interfaceID", "type": "bytes4"}, ], - "name": "setABI", - "outputs": [], + "name": "interfaceImplementer", + "outputs": [{"internalType": "address", "name": "", "type": "address"}], + "payable": False, + "stateMutability": "view", + "type": "function", + }, + { + "constant": False, + "inputs": [{"internalType": "bytes[]", "name": "data", "type": "bytes[]"}], + "name": "multicall", + "outputs": [{"internalType": "bytes[]", "name": "results", "type": "bytes[]"}], "payable": False, "stateMutability": "nonpayable", "type": "function", }, { "constant": True, - "inputs": [{"name": "node", "type": "bytes32"}], + "inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"}], "name": "name", - "outputs": [{"name": "ret", "type": "string"}], + "outputs": [{"internalType": "string", "name": "", "type": "string"}], + "payable": False, + "stateMutability": "view", + "type": "function", + }, + { + "constant": True, + "inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"}], + "name": "pubkey", + "outputs": [ + {"internalType": "bytes32", "name": "x", "type": "bytes32"}, + {"internalType": "bytes32", "name": "y", "type": "bytes32"}, + ], "payable": False, "stateMutability": "view", "type": "function", @@ -624,10 +938,11 @@ { "constant": False, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "name", "type": "string"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "uint256", "name": "contentType", "type": "uint256"}, + {"internalType": "bytes", "name": "data", "type": "bytes"}, ], - "name": "setName", + "name": "setABI", "outputs": [], "payable": False, "stateMutability": "nonpayable", @@ -636,31 +951,36 @@ { "constant": False, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "hash", "type": "bytes32"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "uint256", "name": "coinType", "type": "uint256"}, + {"internalType": "bytes", "name": "a", "type": "bytes"}, ], - "name": "setContent", + "name": "setAddr", "outputs": [], "payable": False, "stateMutability": "nonpayable", "type": "function", }, { - "constant": True, - "inputs": [{"name": "node", "type": "bytes32"}], - "name": "pubkey", - "outputs": [{"name": "x", "type": "bytes32"}, {"name": "y", "type": "bytes32"}], + "constant": False, + "inputs": [ + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "address", "name": "a", "type": "address"}, + ], + "name": "setAddr", + "outputs": [], "payable": False, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", }, { "constant": False, "inputs": [ - {"name": "node", "type": "bytes32"}, - {"name": "addr", "type": "address"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "address", "name": "target", "type": "address"}, + {"internalType": "bool", "name": "isAuthorised", "type": "bool"}, ], - "name": "setAddr", + "name": "setAuthorisation", "outputs": [], "payable": False, "stateMutability": "nonpayable", @@ -669,86 +989,123 @@ { "constant": False, "inputs": [ - {"internalType": "bytes", "name": "name", "type": "bytes"}, - {"internalType": "bytes", "name": "data", "type": "bytes"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes", "name": "hash", "type": "bytes"}, ], - "name": "resolve", - "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], - "stateMutability": "view", + "name": "setContenthash", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", "type": "function", }, { "constant": False, "inputs": [ - {"internalType": "bytes", "name": "response", "type": "bytes"}, - {"internalType": "bytes", "name": "extraData", "type": "bytes"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes", "name": "data", "type": "bytes"}, ], - "name": "resolveWithProof", - "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], - "stateMutability": "view", + "name": "setDNSRecords", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", "type": "function", }, { - "inputs": [{"name": "ensAddr", "type": "address"}], + "constant": False, + "inputs": [ + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes4", "name": "interfaceID", "type": "bytes4"}, + {"internalType": "address", "name": "implementer", "type": "address"}, + ], + "name": "setInterface", + "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "constructor", + "type": "function", }, { - "anonymous": False, + "constant": False, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": False, "name": "a", "type": "address"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "string", "name": "name", "type": "string"}, ], - "name": "AddrChanged", - "type": "event", + "name": "setName", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", + "type": "function", }, { - "anonymous": False, + "constant": False, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": False, "name": "hash", "type": "bytes32"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "bytes32", "name": "x", "type": "bytes32"}, + {"internalType": "bytes32", "name": "y", "type": "bytes32"}, ], - "name": "ContentChanged", - "type": "event", + "name": "setPubkey", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", + "type": "function", }, { - "anonymous": False, + "constant": False, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": False, "name": "name", "type": "string"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "string", "name": "key", "type": "string"}, + {"internalType": "string", "name": "value", "type": "string"}, ], - "name": "NameChanged", - "type": "event", + "name": "setText", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", + "type": "function", }, { - "anonymous": False, + "constant": True, + "inputs": [{"internalType": "bytes4", "name": "interfaceID", "type": "bytes4"}], + "name": "supportsInterface", + "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], + "payable": False, + "stateMutability": "pure", + "type": "function", + }, + { + "constant": True, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": True, "name": "contentType", "type": "uint256"}, + {"internalType": "bytes32", "name": "node", "type": "bytes32"}, + {"internalType": "string", "name": "key", "type": "string"}, ], - "name": "ABIChanged", - "type": "event", + "name": "text", + "outputs": [{"internalType": "string", "name": "", "type": "string"}], + "payable": False, + "stateMutability": "view", + "type": "function", }, +] + +PUBLIC_RESOLVER_2_EXTENDED = PUBLIC_RESOLVER_2 + [ { - "anonymous": False, + "constant": False, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": False, "name": "x", "type": "bytes32"}, - {"indexed": False, "name": "y", "type": "bytes32"}, + {"internalType": "bytes", "name": "name", "type": "bytes"}, + {"internalType": "bytes", "name": "data", "type": "bytes"}, ], - "name": "PubkeyChanged", - "type": "event", + "name": "resolve", + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], + "stateMutability": "view", + "type": "function", }, { - "anonymous": False, + "constant": False, "inputs": [ - {"indexed": True, "name": "node", "type": "bytes32"}, - {"indexed": True, "name": "indexedKey", "type": "string"}, - {"indexed": False, "name": "key", "type": "string"}, + {"internalType": "bytes", "name": "response", "type": "bytes"}, + {"internalType": "bytes", "name": "extraData", "type": "bytes"}, ], - "name": "TextChanged", - "type": "event", + "name": "resolveWithProof", + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], + "stateMutability": "view", + "type": "function", }, ] diff --git a/ens/async_ens.py b/ens/async_ens.py index 78d16065c5..b27fc429a1 100644 --- a/ens/async_ens.py +++ b/ens/async_ens.py @@ -107,7 +107,9 @@ def __init__( ens_addr = addr if addr else ENS_MAINNET_ADDR self.ens = self.w3.eth.contract(abi=abis.ENS, address=ens_addr) - self._resolver_contract = self.w3.eth.contract(abi=abis.RESOLVER) + self._resolver_contract = self.w3.eth.contract( + abi=abis.PUBLIC_RESOLVER_2_EXTENDED + ) self._reverse_resolver_contract = self.w3.eth.contract( abi=abis.REVERSE_RESOLVER ) diff --git a/ens/base_ens.py b/ens/base_ens.py index aa277c2e13..f8442f728c 100644 --- a/ens/base_ens.py +++ b/ens/base_ens.py @@ -104,7 +104,12 @@ def _decode_ensip10_resolve_data( extended_resolver: Union["Contract", "AsyncContract"], fn_name: str, ) -> Any: - func = extended_resolver.get_function_by_name(fn_name) + # avoid getting 2 resolver functions named `addr` + func = ( + extended_resolver.get_function_by_signature("addr(bytes32)") + if fn_name == "addr" + else extended_resolver.get_function_by_name(fn_name) + ) output_types = get_abi_output_types(func.abi) decoded = self.w3.codec.decode(output_types, contract_call_result) diff --git a/ens/ens.py b/ens/ens.py index ee6123060b..4c78d6d95e 100644 --- a/ens/ens.py +++ b/ens/ens.py @@ -107,7 +107,9 @@ def __init__( ens_addr = addr if addr else ENS_MAINNET_ADDR self.ens = self.w3.eth.contract(abi=abis.ENS, address=ens_addr) - self._resolver_contract = self.w3.eth.contract(abi=abis.RESOLVER) + self._resolver_contract = self.w3.eth.contract( + abi=abis.PUBLIC_RESOLVER_2_EXTENDED + ) self._reverse_resolver_contract = self.w3.eth.contract( abi=abis.REVERSE_RESOLVER ) diff --git a/newsfragments/1839.feature.rst b/newsfragments/1839.feature.rst new file mode 100644 index 0000000000..489357d8d0 --- /dev/null +++ b/newsfragments/1839.feature.rst @@ -0,0 +1 @@ +Update ENS Resolver ABI \ No newline at end of file