baluni-api
Version:
Api for baluni-cli
218 lines (217 loc) • 11.2 kB
JavaScript
"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;