@jpool/bond-sdk 0.3.0 → 0.4.0

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.d.mts CHANGED
@@ -867,17 +867,16 @@ declare class JBondClient {
867
867
  connection: Connection;
868
868
  program: Program<Jbond>;
869
869
  provider: AnchorProvider;
870
- config: Config;
871
870
  readonly options: ClientOptions;
872
- constructor(config: Config, wallet?: Wallet, options?: ClientOptions);
871
+ constructor(options: ClientOptions, wallet?: Wallet);
873
872
  /**
874
873
  * Creates an instance of `JBondClient` using a provided connection and wallet.
875
874
  */
876
- static fromWallet(config: Config, wallet?: Wallet, options?: ClientOptions): JBondClient;
875
+ static fromWallet(options: ClientOptions, wallet?: Wallet): JBondClient;
877
876
  /**
878
877
  * Creates an instance of `JBondClient` using the provided connection and keypair.
879
878
  */
880
- static fromKeypair(config: Config, keypair: Keypair, options?: ClientOptions): JBondClient;
879
+ static fromKeypair(options: ClientOptions, keypair: Keypair): JBondClient;
881
880
  /**
882
881
  * Get the current program ID.
883
882
  */
@@ -941,8 +940,8 @@ declare class JBondClient {
941
940
  private getInstructionDiscriminator;
942
941
  }
943
942
  type ClientOptions = {
943
+ rpcUrl: string;
944
944
  programId?: PublicKey;
945
- debug?: boolean;
946
945
  } & Record<string, any>;
947
946
 
948
947
  declare const PROGRAM_ID: PublicKey;
package/dist/index.d.ts CHANGED
@@ -867,17 +867,16 @@ declare class JBondClient {
867
867
  connection: Connection;
868
868
  program: Program<Jbond>;
869
869
  provider: AnchorProvider;
870
- config: Config;
871
870
  readonly options: ClientOptions;
872
- constructor(config: Config, wallet?: Wallet, options?: ClientOptions);
871
+ constructor(options: ClientOptions, wallet?: Wallet);
873
872
  /**
874
873
  * Creates an instance of `JBondClient` using a provided connection and wallet.
875
874
  */
876
- static fromWallet(config: Config, wallet?: Wallet, options?: ClientOptions): JBondClient;
875
+ static fromWallet(options: ClientOptions, wallet?: Wallet): JBondClient;
877
876
  /**
878
877
  * Creates an instance of `JBondClient` using the provided connection and keypair.
879
878
  */
880
- static fromKeypair(config: Config, keypair: Keypair, options?: ClientOptions): JBondClient;
879
+ static fromKeypair(options: ClientOptions, keypair: Keypair): JBondClient;
881
880
  /**
882
881
  * Get the current program ID.
883
882
  */
@@ -941,8 +940,8 @@ declare class JBondClient {
941
940
  private getInstructionDiscriminator;
942
941
  }
943
942
  type ClientOptions = {
943
+ rpcUrl: string;
944
944
  programId?: PublicKey;
945
- debug?: boolean;
946
945
  } & Record<string, any>;
947
946
 
948
947
  declare const PROGRAM_ID: PublicKey;
package/dist/index.js CHANGED
@@ -841,12 +841,10 @@ var JBondClient = class _JBondClient {
841
841
  connection;
842
842
  program;
843
843
  provider;
844
- config;
845
844
  options;
846
- constructor(config, wallet, options) {
847
- this.config = config;
848
- this.connection = new web3_js.Connection(config.rpcUrl, "confirmed");
849
- this.options = options ?? {};
845
+ constructor(options, wallet) {
846
+ this.connection = new web3_js.Connection(options.rpcUrl, "confirmed");
847
+ this.options = options;
850
848
  this.provider = new anchor.AnchorProvider(
851
849
  this.connection,
852
850
  // @ts-expect-error support anonymous
@@ -858,14 +856,14 @@ var JBondClient = class _JBondClient {
858
856
  /**
859
857
  * Creates an instance of `JBondClient` using a provided connection and wallet.
860
858
  */
861
- static fromWallet(config, wallet, options) {
862
- return new this(config, wallet, options);
859
+ static fromWallet(options, wallet) {
860
+ return new this(options, wallet);
863
861
  }
864
862
  /**
865
863
  * Creates an instance of `JBondClient` using the provided connection and keypair.
866
864
  */
867
- static fromKeypair(config, keypair, options) {
868
- return _JBondClient.fromWallet(config, new NodeWallet(keypair), options);
865
+ static fromKeypair(options, keypair) {
866
+ return _JBondClient.fromWallet(options, new NodeWallet(keypair));
869
867
  }
870
868
  /**
871
869
  * Get the current program ID.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common.ts","../src/helpers.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/client.ts"],"names":["PublicKey","BondTransactionType","BondClientEnv","Connection","AnchorProvider","Program","SystemProgram","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\nexport const PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\nexport const DEV_PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\n","const SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: 'mainnet-beta' | 'testnet' | 'devnet'): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","{\n \"address\": \"8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Validator compensation program for boosting APR\"\n },\n \"instructions\": [\n {\n \"name\": \"bond_init\",\n \"docs\": [\n \"Register validator and fund initial collateral\"\n ],\n \"discriminator\": [\n 220,\n 108,\n 156,\n 81,\n 16,\n 185,\n 144,\n 157\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_account\",\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\": \"bond_top_up\",\n \"docs\": [\n \"Top up collateral for existing validator\"\n ],\n \"discriminator\": [\n 132,\n 225,\n 254,\n 187,\n 152,\n 162,\n 176,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"depositor\",\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\": \"bond_withdraw\",\n \"discriminator\": [\n 99,\n 64,\n 127,\n 178,\n 53,\n 117,\n 70,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"name\": \"initialize\",\n \"docs\": [\n \"Initialize the global state and reserve vault\"\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\": \"set_authority\",\n \"docs\": [\n \"Change the bond 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\": \"withdraw_compensation\",\n \"docs\": [\n \"Withdraw compensation from validator to reserve (oracle only)\"\n ],\n \"discriminator\": [\n 10,\n 228,\n 22,\n 213,\n 205,\n 117,\n 181,\n 75\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_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"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\": \"ValidatorBondAccount\",\n \"discriminator\": [\n 25,\n 67,\n 241,\n 227,\n 226,\n 104,\n 108,\n 73\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\": \"new_total\",\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\": \"remaining_collateral\",\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\": \"remaining_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_withdrawn\",\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 \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBondAccount\",\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\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_withdrawal_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}\n","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport type Config = {\n rpcUrl: string\n}\n\nexport type ValidatorBondAccount = {\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 type { Wallet } from '@coral-xyz/anchor'\nimport type {\n Keypair,\n ParsedTransactionWithMeta,\n TransactionInstruction } from '@solana/web3.js'\nimport type { Config, EpochHistoryItem, InitializeProps, RegisterValidatorProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBondAccount, WithdrawCollateralProps, WithdrawCompensationProps } from './types'\nimport type { Jbond } from './types/jbond'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport {\n Connection,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { DEV_PROGRAM_ID, PROGRAM_ID } from './common'\nimport { slotToEpoch } from './helpers'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet } from './utils/wallet'\n//\nexport enum BondClientEnv { DEV = 'dev', PROD = 'prod' }\n\nexport class JBondClient {\n connection: Connection\n program: Program<Jbond>\n provider: AnchorProvider\n config: Config\n readonly options: ClientOptions\n\n constructor(config: Config, wallet?: Wallet, options?: ClientOptions) {\n this.config = config\n this.connection = new Connection(config.rpcUrl, 'confirmed')\n this.options = options ?? {}\n\n // If keypair is provided, use it. Otherwise, create a dummy keypair\n // since we're only building instructions\n this.provider = new AnchorProvider(\n this.connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions())\n\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(config: Config, wallet?: Wallet, options?: ClientOptions): JBondClient {\n return new this(config, wallet, options)\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(config: Config, keypair: Keypair, options?: ClientOptions): JBondClient {\n return JBondClient.fromWallet(config, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId(): PublicKey {\n return this.options.programId ?? PROGRAM_ID\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n if (env === BondClientEnv.PROD) {\n return this.configure('programId', PROGRAM_ID)\n }\n return this.configure('programId', DEV_PROGRAM_ID)\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 // Get PDA for global state\n getGlobalStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Get PDA for validator bond account\n getValidatorBondPDA(\n voteAccount: PublicKey,\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Build initialize instruction\n async buildInitializeInstruction(props: InitializeProps): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\n const { authority, reserveAddress } = props\n\n return this.program.methods\n .initialize()\n .accountsStrict({\n globalState,\n authority,\n reserve: reserveAddress,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build register validator instruction\n async buildRegisterValidatorInstruction(\n props: RegisterValidatorProps,\n ): Promise<TransactionInstruction> {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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.getGlobalStatePDA()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondInit(collateralLamports, withdrawalAuthority ?? null)\n .accountsStrict({\n creator,\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n identity,\n voteAccount,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build top up collateral instruction\n buildTopUpCollateralInstruction(\n props: TopUpCollateralProps,\n ): Promise<TransactionInstruction> {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondTopUp(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n depositor: user,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(\n props: WithdrawCollateralProps,\n ): Promise<TransactionInstruction> {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondWithdraw(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n withdrawalAuthority: user,\n destination,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build withdraw compensation instruction\n async buildWithdrawCompensationInstruction(\n props: WithdrawCompensationProps,\n ): Promise<TransactionInstruction> {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.getGlobalStatePDA()\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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 .withdrawCompensation(amountLamports)\n .accountsStrict({\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build multiple withdraw compensation instructions\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ): Promise<TransactionInstruction[]> {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n // Get validator bond account state\n async getValidatorBondAccount(\n voteAccount: PublicKey,\n ): Promise<ValidatorBondAccount | null> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBondAccount.fetch(validatorBondAccountAddress)\n\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n lastWithdrawalEpoch: account.lastWithdrawalEpoch.toNumber(),\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // TODO\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n // Build set authority instruction\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\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 voteAccount - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(voteAccount: PublicKey): Promise<number> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\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 // Get global state state\n async getGlobalState(): Promise<{\n authority: string\n totalValidators: number\n totalWithdrawn: number\n reserveAddress: string\n } | null> {\n const [globalState] = this.getGlobalStatePDA()\n\n try {\n const account = await (\n this.program.account as any\n ).globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n } catch {\n return null\n }\n }\n\n // Get current epoch\n async getCurrentEpoch(): Promise<number> {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n // Helper methods for backward compatibility (can be removed if not needed)\n async initialize(reserveAddress: PublicKey, authority?: PublicKey): Promise<string> {\n const authorityPubkey = authority || this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ authority: authorityPubkey, reserveAddress })\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 ): Promise<string> {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ): Promise<string> {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const result = [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n\n return result\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.getValidatorBondPDA(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('bondInit')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('bondTopUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('withdrawCompensation')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('bondWithdraw')\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 // Helper method to get paginated history\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 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\nexport type ClientOptions = {\n /// Custom Program ID\n programId?: PublicKey\n /// Enable debugging\n debug?: boolean\n} & Record<string, any>\n"]}
1
+ {"version":3,"sources":["../src/common.ts","../src/helpers.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/client.ts"],"names":["PublicKey","BondTransactionType","BondClientEnv","Connection","AnchorProvider","Program","SystemProgram","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\nexport const PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\nexport const DEV_PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\n","const SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: 'mainnet-beta' | 'testnet' | 'devnet'): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","{\n \"address\": \"8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Validator compensation program for boosting APR\"\n },\n \"instructions\": [\n {\n \"name\": \"bond_init\",\n \"docs\": [\n \"Register validator and fund initial collateral\"\n ],\n \"discriminator\": [\n 220,\n 108,\n 156,\n 81,\n 16,\n 185,\n 144,\n 157\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_account\",\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\": \"bond_top_up\",\n \"docs\": [\n \"Top up collateral for existing validator\"\n ],\n \"discriminator\": [\n 132,\n 225,\n 254,\n 187,\n 152,\n 162,\n 176,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"depositor\",\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\": \"bond_withdraw\",\n \"discriminator\": [\n 99,\n 64,\n 127,\n 178,\n 53,\n 117,\n 70,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"name\": \"initialize\",\n \"docs\": [\n \"Initialize the global state and reserve vault\"\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\": \"set_authority\",\n \"docs\": [\n \"Change the bond 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\": \"withdraw_compensation\",\n \"docs\": [\n \"Withdraw compensation from validator to reserve (oracle only)\"\n ],\n \"discriminator\": [\n 10,\n 228,\n 22,\n 213,\n 205,\n 117,\n 181,\n 75\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_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"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\": \"ValidatorBondAccount\",\n \"discriminator\": [\n 25,\n 67,\n 241,\n 227,\n 226,\n 104,\n 108,\n 73\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\": \"new_total\",\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\": \"remaining_collateral\",\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\": \"remaining_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_withdrawn\",\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 \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBondAccount\",\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\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_withdrawal_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}\n","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport type Config = {\n rpcUrl: string\n}\n\nexport type ValidatorBondAccount = {\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 type { Wallet } from '@coral-xyz/anchor'\nimport type {\n Keypair,\n ParsedTransactionWithMeta,\n TransactionInstruction } from '@solana/web3.js'\nimport type { EpochHistoryItem, InitializeProps, RegisterValidatorProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBondAccount, WithdrawCollateralProps, WithdrawCompensationProps } from './types'\nimport type { Jbond } from './types/jbond'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport {\n Connection,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { DEV_PROGRAM_ID, PROGRAM_ID } from './common'\nimport { slotToEpoch } from './helpers'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet } from './utils/wallet'\n//\nexport enum BondClientEnv { DEV = 'dev', PROD = 'prod' }\n\nexport class JBondClient {\n connection: Connection\n program: Program<Jbond>\n provider: AnchorProvider\n readonly options: ClientOptions\n\n constructor(options: ClientOptions, wallet?: Wallet) {\n this.connection = new Connection(options.rpcUrl, 'confirmed')\n this.options = options\n\n // If keypair is provided, use it. Otherwise, create a dummy keypair\n // since we're only building instructions\n this.provider = new AnchorProvider(\n this.connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions())\n\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(options: ClientOptions, wallet?: Wallet): JBondClient {\n return new this(options, wallet)\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(options: ClientOptions, keypair: Keypair): JBondClient {\n return JBondClient.fromWallet(options, new NodeWallet(keypair))\n }\n\n /**\n * Get the current program ID.\n */\n get programId(): PublicKey {\n return this.options.programId ?? PROGRAM_ID\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n if (env === BondClientEnv.PROD) {\n return this.configure('programId', PROGRAM_ID)\n }\n return this.configure('programId', DEV_PROGRAM_ID)\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 // Get PDA for global state\n getGlobalStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Get PDA for validator bond account\n getValidatorBondPDA(\n voteAccount: PublicKey,\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Build initialize instruction\n async buildInitializeInstruction(props: InitializeProps): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\n const { authority, reserveAddress } = props\n\n return this.program.methods\n .initialize()\n .accountsStrict({\n globalState,\n authority,\n reserve: reserveAddress,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build register validator instruction\n async buildRegisterValidatorInstruction(\n props: RegisterValidatorProps,\n ): Promise<TransactionInstruction> {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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.getGlobalStatePDA()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondInit(collateralLamports, withdrawalAuthority ?? null)\n .accountsStrict({\n creator,\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n identity,\n voteAccount,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build top up collateral instruction\n buildTopUpCollateralInstruction(\n props: TopUpCollateralProps,\n ): Promise<TransactionInstruction> {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondTopUp(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n depositor: user,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(\n props: WithdrawCollateralProps,\n ): Promise<TransactionInstruction> {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondWithdraw(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n withdrawalAuthority: user,\n destination,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build withdraw compensation instruction\n async buildWithdrawCompensationInstruction(\n props: WithdrawCompensationProps,\n ): Promise<TransactionInstruction> {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.getGlobalStatePDA()\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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 .withdrawCompensation(amountLamports)\n .accountsStrict({\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build multiple withdraw compensation instructions\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ): Promise<TransactionInstruction[]> {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n // Get validator bond account state\n async getValidatorBondAccount(\n voteAccount: PublicKey,\n ): Promise<ValidatorBondAccount | null> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBondAccount.fetch(validatorBondAccountAddress)\n\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n lastWithdrawalEpoch: account.lastWithdrawalEpoch.toNumber(),\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // TODO\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n // Build set authority instruction\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\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 voteAccount - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(voteAccount: PublicKey): Promise<number> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\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 // Get global state state\n async getGlobalState(): Promise<{\n authority: string\n totalValidators: number\n totalWithdrawn: number\n reserveAddress: string\n } | null> {\n const [globalState] = this.getGlobalStatePDA()\n\n try {\n const account = await (\n this.program.account as any\n ).globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n } catch {\n return null\n }\n }\n\n // Get current epoch\n async getCurrentEpoch(): Promise<number> {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n // Helper methods for backward compatibility (can be removed if not needed)\n async initialize(reserveAddress: PublicKey, authority?: PublicKey): Promise<string> {\n const authorityPubkey = authority || this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ authority: authorityPubkey, reserveAddress })\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 ): Promise<string> {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ): Promise<string> {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const result = [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n\n return result\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.getValidatorBondPDA(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('bondInit')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('bondTopUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('withdrawCompensation')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('bondWithdraw')\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 // Helper method to get paginated history\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 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\nexport type ClientOptions = {\n rpcUrl: string\n /// Custom Program ID\n programId?: PublicKey\n} & Record<string, any>\n"]}
package/dist/index.mjs CHANGED
@@ -835,12 +835,10 @@ var JBondClient = class _JBondClient {
835
835
  connection;
836
836
  program;
837
837
  provider;
838
- config;
839
838
  options;
840
- constructor(config, wallet, options) {
841
- this.config = config;
842
- this.connection = new Connection(config.rpcUrl, "confirmed");
843
- this.options = options ?? {};
839
+ constructor(options, wallet) {
840
+ this.connection = new Connection(options.rpcUrl, "confirmed");
841
+ this.options = options;
844
842
  this.provider = new AnchorProvider(
845
843
  this.connection,
846
844
  // @ts-expect-error support anonymous
@@ -852,14 +850,14 @@ var JBondClient = class _JBondClient {
852
850
  /**
853
851
  * Creates an instance of `JBondClient` using a provided connection and wallet.
854
852
  */
855
- static fromWallet(config, wallet, options) {
856
- return new this(config, wallet, options);
853
+ static fromWallet(options, wallet) {
854
+ return new this(options, wallet);
857
855
  }
858
856
  /**
859
857
  * Creates an instance of `JBondClient` using the provided connection and keypair.
860
858
  */
861
- static fromKeypair(config, keypair, options) {
862
- return _JBondClient.fromWallet(config, new NodeWallet(keypair), options);
859
+ static fromKeypair(options, keypair) {
860
+ return _JBondClient.fromWallet(options, new NodeWallet(keypair));
863
861
  }
864
862
  /**
865
863
  * Get the current program ID.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common.ts","../src/helpers.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv","PublicKey"],"mappings":"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","file":"index.mjs","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\nexport const PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\nexport const DEV_PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\n","const SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: 'mainnet-beta' | 'testnet' | 'devnet'): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","{\n \"address\": \"8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Validator compensation program for boosting APR\"\n },\n \"instructions\": [\n {\n \"name\": \"bond_init\",\n \"docs\": [\n \"Register validator and fund initial collateral\"\n ],\n \"discriminator\": [\n 220,\n 108,\n 156,\n 81,\n 16,\n 185,\n 144,\n 157\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_account\",\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\": \"bond_top_up\",\n \"docs\": [\n \"Top up collateral for existing validator\"\n ],\n \"discriminator\": [\n 132,\n 225,\n 254,\n 187,\n 152,\n 162,\n 176,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"depositor\",\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\": \"bond_withdraw\",\n \"discriminator\": [\n 99,\n 64,\n 127,\n 178,\n 53,\n 117,\n 70,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"name\": \"initialize\",\n \"docs\": [\n \"Initialize the global state and reserve vault\"\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\": \"set_authority\",\n \"docs\": [\n \"Change the bond 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\": \"withdraw_compensation\",\n \"docs\": [\n \"Withdraw compensation from validator to reserve (oracle only)\"\n ],\n \"discriminator\": [\n 10,\n 228,\n 22,\n 213,\n 205,\n 117,\n 181,\n 75\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_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"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\": \"ValidatorBondAccount\",\n \"discriminator\": [\n 25,\n 67,\n 241,\n 227,\n 226,\n 104,\n 108,\n 73\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\": \"new_total\",\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\": \"remaining_collateral\",\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\": \"remaining_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_withdrawn\",\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 \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBondAccount\",\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\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_withdrawal_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}\n","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport type Config = {\n rpcUrl: string\n}\n\nexport type ValidatorBondAccount = {\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 type { Wallet } from '@coral-xyz/anchor'\nimport type {\n Keypair,\n ParsedTransactionWithMeta,\n TransactionInstruction } from '@solana/web3.js'\nimport type { Config, EpochHistoryItem, InitializeProps, RegisterValidatorProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBondAccount, WithdrawCollateralProps, WithdrawCompensationProps } from './types'\nimport type { Jbond } from './types/jbond'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport {\n Connection,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { DEV_PROGRAM_ID, PROGRAM_ID } from './common'\nimport { slotToEpoch } from './helpers'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet } from './utils/wallet'\n//\nexport enum BondClientEnv { DEV = 'dev', PROD = 'prod' }\n\nexport class JBondClient {\n connection: Connection\n program: Program<Jbond>\n provider: AnchorProvider\n config: Config\n readonly options: ClientOptions\n\n constructor(config: Config, wallet?: Wallet, options?: ClientOptions) {\n this.config = config\n this.connection = new Connection(config.rpcUrl, 'confirmed')\n this.options = options ?? {}\n\n // If keypair is provided, use it. Otherwise, create a dummy keypair\n // since we're only building instructions\n this.provider = new AnchorProvider(\n this.connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions())\n\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(config: Config, wallet?: Wallet, options?: ClientOptions): JBondClient {\n return new this(config, wallet, options)\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(config: Config, keypair: Keypair, options?: ClientOptions): JBondClient {\n return JBondClient.fromWallet(config, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId(): PublicKey {\n return this.options.programId ?? PROGRAM_ID\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n if (env === BondClientEnv.PROD) {\n return this.configure('programId', PROGRAM_ID)\n }\n return this.configure('programId', DEV_PROGRAM_ID)\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 // Get PDA for global state\n getGlobalStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Get PDA for validator bond account\n getValidatorBondPDA(\n voteAccount: PublicKey,\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Build initialize instruction\n async buildInitializeInstruction(props: InitializeProps): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\n const { authority, reserveAddress } = props\n\n return this.program.methods\n .initialize()\n .accountsStrict({\n globalState,\n authority,\n reserve: reserveAddress,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build register validator instruction\n async buildRegisterValidatorInstruction(\n props: RegisterValidatorProps,\n ): Promise<TransactionInstruction> {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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.getGlobalStatePDA()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondInit(collateralLamports, withdrawalAuthority ?? null)\n .accountsStrict({\n creator,\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n identity,\n voteAccount,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build top up collateral instruction\n buildTopUpCollateralInstruction(\n props: TopUpCollateralProps,\n ): Promise<TransactionInstruction> {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondTopUp(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n depositor: user,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(\n props: WithdrawCollateralProps,\n ): Promise<TransactionInstruction> {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondWithdraw(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n withdrawalAuthority: user,\n destination,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build withdraw compensation instruction\n async buildWithdrawCompensationInstruction(\n props: WithdrawCompensationProps,\n ): Promise<TransactionInstruction> {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.getGlobalStatePDA()\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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 .withdrawCompensation(amountLamports)\n .accountsStrict({\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build multiple withdraw compensation instructions\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ): Promise<TransactionInstruction[]> {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n // Get validator bond account state\n async getValidatorBondAccount(\n voteAccount: PublicKey,\n ): Promise<ValidatorBondAccount | null> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBondAccount.fetch(validatorBondAccountAddress)\n\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n lastWithdrawalEpoch: account.lastWithdrawalEpoch.toNumber(),\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // TODO\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n // Build set authority instruction\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\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 voteAccount - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(voteAccount: PublicKey): Promise<number> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\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 // Get global state state\n async getGlobalState(): Promise<{\n authority: string\n totalValidators: number\n totalWithdrawn: number\n reserveAddress: string\n } | null> {\n const [globalState] = this.getGlobalStatePDA()\n\n try {\n const account = await (\n this.program.account as any\n ).globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n } catch {\n return null\n }\n }\n\n // Get current epoch\n async getCurrentEpoch(): Promise<number> {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n // Helper methods for backward compatibility (can be removed if not needed)\n async initialize(reserveAddress: PublicKey, authority?: PublicKey): Promise<string> {\n const authorityPubkey = authority || this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ authority: authorityPubkey, reserveAddress })\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 ): Promise<string> {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ): Promise<string> {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const result = [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n\n return result\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.getValidatorBondPDA(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('bondInit')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('bondTopUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('withdrawCompensation')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('bondWithdraw')\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 // Helper method to get paginated history\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 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\nexport type ClientOptions = {\n /// Custom Program ID\n programId?: PublicKey\n /// Enable debugging\n debug?: boolean\n} & Record<string, any>\n"]}
1
+ {"version":3,"sources":["../src/common.ts","../src/helpers.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv","PublicKey"],"mappings":"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","file":"index.mjs","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\nexport const PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\nexport const DEV_PROGRAM_ID = new PublicKey('8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr')\n","const SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: 'mainnet-beta' | 'testnet' | 'devnet'): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","{\n \"address\": \"8vrqsFHnDdjMYMwahytRzmmYgRqCMmka8X6DJUXGQzWr\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Validator compensation program for boosting APR\"\n },\n \"instructions\": [\n {\n \"name\": \"bond_init\",\n \"docs\": [\n \"Register validator and fund initial collateral\"\n ],\n \"discriminator\": [\n 220,\n 108,\n 156,\n 81,\n 16,\n 185,\n 144,\n 157\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_account\",\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\": \"bond_top_up\",\n \"docs\": [\n \"Top up collateral for existing validator\"\n ],\n \"discriminator\": [\n 132,\n 225,\n 254,\n 187,\n 152,\n 162,\n 176,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"depositor\",\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\": \"bond_withdraw\",\n \"discriminator\": [\n 99,\n 64,\n 127,\n 178,\n 53,\n 117,\n 70,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"name\": \"initialize\",\n \"docs\": [\n \"Initialize the global state and reserve vault\"\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\": \"set_authority\",\n \"docs\": [\n \"Change the bond 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\": \"withdraw_compensation\",\n \"docs\": [\n \"Withdraw compensation from validator to reserve (oracle only)\"\n ],\n \"discriminator\": [\n 10,\n 228,\n 22,\n 213,\n 205,\n 117,\n 181,\n 75\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_account\",\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_account.vote_account\",\n \"account\": \"ValidatorBondAccount\"\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 \"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\": \"ValidatorBondAccount\",\n \"discriminator\": [\n 25,\n 67,\n 241,\n 227,\n 226,\n 104,\n 108,\n 73\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\": \"new_total\",\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\": \"remaining_collateral\",\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\": \"remaining_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_withdrawn\",\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 \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBondAccount\",\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\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_withdrawn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_withdrawal_epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}\n","import type { BN } from '@coral-xyz/anchor'\nimport type { PublicKey } from '@solana/web3.js'\n\nexport type Config = {\n rpcUrl: string\n}\n\nexport type ValidatorBondAccount = {\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 type { Wallet } from '@coral-xyz/anchor'\nimport type {\n Keypair,\n ParsedTransactionWithMeta,\n TransactionInstruction } from '@solana/web3.js'\nimport type { EpochHistoryItem, InitializeProps, RegisterValidatorProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBondAccount, WithdrawCollateralProps, WithdrawCompensationProps } from './types'\nimport type { Jbond } from './types/jbond'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport {\n Connection,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { DEV_PROGRAM_ID, PROGRAM_ID } from './common'\nimport { slotToEpoch } from './helpers'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet } from './utils/wallet'\n//\nexport enum BondClientEnv { DEV = 'dev', PROD = 'prod' }\n\nexport class JBondClient {\n connection: Connection\n program: Program<Jbond>\n provider: AnchorProvider\n readonly options: ClientOptions\n\n constructor(options: ClientOptions, wallet?: Wallet) {\n this.connection = new Connection(options.rpcUrl, 'confirmed')\n this.options = options\n\n // If keypair is provided, use it. Otherwise, create a dummy keypair\n // since we're only building instructions\n this.provider = new AnchorProvider(\n this.connection,\n // @ts-expect-error support anonymous\n wallet ?? { publicKey: PublicKey.default },\n AnchorProvider.defaultOptions())\n\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(options: ClientOptions, wallet?: Wallet): JBondClient {\n return new this(options, wallet)\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(options: ClientOptions, keypair: Keypair): JBondClient {\n return JBondClient.fromWallet(options, new NodeWallet(keypair))\n }\n\n /**\n * Get the current program ID.\n */\n get programId(): PublicKey {\n return this.options.programId ?? PROGRAM_ID\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n if (env === BondClientEnv.PROD) {\n return this.configure('programId', PROGRAM_ID)\n }\n return this.configure('programId', DEV_PROGRAM_ID)\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 // Get PDA for global state\n getGlobalStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Get PDA for validator bond account\n getValidatorBondPDA(\n voteAccount: PublicKey,\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n voteAccount.toBuffer(),\n ],\n this.options.programId ?? this.program.programId,\n )\n }\n\n // Build initialize instruction\n async buildInitializeInstruction(props: InitializeProps): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\n const { authority, reserveAddress } = props\n\n return this.program.methods\n .initialize()\n .accountsStrict({\n globalState,\n authority,\n reserve: reserveAddress,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build register validator instruction\n async buildRegisterValidatorInstruction(\n props: RegisterValidatorProps,\n ): Promise<TransactionInstruction> {\n const { creator, identity, voteAccount, initialCollateral, withdrawalAuthority } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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.getGlobalStatePDA()\n\n const collateralLamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondInit(collateralLamports, withdrawalAuthority ?? null)\n .accountsStrict({\n creator,\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n identity,\n voteAccount,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build top up collateral instruction\n buildTopUpCollateralInstruction(\n props: TopUpCollateralProps,\n ): Promise<TransactionInstruction> {\n const { user, voteAccount, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondTopUp(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n depositor: user,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n async buildWithdrawCollateralInstruction(\n props: WithdrawCollateralProps,\n ): Promise<TransactionInstruction> {\n const { withdrawalAuthority: user, voteAccount, destination, amount } = props\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n const amountLamports = new BN(amount * LAMPORTS_PER_SOL)\n\n return this.program.methods\n .bondWithdraw(amountLamports)\n .accountsStrict({\n validatorBondAccount: validatorBondAccountAddress,\n withdrawalAuthority: user,\n destination,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build withdraw compensation instruction\n async buildWithdrawCompensationInstruction(\n props: WithdrawCompensationProps,\n ): Promise<TransactionInstruction> {\n const { authority, voteAccount, amount } = props\n const [globalState] = this.getGlobalStatePDA()\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(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 .withdrawCompensation(amountLamports)\n .accountsStrict({\n globalState,\n validatorBondAccount: validatorBondAccountAddress,\n reserve: reserveAddress,\n authority,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n }\n\n // Build multiple withdraw compensation instructions\n buildWithdrawCompensationsInstructions(\n authority: PublicKey,\n withdrawals: Array<{ voteAccount: PublicKey, amount: number }>,\n ): Promise<TransactionInstruction[]> {\n return Promise.all(\n withdrawals.map(({ voteAccount, amount }) =>\n this.buildWithdrawCompensationInstruction({ authority, voteAccount, amount }),\n ),\n )\n }\n\n // Get validator bond account state\n async getValidatorBondAccount(\n voteAccount: PublicKey,\n ): Promise<ValidatorBondAccount | null> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\n\n try {\n const account = await (\n this.program.account as any\n ).validatorBondAccount.fetch(validatorBondAccountAddress)\n\n return {\n identity: account.identity.toString(),\n voteAccount: account.voteAccount.toString(),\n withdrawalAuthority: account.withdrawalAuthority ? account.withdrawalAuthority.toString() : null,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n lastWithdrawalEpoch: account.lastWithdrawalEpoch.toNumber(),\n isActive: account.isActive,\n createdAt: account.createdAt.toNumber() * 1000, // TODO\n bump: account.bump,\n }\n } catch {\n return null\n }\n }\n\n // Build set authority instruction\n async buildSetAuthorityInstruction(props: {\n authority: PublicKey\n newAuthority: PublicKey\n }): Promise<TransactionInstruction> {\n const [globalState] = this.getGlobalStatePDA()\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 voteAccount - The vote account public key\n * @returns The available collateral balance in SOL (excluding rent-exempt amount)\n */\n async getValidatorCollateralBalance(voteAccount: PublicKey): Promise<number> {\n const [validatorBondAccountAddress] = this.getValidatorBondPDA(voteAccount)\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 // Get global state state\n async getGlobalState(): Promise<{\n authority: string\n totalValidators: number\n totalWithdrawn: number\n reserveAddress: string\n } | null> {\n const [globalState] = this.getGlobalStatePDA()\n\n try {\n const account = await (\n this.program.account as any\n ).globalState.fetch(globalState)\n\n return {\n authority: account.authority.toString(),\n totalValidators: account.totalValidators,\n totalWithdrawn: account.totalWithdrawn.toNumber() / LAMPORTS_PER_SOL,\n reserveAddress: account.reserve.toString(),\n }\n } catch {\n return null\n }\n }\n\n // Get current epoch\n async getCurrentEpoch(): Promise<number> {\n const epochInfo = await this.connection.getEpochInfo()\n return epochInfo.epoch\n }\n\n // Helper methods for backward compatibility (can be removed if not needed)\n async initialize(reserveAddress: PublicKey, authority?: PublicKey): Promise<string> {\n const authorityPubkey = authority || this.provider.wallet.publicKey\n const ix = await this.buildInitializeInstruction({ authority: authorityPubkey, reserveAddress })\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 ): Promise<string> {\n const identityPubkey = identity ?? this.provider.wallet.publicKey\n const ix = await this.buildRegisterValidatorInstruction(\n { creator: identityPubkey, identity: identityPubkey, voteAccount, initialCollateral, withdrawalAuthority },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\n }\n\n async topUpCollateral(\n voteAccount: PublicKey,\n amount: number,\n validator?: PublicKey,\n ): Promise<string> {\n const userPubkey = validator ?? this.provider.wallet.publicKey\n const ix = await this.buildTopUpCollateralInstruction(\n { user: userPubkey, voteAccount, amount },\n )\n const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const tx = await this.provider.sendAndConfirm(\n new Transaction().add(ix),\n [],\n )\n return tx\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 const result = [...epochMap.values()].toSorted((a, b) => b.epoch - a.epoch)\n\n return result\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.getValidatorBondPDA(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('bondInit')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('bondTopUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('withdrawCompensation')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('bondWithdraw')\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 // Helper method to get paginated history\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 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\nexport type ClientOptions = {\n rpcUrl: string\n /// Custom Program ID\n programId?: PublicKey\n} & Record<string, any>\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jpool/bond-sdk",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "JBond SDK for interacting with the Solana program",
5
5
  "repository": {
6
6
  "type": "git",