@biconomy/sdk
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
88 lines • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toAcrossPlugin = exports.acrossEncodeBridgingUserOp = void 0;
const abitype_1 = require("abitype");
const viem_1 = require("viem");
const createHttpClient_1 = require("../../clients/createHttpClient.js");
const acrossClient = (0, createHttpClient_1.createHttpClient)("https://app.across.to/api");
const acrossGetSuggestedFees = async ({ inputToken, outputToken, originChainId, destinationChainId, amount }) => acrossClient.request({
path: "suggested-fees",
method: "GET",
params: {
inputToken,
outputToken,
originChainId: originChainId.toString(),
destinationChainId: destinationChainId.toString(),
amount: amount.toString()
}
});
const acrossEncodeBridgingUserOp = async (params) => {
const { bridgingAmount, fromChain, account, toChain, tokenMapping } = params;
const inputToken = tokenMapping.on(fromChain.id);
const outputToken = tokenMapping.on(toChain.id);
const depositor = account.deploymentOn(fromChain.id)?.address;
const recipient = account.deploymentOn(toChain.id)?.address;
if (!depositor || !recipient) {
throw new Error("No depositor or recipient found");
}
const suggestedFees = await acrossGetSuggestedFees({
amount: bridgingAmount,
destinationChainId: toChain.id,
inputToken: inputToken,
outputToken: outputToken,
originChainId: fromChain.id
});
const depositV3abi = (0, abitype_1.parseAbi)([
"function depositV3(address depositor, address recipient, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount, uint256 destinationChainId, address exclusiveRelayer, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, bytes message) external"
]);
const outputAmount = BigInt(bridgingAmount) - BigInt(suggestedFees.totalRelayFee.total);
const fillDeadlineBuffer = 18000;
const fillDeadline = Math.round(Date.now() / 1000) + fillDeadlineBuffer;
const approveCall = {
to: inputToken,
gasLimit: 100000n,
data: (0, viem_1.encodeFunctionData)({
abi: viem_1.erc20Abi,
functionName: "approve",
args: [suggestedFees.spokePoolAddress, bridgingAmount]
})
};
const depositCall = {
to: suggestedFees.spokePoolAddress,
gasLimit: 150000n,
data: (0, viem_1.encodeFunctionData)({
abi: depositV3abi,
args: [
depositor,
recipient,
inputToken,
outputToken,
bridgingAmount,
outputAmount,
BigInt(toChain.id),
suggestedFees.exclusiveRelayer,
Number.parseInt(suggestedFees.timestamp),
fillDeadline,
Number.parseInt(suggestedFees.exclusivityDeadline),
"0x"
]
})
};
const userOp = {
calls: [approveCall, depositCall],
chainId: fromChain.id
};
return {
userOp: userOp,
receivedAtDestination: outputAmount,
bridgingDurationExpectedMs: undefined
};
};
exports.acrossEncodeBridgingUserOp = acrossEncodeBridgingUserOp;
const toAcrossPlugin = () => ({
encodeBridgeUserOp: async (params) => {
return await (0, exports.acrossEncodeBridgingUserOp)(params);
}
});
exports.toAcrossPlugin = toAcrossPlugin;
//# sourceMappingURL=toAcrossPlugin.js.map