@coral-xyz/soulbound
Version:
Node.js client for the soulbound protocol
1,699 lines (1,691 loc) • 80.2 kB
JavaScript
import * as anchor from '@coral-xyz/anchor';
import { Program } from '@coral-xyz/anchor';
import { PublicKey, Transaction, ComputeBudgetProgram, SYSVAR_INSTRUCTIONS_PUBKEY, SystemProgram } from '@solana/web3.js';
import { TOKEN_PROGRAM_ID, getAssociatedTokenAddress, getAccount } from '@solana/spl-token';
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
function __awaiter(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());
});
}
const IDL$2 = {
version: "0.1.0",
name: "soul_bound_authority",
instructions: [
{
name: "createSbaUser",
accounts: [
{
name: "sba",
isMut: true,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: true,
},
{
name: "payer",
isMut: true,
isSigner: true,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "rent",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "acceptDelegate",
accounts: [
{
name: "sba",
isMut: false,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: true,
},
{
name: "delegate",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "revokeDelegate",
accounts: [
{
name: "sba",
isMut: false,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: true,
},
],
args: [],
},
{
name: "executeTxScopedUserNftProgram",
accounts: [
{
name: "sbaUser",
isMut: false,
isSigner: false,
},
{
name: "nftToken",
isMut: false,
isSigner: false,
},
{
name: "nftMint",
isMut: false,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: false,
},
{
name: "delegate",
isMut: false,
isSigner: false,
},
{
name: "authorityOrDelegate",
isMut: false,
isSigner: true,
},
{
name: "scopedAuthority",
isMut: false,
isSigner: false,
},
{
name: "program",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "data",
type: "bytes",
},
],
},
],
accounts: [
{
name: "soulBoundAuthorityUser",
type: {
kind: "struct",
fields: [
{
name: "authority",
type: "publicKey",
},
{
name: "delegate",
type: "publicKey",
},
{
name: "bump",
type: "u8",
},
],
},
},
],
errors: [
{
code: 6000,
name: "Todo",
},
],
};
const IDL$1 = {
version: "2.2.1",
name: "cardinal_stake_pool",
instructions: [
{
name: "initIdentifier",
accounts: [
{
name: "identifier",
isMut: true,
isSigner: false,
},
{
name: "payer",
isMut: true,
isSigner: true,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "initPool",
accounts: [
{
name: "stakePool",
isMut: true,
isSigner: false,
},
{
name: "identifier",
isMut: true,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: true,
},
{
name: "payer",
isMut: true,
isSigner: true,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "ix",
type: {
defined: "InitPoolIx",
},
},
],
},
{
name: "stakeProgrammable",
accounts: [
{
name: "stakeEntry",
isMut: true,
isSigner: false,
},
{
name: "rewardEntry",
isMut: true,
isSigner: false,
},
{
name: "rewardDistributor",
isMut: true,
isSigner: false,
},
{
name: "stakePool",
isMut: true,
isSigner: false,
},
{
name: "originalMint",
isMut: false,
isSigner: false,
},
{
name: "user",
isMut: true,
isSigner: true,
},
{
name: "userOriginalMintTokenAccount",
isMut: true,
isSigner: false,
},
{
name: "userOriginalMintTokenRecord",
isMut: true,
isSigner: false,
},
{
name: "mintMetadata",
isMut: true,
isSigner: false,
},
{
name: "mintEdition",
isMut: false,
isSigner: false,
},
{
name: "authorizationRules",
isMut: false,
isSigner: false,
},
{
name: "sysvarInstructions",
isMut: false,
isSigner: false,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "tokenMetadataProgram",
isMut: false,
isSigner: false,
},
{
name: "authorizationRulesProgram",
isMut: false,
isSigner: false,
},
{
name: "rewardDistributorProgram",
isMut: false,
isSigner: false,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "amount",
type: "u64",
},
],
},
{
name: "unstakeProgrammable",
accounts: [
{
name: "stakeEntry",
isMut: true,
isSigner: false,
},
{
name: "stakePool",
isMut: true,
isSigner: false,
},
{
name: "originalMint",
isMut: false,
isSigner: false,
},
{
name: "user",
isMut: true,
isSigner: true,
},
{
name: "userOriginalMintTokenAccount",
isMut: true,
isSigner: false,
},
{
name: "userOriginalMintTokenRecord",
isMut: true,
isSigner: false,
},
{
name: "mintMetadata",
isMut: true,
isSigner: false,
},
{
name: "mintEdition",
isMut: false,
isSigner: false,
},
{
name: "authorizationRules",
isMut: false,
isSigner: false,
},
{
name: "sysvarInstructions",
isMut: false,
isSigner: false,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "tokenMetadataProgram",
isMut: false,
isSigner: false,
},
{
name: "authorizationRulesProgram",
isMut: false,
isSigner: false,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "updateTotalStakeSeconds",
accounts: [
{
name: "stakeEntry",
isMut: true,
isSigner: false,
},
{
name: "lastStaker",
isMut: true,
isSigner: true,
},
],
args: [],
},
],
accounts: [
{
name: "groupStakeEntry",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "groupId",
type: "publicKey",
},
{
name: "authority",
type: "publicKey",
},
{
name: "stakeEntries",
type: {
vec: "publicKey",
},
},
{
name: "changedAt",
type: "i64",
},
{
name: "groupCooldownSeconds",
type: "u32",
},
{
name: "groupStakeSeconds",
type: "u32",
},
{
name: "groupCooldownStartSeconds",
type: {
option: "i64",
},
},
],
},
},
{
name: "stakeEntry",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "pool",
type: "publicKey",
},
{
name: "amount",
type: "u64",
},
{
name: "originalMint",
type: "publicKey",
},
{
name: "originalMintClaimed",
type: "bool",
},
{
name: "lastStaker",
type: "publicKey",
},
{
name: "lastStakedAt",
type: "i64",
},
{
name: "totalStakeSeconds",
type: "u128",
},
{
name: "stakeMintClaimed",
type: "bool",
},
{
name: "kind",
type: "u8",
},
{
name: "stakeMint",
type: {
option: "publicKey",
},
},
{
name: "cooldownStartSeconds",
type: {
option: "i64",
},
},
{
name: "lastUpdatedAt",
type: {
option: "i64",
},
},
{
name: "grouped",
type: {
option: "bool",
},
},
],
},
},
{
name: "stakePool",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "identifier",
type: "u64",
},
{
name: "authority",
type: "publicKey",
},
{
name: "requiresCreators",
type: {
vec: "publicKey",
},
},
{
name: "requiresCollections",
type: {
vec: "publicKey",
},
},
{
name: "requiresAuthorization",
type: "bool",
},
{
name: "overlayText",
type: "string",
},
{
name: "imageUri",
type: "string",
},
{
name: "resetOnStake",
type: "bool",
},
{
name: "totalStaked",
type: "u32",
},
{
name: "cooldownSeconds",
type: {
option: "u32",
},
},
{
name: "minStakeSeconds",
type: {
option: "u32",
},
},
{
name: "endDate",
type: {
option: "i64",
},
},
{
name: "doubleOrResetEnabled",
type: {
option: "bool",
},
},
],
},
},
{
name: "stakeBooster",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "stakePool",
type: "publicKey",
},
{
name: "identifier",
type: "u64",
},
{
name: "paymentAmount",
type: "u64",
},
{
name: "paymentMint",
type: "publicKey",
},
{
name: "paymentManager",
type: "publicKey",
},
{
name: "paymentRecipient",
type: "publicKey",
},
{
name: "boostSeconds",
type: "u128",
},
{
name: "startTimeSeconds",
type: "i64",
},
],
},
},
{
name: "stakeAuthorizationRecord",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "pool",
type: "publicKey",
},
{
name: "mint",
type: "publicKey",
},
],
},
},
{
name: "identifier",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "count",
type: "u64",
},
],
},
},
],
types: [
{
name: "InitGroupEntryIx",
type: {
kind: "struct",
fields: [
{
name: "groupId",
type: "publicKey",
},
{
name: "groupCooldownSeconds",
type: {
option: "u32",
},
},
{
name: "groupStakeSeconds",
type: {
option: "u32",
},
},
],
},
},
{
name: "InitPoolIx",
type: {
kind: "struct",
fields: [
{
name: "overlayText",
type: "string",
},
{
name: "imageUri",
type: "string",
},
{
name: "requiresCollections",
type: {
vec: "publicKey",
},
},
{
name: "requiresCreators",
type: {
vec: "publicKey",
},
},
{
name: "requiresAuthorization",
type: "bool",
},
{
name: "authority",
type: "publicKey",
},
{
name: "resetOnStake",
type: "bool",
},
{
name: "cooldownSeconds",
type: {
option: "u32",
},
},
{
name: "minStakeSeconds",
type: {
option: "u32",
},
},
{
name: "endDate",
type: {
option: "i64",
},
},
{
name: "doubleOrResetEnabled",
type: {
option: "bool",
},
},
],
},
},
{
name: "InitStakeMintIx",
type: {
kind: "struct",
fields: [
{
name: "name",
type: "string",
},
{
name: "symbol",
type: "string",
},
],
},
},
{
name: "ReassignStakeEntryIx",
type: {
kind: "struct",
fields: [
{
name: "target",
type: "publicKey",
},
],
},
},
{
name: "BoostStakeEntryIx",
type: {
kind: "struct",
fields: [
{
name: "secondsToBoost",
type: "u64",
},
],
},
},
{
name: "InitStakeBoosterIx",
type: {
kind: "struct",
fields: [
{
name: "stakePool",
type: "publicKey",
},
{
name: "identifier",
type: "u64",
},
{
name: "paymentAmount",
type: "u64",
},
{
name: "paymentMint",
type: "publicKey",
},
{
name: "paymentManager",
type: "publicKey",
},
{
name: "boostSeconds",
type: "u128",
},
{
name: "startTimeSeconds",
type: "i64",
},
],
},
},
{
name: "UpdateStakeBoosterIx",
type: {
kind: "struct",
fields: [
{
name: "paymentAmount",
type: "u64",
},
{
name: "paymentMint",
type: "publicKey",
},
{
name: "paymentManager",
type: "publicKey",
},
{
name: "boostSeconds",
type: "u128",
},
{
name: "startTimeSeconds",
type: "i64",
},
],
},
},
{
name: "UpdatePoolIx",
type: {
kind: "struct",
fields: [
{
name: "imageUri",
type: {
option: "string",
},
},
{
name: "overlayText",
type: "string",
},
{
name: "requiresCollections",
type: {
vec: "publicKey",
},
},
{
name: "requiresCreators",
type: {
vec: "publicKey",
},
},
{
name: "requiresAuthorization",
type: "bool",
},
{
name: "authority",
type: "publicKey",
},
{
name: "resetOnStake",
type: "bool",
},
{
name: "cooldownSeconds",
type: {
option: "u32",
},
},
{
name: "minStakeSeconds",
type: {
option: "u32",
},
},
{
name: "endDate",
type: {
option: "i64",
},
},
{
name: "doubleOrResetEnabled",
type: {
option: "bool",
},
},
],
},
},
{
name: "StakeEntryKind",
type: {
kind: "enum",
variants: [
{
name: "Permissionless",
},
{
name: "Permissioned",
},
],
},
},
],
errors: [
{
code: 6000,
name: "InvalidOriginalMint",
msg: "Original mint is invalid",
},
{
code: 6001,
name: "InvalidTokenManagerMint",
msg: "Token Manager mint is invalid",
},
{
code: 6002,
name: "InvalidUserOriginalMintTokenAccount",
msg: "Invalid user original mint token account",
},
{
code: 6003,
name: "InvalidUserMintTokenAccount",
msg: "Invalid user token manager mint account",
},
{
code: 6004,
name: "InvalidStakeEntryOriginalMintTokenAccount",
msg: "Invalid stake entry original mint token account",
},
{
code: 6005,
name: "InvalidStakeEntryMintTokenAccount",
msg: "Invalid stake entry token manager mint token account",
},
{
code: 6006,
name: "InvalidUnstakeUser",
msg: "Invalid unstake user only last staker can unstake",
},
{
code: 6007,
name: "InvalidStakePool",
msg: "Invalid stake pool",
},
{
code: 6008,
name: "NoMintMetadata",
msg: "No mint metadata",
},
{
code: 6009,
name: "MintNotAllowedInPool",
msg: "Mint not allowed in this pool",
},
{
code: 6010,
name: "InvalidPoolAuthority",
msg: "Invalid stake pool authority",
},
{
code: 6011,
name: "InvalidStakeType",
msg: "Invalid stake type",
},
{
code: 6012,
name: "InvalidStakeEntryStakeTokenAccount",
msg: "Invalid stake entry stake token account",
},
{
code: 6013,
name: "InvalidLastStaker",
msg: "Invalid last staker",
},
{
code: 6014,
name: "InvalidTokenManagerProgram",
msg: "Invalid token manager program",
},
{
code: 6015,
name: "InvalidReceiptMint",
msg: "Invalid receipt mint",
},
{
code: 6016,
name: "StakeEntryAlreadyStaked",
msg: "Stake entry already has tokens staked",
},
{
code: 6017,
name: "InvalidAuthority",
msg: "Invalid authority",
},
{
code: 6018,
name: "CannotCloseStakedEntry",
msg: "Cannot close staked entry",
},
{
code: 6019,
name: "CannotClosePoolWithStakedEntries",
msg: "Cannot close staked entry",
},
{
code: 6020,
name: "CooldownSecondRemaining",
msg: "Token still has some cooldown seconds remaining",
},
{
code: 6021,
name: "MinStakeSecondsNotSatisfied",
msg: "Minimum stake seconds not satisfied",
},
{
code: 6022,
name: "InvalidStakeAuthorizationRecord",
msg: "Invalid stake authorization provided",
},
{
code: 6023,
name: "InvalidMintMetadata",
msg: "Invalid mint metadata",
},
{
code: 6024,
name: "StakePoolHasEnded",
msg: "Stake pool has ended",
},
{
code: 6025,
name: "InvalidMintMetadataOwner",
msg: "Mint metadata is owned by the incorrect program",
},
{
code: 6026,
name: "StakeMintAlreadyInitialized",
msg: "Stake mint already intialized",
},
{
code: 6027,
name: "InvalidStakeEntry",
msg: "Invalid stake entry",
},
{
code: 6028,
name: "CannotUpdateUnstakedEntry",
msg: "Cannot update unstaked entry",
},
{
code: 6100,
name: "CannotBoostUnstakedToken",
msg: "Cannot boost unstaked token",
},
{
code: 6101,
name: "CannotBoostMoreThanCurrentTime",
msg: "Cannot boost past current time less than start time",
},
{
code: 6102,
name: "InvalidBoostPayerTokenAccount",
msg: "Invalid boost payer token account",
},
{
code: 6103,
name: "InvalidBoostPaymentRecipientTokenAccount",
msg: "Invalid boost payment recipient token account",
},
{
code: 6104,
name: "InvalidPaymentManager",
msg: "Invalid payment manager",
},
{
code: 6105,
name: "CannotBoostFungibleToken",
msg: "Cannot boost a fungible token stake entry",
},
{
code: 6120,
name: "GroupedStakeEntry",
msg: "Grouped stake entry",
},
{
code: 6121,
name: "UngroupedStakeEntry",
msg: "Ungrouped stake entry",
},
{
code: 6122,
name: "MinGroupSecondsNotSatisfied",
msg: "Minimum group seconds not satisfied",
},
{
code: 6123,
name: "ActiveGroupEntry",
msg: "Active group entry",
},
{
code: 6124,
name: "StakeEntryNotFoundInGroup",
msg: "Stake entry not found in group",
},
{
code: 6130,
name: "InvalidFundsMint",
msg: "Invalid funds mint",
},
{
code: 6131,
name: "InvalidMintForTokenAccount",
msg: "Invalid mint for token account",
},
{
code: 6132,
name: "StakeEntryFundsTokenAccountEmpty",
msg: "Stake entry funds token account is empty",
},
],
};
const IDL = {
version: "2.2.1",
name: "cardinal_reward_distributor",
instructions: [
{
name: "initRewardDistributor",
accounts: [
{
name: "rewardDistributor",
isMut: true,
isSigner: false,
},
{
name: "stakePool",
isMut: false,
isSigner: false,
},
{
name: "rewardMint",
isMut: true,
isSigner: false,
},
{
name: "authority",
isMut: true,
isSigner: true,
},
{
name: "payer",
isMut: true,
isSigner: true,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "ix",
type: {
defined: "InitRewardDistributorIx",
},
},
],
},
{
name: "initRewardEntry",
accounts: [
{
name: "rewardEntry",
isMut: true,
isSigner: false,
},
{
name: "stakeEntry",
isMut: false,
isSigner: false,
},
{
name: "rewardDistributor",
isMut: true,
isSigner: false,
},
{
name: "payer",
isMut: true,
isSigner: true,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "claimRewards",
accounts: [
{
name: "rewardEntry",
isMut: true,
isSigner: false,
},
{
name: "rewardDistributor",
isMut: true,
isSigner: false,
},
{
name: "stakeEntry",
isMut: false,
isSigner: false,
},
{
name: "stakePool",
isMut: false,
isSigner: false,
},
{
name: "originalMint",
isMut: false,
isSigner: false,
},
{
name: "rewardMint",
isMut: true,
isSigner: false,
},
{
name: "userRewardMintTokenAccount",
isMut: true,
isSigner: false,
},
{
name: "authority",
isMut: false,
isSigner: true,
},
{
name: "user",
isMut: true,
isSigner: false,
docs: [
"is a function of the mint and the last staker, and the last",
"staker is indeed this user.",
],
},
{
name: "associatedTokenProgram",
isMut: false,
isSigner: false,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
{
name: "rent",
isMut: false,
isSigner: false,
},
],
args: [],
},
{
name: "transferRewards",
accounts: [
{
name: "rewardEntryA",
isMut: true,
isSigner: false,
},
{
name: "rewardEntryB",
isMut: true,
isSigner: false,
},
{
name: "rewardDistributor",
isMut: true,
isSigner: false,
},
{
name: "stakeEntryA",
isMut: false,
isSigner: false,
},
{
name: "stakeEntryB",
isMut: false,
isSigner: false,
},
{
name: "stakePool",
isMut: false,
isSigner: false,
},
{
name: "originalMintA",
isMut: false,
isSigner: false,
},
{
name: "originalMintB",
isMut: false,
isSigner: false,
},
{
name: "rewardMint",
isMut: true,
isSigner: false,
},
{
name: "userRewardMintTokenAccountA",
isMut: true,
isSigner: false,
},
{
name: "userRewardMintTokenAccountB",
isMut: true,
isSigner: false,
},
{
name: "authorityA",
isMut: false,
isSigner: true,
},
{
name: "authorityB",
isMut: false,
isSigner: false,
},
{
name: "user",
isMut: true,
isSigner: false,
docs: [
"is a function of the mint and the last staker, and the last",
"staker is indeed this user.",
],
},
{
name: "associatedTokenProgram",
isMut: false,
isSigner: false,
},
{
name: "tokenProgram",
isMut: false,
isSigner: false,
},
{
name: "systemProgram",
isMut: false,
isSigner: false,
},
{
name: "rent",
isMut: false,
isSigner: false,
},
],
args: [
{
name: "amount",
type: {
option: "u64",
},
},
],
},
],
accounts: [
{
name: "rewardEntry",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "stakeEntry",
type: "publicKey",
},
{
name: "rewardDistributor",
type: "publicKey",
},
{
name: "rewardSecondsReceived",
type: "u128",
},
{
name: "multiplier",
type: "u64",
},
],
},
},
{
name: "rewardDistributor",
type: {
kind: "struct",
fields: [
{
name: "bump",
type: "u8",
},
{
name: "stakePool",
type: "publicKey",
},
{
name: "kind",
type: "u8",
},
{
name: "authority",
type: "publicKey",
},
{
name: "rewardMint",
type: "publicKey",
},
{
name: "rewardAmount",
type: "u64",
},
{
name: "rewardDurationSeconds",
type: "u128",
},
{
name: "rewardsIssued",
type: "u128",
},
{
name: "maxSupply",
type: {
option: "u64",
},
},
{
name: "defaultMultiplier",
type: "u64",
},
{
name: "multiplierDecimals",
type: "u8",
},
{
name: "maxRewardSecondsReceived",
type: {
option: "u128",
},
},
],
},
},
],
types: [
{
name: "InitRewardDistributorIx",
type: {
kind: "struct",
fields: [
{
name: "rewardAmount",
type: "u64",
},
{
name: "rewardDurationSeconds",
type: "u128",
},
{
name: "kind",
type: "u8",
},
{
name: "supply",
type: {
option: "u64",
},
},
{
name: "maxSupply",
type: {
option: "u64",
},
},
{
name: "defaultMultiplier",
type: {
option: "u64",
},
},
{
name: "multiplierDecimals",
type: {
option: "u8",
},
},
{
name: "maxRewardSecondsReceived",
type: {
option: "u128",
},
},
],
},
},
{
name: "UpdateRewardDistributorIx",
type: {
kind: "struct",
fields: [
{
name: "defaultMultiplier",
type: "u64",
},
{
name: "multiplierDecimals",
type: "u8",
},
{
name: "rewardAmount",
type: "u64",
},
{
name: "rewardDurationSeconds",
type: "u128",
},
{
name: "maxRewardSecondsReceived",
type: {
option: "u128",
},
},
],
},
},
{
name: "UpdateRewardEntryIx",
type: {
kind: "struct",
fields: [
{
name: "multiplier",
type: "u64",
},
],
},
},
{
name: "RewardDistributorKind",
type: {
kind: "enum",
variants: [
{
name: "Mint",
},
{
name: "Treasury",
},
],
},
},
],
errors: [
{
code: 6000,
name: "InvalidTokenAccount",
msg: "Invalid token account",
},
{
code: 6001,
name: "InvalidRewardMint",
msg: "Invalid reward mint",
},
{
code: 6002,
name: "InvalidUserRewardMintTokenAccount",
msg: "Invalid user reward mint token account",
},
{
code: 6003,
name: "InvalidRewardDistributor",
msg: "Invalid reward distributor",
},
{
code: 6004,
name: "InvalidRewardDistributorAuthority",
msg: "Invalid reward distributor autho