LCOV - code coverage report
Current view: top level - crypto/evm/entities/abi/ens - ens_resolver_contract.dart (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 12 12
Test Date: 2025-01-30 01:10:00 Functions: - 0 0

            Line data    Source code
       1              : import 'package:walletkit_dart/src/crypto/evm/entities/abi/ens/ens_registry_contract.dart';
       2              : import 'package:walletkit_dart/src/crypto/evm/entities/contract/contract_abi.dart';
       3              : import 'package:walletkit_dart/src/crypto/evm/entities/contract/internal_contract.dart';
       4              : import 'package:walletkit_dart/src/domain/constants.dart';
       5              : 
       6            3 : final ensResoloverABI = ContractABI.fromAbi('''[
       7              :   {
       8              :     "inputs": [
       9              :       { "internalType": "contract ENS", "name": "_ens", "type": "address" },
      10              :       {
      11              :         "internalType": "contract INameWrapper",
      12              :         "name": "wrapperAddress",
      13              :         "type": "address"
      14              :       },
      15              :       {
      16              :         "internalType": "address",
      17              :         "name": "_trustedETHController",
      18              :         "type": "address"
      19              :       },
      20              :       {
      21              :         "internalType": "address",
      22              :         "name": "_trustedReverseRegistrar",
      23              :         "type": "address"
      24              :       }
      25              :     ],
      26              :     "stateMutability": "nonpayable",
      27              :     "type": "constructor"
      28              :   },
      29              :   {
      30              :     "anonymous": false,
      31              :     "inputs": [
      32              :       {
      33              :         "indexed": true,
      34              :         "internalType": "bytes32",
      35              :         "name": "node",
      36              :         "type": "bytes32"
      37              :       },
      38              :       {
      39              :         "indexed": true,
      40              :         "internalType": "uint256",
      41              :         "name": "contentType",
      42              :         "type": "uint256"
      43              :       }
      44              :     ],
      45              :     "name": "ABIChanged",
      46              :     "type": "event"
      47              :   },
      48              :   {
      49              :     "anonymous": false,
      50              :     "inputs": [
      51              :       {
      52              :         "indexed": true,
      53              :         "internalType": "bytes32",
      54              :         "name": "node",
      55              :         "type": "bytes32"
      56              :       },
      57              :       {
      58              :         "indexed": false,
      59              :         "internalType": "address",
      60              :         "name": "a",
      61              :         "type": "address"
      62              :       }
      63              :     ],
      64              :     "name": "AddrChanged",
      65              :     "type": "event"
      66              :   },
      67              :   {
      68              :     "anonymous": false,
      69              :     "inputs": [
      70              :       {
      71              :         "indexed": true,
      72              :         "internalType": "bytes32",
      73              :         "name": "node",
      74              :         "type": "bytes32"
      75              :       },
      76              :       {
      77              :         "indexed": false,
      78              :         "internalType": "uint256",
      79              :         "name": "coinType",
      80              :         "type": "uint256"
      81              :       },
      82              :       {
      83              :         "indexed": false,
      84              :         "internalType": "bytes",
      85              :         "name": "newAddress",
      86              :         "type": "bytes"
      87              :       }
      88              :     ],
      89              :     "name": "AddressChanged",
      90              :     "type": "event"
      91              :   },
      92              :   {
      93              :     "anonymous": false,
      94              :     "inputs": [
      95              :       {
      96              :         "indexed": true,
      97              :         "internalType": "address",
      98              :         "name": "owner",
      99              :         "type": "address"
     100              :       },
     101              :       {
     102              :         "indexed": true,
     103              :         "internalType": "address",
     104              :         "name": "operator",
     105              :         "type": "address"
     106              :       },
     107              :       {
     108              :         "indexed": false,
     109              :         "internalType": "bool",
     110              :         "name": "approved",
     111              :         "type": "bool"
     112              :       }
     113              :     ],
     114              :     "name": "ApprovalForAll",
     115              :     "type": "event"
     116              :   },
     117              :   {
     118              :     "anonymous": false,
     119              :     "inputs": [
     120              :       {
     121              :         "indexed": false,
     122              :         "internalType": "address",
     123              :         "name": "owner",
     124              :         "type": "address"
     125              :       },
     126              :       {
     127              :         "indexed": true,
     128              :         "internalType": "bytes32",
     129              :         "name": "node",
     130              :         "type": "bytes32"
     131              :       },
     132              :       {
     133              :         "indexed": true,
     134              :         "internalType": "address",
     135              :         "name": "delegate",
     136              :         "type": "address"
     137              :       },
     138              :       {
     139              :         "indexed": true,
     140              :         "internalType": "bool",
     141              :         "name": "approved",
     142              :         "type": "bool"
     143              :       }
     144              :     ],
     145              :     "name": "Approved",
     146              :     "type": "event"
     147              :   },
     148              :   {
     149              :     "anonymous": false,
     150              :     "inputs": [
     151              :       {
     152              :         "indexed": true,
     153              :         "internalType": "bytes32",
     154              :         "name": "node",
     155              :         "type": "bytes32"
     156              :       },
     157              :       {
     158              :         "indexed": false,
     159              :         "internalType": "bytes",
     160              :         "name": "hash",
     161              :         "type": "bytes"
     162              :       }
     163              :     ],
     164              :     "name": "ContenthashChanged",
     165              :     "type": "event"
     166              :   },
     167              :   {
     168              :     "anonymous": false,
     169              :     "inputs": [
     170              :       {
     171              :         "indexed": true,
     172              :         "internalType": "bytes32",
     173              :         "name": "node",
     174              :         "type": "bytes32"
     175              :       },
     176              :       {
     177              :         "indexed": false,
     178              :         "internalType": "bytes",
     179              :         "name": "name",
     180              :         "type": "bytes"
     181              :       },
     182              :       {
     183              :         "indexed": false,
     184              :         "internalType": "uint16",
     185              :         "name": "resource",
     186              :         "type": "uint16"
     187              :       },
     188              :       {
     189              :         "indexed": false,
     190              :         "internalType": "bytes",
     191              :         "name": "record",
     192              :         "type": "bytes"
     193              :       }
     194              :     ],
     195              :     "name": "DNSRecordChanged",
     196              :     "type": "event"
     197              :   },
     198              :   {
     199              :     "anonymous": false,
     200              :     "inputs": [
     201              :       {
     202              :         "indexed": true,
     203              :         "internalType": "bytes32",
     204              :         "name": "node",
     205              :         "type": "bytes32"
     206              :       },
     207              :       {
     208              :         "indexed": false,
     209              :         "internalType": "bytes",
     210              :         "name": "name",
     211              :         "type": "bytes"
     212              :       },
     213              :       {
     214              :         "indexed": false,
     215              :         "internalType": "uint16",
     216              :         "name": "resource",
     217              :         "type": "uint16"
     218              :       }
     219              :     ],
     220              :     "name": "DNSRecordDeleted",
     221              :     "type": "event"
     222              :   },
     223              :   {
     224              :     "anonymous": false,
     225              :     "inputs": [
     226              :       {
     227              :         "indexed": true,
     228              :         "internalType": "bytes32",
     229              :         "name": "node",
     230              :         "type": "bytes32"
     231              :       },
     232              :       {
     233              :         "indexed": false,
     234              :         "internalType": "bytes",
     235              :         "name": "lastzonehash",
     236              :         "type": "bytes"
     237              :       },
     238              :       {
     239              :         "indexed": false,
     240              :         "internalType": "bytes",
     241              :         "name": "zonehash",
     242              :         "type": "bytes"
     243              :       }
     244              :     ],
     245              :     "name": "DNSZonehashChanged",
     246              :     "type": "event"
     247              :   },
     248              :   {
     249              :     "anonymous": false,
     250              :     "inputs": [
     251              :       {
     252              :         "indexed": true,
     253              :         "internalType": "bytes32",
     254              :         "name": "node",
     255              :         "type": "bytes32"
     256              :       },
     257              :       {
     258              :         "indexed": true,
     259              :         "internalType": "bytes4",
     260              :         "name": "interfaceID",
     261              :         "type": "bytes4"
     262              :       },
     263              :       {
     264              :         "indexed": false,
     265              :         "internalType": "address",
     266              :         "name": "implementer",
     267              :         "type": "address"
     268              :       }
     269              :     ],
     270              :     "name": "InterfaceChanged",
     271              :     "type": "event"
     272              :   },
     273              :   {
     274              :     "anonymous": false,
     275              :     "inputs": [
     276              :       {
     277              :         "indexed": true,
     278              :         "internalType": "bytes32",
     279              :         "name": "node",
     280              :         "type": "bytes32"
     281              :       },
     282              :       {
     283              :         "indexed": false,
     284              :         "internalType": "string",
     285              :         "name": "name",
     286              :         "type": "string"
     287              :       }
     288              :     ],
     289              :     "name": "NameChanged",
     290              :     "type": "event"
     291              :   },
     292              :   {
     293              :     "anonymous": false,
     294              :     "inputs": [
     295              :       {
     296              :         "indexed": true,
     297              :         "internalType": "bytes32",
     298              :         "name": "node",
     299              :         "type": "bytes32"
     300              :       },
     301              :       {
     302              :         "indexed": false,
     303              :         "internalType": "bytes32",
     304              :         "name": "x",
     305              :         "type": "bytes32"
     306              :       },
     307              :       {
     308              :         "indexed": false,
     309              :         "internalType": "bytes32",
     310              :         "name": "y",
     311              :         "type": "bytes32"
     312              :       }
     313              :     ],
     314              :     "name": "PubkeyChanged",
     315              :     "type": "event"
     316              :   },
     317              :   {
     318              :     "anonymous": false,
     319              :     "inputs": [
     320              :       {
     321              :         "indexed": true,
     322              :         "internalType": "bytes32",
     323              :         "name": "node",
     324              :         "type": "bytes32"
     325              :       },
     326              :       {
     327              :         "indexed": true,
     328              :         "internalType": "string",
     329              :         "name": "indexedKey",
     330              :         "type": "string"
     331              :       },
     332              :       {
     333              :         "indexed": false,
     334              :         "internalType": "string",
     335              :         "name": "key",
     336              :         "type": "string"
     337              :       },
     338              :       {
     339              :         "indexed": false,
     340              :         "internalType": "string",
     341              :         "name": "value",
     342              :         "type": "string"
     343              :       }
     344              :     ],
     345              :     "name": "TextChanged",
     346              :     "type": "event"
     347              :   },
     348              :   {
     349              :     "anonymous": false,
     350              :     "inputs": [
     351              :       {
     352              :         "indexed": true,
     353              :         "internalType": "bytes32",
     354              :         "name": "node",
     355              :         "type": "bytes32"
     356              :       },
     357              :       {
     358              :         "indexed": false,
     359              :         "internalType": "uint64",
     360              :         "name": "newVersion",
     361              :         "type": "uint64"
     362              :       }
     363              :     ],
     364              :     "name": "VersionChanged",
     365              :     "type": "event"
     366              :   },
     367              :   {
     368              :     "inputs": [
     369              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     370              :       { "internalType": "uint256", "name": "contentTypes", "type": "uint256" }
     371              :     ],
     372              :     "name": "ABI",
     373              :     "outputs": [
     374              :       { "internalType": "uint256", "name": "", "type": "uint256" },
     375              :       { "internalType": "bytes", "name": "", "type": "bytes" }
     376              :     ],
     377              :     "stateMutability": "view",
     378              :     "type": "function"
     379              :   },
     380              :   {
     381              :     "inputs": [
     382              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     383              :     ],
     384              :     "name": "addr",
     385              :     "outputs": [
     386              :       { "internalType": "address payable", "name": "", "type": "address" }
     387              :     ],
     388              :     "stateMutability": "view",
     389              :     "type": "function"
     390              :   },
     391              :   {
     392              :     "inputs": [
     393              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     394              :       { "internalType": "uint256", "name": "coinType", "type": "uint256" }
     395              :     ],
     396              :     "name": "addr",
     397              :     "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],
     398              :     "stateMutability": "view",
     399              :     "type": "function"
     400              :   },
     401              :   {
     402              :     "inputs": [
     403              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     404              :       { "internalType": "address", "name": "delegate", "type": "address" },
     405              :       { "internalType": "bool", "name": "approved", "type": "bool" }
     406              :     ],
     407              :     "name": "approve",
     408              :     "outputs": [],
     409              :     "stateMutability": "nonpayable",
     410              :     "type": "function"
     411              :   },
     412              :   {
     413              :     "inputs": [
     414              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     415              :     ],
     416              :     "name": "clearRecords",
     417              :     "outputs": [],
     418              :     "stateMutability": "nonpayable",
     419              :     "type": "function"
     420              :   },
     421              :   {
     422              :     "inputs": [
     423              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     424              :     ],
     425              :     "name": "contenthash",
     426              :     "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],
     427              :     "stateMutability": "view",
     428              :     "type": "function"
     429              :   },
     430              :   {
     431              :     "inputs": [
     432              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     433              :       { "internalType": "bytes32", "name": "name", "type": "bytes32" },
     434              :       { "internalType": "uint16", "name": "resource", "type": "uint16" }
     435              :     ],
     436              :     "name": "dnsRecord",
     437              :     "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],
     438              :     "stateMutability": "view",
     439              :     "type": "function"
     440              :   },
     441              :   {
     442              :     "inputs": [
     443              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     444              :       { "internalType": "bytes32", "name": "name", "type": "bytes32" }
     445              :     ],
     446              :     "name": "hasDNSRecords",
     447              :     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     448              :     "stateMutability": "view",
     449              :     "type": "function"
     450              :   },
     451              :   {
     452              :     "inputs": [
     453              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     454              :       { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }
     455              :     ],
     456              :     "name": "interfaceImplementer",
     457              :     "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
     458              :     "stateMutability": "view",
     459              :     "type": "function"
     460              :   },
     461              :   {
     462              :     "inputs": [
     463              :       { "internalType": "address", "name": "owner", "type": "address" },
     464              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     465              :       { "internalType": "address", "name": "delegate", "type": "address" }
     466              :     ],
     467              :     "name": "isApprovedFor",
     468              :     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     469              :     "stateMutability": "view",
     470              :     "type": "function"
     471              :   },
     472              :   {
     473              :     "inputs": [
     474              :       { "internalType": "address", "name": "account", "type": "address" },
     475              :       { "internalType": "address", "name": "operator", "type": "address" }
     476              :     ],
     477              :     "name": "isApprovedForAll",
     478              :     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     479              :     "stateMutability": "view",
     480              :     "type": "function"
     481              :   },
     482              :   {
     483              :     "inputs": [
     484              :       { "internalType": "bytes[]", "name": "data", "type": "bytes[]" }
     485              :     ],
     486              :     "name": "multicall",
     487              :     "outputs": [
     488              :       { "internalType": "bytes[]", "name": "results", "type": "bytes[]" }
     489              :     ],
     490              :     "stateMutability": "nonpayable",
     491              :     "type": "function"
     492              :   },
     493              :   {
     494              :     "inputs": [
     495              :       { "internalType": "bytes32", "name": "nodehash", "type": "bytes32" },
     496              :       { "internalType": "bytes[]", "name": "data", "type": "bytes[]" }
     497              :     ],
     498              :     "name": "multicallWithNodeCheck",
     499              :     "outputs": [
     500              :       { "internalType": "bytes[]", "name": "results", "type": "bytes[]" }
     501              :     ],
     502              :     "stateMutability": "nonpayable",
     503              :     "type": "function"
     504              :   },
     505              :   {
     506              :     "inputs": [
     507              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     508              :     ],
     509              :     "name": "name",
     510              :     "outputs": [{ "internalType": "string", "name": "", "type": "string" }],
     511              :     "stateMutability": "view",
     512              :     "type": "function"
     513              :   },
     514              :   {
     515              :     "inputs": [
     516              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     517              :     ],
     518              :     "name": "pubkey",
     519              :     "outputs": [
     520              :       { "internalType": "bytes32", "name": "x", "type": "bytes32" },
     521              :       { "internalType": "bytes32", "name": "y", "type": "bytes32" }
     522              :     ],
     523              :     "stateMutability": "view",
     524              :     "type": "function"
     525              :   },
     526              :   {
     527              :     "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }],
     528              :     "name": "recordVersions",
     529              :     "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }],
     530              :     "stateMutability": "view",
     531              :     "type": "function"
     532              :   },
     533              :   {
     534              :     "inputs": [
     535              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     536              :       { "internalType": "uint256", "name": "contentType", "type": "uint256" },
     537              :       { "internalType": "bytes", "name": "data", "type": "bytes" }
     538              :     ],
     539              :     "name": "setABI",
     540              :     "outputs": [],
     541              :     "stateMutability": "nonpayable",
     542              :     "type": "function"
     543              :   },
     544              :   {
     545              :     "inputs": [
     546              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     547              :       { "internalType": "uint256", "name": "coinType", "type": "uint256" },
     548              :       { "internalType": "bytes", "name": "a", "type": "bytes" }
     549              :     ],
     550              :     "name": "setAddr",
     551              :     "outputs": [],
     552              :     "stateMutability": "nonpayable",
     553              :     "type": "function"
     554              :   },
     555              :   {
     556              :     "inputs": [
     557              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     558              :       { "internalType": "address", "name": "a", "type": "address" }
     559              :     ],
     560              :     "name": "setAddr",
     561              :     "outputs": [],
     562              :     "stateMutability": "nonpayable",
     563              :     "type": "function"
     564              :   },
     565              :   {
     566              :     "inputs": [
     567              :       { "internalType": "address", "name": "operator", "type": "address" },
     568              :       { "internalType": "bool", "name": "approved", "type": "bool" }
     569              :     ],
     570              :     "name": "setApprovalForAll",
     571              :     "outputs": [],
     572              :     "stateMutability": "nonpayable",
     573              :     "type": "function"
     574              :   },
     575              :   {
     576              :     "inputs": [
     577              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     578              :       { "internalType": "bytes", "name": "hash", "type": "bytes" }
     579              :     ],
     580              :     "name": "setContenthash",
     581              :     "outputs": [],
     582              :     "stateMutability": "nonpayable",
     583              :     "type": "function"
     584              :   },
     585              :   {
     586              :     "inputs": [
     587              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     588              :       { "internalType": "bytes", "name": "data", "type": "bytes" }
     589              :     ],
     590              :     "name": "setDNSRecords",
     591              :     "outputs": [],
     592              :     "stateMutability": "nonpayable",
     593              :     "type": "function"
     594              :   },
     595              :   {
     596              :     "inputs": [
     597              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     598              :       { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" },
     599              :       { "internalType": "address", "name": "implementer", "type": "address" }
     600              :     ],
     601              :     "name": "setInterface",
     602              :     "outputs": [],
     603              :     "stateMutability": "nonpayable",
     604              :     "type": "function"
     605              :   },
     606              :   {
     607              :     "inputs": [
     608              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     609              :       { "internalType": "string", "name": "newName", "type": "string" }
     610              :     ],
     611              :     "name": "setName",
     612              :     "outputs": [],
     613              :     "stateMutability": "nonpayable",
     614              :     "type": "function"
     615              :   },
     616              :   {
     617              :     "inputs": [
     618              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     619              :       { "internalType": "bytes32", "name": "x", "type": "bytes32" },
     620              :       { "internalType": "bytes32", "name": "y", "type": "bytes32" }
     621              :     ],
     622              :     "name": "setPubkey",
     623              :     "outputs": [],
     624              :     "stateMutability": "nonpayable",
     625              :     "type": "function"
     626              :   },
     627              :   {
     628              :     "inputs": [
     629              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     630              :       { "internalType": "string", "name": "key", "type": "string" },
     631              :       { "internalType": "string", "name": "value", "type": "string" }
     632              :     ],
     633              :     "name": "setText",
     634              :     "outputs": [],
     635              :     "stateMutability": "nonpayable",
     636              :     "type": "function"
     637              :   },
     638              :   {
     639              :     "inputs": [
     640              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     641              :       { "internalType": "bytes", "name": "hash", "type": "bytes" }
     642              :     ],
     643              :     "name": "setZonehash",
     644              :     "outputs": [],
     645              :     "stateMutability": "nonpayable",
     646              :     "type": "function"
     647              :   },
     648              :   {
     649              :     "inputs": [
     650              :       { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }
     651              :     ],
     652              :     "name": "supportsInterface",
     653              :     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     654              :     "stateMutability": "view",
     655              :     "type": "function"
     656              :   },
     657              :   {
     658              :     "inputs": [
     659              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" },
     660              :       { "internalType": "string", "name": "key", "type": "string" }
     661              :     ],
     662              :     "name": "text",
     663              :     "outputs": [{ "internalType": "string", "name": "", "type": "string" }],
     664              :     "stateMutability": "view",
     665              :     "type": "function"
     666              :   },
     667              :   {
     668              :     "inputs": [
     669              :       { "internalType": "bytes32", "name": "node", "type": "bytes32" }
     670              :     ],
     671              :     "name": "zonehash",
     672              :     "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],
     673              :     "stateMutability": "view",
     674              :     "type": "function"
     675              :   }
     676              : ]
     677              : ''');
     678              : 
     679              : class EnsResolverContract extends InternalContract {
     680            1 :   EnsResolverContract({
     681              :     required super.contractAddress,
     682              :     required super.rpc,
     683            1 :   }) : super(
     684            1 :           abi: ensResoloverABI,
     685              :         );
     686              : 
     687            1 :   Future<String?> addr({required String name}) async {
     688            3 :     final function = abi.functions[1];
     689              : 
     690            3 :     assert(function.functionSelectorHex == "3b3b57de");
     691              : 
     692            1 :     final node = namehash(name);
     693              : 
     694            1 :     final result = await readSafe(
     695            2 :       function: function.addValues(values: [node]),
     696              :     );
     697              : 
     698            3 :     final address = result.outputs.first.value as String;
     699              : 
     700            1 :     if (address == nullAddress) {
     701              :       return null;
     702              :     }
     703              : 
     704              :     return address;
     705              :   }
     706              : }
        

Generated by: LCOV version 2.0-1