UNPKG

viem

Version:

TypeScript Interface for Ethereum

361 lines • 12.8 kB
import type { Address } from 'abitype'; import * as Hex from 'ox/Hex'; import type { Account } from '../../accounts/types.js'; import type { WriteContractReturnType } from '../../actions/wallet/writeContract.js'; import { writeContract } from '../../actions/wallet/writeContract.js'; import { writeContractSync } from '../../actions/wallet/writeContractSync.js'; import type { Client } from '../../clients/createClient.js'; import type { Transport } from '../../clients/transports/createTransport.js'; import type { BaseErrorType } from '../../errors/base.js'; import type { Chain } from '../../types/chain.js'; import type { GetEventArgs } from '../../types/contract.js'; import type { Compute } from '../../types/utils.js'; import * as Abis from '../Abis.js'; import type { ReadParameters, WriteParameters } from '../internal/types.js'; import type { TransactionReceipt } from '../Transaction.js'; /** * Gets the master address for a given master ID. * * @example * ```ts * import { createClient, http } from 'viem' * import { tempo } from 'viem/chains' * import { Actions } from 'viem/tempo' * * const client = createClient({ * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' }) * transport: http(), * }) * * const address = await Actions.virtualAddress.getMasterAddress(client, { * masterId: '0xdeadbeef', * }) * ``` * * @param client - Client. * @param parameters - Parameters. * @returns The master address, or null if unregistered. */ export declare function getMasterAddress<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: getMasterAddress.Parameters): Promise<getMasterAddress.ReturnValue>; export declare namespace getMasterAddress { type Parameters = ReadParameters & Args; type Args = { /** The master ID (bytes4). */ masterId: Hex.Hex; }; type ReturnValue = Address | null; type ErrorType = BaseErrorType; /** * Defines a call to the `getMaster` function. * * @param args - Arguments. * @returns The call. */ function call(args: Args): { abi: [{ readonly name: "getMaster"; readonly type: "function"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly type: "bytes4"; readonly name: "masterId"; }]; readonly outputs: readonly [{ readonly type: "address"; }]; }]; functionName: "getMaster"; } & { args: readonly [`0x${string}`]; } & { address: Address; } & { data: import("../../index.js").Hex; to: Address; }; } /** * Resolves a virtual address to its master address. * * - Non-virtual addresses are returned unchanged. * - Virtual addresses with a registered master return the master address. * - Virtual addresses with an unregistered master return null. * * @example * ```ts * import { createClient, http } from 'viem' * import { tempo } from 'viem/chains' * import { Actions } from 'viem/tempo' * * const client = createClient({ * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' }) * transport: http(), * }) * * const recipient = await Actions.virtualAddress.resolve(client, { * address: '0x...', * }) * ``` * * @param client - Client. * @param parameters - Parameters. * @returns The resolved address, or null if virtual and unregistered. */ export declare function resolve<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: resolve.Parameters): Promise<resolve.ReturnValue>; export declare namespace resolve { type Parameters = ReadParameters & Args; type Args = { /** The address to resolve. */ address: Address; }; type ReturnValue = Address | null; type ErrorType = BaseErrorType; } /** * Registers a virtual master address. * * @example * ```ts * import { createClient, http } from 'viem' * import { tempo } from 'viem/chains' * import { Actions } from 'viem/tempo' * import { privateKeyToAccount } from 'viem/accounts' * * const client = createClient({ * account: privateKeyToAccount('0x...'), * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' }) * transport: http(), * }) * * const hash = await Actions.virtualAddress.registerMaster(client, { * salt: '0x...', * }) * ``` * * @param client - Client. * @param parameters - Parameters. * @returns The transaction hash. */ export declare function registerMaster<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: registerMaster.Parameters<chain, account>): Promise<registerMaster.ReturnValue>; export declare namespace registerMaster { type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = WriteParameters<chain, account> & Args; type Args = { /** The salt (bytes32) used for proof-of-work master ID derivation. */ salt: Hex.Hex; }; type ReturnValue = WriteContractReturnType; type ErrorType = BaseErrorType; /** @internal */ function inner<action extends typeof writeContract | typeof writeContractSync, chain extends Chain | undefined, account extends Account | undefined>(action: action, client: Client<Transport, chain, account>, parameters: registerMaster.Parameters<chain, account>): Promise<ReturnType<action>>; /** * Defines a call to the `registerVirtualMaster` function. * * Can be passed as a parameter to: * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls * * @example * ```ts * import { createClient, http, walletActions } from 'viem' * import { tempo } from 'viem/chains' * import { Actions } from 'viem/tempo' * * const client = createClient({ * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' }) * transport: http(), * }).extend(walletActions) * * const { result } = await client.sendCalls({ * calls: [ * Actions.virtualAddress.registerMaster.call({ * salt: '0x...', * }), * ] * }) * ``` * * @param args - Arguments. * @returns The call. */ function call(args: Args): { abi: [{ readonly name: "registerVirtualMaster"; readonly type: "function"; readonly stateMutability: "nonpayable"; readonly inputs: readonly [{ readonly type: "bytes32"; readonly name: "salt"; }]; readonly outputs: readonly [{ readonly type: "bytes4"; readonly name: "masterId"; }]; }]; functionName: "registerVirtualMaster"; } & { args: readonly [salt: `0x${string}`]; } & { address: Address; } & { data: import("../../index.js").Hex; to: Address; }; function extractEvent(logs: import('../../types/log.js').Log[]): import("../../types/log.js").Log<bigint, number, false, undefined, true, readonly [{ readonly name: "registerVirtualMaster"; readonly type: "function"; readonly stateMutability: "nonpayable"; readonly inputs: readonly [{ readonly type: "bytes32"; readonly name: "salt"; }]; readonly outputs: readonly [{ readonly type: "bytes4"; readonly name: "masterId"; }]; }, { readonly name: "getMaster"; readonly type: "function"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly type: "bytes4"; readonly name: "masterId"; }]; readonly outputs: readonly [{ readonly type: "address"; }]; }, { readonly name: "resolveRecipient"; readonly type: "function"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "to"; }]; readonly outputs: readonly [{ readonly type: "address"; readonly name: "effectiveRecipient"; }]; }, { readonly name: "resolveVirtualAddress"; readonly type: "function"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "virtualAddr"; }]; readonly outputs: readonly [{ readonly type: "address"; readonly name: "master"; }]; }, { readonly name: "isVirtualAddress"; readonly type: "function"; readonly stateMutability: "pure"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "addr"; }]; readonly outputs: readonly [{ readonly type: "bool"; }]; }, { readonly name: "decodeVirtualAddress"; readonly type: "function"; readonly stateMutability: "pure"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "addr"; }]; readonly outputs: readonly [{ readonly type: "bool"; readonly name: "isVirtual"; }, { readonly type: "bytes4"; readonly name: "masterId"; }, { readonly type: "bytes6"; readonly name: "userTag"; }]; }, { readonly name: "isImplicitlyApproved"; readonly type: "function"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "addr"; }]; readonly outputs: readonly [{ readonly type: "bool"; }]; }, { readonly name: "MasterRegistered"; readonly type: "event"; readonly inputs: readonly [{ readonly type: "bytes4"; readonly name: "masterId"; readonly indexed: true; }, { readonly type: "address"; readonly name: "masterAddress"; readonly indexed: true; }]; }, { readonly name: "MasterIdCollision"; readonly type: "error"; readonly inputs: readonly [{ readonly type: "address"; readonly name: "master"; }]; }, { readonly name: "InvalidMasterAddress"; readonly type: "error"; readonly inputs: readonly []; }, { readonly name: "ProofOfWorkFailed"; readonly type: "error"; readonly inputs: readonly []; }, { readonly name: "VirtualAddressUnregistered"; readonly type: "error"; readonly inputs: readonly []; }], "MasterRegistered">; } /** * Registers a virtual master address and waits for confirmation. * * @example * ```ts * import { createClient, http } from 'viem' * import { tempo } from 'viem/chains' * import { Actions } from 'viem/tempo' * import { privateKeyToAccount } from 'viem/accounts' * * const client = createClient({ * account: privateKeyToAccount('0x...'), * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' }) * transport: http(), * }) * * const { receipt, masterId, masterAddress } = await Actions.virtualAddress.registerMasterSync(client, { * salt: '0x...', * }) * ``` * * @param client - Client. * @param parameters - Parameters. * @returns The transaction receipt and extracted event data. */ export declare function registerMasterSync<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: registerMasterSync.Parameters<chain, account>): Promise<registerMasterSync.ReturnValue>; export declare namespace registerMasterSync { type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = registerMaster.Parameters<chain, account>; type Args = registerMaster.Args; type ReturnValue = Compute<GetEventArgs<typeof Abis.addressRegistry, 'MasterRegistered', { IndexedOnly: false; Required: true; }> & { receipt: TransactionReceipt; }>; type ErrorType = BaseErrorType; } //# sourceMappingURL=virtualAddress.d.ts.map