UNPKG

fbonds-core

Version:

Banx protocol sdk

53 lines (52 loc) 3.25 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const perpetual_1 = require("src/fbond-protocol/functions/perpetual"); const helpers_1 = require("../fbond-protocol//helpers"); const types_1 = require("../fbond-protocol/types"); const src_1 = require("src"); const constants_1 = require("src/fbond-protocol/constants"); const common_1 = require("src/common"); (() => __awaiter(void 0, void 0, void 0, function* () { const mainnetConnection = new src_1.anchor.web3.Connection('https://mainnet.helius-rpc.com/?api-key=0dd0537a-65dd-4d40-a7d5-97804e3caa7e', 'confirmed'); const program = (0, helpers_1.returnAnchorProgram)(mainnetConnection); const userVaultsRaw = yield program.account.userVault.all(); const userVaults = userVaultsRaw.map(helpers_1.anchorRawBNsAndPubkeysToNumsAndStrings); const [stakingRewardsVault, stakingRewardsVaultBump] = yield src_1.web3.PublicKey.findProgramAddress([ constants_1.ENCODER.encode(constants_1.BANX_SOL_STAKING_REWARDS_VAULT), ], program.programId); console.log(stakingRewardsVault); const vaultSplTokenAccountUninitialized = yield (0, common_1.findAssociatedTokenAddress)(stakingRewardsVault, constants_1.BANX_SOL_MINT); const nowSlot = yield mainnetConnection.getSlot(); const epoch = yield mainnetConnection.getEpochInfo(); const epochSchedual = yield mainnetConnection.getEpochSchedule(); const epochStart = epochSchedual.getFirstSlotInEpoch(epoch.epoch); const timestamp = yield mainnetConnection.getBlockTime(epochStart); const offers = userVaults.filter(offer => offer.lendingTokenType == types_1.LendingTokenType.BanxSol); let amount = new src_1.BN(0); if (timestamp) { offers.map(offer => { let rewardAm = (0, perpetual_1.calculateBanxSolStakingRewards)({ userVault: offer, currentEpochStartAt: new src_1.BN(timestamp), // Указать приблезительное время начала текущей эпохи nowSlot: new src_1.BN(epochStart), }); amount = amount.add(rewardAm); }); const vaultBalance = yield mainnetConnection.getTokenAccountBalance(vaultSplTokenAccountUninitialized); console.log("to send: ", amount.toNumber() / 1e9); console.log("in vault: ", Number(vaultBalance.value.amount) / 1e9); console.log("diff: ", Number(vaultBalance.value.amount) / 1e9 - amount.toNumber() / 1e9); } else { console.log("get slot time error, try again"); } }))();