flash-sdk 2.9.3 → 2.10.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.
@@ -8,11 +8,12 @@ import { OraclePrice } from "./OraclePrice";
8
8
  import { CustodyAccount } from "./CustodyAccount";
9
9
  import { Perpetuals } from "./idl/perpetuals";
10
10
  import { PerpComposability } from "./idl/perp_composability";
11
+ import { FbnftRewards } from "./idl/fbnft_rewards";
12
+ import { RewardDistribution } from "./idl/reward_distribution";
11
13
  import { SendTransactionOpts } from "./utils/rpc";
12
14
  import { MarketConfig, PoolConfig, Token } from "./PoolConfig";
13
15
  import { max } from "bn.js";
14
16
  import { MarketAccount } from "./MarketAccount";
15
- import { FbnftRewards } from "./idl/fbnft_rewards";
16
17
  export type PerpClientOptions = {
17
18
  postSendTxCallback?: ({ txid }: {
18
19
  txid: string;
@@ -25,6 +26,7 @@ export declare class PerpetualsClient {
25
26
  program: Program<Perpetuals>;
26
27
  programPerpComposability: Program<PerpComposability>;
27
28
  programFbnftReward: Program<FbnftRewards>;
29
+ programRewardDistribution: Program<RewardDistribution>;
28
30
  admin: PublicKey;
29
31
  programId: PublicKey;
30
32
  composabilityProgramId: PublicKey;
@@ -49,7 +51,7 @@ export declare class PerpetualsClient {
49
51
  private prioritizationFee;
50
52
  private useExtOracleAccount;
51
53
  private txConfirmationCommitment;
52
- constructor(provider: AnchorProvider, programId: PublicKey, composabilityProgramId: PublicKey, fbNftRewardProgramId: PublicKey, opts: PerpClientOptions, useExtOracleAccount?: boolean);
54
+ constructor(provider: AnchorProvider, programId: PublicKey, composabilityProgramId: PublicKey, fbNftRewardProgramId: PublicKey, rewardDistributionProgramId: PublicKey, opts: PerpClientOptions, useExtOracleAccount?: boolean);
53
55
  setPrioritizationFee: (fee: number) => void;
54
56
  loadAddressLookupTable: (poolConfig: PoolConfig) => Promise<void>;
55
57
  findProgramAddress: (label: string, extraSeeds?: any) => {
@@ -2405,5 +2407,17 @@ export declare class PerpetualsClient {
2405
2407
  instructions: TransactionInstruction[];
2406
2408
  additionalSigners: Signer[];
2407
2409
  }>;
2410
+ initRewardDistribution: (rewardSymbol: string, poolConfig: PoolConfig) => Promise<{
2411
+ instructions: TransactionInstruction[];
2412
+ additionalSigners: Signer[];
2413
+ }>;
2414
+ rewardDistribution: (counter: BN, owner: PublicKey, rewardAmount: BN, rewardSymbol: string, poolConfig: PoolConfig) => Promise<{
2415
+ instructions: TransactionInstruction[];
2416
+ additionalSigners: Signer[];
2417
+ }>;
2418
+ collectReward: (counter: BN, owner: PublicKey, rewardSymbol: string, poolConfig: PoolConfig, createUserATA?: boolean) => Promise<{
2419
+ instructions: TransactionInstruction[];
2420
+ additionalSigners: Signer[];
2421
+ }>;
2408
2422
  sendTransaction(ixs: TransactionInstruction[], opts?: SendTransactionOpts): Promise<string>;
2409
2423
  }
@@ -71,13 +71,14 @@ var OraclePrice_1 = require("./OraclePrice");
71
71
  var perpetuals_1 = require("./idl/perpetuals");
72
72
  var perp_composability_1 = require("./idl/perp_composability");
73
73
  var fbnft_rewards_1 = require("./idl/fbnft_rewards");
74
+ var reward_distribution_1 = require("./idl/reward_distribution");
74
75
  var rpc_1 = require("./utils/rpc");
75
76
  var utils_1 = require("./utils");
76
77
  var constants_1 = require("./constants");
77
78
  var bignumber_js_1 = __importDefault(require("bignumber.js"));
78
79
  var getNftAccounts_1 = require("./utils/getNftAccounts");
79
80
  var PerpetualsClient = (function () {
80
- function PerpetualsClient(provider, programId, composabilityProgramId, fbNftRewardProgramId, opts, useExtOracleAccount) {
81
+ function PerpetualsClient(provider, programId, composabilityProgramId, fbNftRewardProgramId, rewardDistributionProgramId, opts, useExtOracleAccount) {
81
82
  if (useExtOracleAccount === void 0) { useExtOracleAccount = false; }
82
83
  var _this = this;
83
84
  var _a;
@@ -4474,11 +4475,164 @@ var PerpetualsClient = (function () {
4474
4475
  }
4475
4476
  });
4476
4477
  }); };
4478
+ this.initRewardDistribution = function (rewardSymbol, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
4479
+ var publicKey, rewardMint, instructions, additionalSigners, fbNftProgramData, rewardVault, rewardTokenAccount, transferAuthority, initRewardVault, err_28;
4480
+ return __generator(this, function (_a) {
4481
+ switch (_a.label) {
4482
+ case 0:
4483
+ publicKey = this.provider.wallet.publicKey;
4484
+ rewardMint = poolConfig.getTokenFromSymbol(rewardSymbol).mintKey;
4485
+ instructions = [];
4486
+ additionalSigners = [];
4487
+ _a.label = 1;
4488
+ case 1:
4489
+ _a.trys.push([1, 3, , 4]);
4490
+ fbNftProgramData = web3_js_1.PublicKey.findProgramAddressSync([this.programRewardDistribution.programId.toBuffer()], new web3_js_1.PublicKey("BPFLoaderUpgradeab1e11111111111111111111111"))[0];
4491
+ rewardVault = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_vault")], this.programRewardDistribution.programId)[0];
4492
+ rewardTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_token_account")], this.programRewardDistribution.programId)[0];
4493
+ transferAuthority = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("transfer_authority")], this.programRewardDistribution.programId)[0];
4494
+ return [4, this.programRewardDistribution.methods
4495
+ .initRewardVault()
4496
+ .accounts({
4497
+ admin: publicKey,
4498
+ transferAuthority: transferAuthority,
4499
+ rewardVault: rewardVault,
4500
+ rewardMint: rewardMint,
4501
+ rewardTokenAccount: rewardTokenAccount,
4502
+ programData: fbNftProgramData,
4503
+ systemProgram: web3_js_1.SystemProgram.programId,
4504
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4505
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
4506
+ })
4507
+ .instruction()];
4508
+ case 2:
4509
+ initRewardVault = _a.sent();
4510
+ instructions.push(initRewardVault);
4511
+ return [3, 4];
4512
+ case 3:
4513
+ err_28 = _a.sent();
4514
+ console.log("rewardDistribution InitRewardVault error:: ", err_28);
4515
+ throw err_28;
4516
+ case 4: return [2, {
4517
+ instructions: __spreadArray([], instructions, true),
4518
+ additionalSigners: additionalSigners
4519
+ }];
4520
+ }
4521
+ });
4522
+ }); };
4523
+ this.rewardDistribution = function (counter, owner, rewardAmount, rewardSymbol, poolConfig) { return __awaiter(_this, void 0, void 0, function () {
4524
+ var publicKey, rewardCustodyMint, instructions, additionalSigners, fundingAccount, rewardVault, rewardTokenAccount, rewardRecord, distributeReward, err_29;
4525
+ return __generator(this, function (_a) {
4526
+ switch (_a.label) {
4527
+ case 0:
4528
+ publicKey = this.provider.wallet.publicKey;
4529
+ rewardCustodyMint = poolConfig.getTokenFromSymbol(rewardSymbol).mintKey;
4530
+ instructions = [];
4531
+ additionalSigners = [];
4532
+ _a.label = 1;
4533
+ case 1:
4534
+ _a.trys.push([1, 4, , 5]);
4535
+ return [4, (0, spl_token_1.getAssociatedTokenAddress)(rewardCustodyMint, publicKey)];
4536
+ case 2:
4537
+ fundingAccount = _a.sent();
4538
+ rewardVault = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_vault")], this.programRewardDistribution.programId)[0];
4539
+ rewardTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_token_account")], this.programRewardDistribution.programId)[0];
4540
+ rewardRecord = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_record"), owner.toBuffer(), rewardVault.toBuffer(), counter.toArrayLike(Buffer, 'le', 8)], this.programRewardDistribution.programId)[0];
4541
+ return [4, this.programRewardDistribution.methods
4542
+ .distributeRewards({
4543
+ rewardAmount: rewardAmount
4544
+ })
4545
+ .accounts({
4546
+ admin: publicKey,
4547
+ owner: owner,
4548
+ fundingAccount: fundingAccount,
4549
+ rewardVault: rewardVault,
4550
+ rewardTokenAccount: rewardTokenAccount,
4551
+ rewardRecord: rewardRecord,
4552
+ systemProgram: web3_js_1.SystemProgram.programId,
4553
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4554
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
4555
+ })
4556
+ .instruction()];
4557
+ case 3:
4558
+ distributeReward = _a.sent();
4559
+ instructions.push(distributeReward);
4560
+ return [3, 5];
4561
+ case 4:
4562
+ err_29 = _a.sent();
4563
+ console.log("rewardDistribution distributeReward error:: ", err_29);
4564
+ throw err_29;
4565
+ case 5: return [2, {
4566
+ instructions: __spreadArray([], instructions, true),
4567
+ additionalSigners: additionalSigners
4568
+ }];
4569
+ }
4570
+ });
4571
+ }); };
4572
+ this.collectReward = function (counter, owner, rewardSymbol, poolConfig, createUserATA) {
4573
+ if (createUserATA === void 0) { createUserATA = true; }
4574
+ return __awaiter(_this, void 0, void 0, function () {
4575
+ var publicKey, rewardCustodyMint, instructions, additionalSigners, receivingTokenAccount, _a, rewardVault, rewardTokenAccount, rewardRecord, transferAuthority, collectNftReward, err_30;
4576
+ return __generator(this, function (_b) {
4577
+ switch (_b.label) {
4578
+ case 0:
4579
+ publicKey = this.provider.wallet.publicKey;
4580
+ rewardCustodyMint = poolConfig.getTokenFromSymbol(rewardSymbol).mintKey;
4581
+ instructions = [];
4582
+ additionalSigners = [];
4583
+ _b.label = 1;
4584
+ case 1:
4585
+ _b.trys.push([1, 6, , 7]);
4586
+ return [4, (0, spl_token_1.getAssociatedTokenAddress)(rewardCustodyMint, publicKey)];
4587
+ case 2:
4588
+ receivingTokenAccount = _b.sent();
4589
+ _a = createUserATA;
4590
+ if (!_a) return [3, 4];
4591
+ return [4, (0, utils_1.checkIfAccountExists)(receivingTokenAccount, this.provider.connection)];
4592
+ case 3:
4593
+ _a = !(_b.sent());
4594
+ _b.label = 4;
4595
+ case 4:
4596
+ if (_a) {
4597
+ instructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(publicKey, receivingTokenAccount, publicKey, rewardCustodyMint));
4598
+ }
4599
+ rewardVault = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_vault")], this.programRewardDistribution.programId)[0];
4600
+ rewardTokenAccount = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_token_account")], this.programRewardDistribution.programId)[0];
4601
+ rewardRecord = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("reward_record"), owner.toBuffer(), rewardVault.toBuffer(), counter.toArrayLike(Buffer, 'le', 8)], this.programRewardDistribution.programId)[0];
4602
+ transferAuthority = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("transfer_authority")], this.programRewardDistribution.programId)[0];
4603
+ return [4, this.programRewardDistribution.methods
4604
+ .collectReward()
4605
+ .accounts({
4606
+ owner: publicKey,
4607
+ receivingAccount: receivingTokenAccount,
4608
+ rewardVault: rewardVault,
4609
+ rewardTokenAccount: rewardTokenAccount,
4610
+ rewardRecord: rewardRecord,
4611
+ transferAuthority: transferAuthority,
4612
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
4613
+ })
4614
+ .instruction()];
4615
+ case 5:
4616
+ collectNftReward = _b.sent();
4617
+ instructions.push(collectNftReward);
4618
+ return [3, 7];
4619
+ case 6:
4620
+ err_30 = _b.sent();
4621
+ throw err_30;
4622
+ case 7: return [2, {
4623
+ instructions: __spreadArray([], instructions, true),
4624
+ additionalSigners: additionalSigners
4625
+ }];
4626
+ }
4627
+ });
4628
+ });
4629
+ };
4477
4630
  this.provider = provider;
