要进行多次调用,您需要对函数进行编码。
const encData1 = swapRouterContract.interface.encodeFunctionData(
"exactInputSingle",
[params1]
);
const encData2 = swapRouterContract.interface.encodeFunctionData(
"exactInputSingle",
[params2]
);
多功能调用意味着我们将通过单个请求调用多个函数。
const calls = [encData1, encData2];
const encMultiCall = swapRouterContract.interface.encodeFunctionData(
"multicall",
[calls]
);
发送交易,我们需要“发送方”,“接收方”和“数据”。
const txArgs = {
to: V3SwapRouter,
from: WALLET_ADDRESS,
data: encMultiCall,
};
这个交易必须由签名者发送。如果您通过 Metamask 发送交易,Metamask 会自动使用账户的私钥进行签名。但是,如果您通过代码发送交易,则必须创建一个签名者。
const provider = new ethers.providers.JsonRpcProvider(TEST_URL);
const wallet = new ethers.Wallet(WALLET_SECRET);
const signer = wallet.connect(provider);
现在你可以发送交易:
const tx = await signer.sendTransaction(txArgs);
console.log("tx", tx);
const receipt = await tx.wait();
console.log(receipt);