@funkit/connect
Version:
Funkit Connect SDK elevates DeFi apps via web2 sign-ins and one-click checkouts.
83 lines (81 loc) • 2.24 kB
JavaScript
"use client";
// src/clients/rolly.tsx
import { VAULT_DEPOSITOR_ABI } from "@funkit/fun-relay";
import {
encodeFunctionData,
erc20Abi,
getAddress,
maxUint256
} from "viem";
var ROLLY_VAULT_ADDRESS = getAddress(
"0xd40373CC943f32BAd15bF42d1580363f4D52739D"
);
var ARBITRUM_USDT0 = getAddress(
"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"
);
var VAULT_DEPOSITOR_ARBITRUM = getAddress(
"0xC8A6871D4eC4DaE64f605db0f8a0B3D9ef928D64"
);
var AMOUNT_PLACEHOLDER = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffdeadbeefn;
var ROLLY_VAULT_ABI = [
{
name: "depositToken",
type: "function",
stateMutability: "nonpayable",
inputs: [
{ name: "to", type: "address" },
{ name: "amount", type: "uint256" }
],
outputs: []
}
];
function createRollyDepositActions(config) {
const {
recipientAddress,
tokenAddress = ARBITRUM_USDT0,
vaultAddress = ROLLY_VAULT_ADDRESS
} = config;
return async () => {
if (!recipientAddress) {
throw new Error(
"Please connect your wallet before starting a Rolly deposit"
);
}
const depositCalldata = encodeFunctionData({
abi: ROLLY_VAULT_ABI,
functionName: "depositToken",
args: [recipientAddress, AMOUNT_PLACEHOLDER]
});
return [
// Step 1: Reset token approval
{
contractAbi: erc20Abi,
contractAddress: tokenAddress,
functionName: "approve",
functionArgs: [VAULT_DEPOSITOR_ARBITRUM, 0n]
},
// Step 2: Approve token to VaultDepositor (infinite)
{
contractAbi: erc20Abi,
contractAddress: tokenAddress,
functionName: "approve",
functionArgs: [VAULT_DEPOSITOR_ARBITRUM, maxUint256]
},
// Step 3: VaultDepositor pulls token, swaps placeholder, forwards to
// Rolly.depositToken → credits recipient on the rollup
{
contractAbi: VAULT_DEPOSITOR_ABI,
contractAddress: VAULT_DEPOSITOR_ARBITRUM,
functionName: "deposit",
functionArgs: [tokenAddress, vaultAddress, depositCalldata, 0n]
}
];
};
}
export {
AMOUNT_PLACEHOLDER,
ARBITRUM_USDT0,
ROLLY_VAULT_ADDRESS,
VAULT_DEPOSITOR_ARBITRUM,
createRollyDepositActions
};