@jpool/bond-sdk 0.3.0-next.6 → 0.3.0-next.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1262,14 +1262,14 @@ var JBondClient = class _JBondClient {
|
|
|
1262
1262
|
}
|
|
1263
1263
|
async getHistory(voteAccount, options) {
|
|
1264
1264
|
const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount);
|
|
1265
|
-
const signatures = await this.connection.getSignaturesForAddress(
|
|
1265
|
+
const signatures = (await this.connection.getSignaturesForAddress(
|
|
1266
1266
|
ValidatorBondAccount,
|
|
1267
1267
|
{
|
|
1268
1268
|
limit: options?.limit || 1e3,
|
|
1269
1269
|
before: options?.before,
|
|
1270
1270
|
until: options?.until
|
|
1271
1271
|
}
|
|
1272
|
-
);
|
|
1272
|
+
)).filter((sig) => !sig.err);
|
|
1273
1273
|
const signatureStrings = signatures.map((sig) => sig.signature);
|
|
1274
1274
|
const BATCH_SIZE = 100;
|
|
1275
1275
|
const allTransactions = [];
|
|
@@ -1287,7 +1287,7 @@ var JBondClient = class _JBondClient {
|
|
|
1287
1287
|
const history = [];
|
|
1288
1288
|
for (const [idx, tx] of allTransactions.entries()) {
|
|
1289
1289
|
const sigInfo = signatures[idx];
|
|
1290
|
-
if (!tx || !tx.meta) {
|
|
1290
|
+
if (!tx || !tx.meta || tx.meta.err !== null) {
|
|
1291
1291
|
continue;
|
|
1292
1292
|
}
|
|
1293
1293
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv","Program","AnchorProvider","PublicKey","BN","LAMPORTS_PER_SOL","SYSVAR_EPOCH_SCHEDULE_PUBKEY","Transaction","bs58"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n },\n {\n \"name\": \"set_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_authority` - Optional new authority key (None to restrict to identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the authority.\"\n ],\n \"discriminator\": [\n 133,\n 250,\n 37,\n 21,\n 110,\n 163,\n 26,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"global_state\"\n ]\n },\n {\n \"name\": \"new_authority\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator boost account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport * from './jbond'\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n withdrawalAuthority?: string\n totalWithdrawn: number\n lastWithdrawalEpoch: number\n isActive: boolean\n createdAt: number\n bump: number\n}\n\nexport type InitializeProps = {\n authority: PublicKey\n reserveAddress: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n creator: PublicKey\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n withdrawalAuthority?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n user: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type WithdrawCollateralProps = {\n withdrawalAuthority: PublicKey\n voteAccount: PublicKey\n destination: PublicKey\n amount: number\n}\n\nexport type WithdrawCompensationProps = {\n authority: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type GetHistoryProps = {\n voteAccount: PublicKey\n options?: {\n limit?: number\n before?: string\n until?: string\n }\n}\n\nexport type GetHistoryGroupedProps = {\n voteAccount: PublicKey\n epochsCount?: number\n}\n\nexport type GlobalState = {\n authority: PublicKey\n totalValidators: number\n totalCollateral: BN\n totalWithdrawn: BN\n bump: number\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type { Wallet } from '@coral-xyz/anchor'\nimport type {\n EpochHistoryItem,\n InitializeProps,\n Jbond,\n RegisterValidatorProps,\n TopUpCollateralProps,\n TransactionHistoryItem,\n WithdrawCollateralProps,\n WithdrawCompensationProps,\n} from './types'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport { Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction } from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n // Optional custom program ID (defaults to the one in the IDL)\n programId?: PublicKey\n // Debug mode flag\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: AnchorProvider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL as any, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configure('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configure<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.programId,\n )\n },\n validatorBond: (voteAccount: PublicKey) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Build initialize instruction\n * @param props\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { authority, reserveAddress: reserve } = props\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n * @param props\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (accountInfo) {\n throw new Error('Validator bond account already exists')\n }\n const [globalState] = this.pda.globalState()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .register(collateralLamports, withdrawalAuthority ?? null)\n .accountsPartial({\n creator,\n globalState,\n validatorBond: validatorBondAccountAddress,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n * @param props\n */\n buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .topUp(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n payer: user,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .withdraw(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n withdrawalAuthority: user,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build withdraw compensation instruction\n * @param props\n */\n async buildWithdrawCompensationInstruction(props: WithdrawCompensationProps) {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.pda.globalState()\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n const reserveAddress = (await this.getGlobalState())?.reserveAddress\n\n if (!reserveAddress) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n\n return this.program.methods\n .claim(amountLamports)\n .accountsPartial({\n globalState,\n validatorBond: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build multiple withdraw compensation instructions\n * @param authority\n * @param withdrawals\n */\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ) {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n /**\n * Get validator bond account state\n * @param vote\n */\n async getValidatorBond(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBond.fetch(validatorBondAccountAddress)\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // Convert i64 Unix seconds (BN) to JS milliseconds\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n /**\n * Build set authority instruction\n */\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }) {\n const [globalState] = this.pda.globalState()\n\n return this.program.methods\n .setAuthority()\n .accountsStrict({\n globalState,\n authority: props.authority,\n newAuthority: props.newAuthority,\n })\n .instruction()\n }\n\n /**\n * Get the collateral balance of a validator bond account\n * @param vote - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (!accountInfo) {\n return 0\n }\n\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(\n accountInfo.data.length,\n )\n\n const availableBalance = Math.max(0, accountInfo.lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get global state\n */\n async getGlobalState() {\n const [globalState] = this.pda.globalState()\n\n const account = await this.program.account.globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n }\n\n /**\n * Get current epoch\n */\n async getCurrentEpoch() {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n /**\n * Helper methods for backward compatibility (can be removed if not needed)\n * @param props\n */\n async initialize(props: WithOptionalAuthority<InitializeProps>) {\n const { reserveAddress } = props\n const authority = props.authority ?? this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ reserveAddress, authority })\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n // Note: this method will be removed or changed in the future (CLI only)\n async registerValidator(\n voteAccount: PublicKey,\n initialCollateral: number,\n withdrawalAuthority?: PublicKey,\n identity?: PublicKey,\n ) {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ) {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async withdrawCollateral(\n voteAccount: PublicKey,\n destination: PublicKey,\n amount: number,\n withdrawalAuthority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = withdrawalAuthority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCollateralInstruction(\n { withdrawalAuthority: authorityPubkey, voteAccount, destination, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async claimCompensation(\n voteAccount: PublicKey,\n amount: number,\n authority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = authority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCompensationInstruction(\n { authority: authorityPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n /**\n * Get transaction history grouped by epochs\n * @param voteAccount - The vote account to get history for\n * @param epochsCount - Number of recent epochs to return (default: 10)\n * @returns Array of epoch history items sorted by epoch (descending)\n */\n async getHistoryGroupedByEpochs(\n voteAccount: PublicKey,\n epochsCount: number = 10,\n ): Promise<EpochHistoryItem[]> {\n const currentEpoch = await this.getCurrentEpoch()\n const fullHistory = await this.getFullHistory(voteAccount)\n\n const epochMap = new Map<number, EpochHistoryItem>()\n\n for (const item of fullHistory) {\n if (item.epoch < currentEpoch - epochsCount + 1) {\n continue\n }\n if (!epochMap.has(item.epoch)) {\n epochMap.set(item.epoch, {\n epoch: item.epoch,\n deposits: 0,\n withdrawals: 0,\n balanceChange: 0,\n signatures: [],\n })\n }\n\n const epochData = epochMap.get(item.epoch)!\n\n if (item.type === 'deposit') {\n epochData.deposits += item.amount\n } else if (item.type === 'withdrawal') {\n epochData.withdrawals += item.amount\n }\n\n if (!epochData.signatures.includes(item.signature)) {\n epochData.signatures.push(item.signature)\n }\n }\n\n for (const epochData of epochMap.values()) {\n epochData.balanceChange = epochData.deposits - epochData.withdrawals\n }\n\n return [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n }\n\n async getHistory(\n voteAccount: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount)\n\n const signatures = await this.connection.getSignaturesForAddress(\n ValidatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )\n\n const signatureStrings = signatures.map(sig => sig.signature)\n\n const BATCH_SIZE = 100\n const allTransactions: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += BATCH_SIZE) {\n const batch = signatureStrings.slice(i, i + BATCH_SIZE)\n const transactions = await this.connection.getParsedTransactions(\n batch,\n {\n maxSupportedTransactionVersion: 0,\n },\n )\n allTransactions.push(...transactions)\n }\n\n const cluster = options?.cluster || 'mainnet-beta'\n\n const history: TransactionHistoryItem[] = []\n\n for (const [idx, tx] of allTransactions.entries()) {\n const sigInfo = signatures[idx]\n\n if (!tx || !tx.meta) {\n continue\n }\n\n try {\n const slot = (tx.slot || 0)\n const instructions = tx.transaction.message.instructions\n\n for (const instruction of instructions) {\n if ('programId' in instruction && instruction.programId.equals(this.options.programId ?? this.program.programId)) {\n const ixData = instruction as any\n\n if ('parsed' in ixData && ixData.parsed) {\n continue\n }\n\n const data = ixData.data\n if (!data) {\n continue\n }\n\n let type: BondTransactionType | null = null\n let amount = 0\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length >= 16) {\n const discriminator = dataBuffer.slice(0, 8)\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n type = BondTransactionType.Compensation\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n type = BondTransactionType.Withdrawal\n }\n }\n } catch {\n console.warn('Failed to decode instruction data')\n }\n\n if (type && amount > 0) {\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n // Find the validator bond account in the account keys\n const accountIndex = tx.transaction.message.accountKeys.findIndex(\n key => key.pubkey.equals(ValidatorBondAccount),\n )\n\n if (accountIndex !== -1 && tx.meta.preBalances && tx.meta.postBalances) {\n beforeBalance = Number(tx.meta.preBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n afterBalance = Number(tx.meta.postBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n }\n\n history.push({\n signature: sigInfo!.signature,\n slot,\n epoch: slotToEpoch(slot, cluster),\n type,\n amount,\n beforeBalance,\n afterBalance,\n })\n }\n }\n }\n } catch (error) {\n console.error(`Error processing transaction ${sigInfo!.signature}:`, error)\n }\n }\n\n return history.toSorted((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get full transaction history by paginating through results\n * @param voteAccount\n * @param pageSize\n */\n async getFullHistory(\n voteAccount: PublicKey,\n pageSize: number = 100,\n ): Promise<TransactionHistoryItem[]> {\n const allHistory: TransactionHistoryItem[] = []\n let before: string | undefined\n\n while (true) {\n const batch = await this.getHistory(voteAccount, {\n limit: pageSize,\n before,\n })\n\n if (batch.length === 0) {\n break\n }\n\n allHistory.push(...batch)\n\n // Get the signature of the last transaction for pagination\n before = batch.at(-1)?.signature\n\n // If we got less than the page size, we've reached the end\n if (batch.length < pageSize) {\n break\n }\n }\n\n return allHistory\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n}\n\n// Update the type helper definition at the bottom of the file to constrain the generic:\ntype WithOptionalAuthority<T extends { authority: PublicKey }> = Omit<T, 'authority'> & { authority?: PublicKey }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv","Program","AnchorProvider","PublicKey","BN","LAMPORTS_PER_SOL","SYSVAR_EPOCH_SCHEDULE_PUBKEY","Transaction","bs58"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n },\n {\n \"name\": \"set_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_authority` - Optional new authority key (None to restrict to identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the authority.\"\n ],\n \"discriminator\": [\n 133,\n 250,\n 37,\n 21,\n 110,\n 163,\n 26,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"global_state\"\n ]\n },\n {\n \"name\": \"new_authority\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator boost account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport * from './jbond'\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n withdrawalAuthority?: string\n totalWithdrawn: number\n lastWithdrawalEpoch: number\n isActive: boolean\n createdAt: number\n bump: number\n}\n\nexport type InitializeProps = {\n authority: PublicKey\n reserveAddress: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n creator: PublicKey\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n withdrawalAuthority?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n user: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type WithdrawCollateralProps = {\n withdrawalAuthority: PublicKey\n voteAccount: PublicKey\n destination: PublicKey\n amount: number\n}\n\nexport type WithdrawCompensationProps = {\n authority: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type GetHistoryProps = {\n voteAccount: PublicKey\n options?: {\n limit?: number\n before?: string\n until?: string\n }\n}\n\nexport type GetHistoryGroupedProps = {\n voteAccount: PublicKey\n epochsCount?: number\n}\n\nexport type GlobalState = {\n authority: PublicKey\n totalValidators: number\n totalCollateral: BN\n totalWithdrawn: BN\n bump: number\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type { Wallet } from '@coral-xyz/anchor'\nimport type {\n EpochHistoryItem,\n InitializeProps,\n Jbond,\n RegisterValidatorProps,\n TopUpCollateralProps,\n TransactionHistoryItem,\n WithdrawCollateralProps,\n WithdrawCompensationProps,\n} from './types'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport { Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction } from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n // Optional custom program ID (defaults to the one in the IDL)\n programId?: PublicKey\n // Debug mode flag\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: AnchorProvider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL as any, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configure('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configure<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.programId,\n )\n },\n validatorBond: (voteAccount: PublicKey) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Build initialize instruction\n * @param props\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { authority, reserveAddress: reserve } = props\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n * @param props\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (accountInfo) {\n throw new Error('Validator bond account already exists')\n }\n const [globalState] = this.pda.globalState()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .register(collateralLamports, withdrawalAuthority ?? null)\n .accountsPartial({\n creator,\n globalState,\n validatorBond: validatorBondAccountAddress,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n * @param props\n */\n buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .topUp(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n payer: user,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .withdraw(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n withdrawalAuthority: user,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build withdraw compensation instruction\n * @param props\n */\n async buildWithdrawCompensationInstruction(props: WithdrawCompensationProps) {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.pda.globalState()\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n const reserveAddress = (await this.getGlobalState())?.reserveAddress\n\n if (!reserveAddress) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n\n return this.program.methods\n .claim(amountLamports)\n .accountsPartial({\n globalState,\n validatorBond: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build multiple withdraw compensation instructions\n * @param authority\n * @param withdrawals\n */\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ) {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n /**\n * Get validator bond account state\n * @param vote\n */\n async getValidatorBond(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBond.fetch(validatorBondAccountAddress)\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // Convert i64 Unix seconds (BN) to JS milliseconds\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n /**\n * Build set authority instruction\n */\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }) {\n const [globalState] = this.pda.globalState()\n\n return this.program.methods\n .setAuthority()\n .accountsStrict({\n globalState,\n authority: props.authority,\n newAuthority: props.newAuthority,\n })\n .instruction()\n }\n\n /**\n * Get the collateral balance of a validator bond account\n * @param vote - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (!accountInfo) {\n return 0\n }\n\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(\n accountInfo.data.length,\n )\n\n const availableBalance = Math.max(0, accountInfo.lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get global state\n */\n async getGlobalState() {\n const [globalState] = this.pda.globalState()\n\n const account = await this.program.account.globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n }\n\n /**\n * Get current epoch\n */\n async getCurrentEpoch() {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n /**\n * Helper methods for backward compatibility (can be removed if not needed)\n * @param props\n */\n async initialize(props: WithOptionalAuthority<InitializeProps>) {\n const { reserveAddress } = props\n const authority = props.authority ?? this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ reserveAddress, authority })\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n // Note: this method will be removed or changed in the future (CLI only)\n async registerValidator(\n voteAccount: PublicKey,\n initialCollateral: number,\n withdrawalAuthority?: PublicKey,\n identity?: PublicKey,\n ) {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ) {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async withdrawCollateral(\n voteAccount: PublicKey,\n destination: PublicKey,\n amount: number,\n withdrawalAuthority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = withdrawalAuthority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCollateralInstruction(\n { withdrawalAuthority: authorityPubkey, voteAccount, destination, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async claimCompensation(\n voteAccount: PublicKey,\n amount: number,\n authority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = authority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCompensationInstruction(\n { authority: authorityPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n /**\n * Get transaction history grouped by epochs\n * @param voteAccount - The vote account to get history for\n * @param epochsCount - Number of recent epochs to return (default: 10)\n * @returns Array of epoch history items sorted by epoch (descending)\n */\n async getHistoryGroupedByEpochs(\n voteAccount: PublicKey,\n epochsCount: number = 10,\n ): Promise<EpochHistoryItem[]> {\n const currentEpoch = await this.getCurrentEpoch()\n const fullHistory = await this.getFullHistory(voteAccount)\n\n const epochMap = new Map<number, EpochHistoryItem>()\n\n for (const item of fullHistory) {\n if (item.epoch < currentEpoch - epochsCount + 1) {\n continue\n }\n if (!epochMap.has(item.epoch)) {\n epochMap.set(item.epoch, {\n epoch: item.epoch,\n deposits: 0,\n withdrawals: 0,\n balanceChange: 0,\n signatures: [],\n })\n }\n\n const epochData = epochMap.get(item.epoch)!\n\n if (item.type === 'deposit') {\n epochData.deposits += item.amount\n } else if (item.type === 'withdrawal') {\n epochData.withdrawals += item.amount\n }\n\n if (!epochData.signatures.includes(item.signature)) {\n epochData.signatures.push(item.signature)\n }\n }\n\n for (const epochData of epochMap.values()) {\n epochData.balanceChange = epochData.deposits - epochData.withdrawals\n }\n\n return [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n }\n\n async getHistory(\n voteAccount: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount)\n\n const signatures = (await this.connection.getSignaturesForAddress(\n ValidatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )).filter(sig => !sig.err)\n\n const signatureStrings = signatures.map(sig => sig.signature)\n\n const BATCH_SIZE = 100\n const allTransactions: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += BATCH_SIZE) {\n const batch = signatureStrings.slice(i, i + BATCH_SIZE)\n const transactions = await this.connection.getParsedTransactions(\n batch,\n {\n maxSupportedTransactionVersion: 0,\n },\n )\n allTransactions.push(...transactions)\n }\n\n const cluster = options?.cluster || 'mainnet-beta'\n\n const history: TransactionHistoryItem[] = []\n\n for (const [idx, tx] of allTransactions.entries()) {\n const sigInfo = signatures[idx]\n\n if (!tx || !tx.meta || tx.meta.err !== null) {\n continue\n }\n\n try {\n const slot = (tx.slot || 0)\n const instructions = tx.transaction.message.instructions\n\n for (const instruction of instructions) {\n if ('programId' in instruction && instruction.programId.equals(this.options.programId ?? this.program.programId)) {\n const ixData = instruction as any\n\n if ('parsed' in ixData && ixData.parsed) {\n continue\n }\n\n const data = ixData.data\n if (!data) {\n continue\n }\n\n let type: BondTransactionType | null = null\n let amount = 0\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length >= 16) {\n const discriminator = dataBuffer.slice(0, 8)\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n type = BondTransactionType.Compensation\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n type = BondTransactionType.Withdrawal\n }\n }\n } catch {\n console.warn('Failed to decode instruction data')\n }\n\n if (type && amount > 0) {\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n // Find the validator bond account in the account keys\n const accountIndex = tx.transaction.message.accountKeys.findIndex(\n key => key.pubkey.equals(ValidatorBondAccount),\n )\n\n if (accountIndex !== -1 && tx.meta.preBalances && tx.meta.postBalances) {\n beforeBalance = Number(tx.meta.preBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n afterBalance = Number(tx.meta.postBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n }\n\n history.push({\n signature: sigInfo!.signature,\n slot,\n epoch: slotToEpoch(slot, cluster),\n type,\n amount,\n beforeBalance,\n afterBalance,\n })\n }\n }\n }\n } catch (error) {\n console.error(`Error processing transaction ${sigInfo!.signature}:`, error)\n }\n }\n\n return history.toSorted((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get full transaction history by paginating through results\n * @param voteAccount\n * @param pageSize\n */\n async getFullHistory(\n voteAccount: PublicKey,\n pageSize: number = 100,\n ): Promise<TransactionHistoryItem[]> {\n const allHistory: TransactionHistoryItem[] = []\n let before: string | undefined\n\n while (true) {\n const batch = await this.getHistory(voteAccount, {\n limit: pageSize,\n before,\n })\n\n if (batch.length === 0) {\n break\n }\n\n allHistory.push(...batch)\n\n // Get the signature of the last transaction for pagination\n before = batch.at(-1)?.signature\n\n // If we got less than the page size, we've reached the end\n if (batch.length < pageSize) {\n break\n }\n }\n\n return allHistory\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n}\n\n// Update the type helper definition at the bottom of the file to constrain the generic:\ntype WithOptionalAuthority<T extends { authority: PublicKey }> = Omit<T, 'authority'> & { authority?: PublicKey }\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1256,14 +1256,14 @@ var JBondClient = class _JBondClient {
|
|
|
1256
1256
|
}
|
|
1257
1257
|
async getHistory(voteAccount, options) {
|
|
1258
1258
|
const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount);
|
|
1259
|
-
const signatures = await this.connection.getSignaturesForAddress(
|
|
1259
|
+
const signatures = (await this.connection.getSignaturesForAddress(
|
|
1260
1260
|
ValidatorBondAccount,
|
|
1261
1261
|
{
|
|
1262
1262
|
limit: options?.limit || 1e3,
|
|
1263
1263
|
before: options?.before,
|
|
1264
1264
|
until: options?.until
|
|
1265
1265
|
}
|
|
1266
|
-
);
|
|
1266
|
+
)).filter((sig) => !sig.err);
|
|
1267
1267
|
const signatureStrings = signatures.map((sig) => sig.signature);
|
|
1268
1268
|
const BATCH_SIZE = 100;
|
|
1269
1269
|
const allTransactions = [];
|
|
@@ -1281,7 +1281,7 @@ var JBondClient = class _JBondClient {
|
|
|
1281
1281
|
const history = [];
|
|
1282
1282
|
for (const [idx, tx] of allTransactions.entries()) {
|
|
1283
1283
|
const sigInfo = signatures[idx];
|
|
1284
|
-
if (!tx || !tx.meta) {
|
|
1284
|
+
if (!tx || !tx.meta || tx.meta.err !== null) {
|
|
1285
1285
|
continue;
|
|
1286
1286
|
}
|
|
1287
1287
|
try {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv"],"mappings":"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","file":"index.mjs","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n },\n {\n \"name\": \"set_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_authority` - Optional new authority key (None to restrict to identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the authority.\"\n ],\n \"discriminator\": [\n 133,\n 250,\n 37,\n 21,\n 110,\n 163,\n 26,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"global_state\"\n ]\n },\n {\n \"name\": \"new_authority\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator boost account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport * from './jbond'\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n withdrawalAuthority?: string\n totalWithdrawn: number\n lastWithdrawalEpoch: number\n isActive: boolean\n createdAt: number\n bump: number\n}\n\nexport type InitializeProps = {\n authority: PublicKey\n reserveAddress: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n creator: PublicKey\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n withdrawalAuthority?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n user: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type WithdrawCollateralProps = {\n withdrawalAuthority: PublicKey\n voteAccount: PublicKey\n destination: PublicKey\n amount: number\n}\n\nexport type WithdrawCompensationProps = {\n authority: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type GetHistoryProps = {\n voteAccount: PublicKey\n options?: {\n limit?: number\n before?: string\n until?: string\n }\n}\n\nexport type GetHistoryGroupedProps = {\n voteAccount: PublicKey\n epochsCount?: number\n}\n\nexport type GlobalState = {\n authority: PublicKey\n totalValidators: number\n totalCollateral: BN\n totalWithdrawn: BN\n bump: number\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type { Wallet } from '@coral-xyz/anchor'\nimport type {\n EpochHistoryItem,\n InitializeProps,\n Jbond,\n RegisterValidatorProps,\n TopUpCollateralProps,\n TransactionHistoryItem,\n WithdrawCollateralProps,\n WithdrawCompensationProps,\n} from './types'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport { Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction } from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n // Optional custom program ID (defaults to the one in the IDL)\n programId?: PublicKey\n // Debug mode flag\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: AnchorProvider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL as any, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configure('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configure<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.programId,\n )\n },\n validatorBond: (voteAccount: PublicKey) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Build initialize instruction\n * @param props\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { authority, reserveAddress: reserve } = props\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n * @param props\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (accountInfo) {\n throw new Error('Validator bond account already exists')\n }\n const [globalState] = this.pda.globalState()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .register(collateralLamports, withdrawalAuthority ?? null)\n .accountsPartial({\n creator,\n globalState,\n validatorBond: validatorBondAccountAddress,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n * @param props\n */\n buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .topUp(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n payer: user,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .withdraw(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n withdrawalAuthority: user,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build withdraw compensation instruction\n * @param props\n */\n async buildWithdrawCompensationInstruction(props: WithdrawCompensationProps) {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.pda.globalState()\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n const reserveAddress = (await this.getGlobalState())?.reserveAddress\n\n if (!reserveAddress) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n\n return this.program.methods\n .claim(amountLamports)\n .accountsPartial({\n globalState,\n validatorBond: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build multiple withdraw compensation instructions\n * @param authority\n * @param withdrawals\n */\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ) {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n /**\n * Get validator bond account state\n * @param vote\n */\n async getValidatorBond(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBond.fetch(validatorBondAccountAddress)\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // Convert i64 Unix seconds (BN) to JS milliseconds\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n /**\n * Build set authority instruction\n */\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }) {\n const [globalState] = this.pda.globalState()\n\n return this.program.methods\n .setAuthority()\n .accountsStrict({\n globalState,\n authority: props.authority,\n newAuthority: props.newAuthority,\n })\n .instruction()\n }\n\n /**\n * Get the collateral balance of a validator bond account\n * @param vote - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (!accountInfo) {\n return 0\n }\n\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(\n accountInfo.data.length,\n )\n\n const availableBalance = Math.max(0, accountInfo.lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get global state\n */\n async getGlobalState() {\n const [globalState] = this.pda.globalState()\n\n const account = await this.program.account.globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n }\n\n /**\n * Get current epoch\n */\n async getCurrentEpoch() {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n /**\n * Helper methods for backward compatibility (can be removed if not needed)\n * @param props\n */\n async initialize(props: WithOptionalAuthority<InitializeProps>) {\n const { reserveAddress } = props\n const authority = props.authority ?? this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ reserveAddress, authority })\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n // Note: this method will be removed or changed in the future (CLI only)\n async registerValidator(\n voteAccount: PublicKey,\n initialCollateral: number,\n withdrawalAuthority?: PublicKey,\n identity?: PublicKey,\n ) {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ) {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async withdrawCollateral(\n voteAccount: PublicKey,\n destination: PublicKey,\n amount: number,\n withdrawalAuthority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = withdrawalAuthority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCollateralInstruction(\n { withdrawalAuthority: authorityPubkey, voteAccount, destination, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async claimCompensation(\n voteAccount: PublicKey,\n amount: number,\n authority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = authority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCompensationInstruction(\n { authority: authorityPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n /**\n * Get transaction history grouped by epochs\n * @param voteAccount - The vote account to get history for\n * @param epochsCount - Number of recent epochs to return (default: 10)\n * @returns Array of epoch history items sorted by epoch (descending)\n */\n async getHistoryGroupedByEpochs(\n voteAccount: PublicKey,\n epochsCount: number = 10,\n ): Promise<EpochHistoryItem[]> {\n const currentEpoch = await this.getCurrentEpoch()\n const fullHistory = await this.getFullHistory(voteAccount)\n\n const epochMap = new Map<number, EpochHistoryItem>()\n\n for (const item of fullHistory) {\n if (item.epoch < currentEpoch - epochsCount + 1) {\n continue\n }\n if (!epochMap.has(item.epoch)) {\n epochMap.set(item.epoch, {\n epoch: item.epoch,\n deposits: 0,\n withdrawals: 0,\n balanceChange: 0,\n signatures: [],\n })\n }\n\n const epochData = epochMap.get(item.epoch)!\n\n if (item.type === 'deposit') {\n epochData.deposits += item.amount\n } else if (item.type === 'withdrawal') {\n epochData.withdrawals += item.amount\n }\n\n if (!epochData.signatures.includes(item.signature)) {\n epochData.signatures.push(item.signature)\n }\n }\n\n for (const epochData of epochMap.values()) {\n epochData.balanceChange = epochData.deposits - epochData.withdrawals\n }\n\n return [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n }\n\n async getHistory(\n voteAccount: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount)\n\n const signatures = await this.connection.getSignaturesForAddress(\n ValidatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )\n\n const signatureStrings = signatures.map(sig => sig.signature)\n\n const BATCH_SIZE = 100\n const allTransactions: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += BATCH_SIZE) {\n const batch = signatureStrings.slice(i, i + BATCH_SIZE)\n const transactions = await this.connection.getParsedTransactions(\n batch,\n {\n maxSupportedTransactionVersion: 0,\n },\n )\n allTransactions.push(...transactions)\n }\n\n const cluster = options?.cluster || 'mainnet-beta'\n\n const history: TransactionHistoryItem[] = []\n\n for (const [idx, tx] of allTransactions.entries()) {\n const sigInfo = signatures[idx]\n\n if (!tx || !tx.meta) {\n continue\n }\n\n try {\n const slot = (tx.slot || 0)\n const instructions = tx.transaction.message.instructions\n\n for (const instruction of instructions) {\n if ('programId' in instruction && instruction.programId.equals(this.options.programId ?? this.program.programId)) {\n const ixData = instruction as any\n\n if ('parsed' in ixData && ixData.parsed) {\n continue\n }\n\n const data = ixData.data\n if (!data) {\n continue\n }\n\n let type: BondTransactionType | null = null\n let amount = 0\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length >= 16) {\n const discriminator = dataBuffer.slice(0, 8)\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n type = BondTransactionType.Compensation\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n type = BondTransactionType.Withdrawal\n }\n }\n } catch {\n console.warn('Failed to decode instruction data')\n }\n\n if (type && amount > 0) {\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n // Find the validator bond account in the account keys\n const accountIndex = tx.transaction.message.accountKeys.findIndex(\n key => key.pubkey.equals(ValidatorBondAccount),\n )\n\n if (accountIndex !== -1 && tx.meta.preBalances && tx.meta.postBalances) {\n beforeBalance = Number(tx.meta.preBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n afterBalance = Number(tx.meta.postBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n }\n\n history.push({\n signature: sigInfo!.signature,\n slot,\n epoch: slotToEpoch(slot, cluster),\n type,\n amount,\n beforeBalance,\n afterBalance,\n })\n }\n }\n }\n } catch (error) {\n console.error(`Error processing transaction ${sigInfo!.signature}:`, error)\n }\n }\n\n return history.toSorted((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get full transaction history by paginating through results\n * @param voteAccount\n * @param pageSize\n */\n async getFullHistory(\n voteAccount: PublicKey,\n pageSize: number = 100,\n ): Promise<TransactionHistoryItem[]> {\n const allHistory: TransactionHistoryItem[] = []\n let before: string | undefined\n\n while (true) {\n const batch = await this.getHistory(voteAccount, {\n limit: pageSize,\n before,\n })\n\n if (batch.length === 0) {\n break\n }\n\n allHistory.push(...batch)\n\n // Get the signature of the last transaction for pagination\n before = batch.at(-1)?.signature\n\n // If we got less than the page size, we've reached the end\n if (batch.length < pageSize) {\n break\n }\n }\n\n return allHistory\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n}\n\n// Update the type helper definition at the bottom of the file to constrain the generic:\ntype WithOptionalAuthority<T extends { authority: PublicKey }> = Omit<T, 'authority'> & { authority?: PublicKey }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv"],"mappings":"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","file":"index.mjs","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n },\n {\n \"name\": \"set_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_authority` - Optional new authority key (None to restrict to identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the authority.\"\n ],\n \"discriminator\": [\n 133,\n 250,\n 37,\n 21,\n 110,\n 163,\n 26,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"global_state\"\n ]\n },\n {\n \"name\": \"new_authority\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator boost account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport * from './jbond'\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n withdrawalAuthority?: string\n totalWithdrawn: number\n lastWithdrawalEpoch: number\n isActive: boolean\n createdAt: number\n bump: number\n}\n\nexport type InitializeProps = {\n authority: PublicKey\n reserveAddress: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n creator: PublicKey\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n withdrawalAuthority?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n user: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type WithdrawCollateralProps = {\n withdrawalAuthority: PublicKey\n voteAccount: PublicKey\n destination: PublicKey\n amount: number\n}\n\nexport type WithdrawCompensationProps = {\n authority: PublicKey\n voteAccount: PublicKey\n amount: number\n}\n\nexport type GetHistoryProps = {\n voteAccount: PublicKey\n options?: {\n limit?: number\n before?: string\n until?: string\n }\n}\n\nexport type GetHistoryGroupedProps = {\n voteAccount: PublicKey\n epochsCount?: number\n}\n\nexport type GlobalState = {\n authority: PublicKey\n totalValidators: number\n totalCollateral: BN\n totalWithdrawn: BN\n bump: number\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type { Wallet } from '@coral-xyz/anchor'\nimport type {\n EpochHistoryItem,\n InitializeProps,\n Jbond,\n RegisterValidatorProps,\n TopUpCollateralProps,\n TransactionHistoryItem,\n WithdrawCollateralProps,\n WithdrawCompensationProps,\n} from './types'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport { Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction } from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n // Optional custom program ID (defaults to the one in the IDL)\n programId?: PublicKey\n // Debug mode flag\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: AnchorProvider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL as any, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configure('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configure<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.programId,\n )\n },\n validatorBond: (voteAccount: PublicKey) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Build initialize instruction\n * @param props\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { authority, reserveAddress: reserve } = props\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n * @param props\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (accountInfo) {\n throw new Error('Validator bond account already exists')\n }\n const [globalState] = this.pda.globalState()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .register(collateralLamports, withdrawalAuthority ?? null)\n .accountsPartial({\n creator,\n globalState,\n validatorBond: validatorBondAccountAddress,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n * @param props\n */\n buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .topUp(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n payer: user,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .withdraw(amountLamports)\n .accountsPartial({\n validatorBond: validatorBondAccountAddress,\n withdrawalAuthority: user,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build withdraw compensation instruction\n * @param props\n */\n async buildWithdrawCompensationInstruction(props: WithdrawCompensationProps) {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.pda.globalState()\n const [validatorBondAccountAddress] = this.pda.validatorBond(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n const reserveAddress = (await this.getGlobalState())?.reserveAddress\n\n if (!reserveAddress) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n\n return this.program.methods\n .claim(amountLamports)\n .accountsPartial({\n globalState,\n validatorBond: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build multiple withdraw compensation instructions\n * @param authority\n * @param withdrawals\n */\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ) {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n /**\n * Get validator bond account state\n * @param vote\n */\n async getValidatorBond(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBond.fetch(validatorBondAccountAddress)\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // Convert i64 Unix seconds (BN) to JS milliseconds\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n /**\n * Build set authority instruction\n */\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }) {\n const [globalState] = this.pda.globalState()\n\n return this.program.methods\n .setAuthority()\n .accountsStrict({\n globalState,\n authority: props.authority,\n newAuthority: props.newAuthority,\n })\n .instruction()\n }\n\n /**\n * Get the collateral balance of a validator bond account\n * @param vote - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(vote: PublicKey) {\n const [validatorBondAccountAddress] = this.pda.validatorBond(vote)\n\n const accountInfo = await this.connection.getAccountInfo(validatorBondAccountAddress)\n if (!accountInfo) {\n return 0\n }\n\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(\n accountInfo.data.length,\n )\n\n const availableBalance = Math.max(0, accountInfo.lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get global state\n */\n async getGlobalState() {\n const [globalState] = this.pda.globalState()\n\n const account = await this.program.account.globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalCompensationAmount: account.totalCompensationAmount.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n }\n\n /**\n * Get current epoch\n */\n async getCurrentEpoch() {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n /**\n * Helper methods for backward compatibility (can be removed if not needed)\n * @param props\n */\n async initialize(props: WithOptionalAuthority<InitializeProps>) {\n const { reserveAddress } = props\n const authority = props.authority ?? this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ reserveAddress, authority })\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n // Note: this method will be removed or changed in the future (CLI only)\n async registerValidator(\n voteAccount: PublicKey,\n initialCollateral: number,\n withdrawalAuthority?: PublicKey,\n identity?: PublicKey,\n ) {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ) {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async withdrawCollateral(\n voteAccount: PublicKey,\n destination: PublicKey,\n amount: number,\n withdrawalAuthority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = withdrawalAuthority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCollateralInstruction(\n { withdrawalAuthority: authorityPubkey, voteAccount, destination, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n async claimCompensation(\n voteAccount: PublicKey,\n amount: number,\n authority?: PublicKey,\n ): Promise<string> {\n const authorityPubkey = authority ?? this.provider.wallet.publicKey\n const ix = await this.buildWithdrawCompensationInstruction(\n { authority: authorityPubkey, voteAccount, amount },\n )\n return await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n }\n\n /**\n * Get transaction history grouped by epochs\n * @param voteAccount - The vote account to get history for\n * @param epochsCount - Number of recent epochs to return (default: 10)\n * @returns Array of epoch history items sorted by epoch (descending)\n */\n async getHistoryGroupedByEpochs(\n voteAccount: PublicKey,\n epochsCount: number = 10,\n ): Promise<EpochHistoryItem[]> {\n const currentEpoch = await this.getCurrentEpoch()\n const fullHistory = await this.getFullHistory(voteAccount)\n\n const epochMap = new Map<number, EpochHistoryItem>()\n\n for (const item of fullHistory) {\n if (item.epoch < currentEpoch - epochsCount + 1) {\n continue\n }\n if (!epochMap.has(item.epoch)) {\n epochMap.set(item.epoch, {\n epoch: item.epoch,\n deposits: 0,\n withdrawals: 0,\n balanceChange: 0,\n signatures: [],\n })\n }\n\n const epochData = epochMap.get(item.epoch)!\n\n if (item.type === 'deposit') {\n epochData.deposits += item.amount\n } else if (item.type === 'withdrawal') {\n epochData.withdrawals += item.amount\n }\n\n if (!epochData.signatures.includes(item.signature)) {\n epochData.signatures.push(item.signature)\n }\n }\n\n for (const epochData of epochMap.values()) {\n epochData.balanceChange = epochData.deposits - epochData.withdrawals\n }\n\n return [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n }\n\n async getHistory(\n voteAccount: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const [ValidatorBondAccount] = this.pda.validatorBond(voteAccount)\n\n const signatures = (await this.connection.getSignaturesForAddress(\n ValidatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )).filter(sig => !sig.err)\n\n const signatureStrings = signatures.map(sig => sig.signature)\n\n const BATCH_SIZE = 100\n const allTransactions: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += BATCH_SIZE) {\n const batch = signatureStrings.slice(i, i + BATCH_SIZE)\n const transactions = await this.connection.getParsedTransactions(\n batch,\n {\n maxSupportedTransactionVersion: 0,\n },\n )\n allTransactions.push(...transactions)\n }\n\n const cluster = options?.cluster || 'mainnet-beta'\n\n const history: TransactionHistoryItem[] = []\n\n for (const [idx, tx] of allTransactions.entries()) {\n const sigInfo = signatures[idx]\n\n if (!tx || !tx.meta || tx.meta.err !== null) {\n continue\n }\n\n try {\n const slot = (tx.slot || 0)\n const instructions = tx.transaction.message.instructions\n\n for (const instruction of instructions) {\n if ('programId' in instruction && instruction.programId.equals(this.options.programId ?? this.program.programId)) {\n const ixData = instruction as any\n\n if ('parsed' in ixData && ixData.parsed) {\n continue\n }\n\n const data = ixData.data\n if (!data) {\n continue\n }\n\n let type: BondTransactionType | null = null\n let amount = 0\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length >= 16) {\n const discriminator = dataBuffer.slice(0, 8)\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n type = BondTransactionType.Deposit\n } else if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n type = BondTransactionType.Compensation\n } else if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n type = BondTransactionType.Withdrawal\n }\n }\n } catch {\n console.warn('Failed to decode instruction data')\n }\n\n if (type && amount > 0) {\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n // Find the validator bond account in the account keys\n const accountIndex = tx.transaction.message.accountKeys.findIndex(\n key => key.pubkey.equals(ValidatorBondAccount),\n )\n\n if (accountIndex !== -1 && tx.meta.preBalances && tx.meta.postBalances) {\n beforeBalance = Number(tx.meta.preBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n afterBalance = Number(tx.meta.postBalances[accountIndex] || 0) / LAMPORTS_PER_SOL\n }\n\n history.push({\n signature: sigInfo!.signature,\n slot,\n epoch: slotToEpoch(slot, cluster),\n type,\n amount,\n beforeBalance,\n afterBalance,\n })\n }\n }\n }\n } catch (error) {\n console.error(`Error processing transaction ${sigInfo!.signature}:`, error)\n }\n }\n\n return history.toSorted((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get full transaction history by paginating through results\n * @param voteAccount\n * @param pageSize\n */\n async getFullHistory(\n voteAccount: PublicKey,\n pageSize: number = 100,\n ): Promise<TransactionHistoryItem[]> {\n const allHistory: TransactionHistoryItem[] = []\n let before: string | undefined\n\n while (true) {\n const batch = await this.getHistory(voteAccount, {\n limit: pageSize,\n before,\n })\n\n if (batch.length === 0) {\n break\n }\n\n allHistory.push(...batch)\n\n // Get the signature of the last transaction for pagination\n before = batch.at(-1)?.signature\n\n // If we got less than the page size, we've reached the end\n if (batch.length < pageSize) {\n break\n }\n }\n\n return allHistory\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n}\n\n// Update the type helper definition at the bottom of the file to constrain the generic:\ntype WithOptionalAuthority<T extends { authority: PublicKey }> = Omit<T, 'authority'> & { authority?: PublicKey }\n"]}
|