fbonds-core
Version:
Banx protocol sdk
53 lines (52 loc) • 3.25 kB
JavaScript
;
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");
}
}))();