zksync-ethers
Version:
A Web3 library for interacting with the ZkSync Layer 2 scaling solution.
1,257 lines • 67.6 kB
TypeScript
import { EIP712Signer } from './signer';
import { Provider } from './provider';
import { BigNumberish, BlockTag, BytesLike, ContractTransactionResponse, ethers, Overrides, ProgressCallback } from 'ethers';
import { Address, BalancesMap, FinalizeL1DepositParams, FinalizeWithdrawalParams, FullDepositFee, PaymasterParams, PriorityOpResponse, TransactionLike, TransactionRequest, TransactionResponse } from './types';
import { IBridgehub, IL1ERC20Bridge, IL1SharedBridge, IL2Bridge, IL2SharedBridge, IZkSyncHyperchain } from './typechain';
declare const Wallet_base: {
new (...args: any[]): {
_providerL2(): Provider;
_signerL2(): ethers.Signer;
getBalance(token?: string | undefined, blockTag?: BlockTag): Promise<bigint>;
getAllBalances(): Promise<BalancesMap>;
getDeploymentNonce(): Promise<bigint>;
getL2BridgeContracts(): Promise<{
erc20: IL2Bridge;
weth: IL2Bridge;
shared: IL2SharedBridge;
}>;
_fillCustomData(data: import("./types").Eip712Meta): import("./types").Eip712Meta;
withdraw(transaction: {
amount: BigNumberish;
token: string;
to?: string | undefined;
bridgeAddress?: string | undefined;
paymasterParams?: PaymasterParams | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<TransactionResponse>;
transfer(transaction: {
to: string;
amount: BigNumberish;
token?: string | undefined;
paymasterParams?: PaymasterParams | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<TransactionResponse>;
sendTransaction(tx: ethers.TransactionRequest): Promise<ethers.TransactionResponse>;
getAddress(): Promise<string>;
};
} & {
new (...args: any[]): {
_providerL2(): Provider;
_providerL1(): ethers.Provider;
_signerL1(): ethers.Signer;
getDefaultBridgeAddresses(): Promise<{
erc20L1: string;
erc20L2: string;
wethL1: string;
wethL2: string;
sharedL1: string;
sharedL2: string;
l1Nullifier: string;
l1NativeTokenVault: string;
}>;
getMainContract(): Promise<IZkSyncHyperchain>;
getBridgehubContract(): Promise<IBridgehub>;
getL1BridgeContracts(): Promise<{
erc20: IL1ERC20Bridge;
weth: IL1ERC20Bridge;
shared: IL1SharedBridge;
}>;
getL1AssetRouter(address?: string | undefined): Promise<import("./typechain").IL1AssetRouter>;
getL1NativeTokenVault(): Promise<import("./typechain").IL1NativeTokenVault>;
getL1Nullifier(): Promise<import("./typechain").IL1Nullifier>;
getBaseToken(): Promise<string>;
isETHBasedChain(): Promise<boolean>;
getBalanceL1(token?: string | undefined, blockTag?: BlockTag | undefined): Promise<bigint>;
getAllowanceL1(token: string, bridgeAddress?: string | undefined, blockTag?: BlockTag | undefined): Promise<bigint>;
l2TokenAddress(token: string): Promise<string>;
l1TokenAddress(token: string): Promise<string>;
approveERC20(token: string, amount: BigNumberish, overrides?: (ethers.Overrides & {
bridgeAddress?: string | undefined;
}) | undefined): Promise<ethers.TransactionResponse>;
getBaseCost(params: {
gasLimit: BigNumberish;
gasPerPubdataByte?: BigNumberish | undefined;
gasPrice?: BigNumberish | undefined;
}): Promise<bigint>;
getDepositAllowanceParams(token: string, amount: BigNumberish, overrides?: ethers.Overrides | undefined): Promise<{
token: string;
allowance: BigNumberish;
}[]>;
deposit(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
_depositNonBaseTokenToNonETHBasedChain(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
_depositBaseTokenToNonETHBasedChain(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
_depositETHToNonETHBasedChain(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
_depositTokenToETHBasedChain(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
_depositETHToETHBasedChain(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
approveERC20?: boolean | undefined;
approveBaseERC20?: boolean | undefined;
l2GasLimit?: BigNumberish | undefined;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
* const CONTRACT_ADDRESS = "<CONTRACT_ADDRESS>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tx = await wallet.getRequestExecuteTx({
* contractAddress: await provider.getMainContractAddress(),
* calldata: "0x",
* l2Value: 7_000_000_000,
* });
*/
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
approveOverrides?: ethers.Overrides | undefined;
approveBaseOverrides?: ethers.Overrides | undefined;
customBridgeData?: BytesLike | undefined;
}): Promise<PriorityOpResponse>;
estimateGasDeposit(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
customBridgeData?: BytesLike | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<bigint>;
getDepositTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<any>;
_getDepositNonBaseTokenToNonETHBasedChainTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
tx: ethers.ContractTransaction;
mintValue: bigint;
}>;
_getDepositBaseTokenOnNonETHBasedChainTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
tx: {
token: string;
amount: BigNumberish;
to: string;
operatorTip: BigNumberish;
bridgeAddress?: string | undefined;
l2GasLimit: BigNumberish;
gasPerPubdataByte: BigNumberish;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides: ethers.Overrides;
contractAddress: string;
calldata: string;
mintValue: bigint;
l2Value: BigNumberish;
};
mintValue: bigint;
}>;
_getDepositETHOnNonETHBasedChainTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
tx: ethers.ContractTransaction;
mintValue: bigint;
}>;
_getDepositTokenOnETHBasedChainTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<ethers.ContractTransaction>;
_getDepositETHOnETHBasedChainTx(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
token: string;
amount: BigNumberish;
to: string;
operatorTip: BigNumberish;
bridgeAddress?: string | undefined;
l2GasLimit: BigNumberish;
gasPerPubdataByte: BigNumberish;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides: ethers.Overrides;
contractAddress: string;
calldata: string;
mintValue: BigNumberish;
l2Value: BigNumberish;
}>;
_getSecondBridgeCalldata(token: string, amount: BigNumberish, to: string): Promise<string>;
_getDepositTxWithDefaults(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
token: string;
amount: BigNumberish;
to: string;
operatorTip: BigNumberish;
bridgeAddress?: string | undefined;
l2GasLimit: BigNumberish;
gasPerPubdataByte: BigNumberish;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides: ethers.Overrides;
}>;
_getL2GasLimit(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<BigNumberish>;
_getL2GasLimitFromCustomBridge(transaction: {
token: string;
amount: BigNumberish;
to?: string | undefined;
operatorTip?: BigNumberish | undefined;
bridgeAddress?: string | undefined;
l2GasLimit?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
customBridgeData?: BytesLike | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<BigNumberish>;
getFullRequiredDepositFee(transaction: {
token: string;
to?: string | undefined;
bridgeAddress?: string | undefined;
customBridgeData?: BytesLike | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<FullDepositFee>;
getPriorityOpConfirmation(txHash: string, index?: number): Promise<{
l1BatchNumber: number;
l2MessageIndex: number;
l2TxNumberInBlock: number | null;
proof: string[];
}>;
_getWithdrawalLog(withdrawalHash: BytesLike, index?: number): Promise<{
log: import("./types").Log;
l1BatchTxId: number | null;
}>;
_getWithdrawalL2ToL1Log(withdrawalHash: BytesLike, index?: number): Promise<{
l2ToL1LogIndex: number;
l2ToL1Log: import("./types").L2ToL1Log;
}>;
finalizeWithdrawalParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeWithdrawalParams>;
getFinalizeWithdrawalParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeWithdrawalParams>;
getFinalizeDepositParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeL1DepositParams>;
finalizeWithdrawal(withdrawalHash: BytesLike, index?: number, overrides?: ethers.Overrides | undefined): Promise<ContractTransactionResponse>;
isWithdrawalFinalized(withdrawalHash: BytesLike, index?: number): Promise<boolean>;
claimFailedDeposit(depositHash: BytesLike, overrides?: ethers.Overrides | undefined): Promise<ContractTransactionResponse>;
requestExecute(transaction: {
contractAddress: string;
calldata: string;
l2GasLimit?: BigNumberish | undefined;
mintValue?: BigNumberish | undefined;
l2Value?: BigNumberish | undefined;
factoryDeps?: BytesLike[] | undefined;
operatorTip?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<PriorityOpResponse>;
estimateGasRequestExecute(transaction: {
contractAddress: string;
calldata: string;
l2GasLimit?: BigNumberish | undefined;
mintValue?: BigNumberish | undefined;
l2Value?: BigNumberish | undefined;
factoryDeps?: BytesLike[] | undefined;
operatorTip?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<bigint>;
getRequestExecuteAllowanceParams(transaction: {
contractAddress: string;
calldata: string;
l2GasLimit?: BigNumberish | undefined;
l2Value?: BigNumberish | undefined;
factoryDeps?: BytesLike[] | undefined;
operatorTip?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<{
token: string;
allowance: BigNumberish;
}>;
getRequestExecuteTx(transaction: {
contractAddress: string;
calldata: string;
l2GasLimit?: BigNumberish | undefined;
mintValue?: BigNumberish | undefined;
l2Value?: BigNumberish | undefined;
factoryDeps?: BytesLike[] | undefined;
operatorTip?: BigNumberish | undefined;
gasPerPubdataByte?: BigNumberish | undefined;
refundRecipient?: string | undefined;
overrides?: ethers.Overrides | undefined;
}): Promise<ethers.TransactionRequest>;
sendTransaction(tx: ethers.TransactionRequest): Promise<ethers.TransactionResponse>;
getAddress(): Promise<string>;
};
} & typeof ethers.Wallet;
/**
* A `Wallet` is an extension of {@link ethers.Wallet} with additional features for interacting with ZKsync Era.
* It facilitates bridging assets between different networks.
* All transactions must originate from the address corresponding to the provided private key.
*/
export declare class Wallet extends Wallet_base {
readonly provider: Provider;
providerL1?: ethers.Provider;
eip712: EIP712Signer;
_providerL1(): ethers.Provider;
_providerL2(): Provider;
_signerL1(): ethers.Wallet;
_signerL2(): Wallet;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const mainContract = await wallet.getMainContract();
*/
getMainContract(): Promise<IZkSyncHyperchain>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const bridgehub = await wallet.getBridgehubContract();
*/
getBridgehubContract(): Promise<IBridgehub>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const l1BridgeContracts = await wallet.getL1BridgeContracts();
*/
getL1BridgeContracts(): Promise<{
erc20: IL1ERC20Bridge;
weth: IL1ERC20Bridge;
shared: IL1SharedBridge;
}>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
*
* console.log(`Token balance: ${await wallet.getBalanceL1(tokenL1)}`);
*/
getBalanceL1(token?: Address, blockTag?: BlockTag): Promise<bigint>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x5C221E77624690fff6dd741493D735a17716c26B";
* console.log(`Token allowance: ${await wallet.getAllowanceL1(tokenL1)}`);
*/
getAllowanceL1(token: Address, bridgeAddress?: Address, blockTag?: BlockTag): Promise<bigint>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x5C221E77624690fff6dd741493D735a17716c26B";
*
* console.log(`Token L2 address: ${await wallet.l2TokenAddress(tokenL1)}`);
*/
l2TokenAddress(token: Address): Promise<string>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL2 = "0xe1134444211593Cfda9fc9eCc7B43208615556E2";
*
* console.log(`Token L1 address: ${await wallet.l1TokenAddress(tokenL1)}`);
*/
l1TokenAddress(token: Address): Promise<string>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
* const tx = await wallet.approveERC20(tokenL1, "10000000");
*
* await tx.wait();
*/
approveERC20(token: Address, amount: BigNumberish, overrides?: Overrides & {
bridgeAddress?: Address;
}): Promise<ethers.TransactionResponse>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* console.log(`Base cost: ${await wallet.getBaseCost({ gasLimit: 100_000 })}`);
*/
getBaseCost(params: {
gasLimit: BigNumberish;
gasPerPubdataByte?: BigNumberish;
gasPrice?: BigNumberish;
}): Promise<bigint>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* console.log(`Base token: ${await wallet.getBaseToken()}`);
*/
getBaseToken(): Promise<string>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* console.log(`Is ETH-based chain: ${await wallet.isETHBasedChain()}`);
*/
isETHBasedChain(): Promise<boolean>;
/**
* @inheritDoc
*
* @example Get allowance parameters for depositing ETH on ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const token = "<L1_TOKEN>";
* const amount = 5;
* const approveParams = await wallet.getDepositAllowanceParams(token, amount);
*
* await (
* await wallet.approveERC20(
* approveParams[0].token,
* approveParams[0].allowance
* )
* ).wait();
*
* @example Get allowance parameters for depositing ETH on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const token = utils.LEGACY_ETH_ADDRESS;
* const amount = 5;
* const approveParams = await wallet.getDepositAllowanceParams(token, amount);
*
* await (
* await wallet.approveERC20(
* approveParams[0].token,
* approveParams[0].allowance
* )
* ).wait();
*
* @example Get allowance parameters for depositing base token on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const token = await wallet.getBaseToken();
* const amount = 5;
* const approveParams = await wallet.getDepositAllowanceParams(token, amount);
*
* await (
* await wallet.approveERC20(
* approveParams[0].token,
* approveParams[0].allowance
* )
* ).wait();
*
* @example Get allowance parameters for depositing non-base token on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const token = "<L1_TOKEN>";
* const amount = 5;
* const approveParams = await wallet.getDepositAllowanceParams(token, amount);
*
* await (
* await wallet.approveERC20(
* approveParams[0].token,
* approveParams[0].allowance
* )
* ).wait();
*
* await (
* await wallet.approveERC20(
* approveParams[1].token,
* approveParams[1].allowance
* )
* ).wait();
*/
getDepositAllowanceParams(token: Address, amount: BigNumberish, overrides?: ethers.Overrides): Promise<{
token: Address;
allowance: BigNumberish;
}[]>;
/**
* @inheritDoc
*
* @example Deposit ETH on ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const depositTx = await wallet.deposit({
* token: utils.ETH_ADDRESS,
* amount: 10_000_000n,
* });
* // Note that we wait not only for the L1 transaction to complete but also for it to be
* // processed by zkSync. If we want to wait only for the transaction to be processed on L1,
* // we can use `await depositTx.waitL1Commit()`
* await depositTx.wait();
*
* @example Deposit token on ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
* const depositTx = await wallet.deposit({
* token: tokenL1,
* amount: 10_000_000n,
* approveERC20: true,
* });
* // Note that we wait not only for the L1 transaction to complete but also for it to be
* // processed by zkSync. If we want to wait only for the transaction to be processed on L1,
* // we can use `await depositTx.waitL1Commit()`
* await depositTx.wait();
*
* @example Deposit ETH on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const depositTx = await wallet.deposit({
* token: utils.ETH_ADDRESS,
* amount: 10_000_000n,
* approveBaseERC20: true,
* });
* // Note that we wait not only for the L1 transaction to complete but also for it to be
* // processed by zkSync. If we want to wait only for the transaction to be processed on L1,
* // we can use `await depositTx.waitL1Commit()`
* await depositTx.wait();
*
* @example Deposit base token on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const depositTx = await wallet.deposit({
* token: await wallet.getBaseToken(),
* amount: 10_000_000n,
* approveERC20: true, // or approveBaseERC20: true
* });
* // Note that we wait not only for the L1 transaction to complete but also for it to be
* // processed by zkSync. If we want to wait only for the transaction to be processed on L1,
* // we can use `await depositTx.waitL1Commit()`
* await depositTx.wait();
*
* @example Deposit non-base token on non-ETH-based chain.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
* const depositTx = await wallet.deposit({
* token: tokenL1,
* amount: 10_000_000n,
* approveERC20: true,
* approveBaseERC20: true,
* });
* // Note that we wait not only for the L1 transaction to complete but also for it to be
* // processed by zkSync. If we want to wait only for the transaction to be processed on L1,
* // we can use `await depositTx.waitL1Commit()`
* await depositTx.wait();
*/
deposit(transaction: {
token: Address;
amount: BigNumberish;
to?: Address;
operatorTip?: BigNumberish;
bridgeAddress?: Address;
approveERC20?: boolean;
approveBaseERC20?: boolean;
l2GasLimit?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
approveOverrides?: Overrides;
approveBaseOverrides?: Overrides;
customBridgeData?: BytesLike;
}): Promise<PriorityOpResponse>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x5C221E77624690fff6dd741493D735a17716c26B";
* const gas = await wallet.estimateGasDeposit({
* token: tokenL1,
* amount: 10_000_000n,
* });
* console.log(`Gas: ${gas}`);
*/
estimateGasDeposit(transaction: {
token: Address;
amount: BigNumberish;
to?: Address;
operatorTip?: BigNumberish;
bridgeAddress?: Address;
customBridgeData?: BytesLike;
l2GasLimit?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<bigint>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
* const tx = await wallet.getDepositTx({
* token: tokenL1,
* amount: "10_000_000n,
* });
*/
getDepositTx(transaction: {
token: Address;
amount: BigNumberish;
to?: Address;
operatorTip?: BigNumberish;
bridgeAddress?: Address;
l2GasLimit?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
customBridgeData?: BytesLike;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<any>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tokenL1 = "0x56E69Fa1BB0d1402c89E3A4E3417882DeA6B14Be";
* const fee = await wallet.getFullRequiredDepositFee({
* token: tokenL1,
* to: await wallet.getAddress(),
* });
* console.log(`Fee: ${fee}`);
*/
getFullRequiredDepositFee(transaction: {
token: Address;
to?: Address;
bridgeAddress?: Address;
customBridgeData?: BytesLike;
gasPerPubdataByte?: BigNumberish;
overrides?: Overrides;
}): Promise<FullDepositFee>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const WITHDRAWAL_HASH = "<WITHDRAWAL_TX_HASH>";
* const params = await wallet.finalizeWithdrawalParams(WITHDRAWAL_HASH);
*/
finalizeWithdrawalParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeWithdrawalParams>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const WITHDRAWAL_HASH = "<WITHDRAWAL_TX_HASH>";
* const params = await wallet.finalizeWithdrawalParams(WITHDRAWAL_HASH);
*/
getFinalizeWithdrawalParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeWithdrawalParams>;
getFinalizeDepositParams(withdrawalHash: BytesLike, index?: number): Promise<FinalizeL1DepositParams>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const WITHDRAWAL_HASH = "<WITHDRAWAL_TX_HASH>";
* const finalizeWithdrawTx = await wallet.finalizeWithdrawal(WITHDRAWAL_HASH);
*/
finalizeWithdrawal(withdrawalHash: BytesLike, index?: number, overrides?: Overrides): Promise<ContractTransactionResponse>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const WITHDRAWAL_HASH = "<WITHDRAWAL_TX_HASH>";
* const isFinalized = await wallet.isWithdrawalFinalized(WITHDRAWAL_HASH);
*/
isWithdrawalFinalized(withdrawalHash: BytesLike, index?: number): Promise<boolean>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const FAILED_DEPOSIT_HASH = "<FAILED_DEPOSIT_TX_HASH>";
* const claimFailedDepositTx = await wallet.claimFailedDeposit(FAILED_DEPOSIT_HASH);
*/
claimFailedDeposit(depositHash: BytesLike, overrides?: Overrides): Promise<ContractTransactionResponse>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tx = {
* contractAddress: await wallet.getAddress(),
* calldata: '0x',
* l2Value: 7_000_000_000,
* };
*
* const approveParams = await wallet.getRequestExecuteAllowanceParams(tx);
* await (
* await wallet.approveERC20(
* approveParams.token,
* approveParams.allowance
* )
* ).wait();
*/
getRequestExecuteAllowanceParams(transaction: {
contractAddress: Address;
calldata: string;
l2GasLimit?: BigNumberish;
l2Value?: BigNumberish;
factoryDeps?: BytesLike[];
operatorTip?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<{
token: Address;
allowance: BigNumberish;
}>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
* const CONTRACT_ADDRESS = "<CONTRACT_ADDRESS>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tx = await wallet.requestExecute({
* contractAddress: await provider.getMainContractAddress(),
* calldata: "0x",
* l2Value: 7_000_000_000,
* });
* await tx.wait();
*/
requestExecute(transaction: {
contractAddress: Address;
calldata: string;
l2GasLimit?: BigNumberish;
mintValue?: BigNumberish;
l2Value?: BigNumberish;
factoryDeps?: BytesLike[];
operatorTip?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<PriorityOpResponse>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
* const CONTRACT_ADDRESS = "<CONTRACT_ADDRESS>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const gas = await wallet.estimateGasRequestExecute({
* contractAddress: await provider.getMainContractAddress(),
* calldata: "0x",
* l2Value: 7_000_000_000,
* });
* console.log(`Gas: ${gas}`);
*/
estimateGasRequestExecute(transaction: {
contractAddress: Address;
calldata: string;
l2GasLimit?: BigNumberish;
mintValue?: BigNumberish;
l2Value?: BigNumberish;
factoryDeps?: BytesLike[];
operatorTip?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<bigint>;
/**
* @inheritDoc
*
* @example
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
* const CONTRACT_ADDRESS = "<CONTRACT_ADDRESS>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const tx = await wallet.getRequestExecuteTx({
* contractAddress: await provider.getMainContractAddress(),
* calldata: "0x",
* l2Value: 7_000_000_000,
* });
*/
getRequestExecuteTx(transaction: {
contractAddress: Address;
calldata: string;
l2GasLimit?: BigNumberish;
mintValue?: BigNumberish;
l2Value?: BigNumberish;
factoryDeps?: BytesLike[];
operatorTip?: BigNumberish;
gasPerPubdataByte?: BigNumberish;
refundRecipient?: Address;
overrides?: Overrides;
}): Promise<TransactionRequest>;
/**
* @inheritDoc
*
* @example Get ETH balance.
*
* import { Wallet, Provider, types, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* console.log(`ETH balance: ${await wallet.getBalance()}`);
*
* @example Get token balance.
*
* import { Wallet, Provider, utils } from "zksync-ethers";
* import { ethers } from "ethers";
*
* const PRIVATE_KEY = "<WALLET_PRIVATE_KEY>";
*
* const provider = Provider.getDefaultProvider(types.Network.Sepolia);
* const ethProvider = ethers.getDefaultProvider("sepolia");
* const wallet = new Wallet(PRIVATE_KEY, provider, ethProvider);
*
* const token = "0x6a4Fb925583F7D4dF82de62d98107468aE846FD1";
*
* console.log(`Token balance: ${await wallet.getBalance(token)}`);
*/
getBalance(token?: Address, blockTag?: BlockTag): Promi