@parifi/synthetix-sdk-ts
Version:
A Typescript SDK for interactions with the Synthetix protocol
152 lines (150 loc) • 4.11 kB
JavaScript
// 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