Skip to content

Commit c071915

Browse files
Mark BarrassoMark Barrasso
Mark Barrasso
authored and
Mark Barrasso
committed
Add interfaceImplementer function
Added `interfaceImplementer` function found in the new [OwnedResolver](https://ropsten.etherscan.io/address/0x44385b20865fe3578e56aa0e9f7ec534deb10501#code). ### Usage ```swift public enum InterfaceID: String { case legacyRegistrar = "0x7ba18ba1" case permanentRegistrar = "0x018fac06" case baseRegistrar = "0x6ccb2df4" } // Get the ETHRegistrarController's address let controller = try! e.resolver?.interfaceImplementer(forNode: "eth", interfaceID: InterfaceID.permanentRegistrar.rawValue) ``` See more usage at: https://github.com/ensdomains/ens-app/blob/d79a4f5a8231e46743caa19d0368fff9fe237383/src/api/registrar.js#L94
1 parent 2f61796 commit c071915

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

Sources/web3swift/Utils/ENS/ENSResolver.swift

+9-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public extension ENS {
1919
case CBOR = 4
2020
case URI = 8
2121
}
22-
22+
2323
public enum InterfaceName {
2424
case addr
2525
case name
@@ -72,6 +72,14 @@ public extension ENS {
7272
guard let supports = result["0"] as? Bool else {throw Web3Error.processingError(desc: "Can't get answer")}
7373
return supports
7474
}
75+
76+
public func interfaceImplementer(forNode node: String, interfaceID: InterfaceID) throws -> EthereumAddress {
77+
guard let nameHash = NameHash.nameHash(node) else {throw Web3Error.processingError(desc: "Failed to get name hash")}
78+
guard let transaction = self.resolverContract.read("interfaceImplementer", parameters: [nameHash, interfaceID] as [AnyObject], extraData: Data(), transactionOptions: defaultOptions) else {throw Web3Error.transactionSerializationError}
79+
guard let result = try? transaction.call(transactionOptions: defaultOptions) else {throw Web3Error.processingError(desc: "Can't call transaction")}
80+
guard let address = result["0"] as? EthereumAddress else {throw Web3Error.processingError(desc: "Can't get address")}
81+
return address
82+
}
7583

7684
public func getAddress(forNode node: String) throws -> EthereumAddress {
7785
guard let nameHash = NameHash.nameHash(node) else {throw Web3Error.processingError(desc: "Failed to get name hash")}

0 commit comments

Comments
 (0)