UNPKG

@parifi/synthetix-sdk-ts

Version:

A Typescript SDK for interactions with the Synthetix protocol

152 lines (150 loc) 4.11 kB
// src/utils/override.ts import { keccak256, encodeAbiParameters, toHex } from "viem"; // src/constants/slots.ts var tokensSlots = [ { address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", balanceSlot: 9, approveSlot: 10 }, { address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", balanceSlot: 9, approveSlot: 10 }, { address: "0x4EA71A20e655794051D1eE8b6e4A3269B13ccaCc", balanceSlot: 5, approveSlot: 6 }, { address: "0x4EA71A20e655794051D1eE8b6e4A3269B13ccaCc", balanceSlot: 5, approveSlot: 6 }, { address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", balanceSlot: 9, approveSlot: 10 }, { address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", balanceSlot: 9, approveSlot: 10 }, { address: "0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22", balanceSlot: 51, approveSlot: 52 }, { address: "0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22", balanceSlot: 51, approveSlot: 52 }, { address: "0x4200000000000000000000000000000000000006", balanceSlot: 3, approveSlot: 4 }, { address: "0x4200000000000000000000000000000000000006", balanceSlot: 3, approveSlot: 4 }, { address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", balanceSlot: 1, approveSlot: 2 }, { address: "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", balanceSlot: 1, approveSlot: 2 }, { address: "0xc43708f8987Df3f3681801e5e640667D86Ce3C30", balanceSlot: 0, approveSlot: 1 }, { address: "0x8608d511E224180051A36d34121725D978064e6E", balanceSlot: 0, approveSlot: 1 }, { address: "0x4200000000000000000000000000000000000006", balanceSlot: 3, approveSlot: 4 }, { address: "0xB3f05d39504dA95876EA0174D25Ae51Ac2422a70", balanceSlot: 0, approveSlot: 1 }, { address: "0x00ab6b818652bB3bFE334983171edFD38184DbeD", balanceSlot: 0, approveSlot: 1 }, { address: "0x7Bf65af7EFBd0E933fb87dD2C9cE7A17d959b822", balanceSlot: 0, approveSlot: 1 } ]; // src/utils/override.ts function erc20BalanceOverride({ token, owner, slot, balance = BigInt("0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) { const smartAccountErc20BalanceSlot = keccak256( encodeAbiParameters( [ { type: "address" }, { type: "uint256" } ], [owner, slot] ) ); return [ { address: token, stateDiff: [ { slot: smartAccountErc20BalanceSlot, value: toHex(balance) } ] } ]; } function erc20AllowanceOverride({ token, owner, spender, slot, amount = BigInt("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) { const smartAccountErc20AllowanceSlot = keccak256( encodeAbiParameters( [ { type: "address" }, { type: "bytes32" } ], [ spender, keccak256( encodeAbiParameters( [ { type: "address" }, { type: "uint256" } ], [owner, BigInt(slot)] ) ) ] ) ); return [ { address: token, stateDiff: [ { slot: smartAccountErc20AllowanceSlot, value: toHex(amount) } ] } ]; } var erc20StateOverrideBalanceAndAllowance = ({ token, owner, balance = BigInt("0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"), spender }) => { const balanceSlot = tokensSlots.find((slotData) => slotData.address.toLowerCase() === token.toLowerCase()); if (!balanceSlot) throw new Error("No balance slot"); const balanceOverride = erc20BalanceOverride({ balance, slot: BigInt(balanceSlot.balanceSlot), token, owner }); const approveOverride = erc20AllowanceOverride({ spender, amount: balance, token, slot: BigInt(balanceSlot.approveSlot), owner }); return [...balanceOverride, ...approveOverride]; }; export { erc20AllowanceOverride, erc20BalanceOverride, erc20StateOverrideBalanceAndAllowance }; //# sourceMappingURL=override.mjs.map