UNPKG

baluni-api

Version:
218 lines (217 loc) 11.2 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.depositToYearnBatched = exports.depositToYearn = void 0; const YearnVault_json_1 = __importDefault(require("../../abis/yearn/YearnVault.json")); const ERC20_json_1 = __importDefault(require("../../abis/common/ERC20.json")); const ethers_1 = require("ethers"); const constants_1 = require("../../constants"); const Router_json_1 = __importDefault(require("../../abis/infra/Router.json")); function depositToYearn(wallet, tokenAddr, pool, amount, receiver, chainId) { return __awaiter(this, void 0, void 0, function* () { try { const token = new ethers_1.ethers.Contract(tokenAddr, ERC20_json_1.default, wallet); const vault = new ethers_1.ethers.Contract(pool, YearnVault_json_1.default, wallet); const tokenBalance = yield token.balanceOf(receiver); const infraRouter = String(constants_1.INFRA[chainId].ROUTER); const InfraRouterContract = new ethers_1.ethers.Contract(infraRouter, Router_json_1.default, wallet); const agentAddress = yield (InfraRouterContract === null || InfraRouterContract === void 0 ? void 0 : InfraRouterContract.getAgentAddress(receiver)); if (tokenBalance.lt(amount)) { throw new Error('::API::YEARN::DEPOSIT Insufficient balance'); } let Approvals = []; let Calldatas = []; let TokensReturn = []; const allowanceAgent = yield (token === null || token === void 0 ? void 0 : token.allowance(receiver, agentAddress)); console.log('::API::YEARN::DEPOSIT AGENT', agentAddress); console.log('::API::YEARN::DEPOSIT ALLOWANCE_SENDER_FOR_AGENT', Number(allowanceAgent).toString()); console.log('::API:: AMOUNT', Number(amount).toString()); // Sender Approval // ------------------------------------------------------------------------- if (allowanceAgent.lt(amount)) { console.log('::API::YEARN::DEPOSIT MISSING_ALLOWANCE_SENDER_FOR_AGENT'); const approveData = token.interface.encodeFunctionData('approve', [ agentAddress, ethers_1.ethers.constants.MaxUint256, ]); const approvalCalldata = { to: token.address, value: 0, data: approveData, }; Approvals.push(approvalCalldata); } else { console.log('::API::YEARN::DEPOSIT FOUND_ALLOWANCE_SENDER_FOR_AGENT'); } const allowanceYearn = yield (token === null || token === void 0 ? void 0 : token.allowance(agentAddress, pool)); // Agents Calldatas // ------------------------------------------------------------------------- if (allowanceYearn.lt(amount)) { console.log('::API::YEARN::DEPOSIT MISSING_ALLOWANCE_AGENT_FOR_YEARN'); const approveData = token.interface.encodeFunctionData('approve', [ pool, ethers_1.ethers.constants.MaxUint256, ]); const approvalCalldata = { to: token.address, value: 0, data: approveData, }; Calldatas.push(approvalCalldata); } else { console.log('::API::YEARN::DEPOSIT FOUND_ALLOWANCE_AGENT_FOR_YEARN'); } // Transfer From // ------------------------------------------------------------------------- const transferFromData = token.interface.encodeFunctionData('transferFrom', [receiver, agentAddress, amount]); const transferFromCalldata = { to: token.address, value: 0, data: transferFromData, }; Calldatas.push(transferFromCalldata); if (transferFromCalldata) console.log('::API::YEARN::DEPOSIT BUILD_TRANSFER_FROM_SENDER_TO_AGENT'); // Deposit to Yearn // ------------------------------------------------------------------------- const depositData = vault.interface.encodeFunctionData('deposit', [ amount, agentAddress, ]); const depositCalldata = { to: pool, value: 0, data: depositData, }; if (depositCalldata) console.log('::API::YEARN::DEPOSIT BUILD_DEPOSIT_TO_YEARN'); Calldatas.push(depositCalldata); TokensReturn.push(vault.address); console.log('::API::YEARN::DEPOSIT Approvals', Approvals.length); console.log('::API::YEARN::DEPOSIT Calldatas', Calldatas.length); console.log('::API::YEARN::DEPOSIT TokensReturn', TokensReturn.length); return { Approvals, Calldatas, TokensReturn, }; } catch (e) { console.log(e); } }); } exports.depositToYearn = depositToYearn; function depositToYearnBatched(deposits) { return __awaiter(this, void 0, void 0, function* () { let Approvals = []; let Calldatas = []; let TokensReturn = []; for (let i = 0; i < deposits.length; i++) { const pool = deposits[i].pool; const amount = deposits[i].amount; const wallet = deposits[i].wallet; const receiver = deposits[i].receiver; const tokenAddr = deposits[i].tokenAddr; const chainId = deposits[i].chainId; const token = new ethers_1.ethers.Contract(tokenAddr, ERC20_json_1.default, wallet); const vault = new ethers_1.ethers.Contract(pool, YearnVault_json_1.default, wallet); const tokenBalance = yield token.balanceOf(receiver); const infraRouter = String(constants_1.INFRA[chainId].ROUTER); const InfraRouterContract = new ethers_1.ethers.Contract(infraRouter, Router_json_1.default, wallet); const agentAddress = yield (InfraRouterContract === null || InfraRouterContract === void 0 ? void 0 : InfraRouterContract.getAgentAddress(receiver)); if (tokenBalance.lt(amount)) { throw new Error('::API::YEARN::DEPOSIT:BATCHED Insufficient balance'); } const allowanceAgent = yield (token === null || token === void 0 ? void 0 : token.allowance(receiver, agentAddress)); console.log('::API::YEARN::DEPOSIT:BATCHED AGENT', agentAddress); console.log('::API::YEARN::DEPOSIT:BATCHED ALLOWANCE_SENDER_FOR_AGENT', Number(allowanceAgent).toString()); // Sender Approval // ------------------------------------------------------------------------- if (allowanceAgent.lt(amount)) { console.log('::API::YEARN::DEPOSIT:BATCHED MISSING_ALLOWANCE_SENDER_FOR_AGENT'); const approveData = token.interface.encodeFunctionData('approve', [ agentAddress, ethers_1.ethers.constants.MaxUint256, ]); const approvalCalldata = { to: token.address, value: 0, data: approveData, }; Approvals.push(approvalCalldata); } else { console.log('::API::YEARN::DEPOSIT:BATCHED FOUND_ALLOWANCE_SENDER_FOR_AGENT'); } const allowanceYearn = yield (token === null || token === void 0 ? void 0 : token.allowance(agentAddress, pool)); console.log('ALLOWANCE_AGENT_FOR_YEARN', Number(allowanceYearn).toString()); // Agents Calldatas // ------------------------------------------------------------------------- if (allowanceYearn.lt(amount)) { console.log('::API::YEARN::DEPOSIT:BATCHED MISSING_ALLOWANCE_AGENT_FOR_YEARN'); const approveData = token.interface.encodeFunctionData('approve', [ pool, ethers_1.ethers.constants.MaxUint256, ]); const approvalCalldata = { to: token.address, value: 0, data: approveData, }; Calldatas.push(approvalCalldata); } else { console.log('::API::YEARN::DEPOSIT:BATCHED FOUND_ALLOWANCE_AGENT_FOR_YEARN'); } // Transfer From // ------------------------------------------------------------------------- const transferFromData = token.interface.encodeFunctionData('transferFrom', [receiver, agentAddress, amount]); const transferFromCalldata = { to: token.address, value: 0, data: transferFromData, }; Calldatas.push(transferFromCalldata); if (transferFromCalldata) console.log('::API::YEARN::DEPOSIT:BATCHED BUILD_TRANSFER_FROM_SENDER_TO_AGENT'); // Deposit to Yearn // ------------------------------------------------------------------------- const depositData = vault.interface.encodeFunctionData('deposit', [ amount, agentAddress, ]); const depositCalldata = { to: pool, value: 0, data: depositData, }; if (depositCalldata) console.log('::API::YEARN::DEPOSIT:BATCHED BUILD_DEPOSIT_TO_YEARN'); Calldatas.push(depositCalldata); TokensReturn.push(vault.address); } console.log('::API::YEARN::DEPOSIT:BATCHED Approvals', Approvals.length); console.log('::API::YEARN::DEPOSIT:BATCHED Calldatas', Calldatas.length); console.log('::API::YEARN::DEPOSIT:BATCHED TokensReturn', TokensReturn.length); return { Approvals, Calldatas, TokensReturn, }; }); } exports.depositToYearnBatched = depositToYearnBatched;