import type { Account, Transport, WalletClient } from 'viem'; import type { ChainWithEns } from '../../contracts/consts.js'; import { type ClearRecordsParameters, type ClearRecordsReturnType } from '../../functions/wallet/clearRecords.js'; import { type CommitNameParameters, type CommitNameReturnType } from '../../functions/wallet/commitName.js'; import { type CreateSubnameParameters, type CreateSubnameReturnType } from '../../functions/wallet/createSubname.js'; import { type DeleteSubnameParameters, type DeleteSubnameReturnType } from '../../functions/wallet/deleteSubname.js'; import { type RegisterNameParameters, type RegisterNameReturnType } from '../../functions/wallet/registerName.js'; import { type RenewNamesParameters, type RenewNamesReturnType } from '../../functions/wallet/renewNames.js'; import { type SetAbiRecordParameters, type SetAbiRecordReturnType } from '../../functions/wallet/setAbiRecord.js'; import { type SetAddressRecordParameters, type SetAddressRecordReturnType } from '../../functions/wallet/setAddressRecord.js'; import { type SetChildFusesParameters, type SetChildFusesReturnType } from '../../functions/wallet/setChildFuses.js'; import { type SetContentHashRecordParameters, type SetContentHashRecordReturnType } from '../../functions/wallet/setContentHashRecord.js'; import { type SetFusesParameters, type SetFusesReturnType } from '../../functions/wallet/setFuses.js'; import { type SetPrimaryNameParameters, type SetPrimaryNameReturnType } from '../../functions/wallet/setPrimaryName.js'; import { type SetRecordsParameters, type SetRecordsReturnType } from '../../functions/wallet/setRecords.js'; import { type SetResolverParameters, type SetResolverReturnType } from '../../functions/wallet/setResolver.js'; import { type SetTextRecordParameters, type SetTextRecordReturnType } from '../../functions/wallet/setTextRecord.js'; import { type TransferNameParameters, type TransferNameReturnType } from '../../functions/wallet/transferName.js'; import { type UnwrapNameParameters, type UnwrapNameReturnType } from '../../functions/wallet/unwrapName.js'; import { type WrapNameParameters, type WrapNameReturnType } from '../../functions/wallet/wrapName.js'; export type EnsWalletActions = { /** * Clears the records for a name on a resolver. * @param parameters - {@link ClearRecordsParameters} * @returns Transaction hash. {@link ClearRecordsReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.clearRecords({ * name: 'ens.eth', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ clearRecords: ({ name, resolverAddress, ...txArgs }: ClearRecordsParameters) => Promise; /** * Commits a name to be registered * @param parameters - {@link CommitNameParameters} * @returns Transaction hash. {@link CommitNameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * import { randomSecret } from '@etn-sc/ensjs/utils' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const secret = randomSecret() * const hash = await wallet.commitName({ * name: 'example.eth', * owner: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * duration: 31536000, // 1 year * secret, * }) * // 0x... */ commitName: ({ name, owner, duration, secret, resolverAddress, records, reverseRecord, referrer, ...txArgs }: CommitNameParameters) => Promise; /** * Creates a subname * @param parameters - {@link CreateSubnameParameters} * @returns Transaction hash. {@link CreateSubnameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.createSubname({ * name: 'sub.ens.eth', * owner: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * contract: 'registry', * }) * // 0x... */ createSubname: ({ name, contract, owner, resolverAddress, expiry, fuses, ...txArgs }: CreateSubnameParameters) => Promise; /** * Deletes a subname * @param parameters - {@link DeleteSubnameParameters} * @returns Transaction hash. {@link DeleteSubnameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.deleteSubname({ * name: 'sub.ens.eth', * contract: 'registry', * }) * // 0x... */ deleteSubname: ({ name, contract, asOwner, ...txArgs }: DeleteSubnameParameters) => Promise; /** * Registers a name on ENS * @param parameters - {@link RegisterNameParameters} * @returns Transaction hash. {@link RegisterNameReturnType} * * @example * import { createPublicClient, createWalletClient, http, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensPublicActions, ensWalletActions } from '@etn-sc/ensjs' * import { randomSecret } from '@etn-sc/ensjs/utils' * * const mainnetWithEns = addEnsContracts(mainnet) * const client = createPublicClient({ * chain: mainnetWithEns, * transport: http(), * }).extend(ensPublicActions) * const wallet = createWalletClient({ * chain: mainnetWithEns, * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const secret = randomSecret() * const params = { * name: 'example.eth', * owner: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * duration: 31536000, // 1 year * secret, * } * * const commitmentHash = await wallet.commitName(params) * await client.waitForTransactionReceipt({ hash: commitmentHash }) // wait for commitment to finalise * await new Promise((resolve) => setTimeout(resolve, 60 * 1_000)) // wait for commitment to be valid * * const { base, premium } = await client.getPrice({ nameOrNames: params.name, duration: params.duration }) * const value = (base + premium) * 110n / 100n // add 10% to the price for buffer * const hash = await wallet.registerName({ ...params, value }) * // 0x... */ registerName: ({ name, owner, duration, secret, resolverAddress, records, reverseRecord, referrer, value, ...txArgs }: RegisterNameParameters) => Promise; /** * Renews a name or names for a specified duration. * @param parameters - {@link RenewNamesParameters} * @returns Transaction hash. {@link RenewNamesReturnType} * * @example * import { createPublicClient, createWalletClient, http, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensPublicActions, ensWalletActions } from '@etn-sc/ensjs' * * const mainnetWithEns = addEnsContracts(mainnet) * const client = createPublicClient({ * chain: mainnetWithEns, * transport: http(), * }).extend(ensPublicActions) * const wallet = createWalletClient({ * chain: mainnetWithEns, * transport: custom(window.ethereum), * }).extend(ensWalletActions) * * const duration = 31536000 // 1 year * const { base, premium } = await client.getPrice({ * nameOrNames: 'example.eth', * duration, * }) * const value = (base + premium) * 110n / 100n // add 10% to the price for buffer * const hash = await wallet.renewNames({ * nameOrNames: 'example.eth', * duration, * value, * }) * // 0x... */ renewNames: ({ nameOrNames, duration, value, ...txArgs }: RenewNamesParameters) => Promise; /** * Sets the ABI for a name on a resolver. * @param parameters - {@link SetAbiRecordParameters} * @returns Transaction hash. {@link SetAbiRecordReturnType} * * @example * import abi from './abi.json' * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * import { encodeAbi } from '@etn-sc/ensjs/utils' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * * const encodedAbi = await encodeAbi({ encodeAs: 'json', abi }) * const hash = await wallet.setAbiRecord({ * name: 'ens.eth', * encodedAbi, * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setAbiRecord: ({ name, encodedAbi, resolverAddress, ...txArgs }: SetAbiRecordParameters) => Promise; /** * Sets an address record for a name on a resolver. * @param parameters - {@link SetAddressRecordParameters} * @returns Transaction hash. {@link SetAddressRecordReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setAddressRecord({ * name: 'ens.eth', * coin: 'ETH', * value: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setAddressRecord: ({ name, coin, value, resolverAddress, ...txArgs }: SetAddressRecordParameters) => Promise; /** * Sets the fuses for a name as the parent. * @param parameters - {@link SetChildFusesParameters} * @returns Transaction hash. {@link SetChildFusesReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setChildFuses({ * name: 'sub.ens.eth', * fuses: { * parent: { * named: ['PARENT_CANNOT_CONTROl'], * }, * }, * }) * // 0x... */ setChildFuses: ({ name, fuses, expiry, ...txArgs }: SetChildFusesParameters) => Promise; /** * Sets the content hash record for a name on a resolver. * @param parameters - {@link SetContentHashRecordParameters} * @returns Transaction hash. {@link SetContentHashRecordReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setContentHashRecord({ * name: 'ens.eth', * contentHash: 'ipns://k51qzi5uqu5djdczd6zw0grmo23j2vkj9uzvujencg15s5rlkq0ss4ivll8wqw', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setContentHashRecord: ({ name, contentHash, resolverAddress, ...txArgs }: SetContentHashRecordParameters) => Promise; /** * Sets the fuses for a name. * @param parameters - {@link SetFusesParameters} * @returns Transaction hash. {@link SetFusesReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setFuses({ * name: 'sub.ens.eth', * fuses: { * named: ['CANNOT_TRANSFER'], * }, * }) * // 0x... */ setFuses: ({ name, fuses, ...txArgs }: SetFusesParameters) => Promise; /** * Sets a primary name for an address. * @param parameters - {@link SetPrimaryNameParameters} * @returns Transaction hash. {@link SetPrimaryNameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setPrimaryName({ * name: 'ens.eth', * }) * // 0x... */ setPrimaryName: ({ name, address, resolverAddress, ...txArgs }: SetPrimaryNameParameters) => Promise; /** * Sets multiple records for a name on a resolver. * @param parameters - {@link SetRecordsParameters} * @returns Transaction hash. {@link SetRecordsReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setRecords({ * name: 'ens.eth', * coins: [ * { * coin: 'ETH', * value: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * }, * ], * texts: [{ key: 'foo', value: 'bar' }], * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setRecords: ({ name, resolverAddress, clearRecords, contentHash, texts, coins, abi, ...txArgs }: SetRecordsParameters) => Promise; /** * Sets a resolver for a name. * @param parameters - {@link SetResolverParameters} * @returns Transaction hash. {@link SetResolverReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setResolver({ * name: 'ens.eth', * contract: 'registry', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setResolver: ({ name, contract, resolverAddress, ...txArgs }: SetResolverParameters) => Promise; /** * Sets a text record for a name on a resolver. * @param parameters - {@link SetTextRecordParameters} * @returns Transaction hash. {@link SetTextRecordReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.setTextRecord({ * name: 'ens.eth', * key: 'foo', * value: 'bar', * resolverAddress: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', * }) * // 0x... */ setTextRecord: ({ name, key, value, resolverAddress, ...txArgs }: SetTextRecordParameters) => Promise; /** * Transfers a name to a new owner. * @param parameters - {@link TransferNameParameters} * @returns Transaction hash. {@link TransferNameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.transferName({ * name: 'ens.eth', * newOwnerAddress: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * contract: 'registry', * }) * // 0x... */ transferName: ({ name, newOwnerAddress, contract, reclaim, asParent, ...txArgs }: TransferNameParameters) => Promise; /** * Unwraps a name. * @param parameters - {@link UnwrapNameParameters} * @returns Transaction hash. {@link UnwrapNameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.unwrapName({ * name: 'example.eth', * newOwnerAddress: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * newRegistrantAddress: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * }) * // 0x... */ unwrapName: ({ name, newOwnerAddress, newRegistrantAddress, ...txArgs }: UnwrapNameParameters) => Promise; /** * Wraps a name. * @param parameters - {@link WrapNameParameters} * @returns Transaction hash. {@link WrapNameReturnType} * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const wallet = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) * const hash = await wallet.wrapName({ * name: 'ens.eth', * newOwnerAddress: '0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7', * }) * // 0x... */ wrapName: ({ name, newOwnerAddress, fuses, resolverAddress, ...txArgs }: WrapNameParameters) => Promise; }; /** * Extends the viem client with ENS wallet actions * @param client - The viem {@link WalletClient} object to add the ENS wallet actions to * * @example * import { createWalletClient, custom } from 'viem' * import { mainnet } from 'viem/chains' * import { addEnsContracts, ensWalletActions } from '@etn-sc/ensjs' * * const clientWithEns = createWalletClient({ * chain: addEnsContracts(mainnet), * transport: custom(window.ethereum), * }).extend(ensWalletActions) */ export declare const ensWalletActions: (client: WalletClient) => EnsWalletActions;