UNPKG

ox

Version:

Ethereum Standard Library

179 lines 6.94 kB
import type * as Address from '../core/Address.js'; import type * as Errors from '../core/Errors.js'; import * as Hex from '../core/Hex.js'; import type { Compute } from '../core/internal/types.js'; import * as Signature from '../core/Signature.js'; import * as ox_TransactionRequest from '../core/TransactionRequest.js'; import * as AuthorizationTempo from './AuthorizationTempo.js'; import * as KeyAuthorization from './KeyAuthorization.js'; import type * as MultisigConfig from './MultisigConfig.js'; import * as SignatureEnvelope from './SignatureEnvelope.js'; import * as TxEnvelopeTempo from './TxEnvelopeTempo.js'; import type { Call } from './TxEnvelopeTempo.js'; type KeyType = 'secp256k1' | 'p256' | 'webAuthn'; /** * Bootstrap multisig config hint for node-side gas modeling (TIP-1061). * The node prices multisig gas from it during simulation, and ignores it * for registered senders. */ export type MultisigInit = Compute<MultisigConfig.Config & { salt: Hex.Hex; }>; /** * A Transaction Request that is generic to all transaction types. * * Extends the [Execution API specification](https://github.com/ethereum/execution-apis/blob/4aca1d7a3e5aab24c8f6437131289ad386944eaa/src/schemas/transaction.yaml#L358-L423) * with Tempo-specific fields for batched calls, fee tokens, access keys, and scheduled execution. * * @see {@link https://docs.tempo.xyz/protocol/transactions} */ export type TransactionRequest<bigintType = bigint, numberType = number, type extends string = string> = Compute<Omit<ox_TransactionRequest.TransactionRequest<bigintType, numberType, type>, 'authorizationList'> & { authorizationList?: AuthorizationTempo.ListSigned<bigintType, numberType> | undefined; calls?: readonly Call<bigintType>[] | undefined; capabilities?: Record<string, unknown> | undefined; feePayerSignature?: Signature.Signature<true, numberType> | null | undefined; keyAuthorization?: KeyAuthorization.KeyAuthorization<true> | undefined; keyData?: Hex.Hex | undefined; keyId?: Address.Address | undefined; keyType?: KeyType | undefined; feePayer?: boolean | undefined; feeToken?: Address.Address | undefined; multisigInit?: MultisigInit | undefined; multisigSignatureCount?: number | undefined; nonceKey?: 'random' | bigintType | undefined; signature?: SignatureEnvelope.SignatureEnvelope<numberType> | undefined; validBefore?: numberType | undefined; validAfter?: numberType | undefined; }>; /** RPC representation of a {@link ox#TransactionRequest.TransactionRequest}. */ export type Rpc = Omit<TransactionRequest<Hex.Hex, Hex.Hex, string>, 'authorizationList' | 'feePayerSignature' | 'feeToken' | 'keyAuthorization' | 'signature'> & { authorizationList?: AuthorizationTempo.ListRpc | undefined; feePayerSignature?: Signature.Rpc | null | undefined; feeToken?: Hex.Hex | undefined; keyAuthorization?: KeyAuthorization.Rpc | undefined; nonceKey?: Hex.Hex | undefined; signature?: SignatureEnvelope.SignatureEnvelopeRpc | undefined; }; /** * Converts a {@link ox#TransactionRequest.Rpc} to a {@link ox#TransactionRequest.TransactionRequest}. * * @example * ```ts twoslash * import { TransactionRequest } from 'ox/tempo' * * const request = TransactionRequest.fromRpc({ * calls: [ * { * data: '0xdeadbeef', * to: '0xcafebabecafebabecafebabecafebabecafebabe' * } * ], * feeToken: '0x20c0000000000000000000000000000000000000', * type: '0x76' * }) * ``` * * @param request - The RPC request to convert. * @returns A transaction request. */ export declare function fromRpc(request: Rpc): TransactionRequest; export declare namespace fromRpc { type ErrorType = AuthorizationTempo.fromRpcList.ErrorType | Hex.toNumber.ErrorType | Hex.toBigInt.ErrorType | Errors.GlobalErrorType; } /** * Converts a {@link ox#TransactionRequest.TransactionRequest} to a {@link ox#TransactionRequest.Rpc}. * * @see {@link https://docs.tempo.xyz/protocol/transactions} * * @example * ```ts twoslash * import { Value } from 'ox' * import { TransactionRequest } from 'ox/tempo' * * const request = TransactionRequest.toRpc({ * calls: [ * { * data: '0xdeadbeef', * to: '0xcafebabecafebabecafebabecafebabecafebabe' * } * ], * feeToken: '0x20c0000000000000000000000000000000000000' * }) * ``` * * @example * ### Using with a Provider * * You can use {@link ox#Provider.(from:function)} to instantiate an EIP-1193 Provider and * send a transaction to the Wallet using the `eth_sendTransaction` method. * * ```ts twoslash * // @noErrors * import 'ox/window' * import { Provider, Value } from 'ox' * import { TransactionRequest } from 'ox/tempo' * * const provider = Provider.from(window.ethereum!) * * const request = TransactionRequest.toRpc({ * calls: [ * { * data: '0xdeadbeef', * to: '0xcafebabecafebabecafebabecafebabecafebabe' * } * ], * feeToken: '0x20c0000000000000000000000000000000000000' * }) * * const hash = await provider.request({ * // [!code focus] * method: 'eth_sendTransaction', // [!code focus] * params: [request] // [!code focus] * }) // [!code focus] * ``` * * @param request - The request to convert. * @returns An RPC request. */ export declare function toRpc(request: toRpc.Input): Rpc; export declare namespace toRpc { /** Numberish input accepted by {@link ox#TransactionRequest.(toRpc:function)}. */ type Input = TransactionRequest<Hex.Hex | bigint | number, Hex.Hex | number>; type ErrorType = AuthorizationTempo.toRpcList.ErrorType | Hex.fromNumber.ErrorType | Errors.GlobalErrorType; } /** * Converts a Tempo {@link ox#TransactionRequest.TransactionRequest} to a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}. * * @example * ```ts twoslash * import { TransactionRequest } from 'ox/tempo' * * const envelope = TransactionRequest.toEnvelope({ * calls: [ * { * data: '0xdeadbeef', * to: '0xcafebabecafebabecafebabecafebabecafebabe' * } * ], * chainId: 1, * feeToken: '0x20c0000000000000000000000000000000000000', * maxFeePerGas: 1n * }) * ``` * * @param request - The transaction request to convert. * @param options - Options. * @returns A Tempo transaction envelope. */ export declare function toEnvelope(request: TransactionRequest, options?: toEnvelope.Options): TxEnvelopeTempo.TxEnvelopeTempo; export declare namespace toEnvelope { type Options = { /** Optional fee-payer signature to attach to the envelope. */ feePayerSignature?: Signature.Signature | null | undefined; /** Optional signature envelope to attach. */ signature?: SignatureEnvelope.from.Value | undefined; }; type ErrorType = TxEnvelopeTempo.from.ErrorType | Hex.random.ErrorType | Hex.toBigInt.ErrorType | Errors.GlobalErrorType; } export {}; //# sourceMappingURL=TransactionRequest.d.ts.map