4478
4631
  (0, anchor_1.setProvider)(provider);
4479
4632
  this.program = new anchor_1.Program(perpetuals_1.IDL, programId);
4480
4633
  this.programPerpComposability = new anchor_1.Program(perp_composability_1.IDL, composabilityProgramId);
4481
4634
  this.programFbnftReward = new anchor_1.Program(fbnft_rewards_1.IDL, fbNftRewardProgramId);
4635
+ this.programRewardDistribution = new anchor_1.Program(reward_distribution_1.IDL, rewardDistributionProgramId);
4482
4636
  this.programId = programId;
4483
4637
  this.composabilityProgramId = composabilityProgramId;
4484
4638
  this.admin = this.provider.wallet.publicKey;
@@ -59,10 +59,23 @@ export declare class PoolConfig {
59
59
  addressLookupTableAddresses: PublicKey[];
60
60
  backupOracle: PublicKey;
61
61
  nftCollectionAddress: PublicKey;
62
+ rewardDistributionProgram: {
63
+ programId: PublicKey;
64
+ transferAuthority: PublicKey;
65
+ rewardVault: PublicKey;
66
+ rewardMint: PublicKey;
67
+ rewardTokenAccount: PublicKey;
68
+ };
62
69
  tokens: Token[];
63
70
  custodies: CustodyConfig[];
64
71
  markets: MarketConfig[];
65
- constructor(programId: PublicKey, perpComposibilityProgramId: PublicKey, fbNftRewardProgramId: PublicKey, cluster: Cluster, poolName: string, poolAddress: PublicKey, lpTokenMint: PublicKey, flpTokenAccount: PublicKey, lpDecimals: number, lpTokenSymbol: string, perpetuals: PublicKey, transferAuthority: PublicKey, multisig: PublicKey, addressLookupTableAddresses: PublicKey[], backupOracle: PublicKey, nftCollectionAddress: PublicKey, tokens: Token[], custodies: CustodyConfig[], markets: MarketConfig[]);
72
+ constructor(programId: PublicKey, perpComposibilityProgramId: PublicKey, fbNftRewardProgramId: PublicKey, cluster: Cluster, poolName: string, poolAddress: PublicKey, lpTokenMint: PublicKey, flpTokenAccount: PublicKey, lpDecimals: number, lpTokenSymbol: string, perpetuals: PublicKey, transferAuthority: PublicKey, multisig: PublicKey, addressLookupTableAddresses: PublicKey[], backupOracle: PublicKey, nftCollectionAddress: PublicKey, rewardDistributionProgram: {
73
+ programId: PublicKey;
74
+ transferAuthority: PublicKey;
75
+ rewardVault: PublicKey;
76
+ rewardMint: PublicKey;
77
+ rewardTokenAccount: PublicKey;
78
+ }, tokens: Token[], custodies: CustodyConfig[], markets: MarketConfig[]);
66
79
  getAllTokenMints(): PublicKey[];
67
80
  getMarketConfigByPk(marketAccountPk: PublicKey): MarketConfig;
68
81
  getMarketConfig(targetCustody: PublicKey, collateralCustody: PublicKey, side: Side): MarketConfig | null;
@@ -19,7 +19,7 @@ var web3_js_1 = require("@solana/web3.js");
19
19
  var PoolConfig_json_1 = __importDefault(require("./PoolConfig.json"));
20
20
  var types_1 = require("./types");
21
21
  var PoolConfig = (function () {
22
- function PoolConfig(programId, perpComposibilityProgramId, fbNftRewardProgramId, cluster, poolName, poolAddress, lpTokenMint, flpTokenAccount, lpDecimals, lpTokenSymbol, perpetuals, transferAuthority, multisig, addressLookupTableAddresses, backupOracle, nftCollectionAddress, tokens, custodies, markets) {
22
+ function PoolConfig(programId, perpComposibilityProgramId, fbNftRewardProgramId, cluster, poolName, poolAddress, lpTokenMint, flpTokenAccount, lpDecimals, lpTokenSymbol, perpetuals, transferAuthority, multisig, addressLookupTableAddresses, backupOracle, nftCollectionAddress, rewardDistributionProgram, tokens, custodies, markets) {
23
23
  var _this = this;
24
24
  this.programId = programId;
25
25
  this.perpComposibilityProgramId = perpComposibilityProgramId;
@@ -37,6 +37,7 @@ var PoolConfig = (function () {
37
37
  this.addressLookupTableAddresses = addressLookupTableAddresses;
38
38
  this.backupOracle = backupOracle;
39
39
  this.nftCollectionAddress = nftCollectionAddress;
40
+ this.rewardDistributionProgram = rewardDistributionProgram;
40
41
  this.tokens = tokens;
41
42
  this.custodies = custodies;
42
43
  this.markets = markets;
@@ -162,7 +163,13 @@ var PoolConfig = (function () {
162
163
  catch (error) {
163
164
  console.log("ERROR: buildPoolconfigFromJson unable to load markets ");
164
165
  }
165
- return new PoolConfig(new web3_js_1.PublicKey(poolConfig.programId), new web3_js_1.PublicKey(poolConfig.perpComposibilityProgramId), new web3_js_1.PublicKey(poolConfig.fbNftRewardProgramId), poolConfig.cluster, poolConfig.poolName, new web3_js_1.PublicKey(poolConfig.poolAddress), new web3_js_1.PublicKey(poolConfig.lpTokenMint), new web3_js_1.PublicKey(poolConfig.flpTokenAccount), poolConfig.lpDecimals, poolConfig.lpTokenSymbol, new web3_js_1.PublicKey(poolConfig.perpetuals), new web3_js_1.PublicKey(poolConfig.transferAuthority), new web3_js_1.PublicKey(poolConfig.multisig), addressLookupTableAddresses, new web3_js_1.PublicKey(poolConfig.backupOracle), new web3_js_1.PublicKey(poolConfig.nftCollectionAddress), tokens, custodies, markets);
166
+ return new PoolConfig(new web3_js_1.PublicKey(poolConfig.programId), new web3_js_1.PublicKey(poolConfig.perpComposibilityProgramId), new web3_js_1.PublicKey(poolConfig.fbNftRewardProgramId), poolConfig.cluster, poolConfig.poolName, new web3_js_1.PublicKey(poolConfig.poolAddress), new web3_js_1.PublicKey(poolConfig.lpTokenMint), new web3_js_1.PublicKey(poolConfig.flpTokenAccount), poolConfig.lpDecimals, poolConfig.lpTokenSymbol, new web3_js_1.PublicKey(poolConfig.perpetuals), new web3_js_1.PublicKey(poolConfig.transferAuthority), new web3_js_1.PublicKey(poolConfig.multisig), addressLookupTableAddresses, new web3_js_1.PublicKey(poolConfig.backupOracle), new web3_js_1.PublicKey(poolConfig.nftCollectionAddress), {
167
+ programId: new web3_js_1.PublicKey(poolConfig.rewardDistributionProgram.programId),
168
+ rewardMint: new web3_js_1.PublicKey(poolConfig.rewardDistributionProgram.rewardMint),
169
+ rewardTokenAccount: new web3_js_1.PublicKey(poolConfig.rewardDistributionProgram.rewardTokenAccount),
170
+ rewardVault: new web3_js_1.PublicKey(poolConfig.rewardDistributionProgram.rewardVault),
171
+ transferAuthority: new web3_js_1.PublicKey(poolConfig.rewardDistributionProgram.transferAuthority),
172
+ }, tokens, custodies, markets);
166
173
  };
167
174
  PoolConfig.fromIdsByName = function (name, cluster) {
168
175
  var poolConfig = PoolConfig_json_1.default.pools.find(function (pool) { return pool['poolName'] === name && cluster === pool['cluster']; });
@@ -26,6 +26,13 @@
26
26
  ],
27
27
  "backupOracle": "AjAubETeBLhebBxLcErmzbavZfqF9bCxkpRAdyJtoi9G",
28
28
  "nftCollectionAddress": "H4EQ8pcE7PQSQGG1WYW4hAA1nizU6ULYipHZcYk9b64u",
29
+ "rewardDistributionProgram": {
30
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
31
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
32
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
33
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
34
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
35
+ },
29
36
  "tokens": [
30
37
  {
31
38
  "symbol": "USDC",
@@ -250,6 +257,13 @@
250
257
  ],
251
258
  "backupOracle": "AjAubETeBLhebBxLcErmzbavZfqF9bCxkpRAdyJtoi9G",
252
259
  "nftCollectionAddress": "H4EQ8pcE7PQSQGG1WYW4hAA1nizU6ULYipHZcYk9b64u",
260
+ "rewardDistributionProgram": {
261
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
262
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
263
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
264
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
265
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
266
+ },
253
267
  "tokens": [
254
268
  {
255
269
  "symbol": "USDC",
@@ -569,6 +583,13 @@
569
583
  ],
570
584
  "backupOracle": "AjAubETeBLhebBxLcErmzbavZfqF9bCxkpRAdyJtoi9G",
571
585
  "nftCollectionAddress": "H4EQ8pcE7PQSQGG1WYW4hAA1nizU6ULYipHZcYk9b64u",
586
+ "rewardDistributionProgram": {
587
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
588
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
589
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
590
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
591
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
592
+ },
572
593
  "tokens": [
573
594
  {
574
595
  "symbol": "USDC",
@@ -635,6 +656,17 @@
635
656
  "isVirtual": false,
636
657
  "pythTicker": "Crypto.RAY/USD",
637
658
  "pythPriceId": "0x91568baa8beb53db23eb3fb7f22c6e8bd303d103919e19733f2bb642d3e7987a"
659
+ },
660
+ {
661
+ "symbol": "KMNO",
662
+ "mintKey": "KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS",
663
+ "decimals": 6,
664
+ "usdPrecision": 4,
665
+ "tokenPrecision": 4,
666
+ "isStable": false,
667
+ "isVirtual": false,
668
+ "pythTicker": "Crypto.KMNO/USD",
669
+ "pythPriceId": "0xb17e5bc5de742a8a378b54c9c75442b7d51e30ada63f28d9bd28d3c0e26511a0"
638
670
  }
639
671
  ],
640
672
  "custodies": [
@@ -733,6 +765,22 @@
733
765
  "extOracleAddress": "Hhipna3EoWR7u8pDruUg8RxhP5F6XLh6SEHMVDmZhWi8",
734
766
  "pythTicker": "Crypto.RAY/USD",
735
767
  "pythPriceId": "0x91568baa8beb53db23eb3fb7f22c6e8bd303d103919e19733f2bb642d3e7987a"
768
+ },
769
+ {
770
+ "custodyId": 6,
771
+ "custodyAccount": "5JtPiHFmkb1nv1Qvs3sryLgXmjs8p5iQexAseC2Ljjzg",
772
+ "tokenAccount": "EofwtSbFk3fsVWYKdYp5nzkhK5At8yRM6YA2YxNE5iWV",
773
+ "symbol": "KMNO",
774
+ "mintKey": "KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS",
775
+ "decimals": 6,
776
+ "usdPrecision": 4,
777
+ "tokenPrecision": 4,
778
+ "isStable": false,
779
+ "isVirtual": false,
780
+ "intOracleAddress": "4tNprL7ziCzxHotNnuNWE8Z8znvQbg2irng4SEyjy9rs",
781
+ "extOracleAddress": "ArjngUHXrQPr1wH9Bqrji9hdDQirM6ijbzc1Jj1fXUk7",
782
+ "pythTicker": "Crypto.KMNO/USD",
783
+ "pythPriceId": "0xb17e5bc5de742a8a378b54c9c75442b7d51e30ada63f28d9bd28d3c0e26511a0"
736
784
  }
737
785
  ],
738
786
  "markets": [
@@ -865,6 +913,32 @@
865
913
  "collateralCustodyId": 0,
866
914
  "targetMint": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R",
867
915
  "collateralMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
916
+ },
917
+ {
918
+ "marketId": 10,
919
+ "marketAccount": "FaT568uYioPFsf2rFgSSFrNyrqHZfG9LZBReaq56dSYJ",
920
+ "pool": "D6bfytnxoZBSzJM7fcixg5sgWJ2hj8SbwkPvb2r8XpbH",
921
+ "targetCustody": "5JtPiHFmkb1nv1Qvs3sryLgXmjs8p5iQexAseC2Ljjzg",
922
+ "collateralCustody": "5JtPiHFmkb1nv1Qvs3sryLgXmjs8p5iQexAseC2Ljjzg",
923
+ "side": "long",
924
+ "maxLev": 50,
925
+ "targetCustodyId": 6,
926
+ "collateralCustodyId": 6,
927
+ "targetMint": "KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS",
928
+ "collateralMint": "KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS"
929
+ },
930
+ {
931
+ "marketId": 11,
932
+ "marketAccount": "Hfkgp91DXQivzd8XihGHh7ansPm1SFfosNZ5CN3yz1PW",
933
+ "pool": "D6bfytnxoZBSzJM7fcixg5sgWJ2hj8SbwkPvb2r8XpbH",
934
+ "targetCustody": "5JtPiHFmkb1nv1Qvs3sryLgXmjs8p5iQexAseC2Ljjzg",
935
+ "collateralCustody": "6fiadNoZVTha5NdaktZgJ3PHm7bncZpiqGvFbCsrUv72",
936
+ "side": "short",
937
+ "maxLev": 50,
938
+ "targetCustodyId": 6,
939
+ "collateralCustodyId": 0,
940
+ "targetMint": "KMNo3nJsBXfcpJTVhZcXLW7RmTwTt4GVFE7suUBo9sS",
941
+ "collateralMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
868
942
  }
869
943
  ]
870
944
  },
@@ -888,6 +962,13 @@
888
962
  ],
889
963
  "backupOracle": "AjAubETeBLhebBxLcErmzbavZfqF9bCxkpRAdyJtoi9G",
890
964
  "nftCollectionAddress": "H4EQ8pcE7PQSQGG1WYW4hAA1nizU6ULYipHZcYk9b64u",
965
+ "rewardDistributionProgram": {
966
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
967
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
968
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
969
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
970
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
971
+ },
891
972
  "tokens": [
892
973
  {
893
974
  "symbol": "USDC",
@@ -995,6 +1076,13 @@
995
1076
  ],
996
1077
  "backupOracle": "AjAubETeBLhebBxLcErmzbavZfqF9bCxkpRAdyJtoi9G",
997
1078
  "nftCollectionAddress": "H4EQ8pcE7PQSQGG1WYW4hAA1nizU6ULYipHZcYk9b64u",
1079
+ "rewardDistributionProgram": {
1080
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
1081
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
1082
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
1083
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
1084
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
1085
+ },
998
1086
  "tokens": [
999
1087
  {
1000
1088
  "symbol": "USDC",
@@ -1102,6 +1190,13 @@
1102
1190
  ],
1103
1191
  "backupOracle": "AHaKsRB4tsGSzFfFqAxUpfRRmsUj5EhwHSxSXK2UGRp5",
1104
1192
  "nftCollectionAddress": "3rkRzHdN7dXy5CQfX3Lz6UBBJ2F9n58VEpvDSmbaVHt9",
1193
+ "rewardDistributionProgram": {
1194
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
1195
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
1196
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
1197
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
1198
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
1199
+ },
1105
1200
  "tokens": [
1106
1201
  {
1107
1202
  "symbol": "USDC",
@@ -1326,6 +1421,13 @@
1326
1421
  ],
1327
1422
  "backupOracle": "AHaKsRB4tsGSzFfFqAxUpfRRmsUj5EhwHSxSXK2UGRp5",
1328
1423
  "nftCollectionAddress": "3rkRzHdN7dXy5CQfX3Lz6UBBJ2F9n58VEpvDSmbaVHt9",
1424
+ "rewardDistributionProgram": {
1425
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
1426
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
1427
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
1428
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
1429
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
1430
+ },
1329
1431
  "tokens": [
1330
1432
  {
1331
1433
  "symbol": "USDC",
@@ -1645,6 +1747,13 @@
1645
1747
  ],
1646
1748
  "backupOracle": "AHaKsRB4tsGSzFfFqAxUpfRRmsUj5EhwHSxSXK2UGRp5",
1647
1749
  "nftCollectionAddress": "3rkRzHdN7dXy5CQfX3Lz6UBBJ2F9n58VEpvDSmbaVHt9",
1750
+ "rewardDistributionProgram": {
1751
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
1752
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
1753
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
1754
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
1755
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
1756
+ },
1648
1757
  "tokens": [
1649
1758
  {
1650
1759
  "symbol": "USDC",
@@ -2017,6 +2126,13 @@
2017
2126
  ],
2018
2127
  "backupOracle": "AHaKsRB4tsGSzFfFqAxUpfRRmsUj5EhwHSxSXK2UGRp5",
2019
2128
  "nftCollectionAddress": "3rkRzHdN7dXy5CQfX3Lz6UBBJ2F9n58VEpvDSmbaVHt9",
2129
+ "rewardDistributionProgram": {
2130
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
2131
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
2132
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
2133
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
2134
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
2135
+ },
2020
2136
  "tokens": [
2021
2137
  {
2022
2138
  "symbol": "USDC",
@@ -2124,6 +2240,13 @@
2124
2240
  ],
2125
2241
  "backupOracle": "AHaKsRB4tsGSzFfFqAxUpfRRmsUj5EhwHSxSXK2UGRp5",
2126
2242
  "nftCollectionAddress": "3rkRzHdN7dXy5CQfX3Lz6UBBJ2F9n58VEpvDSmbaVHt9",
2243
+ "rewardDistributionProgram": {
2244
+ "programId": "FARTfzmezUtejeF42vfyvX96NWq1BuAcXFiAQuz6wZZg",
2245
+ "transferAuthority": "4cgNvcrPFxmgJVyQNJqM8Sb6eJnDktr5mWA3gSkdNcyT",
2246
+ "rewardVault": "DrXUtn8BRUYAo1i3ZTkPRXqU7w2KGbCjiskzH8wGExGK",
2247
+ "rewardMint": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr",
2248
+ "rewardTokenAccount": "6X9LbFxtvjGxBEgHiE3KLQjJtAqkThqrhCufLhrPfMEp"
2249
+ },
2127
2250
  "tokens": [
2128
2251
  {
2129
2252
  "symbol": "USDC",