@lifi/sdk
Version:
LI.FI Any-to-Any Cross-Chain-Swap SDK
70 lines • 3.02 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.revokeTokenApproval = exports.setTokenAllowance = exports.setAllowance = void 0;
const viem_1 = require("viem");
const actions_1 = require("viem/actions");
const utils_1 = require("viem/utils");
const isZeroAddress_js_1 = require("../../utils/isZeroAddress.js");
const abi_js_1 = require("./abi.js");
const getAllowance_js_1 = require("./getAllowance.js");
const utils_js_1 = require("./utils.js");
const setAllowance = async (client, tokenAddress, contractAddress, amount, executionOptions, returnPopulatedTransaction) => {
const data = (0, viem_1.encodeFunctionData)({
abi: abi_js_1.approveAbi,
functionName: 'approve',
args: [contractAddress, amount],
});
if (returnPopulatedTransaction) {
return data;
}
let transactionRequest = {
to: tokenAddress,
data,
maxPriorityFeePerGas: client.account?.type === 'local'
? await (0, utils_js_1.getMaxPriorityFeePerGas)(client)
: undefined,
};
if (executionOptions?.updateTransactionRequestHook) {
const customizedTransactionRequest = await executionOptions.updateTransactionRequestHook({
requestType: 'approve',
...transactionRequest,
});
transactionRequest = {
...transactionRequest,
...customizedTransactionRequest,
};
}
return (0, utils_1.getAction)(client, actions_1.sendTransaction, 'sendTransaction')({
to: transactionRequest.to,
account: client.account,
data: transactionRequest.data,
gas: transactionRequest.gas,
gasPrice: transactionRequest.gasPrice,
maxFeePerGas: transactionRequest.maxFeePerGas,
maxPriorityFeePerGas: transactionRequest.maxPriorityFeePerGas,
});
};
exports.setAllowance = setAllowance;
const setTokenAllowance = async ({ walletClient, token, spenderAddress, amount, }) => {
if ((0, isZeroAddress_js_1.isZeroAddress)(token.address)) {
return;
}
const approvedAmount = await (0, getAllowance_js_1.getAllowance)(walletClient, token.address, walletClient.account.address, spenderAddress);
if (amount > approvedAmount) {
const approveTx = await (0, exports.setAllowance)(walletClient, token.address, spenderAddress, amount);
return approveTx;
}
};
exports.setTokenAllowance = setTokenAllowance;
const revokeTokenApproval = async ({ walletClient, token, spenderAddress, }) => {
if ((0, isZeroAddress_js_1.isZeroAddress)(token.address)) {
return;
}
const approvedAmount = await (0, getAllowance_js_1.getAllowance)(walletClient, token.address, walletClient.account.address, spenderAddress);
if (approvedAmount > 0) {
const approveTx = await (0, exports.setAllowance)(walletClient, token.address, spenderAddress, 0n);
return approveTx;
}
};
exports.revokeTokenApproval = revokeTokenApproval;
//# sourceMappingURL=setAllowance.js.map
;