import {
createCrossChainPermission,
definePermissions,
} from "@rhinestone/1auth";
import { parseUnits } from "viem";
import { arbitrumSepolia, baseSepolia } from "viem/chains";
const maxBridgeSpend = parseUnits("100", 6);
const validAfter = Math.floor(Date.now() / 1000);
const validUntil = validAfter + 24 * 60 * 60;
const destination = definePermissions({
address: vaultOnArbitrum,
name: "Vault",
abi: vaultAbi,
functions: {
deposit: {
params: {
assets: {
condition: "lessThanOrEqual",
value: maxBridgeSpend,
},
receiver: { condition: "equal", value: accountAddress },
},
},
},
});
const claim = createCrossChainPermission({
from: {
chain: baseSepolia,
token: tokenOnBase,
maxAmount: maxBridgeSpend,
},
to: {
chain: arbitrumSepolia,
token: tokenOnArbitrum,
recipient: accountAddress,
},
validAfter: BigInt(validAfter),
validUntil: BigInt(validUntil),
settlementLayers: ["ACROSS"],
});
await oneAuth.grantPermissions({
accountAddress,
targetChains: [arbitrumSepolia.id],
sourceChains: [baseSepolia.id],
sessionKeyAddress,
validAfter,
validUntil,
maxUses: 25,
permissions: destination.permissions,
contracts: destination.contracts,
crossChainPermits: [claim],
});