import peanut from '@squirrel-labs/peanut-sdk';
import { BigNumber, ethers } from 'ethers';
const userPrivateKey = 'SENDER-PRIVATE-KEY';
const APIKey = 'YOUR-API-KEY-HERE';
const link = 'PREVIOUSLY-CREATED-LINK'
//const apiUrl = 'OPTIONAL-DIFFERENT-API-URL';
const fromToken = '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'; // USDT on Polygon
const fromChainId = '137'; // Polygon
const tokenDecimals = 6;
// Initialize provider and wallet
function getWallet(chainId: number, privateKey: string): ethers.Wallet {
return new ethers.Wallet(privateKey, ethers.getDefaultProvider(chainId)); // Connect wallet to the provider
}
// Function to fulfill a request link
async function fulfillRequestLink(link: string) {
try {
// Get the details of the request link
const linkDetails = await peanut.getRequestLinkDetails({
link,
APIKey,
//apiUrl, //optional different apiUrl
});
console.log('Got the link details!', linkDetails);
const senderWallet = getWallet(Number(fromChainId), userPrivateKey)
// Prepare the unsigned cross-chain transaction
const xchainUnsignedTxs = await peanut.prepareXchainRequestFulfillmentTransaction({
fromChainId,
senderAddress: senderWallet.address,
fromToken,
squidRouterUrl: peanut.getSquidRouterUrl(true, false),
provider: senderWallet .provider,
fromTokenDecimals: tokenDecimals,
tokenType: peanut.interfaces.EPeanutLinkType.erc20,
linkDetails,
});
console.log('Computed xchain unsigned fulfillment transactions', xchainUnsignedTxs);
// Sign and submit the transaction
let lastHash = '';
for (const unsignedTx of xchainUnsignedTxs.unsignedTxs) {
const { tx, txHash } = await peanut.signAndSubmitTx({
unsignedTx,
structSigner: {
signer: senderWallet,
gasLimit: BigNumber.from(2_000_000),
},
});
lastHash = txHash
console.log('Submitted a transaction to fulfill the request link with tx hash', txHash);
await tx.wait();
console.log('Request link fulfillment completed!');
}
await peanut.submitRequestLinkFulfillment({
chainId: linkDetails.chainId,
hash: lastHash,
payerAddress: senderWallet.address,
link,
amountUsd: '',
//apiUrl, // optional differnt apiUrl
})
} catch (error) {
console.error('Error fulfilling request link:', error);
}
}
(async () => {
// Fulfill the request link
await fulfillRequestLink(link);
})();