flash-sdk 2.9.3 → 2.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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",