near-safe-test
Version:
An SDK for controlling Ethereum Smart Accounts via ERC4337 from a Near Account.
176 lines (175 loc) • 10.4 kB
TypeScript
import { NearEthAdapter, SignRequestData, EncodedSignRequest, SetupConfig as MpcConfig } from "near-ca-test";
import { Address, Hash, Hex } from "viem";
import { SafeContractSuite } from "./lib/safe";
import { EncodedTxData, MetaTransaction, SponsorshipPolicyData, UserOperation, UserOperationReceipt } from "./types";
export interface NearSafeConfig {
mpc: MpcConfig;
pimlicoKey: string;
safeSaltNonce?: string;
setupRpc?: string;
}
export declare class NearSafe {
readonly nearAdapter: NearEthAdapter;
readonly address: Address;
private safePack;
private setup;
private pimlicoKey;
private safeSaltNonce;
/**
* Creates a new instance of the `NearSafe` class using the provided configuration.
*
* @param {NearSafeConfig} config - The configuration object required to initialize the `NearSafe` instance, including the Pimlico key and safe salt nonce.
* @returns {Promise<NearSafe>} - A promise that resolves to a new `NearSafe` instance.
*/
static create(config: NearSafeConfig): Promise<NearSafe>;
/**
* Constructs a new `NearSafe` object with the provided parameters.
*
* @param {NearEthAdapter} nearAdapter - The NEAR adapter used for interacting with the NEAR blockchain.
* @param {SafeContractSuite} safePack - A suite of contracts and utilities for managing the Safe contract.
* @param {string} pimlicoKey - A key required for authenticating with the Pimlico service.
* @param {string} setup - The setup string generated for the Safe contract.
* @param {Address} safeAddress - The address of the deployed Safe contract.
* @param {string} safeSaltNonce - A unique nonce used to differentiate the Safe setup.
*/
constructor(nearAdapter: NearEthAdapter, safePack: SafeContractSuite, pimlicoKey: string, setup: string, safeAddress: Address, safeSaltNonce: string);
/**
* Retrieves the MPC (Multi-Party Computation) address associated with the NEAR adapter.
*
* @returns {Address} - The MPC address of the NEAR adapter.
*/
get mpcAddress(): Address;
/**
* Retrieves the contract ID of the MPC contract associated with the NEAR adapter.
*
* @returns {string} - The contract ID of the MPC contract.
*/
get mpcContractId(): string;
/**
* Retrieves the balance of the Safe account on the specified EVM chain.
*
* @param {number} chainId - The ID of the blockchain network where the Safe account is located.
* @returns {Promise<bigint>} - A promise that resolves to the balance of the Safe account in wei.
*/
getBalance(chainId: number): Promise<bigint>;
/**
* Constructs a user operation for the specified chain, including necessary gas fees, nonce, and paymaster data.
* Warning: Uses a private ethRPC with sensitive Pimlico API key (should be run server side).
*
* @param {Object} args - The arguments for building the transaction.
* @param {number} args.chainId - The ID of the blockchain network where the transaction will be executed.
* @param {MetaTransaction[]} args.transactions - A list of meta-transactions to be included in the user operation.
* @param {boolean} args.usePaymaster - Flag indicating whether to use a paymaster for gas fees. If true, the transaction will be sponsored by the paymaster.
* @returns {Promise<UserOperation>} - A promise that resolves to a complete `UserOperation` object, including gas fees, nonce, and paymaster data.
* @throws {Error} - Throws an error if the transaction set is empty or if any operation fails during the building process.
*/
buildTransaction(args: {
chainId: number;
transactions: MetaTransaction[];
sponsorshipPolicy?: string;
}): Promise<UserOperation>;
/**
* Signs a transaction with the NEAR adapter using the provided operation hash.
*
* @param {Hex} safeOpHash - The hash of the user operation that needs to be signed.
* @returns {Promise<Hex>} - A promise that resolves to the packed signature in hexadecimal format.
*/
signTransaction(safeOpHash: Hex): Promise<Hex>;
/**
* Computes the operation hash for a given user operation.
*
* @param {UserOperation} userOp - The user operation for which the hash needs to be computed.
* @returns {Promise<Hash>} - A promise that resolves to the hash of the provided user operation.
*/
opHash(chainId: number, userOp: UserOperation): Promise<Hash>;
/**
* Encodes a request to sign a transaction using either a paymaster or the user's own funds.
*
* @param {SignRequestData} signRequest - The data required to create the signature request. This includes information such as the chain ID and other necessary fields for the transaction.
* @param {boolean} usePaymaster - Flag indicating whether to use a paymaster for gas fees. If true, the transaction will be sponsored by the paymaster.
* @returns {Promise<EncodedTxData>} - A promise that resolves to the encoded transaction data for the NEAR and EVM networks.
*/
encodeSignRequest(signRequest: SignRequestData, sponsorshipPolicy?: string): Promise<EncodedTxData>;
/**
* Broadcasts a user operation to the EVM network with a provided signature.
* Warning: Uses a private ethRPC with sensitive Pimlico API key (should be run server side).
*
* @param {number} chainId - The ID of the EVM network to which the transaction should be broadcasted.
* @param {Signature} signature - The valid signature of the unsignedUserOp.
* @param {UserOperation} unsignedUserOp - The unsigned user operation to be broadcasted. This includes transaction data such as the destination address and data payload.
* @returns {Promise<Hash>} - A promise that resolves hash of the executed user operation.
* @throws {Error} - Throws an error if the EVM broadcast fails, including the error message for debugging.
*/
broadcastBundler(chainId: number, signatureHex: Hex, unsignedUserOp: UserOperation): Promise<Hash>;
/**
* Executes a user operation on the specified blockchain network.
* Warning: Uses a private ethRPC with sensitive Pimlico API key (should be run server side).
*
* @param {number} chainId - The ID of the blockchain network on which to execute the transaction.
* @param {UserOperation} userOp - The user operation to be executed, typically includes the data and signatures necessary for the transaction.
* @returns {Promise<Hash>} - A promise that resolves to the hash of the executed transaction.
*/
executeTransaction(chainId: number, userOp: UserOperation): Promise<Hash>;
/**
* Retrieves the receipt of a previously executed user operation.
* Warning: Uses a private ethRPC with sensitive Pimlico API key (should be run server side).
*
* @param {number} chainId - The ID of the blockchain network where the operation was executed.
* @param {Hash} userOpHash - The hash of the user operation for which to retrieve the receipt.
* @returns {Promise<UserOperationReceipt>} - A promise that resolves to the receipt of the user operation, which includes status and logs.
*/
getOpReceipt(chainId: number, userOpHash: Hash): Promise<UserOperationReceipt>;
/**
* Checks if the Safe contract is deployed on the specified chain.
*
* @param {number} chainId - The ID of the blockchain network where the Safe contract should be checked.
* @returns {Promise<boolean>} - A promise that resolves to `true` if the Safe contract is deployed, otherwise `false`.
*/
safeDeployed(chainId: number): Promise<boolean>;
/**
* Determines if the Safe account has sufficient funds to cover the transaction costs.
*
* @param {number} chainId - The ID of the blockchain network where the Safe account is located.
* @param {MetaTransaction[]} transactions - A list of meta-transactions to be evaluated for funding.
* @param {bigint} gasCost - The estimated gas cost of executing the transactions.
* @returns {Promise<boolean>} - A promise that resolves to `true` if the Safe account has sufficient funds, otherwise `false`.
*/
sufficientlyFunded(chainId: number, transactions: MetaTransaction[], gasCost: bigint): Promise<boolean>;
/**
* Creates a meta-transaction for adding a new owner to the Safe contract.
*
* @param {Address} address - The address of the new owner to be added.
* @returns {MetaTransaction} - A meta-transaction object for adding the new owner.
*/
addOwnerTx(address: Address): MetaTransaction;
/**
* Creates a meta-transaction for adding a new owner to the Safe contract.
*
* @param {number} chainId - the chainId to build the transaction for.
* @param {Address} address - The address of the new owner to be removed.
* @returns {Promise<MetaTransaction>} - A meta-transaction object for adding the new owner.
*/
removeOwnerTx(chainId: number, address: Address): Promise<MetaTransaction>;
/**
* Creates and returns a new `Erc4337Bundler` instance for the specified chain.
*
* @param {number} chainId - The ID of the blockchain network for which the bundler is to be created.
* @returns {Erc4337Bundler} - A new instance of the `Erc4337Bundler` class configured for the specified chain.
*/
private bundlerForChainId;
/**
* Handles routing of signature requests based on the provided method, chain ID, and parameters.
*
* @async
* @function requestRouter
* @param {SignRequestData} params - An object containing the method, chain ID, and request parameters.
* @returns {Promise<{ evmMessage: string; payload: number[]; recoveryData: RecoveryData }>}
* - Returns a promise that resolves to an object containing the Ethereum Virtual Machine (EVM) message,
* the payload (hashed data), and recovery data needed for reconstructing the signature request.
*/
requestRouter({ method, chainId, params }: SignRequestData, sponsorshipPolicy?: string): Promise<EncodedSignRequest>;
encodeForSafe(from: string): boolean;
policyForChainId(chainId: number): Promise<SponsorshipPolicyData[]>;
deploymentRequest(chainId: number): SignRequestData;
addOwnerRequest(chainId: number, recoveryAddress: Address): SignRequestData;
}