@tokamak-network/thanos-sdk
Version:
Tools for working with Thanos
239 lines (238 loc) • 11.6 kB
TypeScript
import { Provider, BlockTag, TransactionResponse, TransactionRequest } from '@ethersproject/abstract-provider';
import { Signer } from '@ethersproject/abstract-signer';
import { ethers, BigNumber, Overrides, CallOverrides, PayableOverrides } from 'ethers';
import { BedrockOutputData, BedrockCrossChainMessageProof } from '@tokamak-network/core-utils';
import { OEContracts, OEContractsLike, MessageLike, MessageRequestLike, TransactionLike, AddressLike, NumberLike, SignerOrProviderLike, CrossChainMessage, CrossChainMessageRequest, CrossChainMessageProof, MessageDirection, MessageStatus, TokenBridgeMessage, MessageReceipt, BridgeAdapterData, BridgeAdapters, StateRoot, StateRootBatch, IBridgeAdapter, ProvenWithdrawal, LowLevelMessage } from './interfaces';
import { DeepPartial } from './utils';
export declare class CrossChainMessenger {
l1SignerOrProvider: Signer | Provider;
l2SignerOrProvider: Signer | Provider;
l1ChainId: number;
l2ChainId: number;
nativeTokenAddress: string;
contracts: OEContracts;
bridges: BridgeAdapters;
depositConfirmationBlocks: number;
l1BlockTimeSeconds: number;
bedrock: boolean;
private _outputCache;
constructor(opts: {
l1SignerOrProvider: SignerOrProviderLike;
l2SignerOrProvider: SignerOrProviderLike;
l1ChainId: NumberLike;
l2ChainId: NumberLike;
nativeTokenAddress?: AddressLike;
depositConfirmationBlocks?: NumberLike;
l1BlockTimeSeconds?: NumberLike;
contracts?: DeepPartial<OEContractsLike>;
bridges?: BridgeAdapterData;
bedrock?: boolean;
});
get l1Provider(): Provider;
get l2Provider(): Provider;
get l1Signer(): Signer;
get l2Signer(): Signer;
fpac(): Promise<boolean>;
getMessagesByTransaction(transaction: TransactionLike, opts?: {
direction?: MessageDirection;
}): Promise<CrossChainMessage[]>;
toBedrockCrossChainMessage(message: MessageLike, messageIndex?: number): Promise<CrossChainMessage>;
toLowLevelMessage(message: MessageLike, messageIndex?: number): Promise<LowLevelMessage>;
getBridgeForTokenPair(l1Token: AddressLike, l2Token: AddressLike): Promise<IBridgeAdapter>;
getDepositsByAddress(address: AddressLike, opts?: {
fromBlock?: BlockTag;
toBlock?: BlockTag;
}): Promise<TokenBridgeMessage[]>;
getWithdrawalsByAddress(address: AddressLike, opts?: {
fromBlock?: BlockTag;
toBlock?: BlockTag;
}): Promise<TokenBridgeMessage[]>;
toCrossChainMessage(message: MessageLike, messageIndex?: number): Promise<CrossChainMessage>;
getMessageStatus(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrBlockHash?: BlockTag): Promise<MessageStatus>;
getMessageReceipt(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrHash?: BlockTag): Promise<MessageReceipt>;
waitForMessageReceipt(message: MessageLike, opts?: {
fromBlockOrBlockHash?: BlockTag;
toBlockOrHash?: BlockTag;
confirmations?: number;
pollIntervalMs?: number;
timeoutMs?: number;
}, messageIndex?: number): Promise<MessageReceipt>;
waitForMessageStatus(message: MessageLike, status: MessageStatus, opts?: {
fromBlockOrBlockHash?: BlockTag;
toBlockOrBlockHash?: BlockTag;
pollIntervalMs?: number;
timeoutMs?: number;
}, messageIndex?: number): Promise<void>;
estimateL2MessageGasLimit(message: MessageRequestLike, opts?: {
bufferPercent?: number;
from?: string;
}, messageIndex?: number): Promise<BigNumber>;
estimateMessageWaitTimeSeconds(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrBlockHash?: BlockTag): Promise<number>;
getChallengePeriodSeconds(): Promise<number>;
getProvenWithdrawal(withdrawalHash: string): Promise<ProvenWithdrawal | null>;
isValidOutputRoot(outputRoot: string, l2BlockNumber: number): Promise<boolean>;
getMessageBedrockOutput(message: MessageLike, messageIndex?: number): Promise<BedrockOutputData | null>;
getMessageStateRoot(message: MessageLike, messageIndex?: number): Promise<StateRoot | null>;
getStateBatchAppendedEventByBatchIndex(batchIndex: number): Promise<ethers.Event | null>;
getStateBatchAppendedEventByTransactionIndex(transactionIndex: number): Promise<ethers.Event | null>;
getStateRootBatchByTransactionIndex(transactionIndex: number): Promise<StateRootBatch | null>;
getMessageProof(message: MessageLike, messageIndex?: number): Promise<CrossChainMessageProof>;
getBedrockMessageProof(message: MessageLike, messageIndex?: number): Promise<BedrockCrossChainMessageProof>;
sendMessage(message: CrossChainMessageRequest, opts?: {
signer?: Signer;
l2GasLimit?: NumberLike;
overrides?: Overrides;
}): Promise<TransactionResponse>;
resendMessage(message: MessageLike, messageGasLimit: NumberLike, opts?: {
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
proveMessage(message: MessageLike, opts?: {
signer?: Signer;
overrides?: Overrides;
}, messageIndex?: number): Promise<TransactionResponse>;
finalizeMessage(message: MessageLike, opts?: {
signer?: Signer;
overrides?: PayableOverrides;
}, messageIndex?: number): Promise<TransactionResponse>;
bridgeETH(amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
l2GasLimit?: NumberLike;
overrides?: Overrides;
}): Promise<TransactionResponse>;
withdrawETH(amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
bridgeNativeToken(amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
l2GasLimit?: NumberLike;
overrides?: Overrides;
}): Promise<TransactionResponse>;
withdrawNativeToken(amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
approveNativeToken(amount: NumberLike, opts?: {
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
approval(l1Token: AddressLike, l2Token: AddressLike, opts?: {
signer?: Signer;
}): Promise<BigNumber>;
approveERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
bridgeERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}): Promise<TransactionResponse>;
withdrawERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
signer?: Signer;
overrides?: Overrides;
}): Promise<TransactionResponse>;
populateTransaction: {
sendMessage: (message: CrossChainMessageRequest, opts?: {
l2GasLimit?: NumberLike;
overrides?: Overrides;
}) => Promise<TransactionRequest>;
resendMessage: (message: MessageLike, messageGasLimit: NumberLike, opts?: {
overrides?: Overrides;
}, messageIndex?: number) => Promise<TransactionRequest>;
proveMessage: (message: MessageLike, opts?: {
overrides?: PayableOverrides;
}, messageIndex?: number) => Promise<TransactionRequest>;
finalizeMessage: (message: MessageLike, opts?: {
overrides?: PayableOverrides;
}, messageIndex?: number) => Promise<TransactionRequest>;
bridgeETH: (amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}, isEstimatingGas?: boolean) => Promise<TransactionRequest>;
withdrawETH: (amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: Overrides;
}) => Promise<TransactionRequest>;
bridgeNativeToken: (amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}, isEstimatingGas?: boolean) => Promise<TransactionRequest>;
withdrawNativeToken: (amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: Overrides;
}) => Promise<TransactionRequest>;
approveNativeToken: (amount: NumberLike, opts?: {
overrides?: Overrides;
}) => Promise<TransactionRequest>;
approveERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
overrides?: Overrides;
}) => Promise<TransactionRequest>;
bridgeERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}, isEstimatingGas?: boolean) => Promise<TransactionRequest>;
withdrawERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: Overrides;
}) => Promise<TransactionRequest>;
};
estimateGas: {
sendMessage: (message: CrossChainMessageRequest, opts?: {
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
resendMessage: (message: MessageLike, messageGasLimit: NumberLike, opts?: {
overrides?: CallOverrides;
}) => Promise<BigNumber>;
proveMessage: (message: MessageLike, opts?: {
overrides?: CallOverrides;
}, messageIndex?: number) => Promise<BigNumber>;
finalizeMessage: (message: MessageLike, opts?: {
overrides?: CallOverrides;
}, messageIndex?: number) => Promise<BigNumber>;
bridgeETH: (amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
withdrawETH: (amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
bridgeNativeToken: (amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
withdrawNativeToken: (amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
approveNativeToken: (amount: NumberLike, opts?: {
overrides?: CallOverrides;
}) => Promise<BigNumber>;
approveERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
overrides?: CallOverrides;
}) => Promise<BigNumber>;
bridgeERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
l2GasLimit?: NumberLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
withdrawERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: {
recipient?: AddressLike;
overrides?: CallOverrides;
}) => Promise<BigNumber>;
};
}