@jpool/bond-sdk 0.9.0-next.1 → 0.9.0-next.3
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 +424 -416
- package/dist/index.d.ts +424 -416
- package/dist/index.js +28 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -11,6 +11,11 @@ var bs58__default = /*#__PURE__*/_interopDefault(bs58);
|
|
|
11
11
|
// src/client.ts
|
|
12
12
|
|
|
13
13
|
// src/constants.ts
|
|
14
|
+
var Seeds = /* @__PURE__ */ ((Seeds2) => {
|
|
15
|
+
Seeds2["GlobalState"] = "global_state";
|
|
16
|
+
Seeds2["ValidatorBond"] = "validator_bond";
|
|
17
|
+
return Seeds2;
|
|
18
|
+
})(Seeds || {});
|
|
14
19
|
var ENV_PROGRAM_ID = {
|
|
15
20
|
// [BondClientEnv.DEV]: new PublicKey('...'),
|
|
16
21
|
};
|
|
@@ -1080,14 +1085,14 @@ var JBondClient = class _JBondClient {
|
|
|
1080
1085
|
pda = {
|
|
1081
1086
|
globalState: () => {
|
|
1082
1087
|
return web3_js.PublicKey.findProgramAddressSync(
|
|
1083
|
-
[Buffer.from("global_state")],
|
|
1088
|
+
[Buffer.from("global_state" /* GlobalState */)],
|
|
1084
1089
|
this.programId
|
|
1085
1090
|
);
|
|
1086
1091
|
},
|
|
1087
1092
|
validatorBond: (vote) => {
|
|
1088
1093
|
return web3_js.PublicKey.findProgramAddressSync(
|
|
1089
1094
|
[
|
|
1090
|
-
Buffer.from("validator_bond"),
|
|
1095
|
+
Buffer.from("validator_bond" /* ValidatorBond */),
|
|
1091
1096
|
new web3_js.PublicKey(vote).toBuffer()
|
|
1092
1097
|
],
|
|
1093
1098
|
this.programId
|
|
@@ -1100,7 +1105,7 @@ var JBondClient = class _JBondClient {
|
|
|
1100
1105
|
*/
|
|
1101
1106
|
async initialize(props) {
|
|
1102
1107
|
const ix = await this.buildInitializeInstruction(props);
|
|
1103
|
-
return
|
|
1108
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1104
1109
|
}
|
|
1105
1110
|
/**
|
|
1106
1111
|
* Register a new validator
|
|
@@ -1108,7 +1113,7 @@ var JBondClient = class _JBondClient {
|
|
|
1108
1113
|
*/
|
|
1109
1114
|
async registerValidator(props) {
|
|
1110
1115
|
const ix = await this.buildRegisterValidatorInstruction(props);
|
|
1111
|
-
return
|
|
1116
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1112
1117
|
}
|
|
1113
1118
|
/**
|
|
1114
1119
|
* Top up collateral
|
|
@@ -1116,7 +1121,7 @@ var JBondClient = class _JBondClient {
|
|
|
1116
1121
|
*/
|
|
1117
1122
|
async topUpCollateral(props) {
|
|
1118
1123
|
const ix = await this.buildTopUpCollateralInstruction(props);
|
|
1119
|
-
return
|
|
1124
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1120
1125
|
}
|
|
1121
1126
|
/**
|
|
1122
1127
|
* Withdraw collateral
|
|
@@ -1126,7 +1131,7 @@ var JBondClient = class _JBondClient {
|
|
|
1126
1131
|
*/
|
|
1127
1132
|
async withdrawCollateral(props) {
|
|
1128
1133
|
const ix = await this.buildWithdrawCollateralInstruction(props);
|
|
1129
|
-
return
|
|
1134
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1130
1135
|
}
|
|
1131
1136
|
/**
|
|
1132
1137
|
* Claim compensation
|
|
@@ -1135,7 +1140,7 @@ var JBondClient = class _JBondClient {
|
|
|
1135
1140
|
*/
|
|
1136
1141
|
async claimCompensation(props) {
|
|
1137
1142
|
const ix = await this.buildClaimInstruction(props);
|
|
1138
|
-
return
|
|
1143
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1139
1144
|
}
|
|
1140
1145
|
/**
|
|
1141
1146
|
* Update global configuration for the program
|
|
@@ -1145,7 +1150,7 @@ var JBondClient = class _JBondClient {
|
|
|
1145
1150
|
*/
|
|
1146
1151
|
async configure(props) {
|
|
1147
1152
|
const ix = await this.buildConfigureInstruction(props);
|
|
1148
|
-
return
|
|
1153
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1149
1154
|
}
|
|
1150
1155
|
/**
|
|
1151
1156
|
* Set withdrawal authority for validator bond
|
|
@@ -1155,7 +1160,7 @@ var JBondClient = class _JBondClient {
|
|
|
1155
1160
|
*/
|
|
1156
1161
|
async setWithdrawAuthority(props) {
|
|
1157
1162
|
const ix = await this.buildSetWithdrawAuthorityInstruction(props);
|
|
1158
|
-
return
|
|
1163
|
+
return this.provider.sendAndConfirm?.(new web3_js.Transaction().add(ix));
|
|
1159
1164
|
}
|
|
1160
1165
|
/**
|
|
1161
1166
|
* Build initialize instruction
|
|
@@ -1163,7 +1168,7 @@ var JBondClient = class _JBondClient {
|
|
|
1163
1168
|
async buildInitializeInstruction(props) {
|
|
1164
1169
|
const [globalState] = this.pda.globalState();
|
|
1165
1170
|
const { reserve } = props;
|
|
1166
|
-
const authority = props.authority ?? this.provider.wallet
|
|
1171
|
+
const authority = props.authority ?? this.provider.wallet?.publicKey;
|
|
1167
1172
|
return this.program.methods.initialize().accountsPartial({
|
|
1168
1173
|
globalState,
|
|
1169
1174
|
authority,
|
|
@@ -1178,7 +1183,7 @@ var JBondClient = class _JBondClient {
|
|
|
1178
1183
|
const [globalState] = this.pda.globalState();
|
|
1179
1184
|
const [validatorBond] = this.pda.validatorBond(voteAccount);
|
|
1180
1185
|
const lamports = new anchor.BN(initialCollateral * web3_js.LAMPORTS_PER_SOL);
|
|
1181
|
-
const creator = props.creator ?? this.provider.wallet
|
|
1186
|
+
const creator = props.creator ?? this.provider.wallet?.publicKey;
|
|
1182
1187
|
return this.program.methods.register(lamports).accountsPartial({
|
|
1183
1188
|
creator,
|
|
1184
1189
|
globalState,
|
|
@@ -1194,7 +1199,7 @@ var JBondClient = class _JBondClient {
|
|
|
1194
1199
|
const { voteAccount, amount } = props;
|
|
1195
1200
|
const [validatorBond] = this.pda.validatorBond(voteAccount);
|
|
1196
1201
|
const lamports = new anchor.BN(amount * web3_js.LAMPORTS_PER_SOL);
|
|
1197
|
-
const payer = props.payer ?? this.provider.wallet
|
|
1202
|
+
const payer = props.payer ?? this.provider.wallet?.publicKey;
|
|
1198
1203
|
return this.program.methods.topUp(lamports).accountsPartial({
|
|
1199
1204
|
validatorBond,
|
|
1200
1205
|
payer
|
|
@@ -1207,8 +1212,8 @@ var JBondClient = class _JBondClient {
|
|
|
1207
1212
|
const { voteAccount, amount } = props;
|
|
1208
1213
|
const [validatorBond] = this.pda.validatorBond(voteAccount);
|
|
1209
1214
|
const lamports = new anchor.BN(amount * web3_js.LAMPORTS_PER_SOL);
|
|
1210
|
-
const withdrawalAuthority = props.withdrawalAuthority ?? this.provider.wallet
|
|
1211
|
-
const destination = props.destination ?? this.provider.wallet
|
|
1215
|
+
const withdrawalAuthority = props.withdrawalAuthority ?? this.provider.wallet?.publicKey;
|
|
1216
|
+
const destination = props.destination ?? this.provider.wallet?.publicKey;
|
|
1212
1217
|
return this.program.methods.withdraw(lamports).accountsPartial({
|
|
1213
1218
|
validatorBond,
|
|
1214
1219
|
withdrawalAuthority,
|
|
@@ -1223,7 +1228,7 @@ var JBondClient = class _JBondClient {
|
|
|
1223
1228
|
const [globalState] = this.pda.globalState();
|
|
1224
1229
|
const [validatorBond] = this.pda.validatorBond(props.voteAccount);
|
|
1225
1230
|
const lamports = new anchor.BN(props.amount * web3_js.LAMPORTS_PER_SOL);
|
|
1226
|
-
const authority = props.authority ?? this.provider.wallet
|
|
1231
|
+
const authority = props.authority ?? this.provider.wallet?.publicKey;
|
|
1227
1232
|
let reserve = props.reserve;
|
|
1228
1233
|
if (!reserve) {
|
|
1229
1234
|
const globalStateData = await this.getGlobalState();
|
|
@@ -1244,7 +1249,7 @@ var JBondClient = class _JBondClient {
|
|
|
1244
1249
|
*/
|
|
1245
1250
|
async buildConfigureInstruction(props) {
|
|
1246
1251
|
const [globalState] = this.pda.globalState();
|
|
1247
|
-
const authority = props.authority ?? this.provider.wallet
|
|
1252
|
+
const authority = props.authority ?? this.provider.wallet?.publicKey;
|
|
1248
1253
|
return this.program.methods.configure({
|
|
1249
1254
|
newAuthority: props.newAuthority ?? null,
|
|
1250
1255
|
newReserve: props.newReserve ?? null
|
|
@@ -1259,7 +1264,7 @@ var JBondClient = class _JBondClient {
|
|
|
1259
1264
|
async buildSetWithdrawAuthorityInstruction(props) {
|
|
1260
1265
|
const { voteAccount, newWithdrawAuthority } = props;
|
|
1261
1266
|
const [validatorBond] = this.pda.validatorBond(voteAccount);
|
|
1262
|
-
const identity = props.identity ?? this.provider.wallet
|
|
1267
|
+
const identity = props.identity ?? this.provider.wallet?.publicKey;
|
|
1263
1268
|
return this.program.methods.setWithdrawAuthority().accountsPartial({
|
|
1264
1269
|
validatorBond,
|
|
1265
1270
|
identity,
|
|
@@ -1412,7 +1417,11 @@ var JBondClient = class _JBondClient {
|
|
|
1412
1417
|
}
|
|
1413
1418
|
return allTxs;
|
|
1414
1419
|
}
|
|
1415
|
-
|
|
1420
|
+
/**
|
|
1421
|
+
* Decode instruction data to determine transaction type and amount
|
|
1422
|
+
* @param data
|
|
1423
|
+
* @private
|
|
1424
|
+
*/
|
|
1416
1425
|
decodeInstructionData(data) {
|
|
1417
1426
|
if (!data) {
|
|
1418
1427
|
return { type: null, amount: 0 };
|
|
@@ -1455,5 +1464,6 @@ exports.BondTransactionType = BondTransactionType;
|
|
|
1455
1464
|
exports.ENV_PROGRAM_ID = ENV_PROGRAM_ID;
|
|
1456
1465
|
exports.JBondClient = JBondClient;
|
|
1457
1466
|
exports.NodeWallet = NodeWallet;
|
|
1467
|
+
exports.Seeds = Seeds;
|
|
1458
1468
|
//# sourceMappingURL=index.js.map
|
|
1459
1469
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["BondTransactionType","BondClientEnv","Program","AnchorProvider","PublicKey","Transaction","BN","LAMPORTS_PER_SOL","SYSVAR_EPOCH_SCHEDULE_PUBKEY","bs58"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.1\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"configure\",\n \"docs\": [\n \"Updates the global program configuration, including authority and reserve fields.\",\n \"Allows changing the program's authority and updating the reserve account.\",\n \"\",\n \"# Arguments\",\n \"* `data` - Configuration data containing optional new authority and reserve keys.\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to update the global configuration.\"\n ],\n \"discriminator\": [\n 245,\n 7,\n 108,\n 117,\n 95,\n 196,\n 54,\n 217\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 \"args\": [\n {\n \"name\": \"data\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigureData\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_withdraw_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_withdraw_authority` - Optional new withdrawal authority key (None to restrict to\",\n \"identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the withdrawal authority.\"\n ],\n \"discriminator\": [\n 199,\n 146,\n 140,\n 67,\n 1,\n 90,\n 8,\n 222\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\",\n \"signer\": true\n },\n {\n \"name\": \"new_withdraw_authority\",\n \"optional\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator bond account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ConfigureData\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"new_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"new_reserve\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}\n","import type { PublicKey } from '@solana/web3.js'\nimport { BN } from '@coral-xyz/anchor'\n\nexport * from './jbond'\n\n// export type GlobalState = Awaited<ReturnType<Program<Jbond>['account']['globalState']['fetch']>>\n// export type ValidatorBond = Awaited<ReturnType<Program<Jbond>['account']['validatorBond']['fetch']>>\n\nexport type GlobalState = {\n authority: PublicKey\n reserve: PublicKey\n totalValidators: number\n totalCompensationAmount: BN\n bump: number\n}\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n creator: PublicKey\n withdrawalAuthority: PublicKey | null\n totalCompensationAmount: BN\n lastCompensationAmount: BN\n lastCompensationEpoch: BN\n isActive: boolean\n createdAt: BN\n bump: number\n}\n\nexport type InitializeProps = {\n authority?: PublicKey\n reserve: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n creator?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n amount: number\n voteAccount: PublicKey\n payer?: PublicKey\n}\n\nexport type WithdrawCollateralProps = {\n amount: number\n voteAccount: PublicKey\n destination?: PublicKey\n withdrawalAuthority?: PublicKey\n}\n\nexport type ClaimProps = {\n amount: number\n voteAccount: PublicKey\n reserve?: PublicKey\n authority?: PublicKey\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 ConfigureProps = {\n authority?: PublicKey\n newAuthority?: PublicKey\n newReserve?: PublicKey\n}\n\nexport type SetWithdrawAuthorityProps = {\n voteAccount: PublicKey\n newWithdrawAuthority?: PublicKey | null\n identity?: PublicKey\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type {\n ClaimProps, ConfigureProps, EpochHistoryItem, GlobalState, InitializeProps, Jbond, RegisterValidatorProps,\n SetWithdrawAuthorityProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBond, WithdrawCollateralProps,\n} from './types'\nimport { AnchorProvider, BN, Program } from '@coral-xyz/anchor'\nimport {\n Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey,\n PublicKeyInitData, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch, Wallet } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n // Optional custom program ID (defaults to the one in the IDL)\n programId?: PublicKey\n // Debug mode flag\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: AnchorProvider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n wallet ?? { publicKey: PublicKey.default } as Wallet,\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configureEnv('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configureEnv<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('global_state')],\n this.programId,\n )\n },\n validatorBond: (vote: PublicKeyInitData) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from('validator_bond'),\n new PublicKey(vote).toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Initialize the program\n * Default authority is the provider's wallet\n */\n async initialize(props: InitializeProps) {\n const ix = await this.buildInitializeInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Register a new validator\n * Default creator is the provider's wallet\n */\n async registerValidator(props: RegisterValidatorProps) {\n const ix = await this.buildRegisterValidatorInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Top up collateral\n * Default payer is the provider's wallet\n */\n async topUpCollateral(props: TopUpCollateralProps) {\n const ix = await this.buildTopUpCollateralInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Withdraw collateral\n * Default withdrawal authority is the provider's wallet\n * Default destination is the provider's wallet\n * @return Transaction signature\n */\n async withdrawCollateral(props: WithdrawCollateralProps) {\n const ix = await this.buildWithdrawCollateralInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Claim compensation\n * Default authority is the provider's wallet\n * @return Transaction signature\n */\n async claimCompensation(props: ClaimProps) {\n const ix = await this.buildClaimInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Update global configuration for the program\n * Default authority is the provider's wallet\n * Only the current authority can call this\n * @return Transaction signature\n */\n async configure(props: ConfigureProps) {\n const ix = await this.buildConfigureInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Set withdrawal authority for validator bond\n * Only the validator identity can call this\n * Default identity is the provider's wallet\n * @return Transaction signature\n */\n async setWithdrawAuthority(props: SetWithdrawAuthorityProps) {\n const ix = await this.buildSetWithdrawAuthorityInstruction(props)\n return await this.provider.sendAndConfirm(new Transaction().add(ix))\n }\n\n /**\n * Build initialize instruction\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { reserve } = props\n const authority = props.authority ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { identity, voteAccount, initialCollateral } = props\n\n const [globalState] = this.pda.globalState()\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n const creator = props.creator ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .register(lamports)\n .accountsPartial({\n creator,\n globalState,\n validatorBond,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n */\n async buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { voteAccount, amount } = props\n\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(amount * LAMPORTS_PER_SOL)\n const payer = props.payer ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .topUp(lamports)\n .accountsPartial({\n validatorBond,\n payer,\n })\n .instruction()\n }\n\n /**\n * Build withdraw collateral instruction\n */\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { voteAccount, amount } = props\n\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(amount * LAMPORTS_PER_SOL)\n const withdrawalAuthority = props.withdrawalAuthority ?? this.provider.wallet.publicKey\n const destination = props.destination ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .withdraw(lamports)\n .accountsPartial({\n validatorBond,\n withdrawalAuthority,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build claim compensation instruction\n */\n async buildClaimInstruction(props: ClaimProps) {\n const [globalState] = this.pda.globalState()\n const [validatorBond] = this.pda.validatorBond(props.voteAccount)\n const lamports = new BN(props.amount * LAMPORTS_PER_SOL)\n const authority = props.authority ?? this.provider.wallet.publicKey\n\n // If reserve is not provided, fetch it from global state\n let reserve = props.reserve\n if (!reserve) {\n const globalStateData = await this.getGlobalState()\n reserve = globalStateData.reserve\n if (!reserve) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n }\n\n return this.program.methods\n .claim(lamports)\n .accountsPartial({\n globalState,\n validatorBond,\n reserve,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build configure instruction\n */\n async buildConfigureInstruction(props: ConfigureProps) {\n const [globalState] = this.pda.globalState()\n const authority = props.authority ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .configure({\n newAuthority: props.newAuthority ?? null,\n newReserve: props.newReserve ?? null,\n })\n .accountsStrict({\n globalState,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build set withdraw authority instruction\n */\n async buildSetWithdrawAuthorityInstruction(props: SetWithdrawAuthorityProps) {\n const { voteAccount, newWithdrawAuthority } = props\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const identity = props.identity ?? this.provider.wallet.publicKey\n\n return this.program.methods\n .setWithdrawAuthority()\n .accountsPartial({\n validatorBond,\n identity,\n newWithdrawAuthority: newWithdrawAuthority ?? null,\n })\n .instruction()\n }\n\n /**\n * Fetch global state or throw if not found\n */\n async getGlobalState(): Promise<GlobalState> {\n const [globalState] = this.pda.globalState()\n return await this.program.account.globalState.fetch(globalState)\n }\n\n /**\n * Fetch validator bond data or null if not found\n * @param vote\n */\n async getValidatorBond(vote: PublicKeyInitData): Promise<ValidatorBond | null> {\n const [address] = this.pda.validatorBond(new PublicKey(vote))\n return await this.program.account.validatorBond.fetchNullable(address)\n }\n\n /**\n * Get validator bond account balance (in SOL)\n * @param vote - Vote account public key\n * @return Balance in SOL\n */\n async getValidatorBondBalance(vote: PublicKeyInitData) {\n const [address] = this.pda.validatorBond(new PublicKey(vote))\n const accountInfo = await this.connection.getAccountInfo(address)\n if (!accountInfo) {\n return 0\n }\n const { data, lamports } = accountInfo\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(data.length)\n const availableBalance = Math.max(0, lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get transaction history for a specific validator bond account\n */\n async getHistory(\n vote: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const cluster = options?.cluster || 'mainnet-beta'\n\n const [validatorBondAccount] = this.pda.validatorBond(vote)\n\n const signatures = await this.fetchSignaturesForValidator(validatorBondAccount, {\n limit: options?.limit,\n before: options?.before,\n until: options?.until,\n })\n\n if (signatures.length === 0) { return [] }\n\n const signatureStrings = signatures.map(s => s.signature)\n\n const parsedTxs = await this.fetchParsedTransactions(signatureStrings)\n\n const txBySig = new Map<string, ParsedTransactionWithMeta | null>()\n\n for (let i = 0; i < signatureStrings.length; i++) {\n const requestedSig = signatureStrings[i]\n const tx = parsedTxs[i] ?? null\n\n if (tx && tx.transaction && Array.isArray(tx.transaction.signatures) && tx.transaction.signatures[0]) {\n const txSig = tx.transaction.signatures[0]\n if (txSig !== requestedSig) {\n const found = parsedTxs.find(t => t && t.transaction && t.transaction.signatures && t.transaction.signatures[0] === requestedSig) ?? null\n txBySig.set(requestedSig, found)\n continue\n }\n }\n\n txBySig.set(requestedSig, tx)\n }\n\n const history: TransactionHistoryItem[] = []\n\n for (const sigInfo of signatures) {\n const sig = sigInfo.signature\n const tx = txBySig.get(sig) ?? null\n\n if (!tx || !tx.meta || tx.meta.err !== null) { continue }\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)) { continue }\n\n // compare program IDs\n if (!instruction.programId.equals(this.options.programId ?? this.program.programId)) { continue }\n if ((instruction as any).parsed) { continue }\n\n const { type, amount } = this.decodeInstructionData((instruction as any).data)\n\n if (!type || amount <= 0) { continue }\n\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n const accountIndex = tx.transaction.message.accountKeys.findIndex(k => k.pubkey.equals(validatorBondAccount))\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 } catch (error) {\n console.error(`Error processing transaction ${sigInfo.signature}:`, error)\n }\n }\n\n // sort by slot descending\n return history.sort((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n\n private async fetchSignaturesForValidator(\n validatorBondAccount: PublicKey,\n options?: { limit?: number, before?: string, until?: string },\n ) {\n const sigs = await this.connection.getSignaturesForAddress(\n validatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )\n\n // keep only successful signatures\n return sigs.filter(s => !s.err)\n }\n\n // Fetch parsed transactions in batches to avoid rate limits\n private async fetchParsedTransactions(\n signatureStrings: string[],\n batchSize = 100,\n ): Promise<(ParsedTransactionWithMeta | null)[]> {\n const allTxs: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += batchSize) {\n const batch = signatureStrings.slice(i, i + batchSize)\n const txs = await this.connection.getParsedTransactions(batch, {\n maxSupportedTransactionVersion: 0,\n })\n allTxs.push(...txs)\n }\n\n return allTxs\n }\n\n // Decode instruction data to determine transaction type and amount\n private decodeInstructionData(\n data: string | undefined,\n ): { type: BondTransactionType | null, amount: number } {\n if (!data) { return { type: null, amount: 0 } }\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length < 16) { return { type: null, amount: 0 } }\n\n const discriminator = dataBuffer.slice(0, 8)\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n const amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n return { type: BondTransactionType.Deposit, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n return { type: BondTransactionType.Deposit, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n return { type: BondTransactionType.Compensation, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n return { type: BondTransactionType.Withdrawal, amount }\n }\n\n return { type: null, amount: 0 }\n } catch (err) {\n console.warn('Failed to decode instruction data', err)\n return { type: null, amount: 0 }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/idl/jbond.json","../src/types/index.ts","../src/utils/wallet.ts","../src/utils/index.ts","../src/client.ts"],"names":["Seeds","BondTransactionType","BondClientEnv","Program","AnchorProvider","PublicKey","Transaction","BN","LAMPORTS_PER_SOL","SYSVAR_EPOCH_SCHEDULE_PUBKEY","bs58"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\nexport enum Seeds {\n GlobalState = 'global_state',\n ValidatorBond = 'validator_bond',\n}\n\n/**\n * Program IDs for different environments\n */\nexport const ENV_PROGRAM_ID: Record<string, PublicKey> = {\n // [BondClientEnv.DEV]: new PublicKey('...'),\n}\n","{\n \"address\": \"BondQ7KqZreTcW2UbeTNDcLCJQ3aXAtLn2Fm6ftaJDU\",\n \"metadata\": {\n \"name\": \"jbond\",\n \"version\": \"0.2.1\",\n \"spec\": \"0.1.0\",\n \"description\": \"Jpool Bond Program\"\n },\n \"instructions\": [\n {\n \"name\": \"claim\",\n \"docs\": [\n \"Claims compensation for a validator.\",\n \"Transfers funds from the validator's bond account to reserve.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount of compensation to claim (must be positive).\",\n \"\",\n \"# Errors\",\n \"Fails if the authority is invalid, if the validator is not active,\",\n \"if the amount is zero, or if there are insufficient funds.\"\n ],\n \"discriminator\": [\n 62,\n 198,\n 214,\n 193,\n 213,\n 159,\n 108,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority that can trigger claims\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"configure\",\n \"docs\": [\n \"Updates the global program configuration, including authority and reserve fields.\",\n \"Allows changing the program's authority and updating the reserve account.\",\n \"\",\n \"# Arguments\",\n \"* `data` - Configuration data containing optional new authority and reserve keys.\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to update the global configuration.\"\n ],\n \"discriminator\": [\n 245,\n 7,\n 108,\n 117,\n 95,\n 196,\n 54,\n 217\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 \"args\": [\n {\n \"name\": \"data\",\n \"type\": {\n \"defined\": {\n \"name\": \"ConfigureData\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"docs\": [\n \"Initializes the global state for the bonding program.\",\n \"Sets the authority and reserve account for managing validator bonds.\",\n \"\",\n \"# Errors\",\n \"Fails if the global state account is already initialized or if the payer lacks\",\n \"sufficient funds.\"\n ],\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"reserve\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"register\",\n \"docs\": [\n \"Registers a new validator with the bonding program.\",\n \"Sets up the validator's bond account and deposits initial collateral.\",\n \"\",\n \"# Arguments\",\n \"* `initial_collateral` - Amount of collateral to lock (must be positive).\",\n \"* `withdrawal_authority` - Optional key that can withdraw collateral later.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is already registered, if the vote account is invalid,\",\n \"or if the initial collateral transfer fails.\"\n ],\n \"discriminator\": [\n 211,\n 124,\n 67,\n 15,\n 211,\n 194,\n 178,\n 240\n ],\n \"accounts\": [\n {\n \"name\": \"global_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 115,\n 116,\n 97,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"vote_account\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\"\n },\n {\n \"name\": \"vote_account\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"The account creating the bond (pays for account creation and initial collateral)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_withdraw_authority\",\n \"docs\": [\n \"Sets a new withdrawal authority for a validator's bond account.\",\n \"Allows changing who can withdraw collateral in the future.\",\n \"\",\n \"# Arguments\",\n \"* `new_withdraw_authority` - Optional new withdrawal authority key (None to restrict to\",\n \"identity).\",\n \"\",\n \"# Errors\",\n \"Fails if the signer is not authorized to change the withdrawal authority.\"\n ],\n \"discriminator\": [\n 199,\n 146,\n 140,\n 67,\n 1,\n 90,\n 8,\n 222\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"identity\",\n \"signer\": true\n },\n {\n \"name\": \"new_withdraw_authority\",\n \"optional\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"top_up\",\n \"docs\": [\n \"Adds additional collateral to an existing validator's bond.\",\n \"Increases the collateral balance, enhancing the validator's stake.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to add.\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"or if the transfer of funds fails.\"\n ],\n \"discriminator\": [\n 236,\n 225,\n 96,\n 9,\n 60,\n 106,\n 77,\n 208\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws collateral from a validator's bond.\",\n \"Decreases the collateral balance, allowing the validator to reclaim funds.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to withdraw (must not exceed available balance).\",\n \"\",\n \"# Errors\",\n \"Fails if the validator is not active, if the amount is zero,\",\n \"if the withdrawal authority is invalid, or if the withdrawal would\",\n \"leave insufficient collateral.\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"validator_bond\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 108,\n 105,\n 100,\n 97,\n 116,\n 111,\n 114,\n 95,\n 98,\n 111,\n 110,\n 100\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"validator_bond.vote_account\",\n \"account\": \"ValidatorBond\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawal_authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"epoch_schedule\",\n \"address\": \"SysvarEpochSchedu1e111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalState\",\n \"discriminator\": [\n 163,\n 46,\n 74,\n 168,\n 216,\n 123,\n 133,\n 98\n ]\n },\n {\n \"name\": \"ValidatorBond\",\n \"discriminator\": [\n 82,\n 127,\n 243,\n 208,\n 195,\n 42,\n 80,\n 35\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"discriminator\": [\n 189,\n 137,\n 204,\n 58,\n 135,\n 182,\n 19,\n 176\n ]\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"discriminator\": [\n 51,\n 224,\n 133,\n 106,\n 74,\n 173,\n 72,\n 82\n ]\n },\n {\n \"name\": \"CompensationClaimed\",\n \"discriminator\": [\n 36,\n 159,\n 41,\n 178,\n 104,\n 135,\n 220,\n 32\n ]\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"discriminator\": [\n 20,\n 20,\n 190,\n 191,\n 53,\n 174,\n 95,\n 72\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidVoteAccount\",\n \"msg\": \"Invalid vote account\"\n },\n {\n \"code\": 6001,\n \"name\": \"IdentityMismatch\",\n \"msg\": \"Identity does not match vote account\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientCollateral\",\n \"msg\": \"Insufficient collateral amount\"\n },\n {\n \"code\": 6003,\n \"name\": \"TargetAprTooLow\",\n \"msg\": \"Target APR is below minimum threshold\"\n },\n {\n \"code\": 6004,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math overflow\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n },\n {\n \"code\": 6006,\n \"name\": \"ValidatorNotActive\",\n \"msg\": \"Validator bond account is not active\"\n },\n {\n \"code\": 6007,\n \"name\": \"ValidatorAlreadyRegistered\",\n \"msg\": \"Validator already registered\"\n },\n {\n \"code\": 6008,\n \"name\": \"Unauthorized\",\n \"msg\": \"Unauthorized\"\n },\n {\n \"code\": 6009,\n \"name\": \"WithdrawalLockedNearEpochEnd\",\n \"msg\": \"Withdrawals are locked near the end of the epoch.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CollateralToppedUp\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CollateralWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompensationClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"validator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"post_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ConfigureData\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"new_authority\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"new_reserve\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"GlobalState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority allowed to manage the program\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve\",\n \"docs\": [\n \"The reserve vault holding SOL for bonding and compensation\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_validators\",\n \"docs\": [\n \"Total number of registered validators\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation amount paid out\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorBond\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"docs\": [\n \"The validator identity pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"docs\": [\n \"The validator vote account pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator of the validator bond account\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"withdrawal_authority\",\n \"docs\": [\n \"Authority allowed to withdraw funds (if None, only identity can withdraw)\"\n ],\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"total_compensation_amount\",\n \"docs\": [\n \"Total compensation claimed for the validator\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_amount\",\n \"docs\": [\n \"Last compensation amount claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_compensation_epoch\",\n \"docs\": [\n \"Last epoch when compensation was claimed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Timestamp when the bond account was created\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"is_active\",\n \"docs\": [\n \"Whether the validator is currently active\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump for the PDA\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ValidatorRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"identity\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vote_account\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initial_collateral\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import type { PublicKey } from '@solana/web3.js'\nimport { BN } from '@coral-xyz/anchor'\n\nexport * from './jbond'\n\n// export type GlobalState = Awaited<ReturnType<Program<Jbond>['account']['globalState']['fetch']>>\n// export type ValidatorBond = Awaited<ReturnType<Program<Jbond>['account']['validatorBond']['fetch']>>\n\nexport type GlobalState = {\n authority: PublicKey\n reserve: PublicKey\n totalValidators: number\n totalCompensationAmount: BN\n bump: number\n}\n\nexport type ValidatorBond = {\n identity: PublicKey\n voteAccount: PublicKey\n creator: PublicKey\n withdrawalAuthority: PublicKey | null\n totalCompensationAmount: BN\n lastCompensationAmount: BN\n lastCompensationEpoch: BN\n isActive: boolean\n createdAt: BN\n bump: number\n}\n\nexport type InitializeProps = {\n authority?: PublicKey\n reserve: PublicKey\n}\n\nexport type RegisterValidatorProps = {\n identity: PublicKey\n voteAccount: PublicKey\n initialCollateral: number\n creator?: PublicKey\n}\n\nexport type TopUpCollateralProps = {\n amount: number\n voteAccount: PublicKey\n payer?: PublicKey\n}\n\nexport type WithdrawCollateralProps = {\n amount: number\n voteAccount: PublicKey\n destination?: PublicKey\n withdrawalAuthority?: PublicKey\n}\n\nexport type ClaimProps = {\n amount: number\n voteAccount: PublicKey\n reserve?: PublicKey\n authority?: PublicKey\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 ConfigureProps = {\n authority?: PublicKey\n newAuthority?: PublicKey\n newReserve?: PublicKey\n}\n\nexport type SetWithdrawAuthorityProps = {\n voteAccount: PublicKey\n newWithdrawAuthority?: PublicKey | null\n identity?: PublicKey\n}\n\nexport type EpochHistoryItem = {\n epoch: number\n deposits: number\n withdrawals: number\n balanceChange: number\n signatures: string[]\n}\n\nexport type TransactionHistoryItem = {\n signature: string\n slot: number\n epoch: number\n type: BondTransactionType\n amount: number\n beforeBalance?: number\n afterBalance?: number\n}\n\nexport enum BondTransactionType {\n Deposit = 'deposit',\n Withdrawal = 'withdrawal',\n Compensation = 'compensation',\n}\n","import type { Keypair, PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js'\n\nfunction isVersionedTransaction(tx: Transaction | VersionedTransaction): tx is VersionedTransaction {\n return 'version' in tx\n}\n\nexport type Wallet = {\n publicKey: PublicKey\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>\n signTransaction: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>\n signAllTransactions: <T extends Transaction | VersionedTransaction>(txs: T[]) => Promise<T[]>\n}\n\nexport class NodeWallet implements Wallet {\n constructor(readonly payer: Keypair) {}\n\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (isVersionedTransaction(tx)) {\n tx.sign([this.payer])\n } else {\n tx.partialSign(this.payer)\n }\n\n return tx\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n return txs.map((t) => {\n if (isVersionedTransaction(t)) {\n t.sign([this.payer])\n } else {\n t.partialSign(this.payer)\n }\n return t\n })\n }\n\n get publicKey(): PublicKey {\n return this.payer.publicKey\n }\n}\n","import { Cluster } from '@solana/web3.js'\n\nexport * from './wallet'\n\nconst SLOTS_PER_EPOCH_MAINNET = 432_000\nconst SLOTS_PER_EPOCH_DEVNET = 400_000\n\nexport function slotToEpoch(slot: number, cluster: Cluster): number {\n const slotsPerEpoch = cluster === 'mainnet-beta' ? SLOTS_PER_EPOCH_MAINNET : SLOTS_PER_EPOCH_DEVNET\n return Math.floor(slot / slotsPerEpoch)\n}\n","import type {\n ClaimProps, ConfigureProps, GlobalState, InitializeProps, Jbond, RegisterValidatorProps,\n SetWithdrawAuthorityProps, TopUpCollateralProps, TransactionHistoryItem, ValidatorBond, WithdrawCollateralProps,\n} from './types'\nimport { AnchorProvider, BN, Program, Provider } from '@coral-xyz/anchor'\nimport {\n Connection, Keypair, LAMPORTS_PER_SOL, ParsedTransactionWithMeta, PublicKey,\n PublicKeyInitData, SYSVAR_EPOCH_SCHEDULE_PUBKEY, Transaction,\n} from '@solana/web3.js'\nimport bs58 from 'bs58'\nimport { ENV_PROGRAM_ID, Seeds } from './constants'\nimport IDL from './idl/jbond.json'\nimport { BondTransactionType } from './types'\nimport { NodeWallet, slotToEpoch, Wallet } from './utils'\n\n/**\n * Enum for different client environments.\n */\nexport enum BondClientEnv { DEV = 'dev', STAGE = 'stage', PROD = 'prod' }\n\n/**\n * Options for configuring the JBondClient.\n */\nexport type ClientOptions = {\n debug?: boolean\n} & Record<string, any>\n\nexport class JBondClient {\n readonly options: ClientOptions\n readonly program: Program<Jbond>\n\n constructor(readonly provider: Provider, options?: ClientOptions) {\n this.options = options ?? {}\n this.program = new Program(IDL, this.provider)\n }\n\n /**\n * Creates an instance of `JBondClient` using a provided connection and wallet.\n */\n static fromWallet(connection: Connection, wallet?: Wallet, options?: ClientOptions) {\n return new this(\n new AnchorProvider(\n connection,\n wallet ?? { publicKey: PublicKey.default } as Wallet,\n AnchorProvider.defaultOptions(),\n ),\n options,\n )\n }\n\n /**\n * Creates an instance of `JBondClient` using the provided connection and keypair.\n */\n static fromKeypair(connection: Connection, keypair: Keypair, options?: ClientOptions) {\n return JBondClient.fromWallet(connection, new NodeWallet(keypair), options)\n }\n\n /**\n * Get the current program ID.\n */\n get programId() {\n return this.options.programId ?? this.program.programId\n }\n\n /**\n * Get the current connection.\n */\n private get connection() {\n return this.provider.connection\n }\n\n /**\n * Set the environment.\n */\n env(env: BondClientEnv) {\n return this.configureEnv('programId', ENV_PROGRAM_ID[env])\n }\n\n /**\n * Configure a specific option.\n */\n configureEnv<K extends keyof ClientOptions>(key: K, val: ClientOptions[K]) {\n this.options[key] = val\n return this\n }\n\n /**\n * Program Derived Addresses (PDAs)\n */\n pda = {\n globalState: () => {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(Seeds.GlobalState)],\n this.programId,\n )\n },\n validatorBond: (vote: PublicKeyInitData) => {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(Seeds.ValidatorBond),\n new PublicKey(vote).toBuffer(),\n ],\n this.programId,\n )\n },\n }\n\n /**\n * Initialize the program\n * Default authority is the provider's wallet\n */\n async initialize(props: InitializeProps) {\n const ix = await this.buildInitializeInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Register a new validator\n * Default creator is the provider's wallet\n */\n async registerValidator(props: RegisterValidatorProps) {\n const ix = await this.buildRegisterValidatorInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Top up collateral\n * Default payer is the provider's wallet\n */\n async topUpCollateral(props: TopUpCollateralProps) {\n const ix = await this.buildTopUpCollateralInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Withdraw collateral\n * Default withdrawal authority is the provider's wallet\n * Default destination is the provider's wallet\n * @return Transaction signature\n */\n async withdrawCollateral(props: WithdrawCollateralProps) {\n const ix = await this.buildWithdrawCollateralInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Claim compensation\n * Default authority is the provider's wallet\n * @return Transaction signature\n */\n async claimCompensation(props: ClaimProps) {\n const ix = await this.buildClaimInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Update global configuration for the program\n * Default authority is the provider's wallet\n * Only the current authority can call this\n * @return Transaction signature\n */\n async configure(props: ConfigureProps) {\n const ix = await this.buildConfigureInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Set withdrawal authority for validator bond\n * Only the validator identity can call this\n * Default identity is the provider's wallet\n * @return Transaction signature\n */\n async setWithdrawAuthority(props: SetWithdrawAuthorityProps) {\n const ix = await this.buildSetWithdrawAuthorityInstruction(props)\n return this.provider.sendAndConfirm?.(new Transaction().add(ix))\n }\n\n /**\n * Build initialize instruction\n */\n async buildInitializeInstruction(props: InitializeProps) {\n const [globalState] = this.pda.globalState()\n const { reserve } = props\n const authority = props.authority ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .initialize()\n .accountsPartial({\n globalState,\n authority,\n reserve,\n })\n .instruction()\n }\n\n /**\n * Build register validator instruction\n */\n async buildRegisterValidatorInstruction(props: RegisterValidatorProps) {\n const { identity, voteAccount, initialCollateral } = props\n\n const [globalState] = this.pda.globalState()\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(initialCollateral * LAMPORTS_PER_SOL)\n const creator = props.creator ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .register(lamports)\n .accountsPartial({\n creator,\n globalState,\n validatorBond,\n identity,\n voteAccount,\n })\n .instruction()\n }\n\n /**\n * Build top up collateral instruction\n */\n async buildTopUpCollateralInstruction(props: TopUpCollateralProps) {\n const { voteAccount, amount } = props\n\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(amount * LAMPORTS_PER_SOL)\n const payer = props.payer ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .topUp(lamports)\n .accountsPartial({\n validatorBond,\n payer,\n })\n .instruction()\n }\n\n /**\n * Build withdraw collateral instruction\n */\n async buildWithdrawCollateralInstruction(props: WithdrawCollateralProps) {\n const { voteAccount, amount } = props\n\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const lamports = new BN(amount * LAMPORTS_PER_SOL)\n const withdrawalAuthority = props.withdrawalAuthority ?? this.provider.wallet?.publicKey\n const destination = props.destination ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .withdraw(lamports)\n .accountsPartial({\n validatorBond,\n withdrawalAuthority,\n epochSchedule: SYSVAR_EPOCH_SCHEDULE_PUBKEY,\n destination,\n })\n .instruction()\n }\n\n /**\n * Build claim compensation instruction\n */\n async buildClaimInstruction(props: ClaimProps) {\n const [globalState] = this.pda.globalState()\n const [validatorBond] = this.pda.validatorBond(props.voteAccount)\n const lamports = new BN(props.amount * LAMPORTS_PER_SOL)\n const authority = props.authority ?? this.provider.wallet?.publicKey\n\n // If reserve is not provided, fetch it from global state\n let reserve = props.reserve\n if (!reserve) {\n const globalStateData = await this.getGlobalState()\n reserve = globalStateData.reserve\n if (!reserve) {\n throw new Error('Reserve address is not set in the global state. The program might not be initialized yet.')\n }\n }\n\n return this.program.methods\n .claim(lamports)\n .accountsPartial({\n globalState,\n validatorBond,\n reserve,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build configure instruction\n */\n async buildConfigureInstruction(props: ConfigureProps) {\n const [globalState] = this.pda.globalState()\n const authority = props.authority ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .configure({\n newAuthority: props.newAuthority ?? null,\n newReserve: props.newReserve ?? null,\n })\n .accountsStrict({\n globalState,\n authority,\n })\n .instruction()\n }\n\n /**\n * Build set withdraw authority instruction\n */\n async buildSetWithdrawAuthorityInstruction(props: SetWithdrawAuthorityProps) {\n const { voteAccount, newWithdrawAuthority } = props\n const [validatorBond] = this.pda.validatorBond(voteAccount)\n const identity = props.identity ?? this.provider.wallet?.publicKey\n\n return this.program.methods\n .setWithdrawAuthority()\n .accountsPartial({\n validatorBond,\n identity,\n newWithdrawAuthority: newWithdrawAuthority ?? null,\n })\n .instruction()\n }\n\n /**\n * Fetch global state or throw if not found\n */\n async getGlobalState(): Promise<GlobalState> {\n const [globalState] = this.pda.globalState()\n return await this.program.account.globalState.fetch(globalState)\n }\n\n /**\n * Fetch validator bond data or null if not found\n * @param vote\n */\n async getValidatorBond(vote: PublicKeyInitData): Promise<ValidatorBond | null> {\n const [address] = this.pda.validatorBond(new PublicKey(vote))\n return await this.program.account.validatorBond.fetchNullable(address)\n }\n\n /**\n * Get validator bond account balance (in SOL)\n * @param vote - Vote account public key\n * @return Balance in SOL\n */\n async getValidatorBondBalance(vote: PublicKeyInitData) {\n const [address] = this.pda.validatorBond(new PublicKey(vote))\n const accountInfo = await this.connection.getAccountInfo(address)\n if (!accountInfo) {\n return 0\n }\n const { data, lamports } = accountInfo\n const rentExempt = await this.connection.getMinimumBalanceForRentExemption(data.length)\n const availableBalance = Math.max(0, lamports - rentExempt)\n return availableBalance / LAMPORTS_PER_SOL\n }\n\n /**\n * Get transaction history for a specific validator bond account\n */\n async getHistory(\n vote: PublicKey,\n options?: {\n cluster?: 'mainnet-beta' | 'testnet' | 'devnet'\n limit?: number\n before?: string\n until?: string\n },\n ): Promise<TransactionHistoryItem[]> {\n const cluster = options?.cluster || 'mainnet-beta'\n\n const [validatorBondAccount] = this.pda.validatorBond(vote)\n\n const signatures = await this.fetchSignaturesForValidator(validatorBondAccount, {\n limit: options?.limit,\n before: options?.before,\n until: options?.until,\n })\n\n if (signatures.length === 0) {\n return []\n }\n\n const signatureStrings = signatures.map(s => s.signature)\n\n const parsedTxs = await this.fetchParsedTransactions(signatureStrings)\n\n const txBySig = new Map<string, ParsedTransactionWithMeta | null>()\n\n for (let i = 0; i < signatureStrings.length; i++) {\n const requestedSig = signatureStrings[i]\n const tx = parsedTxs[i] ?? null\n\n if (tx && tx.transaction && Array.isArray(tx.transaction.signatures) && tx.transaction.signatures[0]) {\n const txSig = tx.transaction.signatures[0]\n if (txSig !== requestedSig) {\n const found = parsedTxs.find(t => t && t.transaction && t.transaction.signatures && t.transaction.signatures[0] === requestedSig) ?? null\n txBySig.set(requestedSig, found)\n continue\n }\n }\n\n txBySig.set(requestedSig, tx)\n }\n\n const history: TransactionHistoryItem[] = []\n\n for (const sigInfo of signatures) {\n const sig = sigInfo.signature\n const tx = txBySig.get(sig) ?? null\n\n if (!tx || !tx.meta || tx.meta.err !== null) {\n continue\n }\n\n try {\n const slot = tx.slot ?? 0\n const instructions = tx.transaction.message.instructions\n\n for (const instruction of instructions) {\n if (!('programId' in instruction)) {\n continue\n }\n\n // compare program IDs\n if (!instruction.programId.equals(this.options.programId ?? this.program.programId)) {\n continue\n }\n if ((instruction as any).parsed) {\n continue\n }\n\n const { type, amount } = this.decodeInstructionData((instruction as any).data)\n\n if (!type || amount <= 0) {\n continue\n }\n\n let beforeBalance: number | undefined\n let afterBalance: number | undefined\n\n const accountIndex = tx.transaction.message.accountKeys.findIndex(k => k.pubkey.equals(validatorBondAccount))\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 } catch (error) {\n console.error(`Error processing transaction ${sigInfo.signature}:`, error)\n }\n }\n\n // sort by slot descending\n return history.sort((a, b) => b.slot - a.slot)\n }\n\n /**\n * Get instruction discriminator from IDL\n * @param instructionName\n * @private\n */\n private getInstructionDiscriminator(instructionName: string): Uint8Array {\n const instruction = this.program.idl.instructions.find(ix => ix.name === instructionName)\n if (!instruction) {\n throw new Error(`Instruction ${instructionName} not found in IDL`)\n }\n\n if (!instruction.discriminator || !Array.isArray(instruction.discriminator)) {\n throw new Error(`Discriminator not found for instruction ${instructionName}`)\n }\n\n return new Uint8Array(instruction.discriminator)\n }\n\n private async fetchSignaturesForValidator(\n validatorBondAccount: PublicKey,\n options?: { limit?: number, before?: string, until?: string },\n ) {\n const sigs = await this.connection.getSignaturesForAddress(\n validatorBondAccount,\n {\n limit: options?.limit || 1000,\n before: options?.before,\n until: options?.until,\n },\n )\n\n // keep only successful signatures\n return sigs.filter(s => !s.err)\n }\n\n // Fetch parsed transactions in batches to avoid rate limits\n private async fetchParsedTransactions(\n signatureStrings: string[],\n batchSize = 100,\n ): Promise<(ParsedTransactionWithMeta | null)[]> {\n const allTxs: (ParsedTransactionWithMeta | null)[] = []\n\n for (let i = 0; i < signatureStrings.length; i += batchSize) {\n const batch = signatureStrings.slice(i, i + batchSize)\n const txs = await this.connection.getParsedTransactions(batch, {\n maxSupportedTransactionVersion: 0,\n })\n allTxs.push(...txs)\n }\n\n return allTxs\n }\n\n /**\n * Decode instruction data to determine transaction type and amount\n * @param data\n * @private\n */\n private decodeInstructionData(\n data: string | undefined,\n ): { type: BondTransactionType | null, amount: number } {\n if (!data) {\n return { type: null, amount: 0 }\n }\n\n try {\n const dataBuffer = bs58.decode(data)\n\n if (dataBuffer.length < 16) {\n return { type: null, amount: 0 }\n }\n\n const discriminator = dataBuffer.slice(0, 8)\n const amountBytes = dataBuffer.slice(8, 16)\n const amountBN = new BN(amountBytes, 'le')\n const amount = amountBN.toNumber() / LAMPORTS_PER_SOL\n\n const bondInitDiscriminator = this.getInstructionDiscriminator('register')\n const bondTopUpDiscriminator = this.getInstructionDiscriminator('topUp')\n const withdrawCompensationDiscriminator = this.getInstructionDiscriminator('claim')\n const bondWithdrawDiscriminator = this.getInstructionDiscriminator('withdraw')\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondInitDiscriminator))) {\n return { type: BondTransactionType.Deposit, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondTopUpDiscriminator))) {\n return { type: BondTransactionType.Deposit, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(withdrawCompensationDiscriminator))) {\n return { type: BondTransactionType.Compensation, amount }\n }\n\n if (Buffer.from(discriminator).equals(Buffer.from(bondWithdrawDiscriminator))) {\n return { type: BondTransactionType.Withdrawal, amount }\n }\n\n return { type: null, amount: 0 }\n } catch (err) {\n console.warn('Failed to decode instruction data', err)\n return { type: null, amount: 0 }\n }\n }\n}\n"]}
|