You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.9 KiB
56 lines
1.9 KiB
import { writeContract, } from '../../actions/wallet/writeContract.js';
|
|
import { portal2Abi, portalAbi } from '../abis.js';
|
|
/**
|
|
* Finalizes a withdrawal that occurred on an L2. Used in the Withdrawal flow.
|
|
*
|
|
* - Docs: https://viem.sh/op-stack/actions/finalizeWithdrawal
|
|
*
|
|
* @param client - Client to use
|
|
* @param parameters - {@link FinalizeWithdrawalParameters}
|
|
* @returns The finalize transaction hash. {@link FinalizeWithdrawalReturnType}
|
|
*
|
|
* @example
|
|
* import { createWalletClient, http } from 'viem'
|
|
* import { mainnet, optimism } from 'viem/chains'
|
|
* import { finalizeWithdrawal } from 'viem/op-stack'
|
|
*
|
|
* const walletClientL1 = createWalletClient({
|
|
* chain: mainnet,
|
|
* transport: http(),
|
|
* })
|
|
*
|
|
* const request = await finalizeWithdrawal(walletClientL1, {
|
|
* targetChain: optimism,
|
|
* withdrawal: { ... },
|
|
* })
|
|
*/
|
|
export async function finalizeWithdrawal(client, parameters) {
|
|
const { account, chain = client.chain, gas, maxFeePerGas, maxPriorityFeePerGas, nonce, proofSubmitter, targetChain, withdrawal, } = parameters;
|
|
const portalAddress = (() => {
|
|
if (parameters.portalAddress)
|
|
return parameters.portalAddress;
|
|
if (chain)
|
|
return targetChain.contracts.portal[chain.id].address;
|
|
return Object.values(targetChain.contracts.portal)[0].address;
|
|
})();
|
|
const [functionName, args, abi] = proofSubmitter
|
|
? [
|
|
'finalizeWithdrawalTransactionExternalProof',
|
|
[withdrawal, proofSubmitter],
|
|
portal2Abi,
|
|
]
|
|
: ['finalizeWithdrawalTransaction', [withdrawal], portalAbi];
|
|
return writeContract(client, {
|
|
account: account,
|
|
abi,
|
|
address: portalAddress,
|
|
chain,
|
|
functionName,
|
|
args,
|
|
gas: gas ?? undefined,
|
|
maxFeePerGas,
|
|
maxPriorityFeePerGas,
|
|
nonce,
|
|
});
|
|
}
|
|
//# sourceMappingURL=finalizeWithdrawal.js.map
|