diff --git a/examples/linea/hardhat.config.js b/examples/linea/hardhat.config.js index d9849f3..d849b3b 100644 --- a/examples/linea/hardhat.config.js +++ b/examples/linea/hardhat.config.js @@ -5,6 +5,7 @@ require('./scripts/setValidator'); require('./scripts/changeFeeParams'); require('./scripts/setSecondaryGateway'); require('./scripts/governance'); +require('./scripts/claimL1Tx'); const BaseConfig = require('../../hardhat.base.config'); diff --git a/examples/linea/scripts/claimL1Tx.js b/examples/linea/scripts/claimL1Tx.js new file mode 100644 index 0000000..622e4b9 --- /dev/null +++ b/examples/linea/scripts/claimL1Tx.js @@ -0,0 +1,16 @@ +const { task, types } = require('hardhat/config'); +const { claimL1ToL2Message } = require('./common'); + +require('dotenv').config(); + +task('claimL1Tx', 'Claim l1 tx') + .addParam('txHash', 'The l2 to l1 tx hash', undefined, types.string) + .addOptionalParam('index', 'The l2 to l1 message index', 0, types.int) + .setAction(async taskArgs => { + const l2ToL1TxHash = taskArgs.txHash; + const messageIndex = taskArgs.index; + console.log(`The l2 to l1 tx hash: ${l2ToL1TxHash}`); + console.log(`The message index: ${messageIndex}`); + + await claimL1ToL2Message(l2ToL1TxHash, messageIndex); + }); diff --git a/examples/linea/scripts/common.js b/examples/linea/scripts/common.js index 991f484..ca958e6 100644 --- a/examples/linea/scripts/common.js +++ b/examples/linea/scripts/common.js @@ -24,7 +24,7 @@ function initSDK() { return { lineaL1Contract, lineaL2Contract, lineaL1ClaimingService }; } -async function claimL1ToL2Message(l1TxHash) { +async function claimL1ToL2Message(l1TxHash, messageIndex) { const sdkInit = initSDK(); const lineaL1Contract = sdkInit.lineaL1Contract; const lineaL2Contract = sdkInit.lineaL2Contract; @@ -32,7 +32,9 @@ async function claimL1ToL2Message(l1TxHash) { /** * Query the transaction status on L2 via messageHash. */ - const message = (await lineaL1Contract.getMessagesByTransactionHash(l1TxHash)).pop(); + messageIndex = messageIndex ?? 0; + const messages = await lineaL1Contract.getMessagesByTransactionHash(l1TxHash); + const message = messages[messageIndex]; // Waiting for the official Linea bridge to forward the message to L2 // And manually claim the message on L2