@kamino-finance/farms-sdk
Version:
367 lines • 13.9 kB
JavaScript
;
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