viem
Version:
361 lines • 12.8 kB
TypeScript
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