/*
This file is part of web3.js.
web3.js is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
web3.js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with web3.js. If not, see .
*/
import { Web3ContextObject } from 'web3-core';
import { Contract } from 'web3-eth-contract';
import { Address } from 'web3-types';
import { ENSRegistryAbi } from './abi/ens/ENSRegistry.js';
import { PublicResolverAbi } from './abi/ens/PublicResolver.js';
import { registryAddresses } from './config.js';
import { namehash } from './utils.js';
export class Registry {
private readonly contract: Contract;
private readonly context: Web3ContextObject;
public constructor(context: Web3ContextObject, customRegistryAddress?: Address) {
this.contract = new Contract(
ENSRegistryAbi,
customRegistryAddress ?? registryAddresses.main,
context,
);
this.context = context;
}
public async getOwner(name: string) {
try {
const result = this.contract.methods.owner(namehash(name)).call();
return result;
} catch (error) {
throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented
}
}
public async getTTL(name: string) {
try {
return this.contract.methods.ttl(namehash(name)).call();
} catch (error) {
throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented
}
}
public async recordExists(name: string) {
try {
const promise = this.contract.methods.recordExists(namehash(name)).call();
return promise;
} catch (error) {
throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented
}
}
public async getResolver(name: string) {
try {
return this.contract.methods
.resolver(namehash(name))
.call()
.then(address => {
// address type is unknown, not sure why
if (typeof address === 'string') {
const contract = new Contract(PublicResolverAbi, address, this.context);
// TODO: set contract provider needs to be added when ens current provider
return contract;
}
throw new Error();
});
} catch (error) {
throw new Error(); // TODO: TransactionRevertInstructionError Needs to be added after web3-eth call method is implemented
}
}
public get events() {
return this.contract.events;
}
}