UNPKG

@kamino-finance/farms-sdk

Version:
367 lines 13.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initializeGlobalConfig = initializeGlobalConfig; exports.updateGlobalConfig = updateGlobalConfig; exports.updateGlobalConfigAdmin = updateGlobalConfigAdmin; exports.updateSecondDelegatedAuthority = updateSecondDelegatedAuthority; exports.updateFarmAdmin = updateFarmAdmin; exports.initializeFarm = initializeFarm; exports.initializeFarmDelegated = initializeFarmDelegated; exports.initializeReward = initializeReward; exports.addReward = addReward; exports.rewardUserOnce = rewardUserOnce; exports.withdrawReward = withdrawReward; exports.closeEmptyUserState = closeEmptyUserState; exports.updateFarmConfig = updateFarmConfig; exports.refreshFarm = refreshFarm; exports.initializeUser = initializeUser; exports.transferOwnership = transferOwnership; exports.stake = stake; exports.unstake = unstake; exports.harvestReward = harvestReward; exports.withdrawTreasury = withdrawTreasury; exports.refreshUserState = refreshUserState; exports.withdrawUnstakedDeposit = withdrawUnstakedDeposit; exports.withdrawFromFarmVault = withdrawFromFarmVault; exports.depositToFarmVault = depositToFarmVault; exports.serializeConfigValue = serializeConfigValue; exports.serializeRewardCurvePoint = serializeRewardCurvePoint; const kit_1 = require("@solana/kit"); const types_1 = require("../@codegen/farms/types"); const utils_1 = require("./utils"); const system_1 = require("@solana-program/system"); const token_1 = require("@solana-program/token"); const sysvars_1 = require("@solana/sysvars"); const instructions_1 = require("../@codegen/farms/instructions"); const addressEncoder = (0, kit_1.getAddressEncoder)(); function optionToAddress(opt) { return (0, kit_1.unwrapOption)(opt) ?? undefined; } function initializeGlobalConfig(globalAdmin, globalConfig, treasuryVaultAuthority) { return (0, instructions_1.getInitializeGlobalConfigInstruction)({ globalAdmin, globalConfig, treasuryVaultsAuthority: treasuryVaultAuthority, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, }); } function updateGlobalConfig(globalAdmin, globalConfig, mode, flagValue, flagValueType) { let formattedValue = (0, utils_1.getGlobalConfigValue)(flagValueType, flagValue); return (0, instructions_1.getUpdateGlobalConfigInstruction)({ globalAdmin, globalConfig, mode, value: Uint8Array.from(formattedValue), }); } function updateGlobalConfigAdmin(pendingGlobalAdmin, globalConfig) { return (0, instructions_1.getUpdateGlobalConfigAdminInstruction)({ pendingGlobalAdmin, globalConfig, }); } function updateSecondDelegatedAuthority(globalConfigAdmin, globalConfig, farm, newSecondAuthority) { return (0, instructions_1.getUpdateSecondDelegatedAuthorityInstruction)({ globalAdmin: globalConfigAdmin, farmState: farm, globalConfig, newSecondDelegatedAuthority: newSecondAuthority, }); } function updateFarmAdmin(pendingFarmAdmin, farm) { return (0, instructions_1.getUpdateFarmAdminInstruction)({ pendingFarmAdmin, farmState: farm, }); } function initializeFarm(globalConfig, farmAdmin, farmState, farmVault, farmVaultAuthority, tokenMint) { return (0, instructions_1.getInitializeFarmInstruction)({ farmAdmin, farmState, globalConfig, farmVault, farmVaultsAuthority: farmVaultAuthority, tokenMint, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, rent: sysvars_1.SYSVAR_RENT_ADDRESS, }); } function initializeFarmDelegated(globalConfig, farmAdmin, farmState, farmVaultAuthority, farmDelegate) { return (0, instructions_1.getInitializeFarmDelegatedInstruction)({ farmAdmin, farmState, globalConfig, farmVaultsAuthority: farmVaultAuthority, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, rent: sysvars_1.SYSVAR_RENT_ADDRESS, farmDelegate, }); } function initializeReward(globalConfig, treasuryVaultAuthority, treasuryVault, farmAdmin, farmState, rewardVault, farmVaultAuthority, rewardMint, tokenProgram) { return (0, instructions_1.getInitializeRewardInstruction)({ farmAdmin, farmState, globalConfig, rewardVault, farmVaultsAuthority: farmVaultAuthority, treasuryVaultsAuthority: treasuryVaultAuthority, rewardTreasuryVault: treasuryVault, rewardMint, tokenProgram, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, rent: sysvars_1.SYSVAR_RENT_ADDRESS, }); } function addReward(payer, farmState, rewardVault, farmVaultAuthority, payerRewardAta, rewardMint, scopePrices, rewardIndex, tokenProgram, amount) { return (0, instructions_1.getAddRewardsInstruction)({ payer, farmState, rewardVault, farmVaultsAuthority: farmVaultAuthority, payerRewardTokenAta: payerRewardAta, rewardMint, tokenProgram, scopePrices: optionToAddress(scopePrices), amount, rewardIndex: BigInt(rewardIndex), }); } function rewardUserOnce(delegateAuthority, farmState, userState, rewardIndex, amount, expectedRewardsIssuedCumulative, userStateId) { return (0, instructions_1.getRewardUserOnceInstruction)({ delegateAuthority, farmState, userState, amount, rewardIndex: BigInt(rewardIndex), expectedRewardsIssuedCumulative, userStateId, }); } function withdrawReward(admin, farmState, rewardMint, rewardVault, farmVaultAuthority, adminRewardAta, scopePrices, tokenProgram, rewardIndex, amount) { return (0, instructions_1.getWithdrawRewardInstruction)({ farmAdmin: admin, farmState, rewardVault, rewardMint, farmVaultsAuthority: farmVaultAuthority, adminRewardTokenAta: adminRewardAta, tokenProgram, scopePrices: optionToAddress(scopePrices), amount, rewardIndex: BigInt(rewardIndex), }); } function closeEmptyUserState(signer, userState, farmState, rentReceiver) { return (0, instructions_1.getCloseEmptyUserStateInstruction)({ signer, userState, farmState, rentReceiver, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, }); } function updateFarmConfig(farmAdmin, farmState, scopePrices, rewardIndex, mode, value) { let data = new Uint8Array(); switch (mode) { case types_1.FarmConfigOption.LockingStartTimestamp: case types_1.FarmConfigOption.LockingDuration: case types_1.FarmConfigOption.DepositCapAmount: case types_1.FarmConfigOption.LockingEarlyWithdrawalPenaltyBps: case types_1.FarmConfigOption.LockingMode: case types_1.FarmConfigOption.ScopeOracleMaxAge: data = writeBigUint64LE(BigInt(value)); break; case types_1.FarmConfigOption.ScopeOraclePriceId: // bigint arg data = writeBigUint64LE(value); break; case types_1.FarmConfigOption.DepositWarmupPeriod: case types_1.FarmConfigOption.WithdrawCooldownPeriod: data = writeInt32LE(value); break; case types_1.FarmConfigOption.UpdateIsHarvestingPermissionless: case types_1.FarmConfigOption.UpdateIsRewardUserOnceEnabled: data = writeUint8(value); break; case types_1.FarmConfigOption.UpdateStrategyId: case types_1.FarmConfigOption.UpdatePendingFarmAdmin: case types_1.FarmConfigOption.ScopePricesAccount: case types_1.FarmConfigOption.SlashedAmountSpillAddress: case types_1.FarmConfigOption.WithdrawAuthority: case types_1.FarmConfigOption.UpdateDelegatedRpsAdmin: case types_1.FarmConfigOption.UpdateVaultId: case types_1.FarmConfigOption.UpdateDelegatedAuthority: case types_1.FarmConfigOption.UpdateExtraDelegatedAuthority: data = new Uint8Array(addressEncoder.encode(value)); break; case types_1.FarmConfigOption.UpdateRewardScheduleCurvePoints: { const points = value; data = serializeRewardCurvePoint(rewardIndex, points); break; } default: data = serializeConfigValue(BigInt(rewardIndex), BigInt(value)); break; } return (0, instructions_1.getUpdateFarmConfigInstruction)({ signer: farmAdmin, farmState, scopePrices: optionToAddress(scopePrices), mode, data, }); } function refreshFarm(farmState, scopePrices) { return (0, instructions_1.getRefreshFarmInstruction)({ farmState, scopePrices: optionToAddress(scopePrices), }); } function initializeUser(farmState, owner, userState, authority, delegatee = owner) { return (0, instructions_1.getInitializeUserInstruction)({ authority, payer: authority, delegatee, owner, userState, farmState, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, rent: sysvars_1.SYSVAR_RENT_ADDRESS, }); } function transferOwnership(oldOwner, oldUserState, newOwner, farmState, newUserState, scopePrices, payer = oldOwner) { return (0, instructions_1.getTransferOwnershipInstruction)({ oldOwner, payer, newOwner, oldUserState, newUserState, farmState, systemProgram: system_1.SYSTEM_PROGRAM_ADDRESS, rent: sysvars_1.SYSVAR_RENT_ADDRESS, scopePrices: optionToAddress(scopePrices), }); } function stake(owner, userState, ownerTokenAta, farmState, farmVault, tokenMint, scopePrices, amount) { return (0, instructions_1.getStakeInstruction)({ owner, userState, farmState, farmVault, userAta: ownerTokenAta, tokenMint, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, scopePrices: optionToAddress(scopePrices), amount, }); } function unstake(owner, userState, farmState, scopePrices, amount) { return (0, instructions_1.getUnstakeInstruction)({ owner, userState, farmState, scopePrices: optionToAddress(scopePrices), stakeSharesScaled: amount, }); } function harvestReward(payer, userState, userRewardAta, globalConfig, treasuryVault, farmState, rewardMint, rewardVault, farmVaultAuthority, scopePrices, tokenProgram, rewardIndex) { return (0, instructions_1.getHarvestRewardInstruction)({ payer, userState, farmState, globalConfig, rewardMint, rewardsVault: rewardVault, rewardsTreasuryVault: treasuryVault, userRewardTokenAccount: userRewardAta, farmVaultsAuthority: farmVaultAuthority, tokenProgram, scopePrices: optionToAddress(scopePrices), rewardIndex: BigInt(rewardIndex), }); } function withdrawTreasury(globalAdmin, globalConfig, treasuryVault, treasuryVaultAuthority, globalAdminWithdrawAta, amount, rewardMint) { return (0, instructions_1.getWithdrawTreasuryInstruction)({ globalAdmin, globalConfig, rewardTreasuryVault: treasuryVault, treasuryVaultAuthority, withdrawDestinationTokenAccount: globalAdminWithdrawAta, rewardMint, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, amount, }); } function refreshUserState(userState, farmState, scopePrices) { return (0, instructions_1.getRefreshUserStateInstruction)({ userState, farmState, scopePrices: optionToAddress(scopePrices), }); } function withdrawUnstakedDeposit(owner, userState, farmState, userAta, farmVault, farmVaultsAuthority) { return (0, instructions_1.getWithdrawUnstakedDepositsInstruction)({ owner, userState, farmState, userAta, farmVault, farmVaultsAuthority, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, }); } function withdrawFromFarmVault(withdrawAuthority, farmState, withdrawerTokenAccount, farmVault, farmVaultsAuthority, amount) { return (0, instructions_1.getWithdrawFromFarmVaultInstruction)({ farmState, withdrawAuthority, withdrawerTokenAccount, farmVault, farmVaultsAuthority, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, amount, }); } function depositToFarmVault(depositor, farmState, farmVault, depositorAta, amount) { return (0, instructions_1.getDepositToFarmVaultInstruction)({ depositor, farmState, farmVault, depositorAta, tokenProgram: token_1.TOKEN_PROGRAM_ADDRESS, amount, }); } function writeBigUint64LE(value) { const data = new Uint8Array(8); const view = new DataView(data.buffer); view.setBigUint64(0, value, true); return data; } function writeInt32LE(value) { const data = new Uint8Array(4); const view = new DataView(data.buffer); view.setInt32(0, value, true); return data; } function writeUint8(value) { return new Uint8Array([value]); } function serializeConfigValue(reward_index, value) { const data = new Uint8Array(16); const view = new DataView(data.buffer); view.setBigUint64(0, reward_index, true); view.setBigUint64(8, value, true); return data; } function serializeRewardCurvePoint(reward_index, points) { const data = new Uint8Array(8 + 4 + 16 * points.length); const view = new DataView(data.buffer); view.setBigUint64(0, BigInt(reward_index), true); view.setUint32(8, points.length, true); for (let i = 0; i < points.length; i++) { view.setBigUint64(12 + 16 * i, BigInt(points[i].startTs), true); view.setBigUint64(20 + 16 * i, BigInt(points[i].rps), true); } return data; } //# sourceMappingURL=operations.js.map