flash-sdk 2.0.34 → 2.0.36

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IDL = void 0;
4
+ exports.IDL = {
5
+ "version": "0.1.0",
6
+ "name": "fbnft_rewards",
7
+ "instructions": [
8
+ {
9
+ "name": "initRewardVault",
10
+ "accounts": [
11
+ {
12
+ "name": "admin",
13
+ "isMut": true,
14
+ "isSigner": true
15
+ },
16
+ {
17
+ "name": "transferAuthority",
18
+ "isMut": true,
19
+ "isSigner": false
20
+ },
21
+ {
22
+ "name": "rewardVault",
23
+ "isMut": true,
24
+ "isSigner": false
25
+ },
26
+ {
27
+ "name": "rewardMint",
28
+ "isMut": false,
29
+ "isSigner": false
30
+ },
31
+ {
32
+ "name": "rewardTokenAccount",
33
+ "isMut": true,
34
+ "isSigner": false
35
+ },
36
+ {
37
+ "name": "collectionMint",
38
+ "isMut": false,
39
+ "isSigner": false
40
+ },
41
+ {
42
+ "name": "programData",
43
+ "isMut": false,
44
+ "isSigner": false
45
+ },
46
+ {
47
+ "name": "systemProgram",
48
+ "isMut": false,
49
+ "isSigner": false
50
+ },
51
+ {
52
+ "name": "tokenProgram",
53
+ "isMut": false,
54
+ "isSigner": false
55
+ },
56
+ {
57
+ "name": "rent",
58
+ "isMut": false,
59
+ "isSigner": false
60
+ }
61
+ ],
62
+ "args": [
63
+ {
64
+ "name": "params",
65
+ "type": {
66
+ "defined": "InitRewardVaultParams"
67
+ }
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "name": "distributeRewards",
73
+ "accounts": [
74
+ {
75
+ "name": "admin",
76
+ "isMut": false,
77
+ "isSigner": true
78
+ },
79
+ {
80
+ "name": "fundingAccount",
81
+ "isMut": true,
82
+ "isSigner": false
83
+ },
84
+ {
85
+ "name": "rewardVault",
86
+ "isMut": true,
87
+ "isSigner": false
88
+ },
89
+ {
90
+ "name": "rewardTokenAccount",
91
+ "isMut": true,
92
+ "isSigner": false
93
+ },
94
+ {
95
+ "name": "tokenProgram",
96
+ "isMut": false,
97
+ "isSigner": false
98
+ }
99
+ ],
100
+ "args": [
101
+ {
102
+ "name": "params",
103
+ "type": {
104
+ "defined": "DistributeRewardsParams"
105
+ }
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "name": "collectReward",
111
+ "accounts": [
112
+ {
113
+ "name": "owner",
114
+ "isMut": true,
115
+ "isSigner": true
116
+ },
117
+ {
118
+ "name": "feePayer",
119
+ "isMut": true,
120
+ "isSigner": true
121
+ },
122
+ {
123
+ "name": "nftMint",
124
+ "isMut": true,
125
+ "isSigner": false
126
+ },
127
+ {
128
+ "name": "nftTokenAccount",
129
+ "isMut": false,
130
+ "isSigner": false
131
+ },
132
+ {
133
+ "name": "metadataAccount",
134
+ "isMut": true,
135
+ "isSigner": false
136
+ },
137
+ {
138
+ "name": "receivingAccount",
139
+ "isMut": true,
140
+ "isSigner": false
141
+ },
142
+ {
143
+ "name": "rewardRecord",
144
+ "isMut": true,
145
+ "isSigner": false
146
+ },
147
+ {
148
+ "name": "rewardVault",
149
+ "isMut": true,
150
+ "isSigner": false
151
+ },
152
+ {
153
+ "name": "rewardTokenAccount",
154
+ "isMut": true,
155
+ "isSigner": false
156
+ },
157
+ {
158
+ "name": "transferAuthority",
159
+ "isMut": false,
160
+ "isSigner": false
161
+ },
162
+ {
163
+ "name": "systemProgram",
164
+ "isMut": false,
165
+ "isSigner": false
166
+ },
167
+ {
168
+ "name": "tokenProgram",
169
+ "isMut": false,
170
+ "isSigner": false
171
+ }
172
+ ],
173
+ "args": []
174
+ }
175
+ ],
176
+ "accounts": [
177
+ {
178
+ "name": "rewardVault",
179
+ "type": {
180
+ "kind": "struct",
181
+ "fields": [
182
+ {
183
+ "name": "admin",
184
+ "type": "publicKey"
185
+ },
186
+ {
187
+ "name": "collection",
188
+ "type": "publicKey"
189
+ },
190
+ {
191
+ "name": "rewardMint",
192
+ "type": "publicKey"
193
+ },
194
+ {
195
+ "name": "transferAuthority",
196
+ "type": "publicKey"
197
+ },
198
+ {
199
+ "name": "rewardTokenAccount",
200
+ "type": "publicKey"
201
+ },
202
+ {
203
+ "name": "lpTokenAccount",
204
+ "type": "publicKey"
205
+ },
206
+ {
207
+ "name": "nftCount",
208
+ "type": "u64"
209
+ },
210
+ {
211
+ "name": "accruedAmount",
212
+ "type": "u128"
213
+ },
214
+ {
215
+ "name": "paidAmount",
216
+ "type": "u128"
217
+ },
218
+ {
219
+ "name": "rewardsPerNft",
220
+ "type": "u64"
221
+ },
222
+ {
223
+ "name": "bump",
224
+ "type": "u8"
225
+ },
226
+ {
227
+ "name": "transferAuthorityBump",
228
+ "type": "u8"
229
+ },
230
+ {
231
+ "name": "tokenAccountBump",
232
+ "type": "u8"
233
+ }
234
+ ]
235
+ }
236
+ },
237
+ {
238
+ "name": "rewardRecord",
239
+ "type": {
240
+ "kind": "struct",
241
+ "fields": [
242
+ {
243
+ "name": "mint",
244
+ "type": "publicKey"
245
+ },
246
+ {
247
+ "name": "rewardDebt",
248
+ "type": "u64"
249
+ }
250
+ ]
251
+ }
252
+ }
253
+ ],
254
+ "types": [
255
+ {
256
+ "name": "InitRewardVaultParams",
257
+ "type": {
258
+ "kind": "struct",
259
+ "fields": [
260
+ {
261
+ "name": "nftCount",
262
+ "type": "u64"
263
+ }
264
+ ]
265
+ }
266
+ },
267
+ {
268
+ "name": "DistributeRewardsParams",
269
+ "type": {
270
+ "kind": "struct",
271
+ "fields": [
272
+ {
273
+ "name": "rewardAmount",
274
+ "type": "u64"
275
+ }
276
+ ]
277
+ }
278
+ }
279
+ ],
280
+ "errors": [
281
+ {
282
+ "code": 6000,
283
+ "name": "InvalidCollection",
284
+ "msg": "Unsuppported NFT collection"
285
+ }
286
+ ]
287
+ };
package/dist/test2.d.ts CHANGED
@@ -0,0 +1 @@
1
+ import 'dotenv/config';
package/dist/test2.js CHANGED
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var _a;
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ require("dotenv/config");
41
+ var bn_js_1 = require("bn.js");
42
+ var PerpetualsClient_1 = require("./PerpetualsClient");
43
+ var anchor_1 = require("@coral-xyz/anchor");
44
+ var OraclePrice_1 = require("./OraclePrice");
45
+ var CustodyAccount_1 = require("./CustodyAccount");
46
+ var client_1 = require("@pythnetwork/client");
47
+ var PoolAccount_1 = require("./PoolAccount");
48
+ var PoolDataClient_1 = require("./PoolDataClient");
49
+ var spl_token_1 = require("@solana/spl-token");
50
+ var PoolConfig_1 = require("./PoolConfig");
51
+ var client;
52
+ var poolClient;
53
+ function initClient(clusterUrl, adminKeyPath, programId, composabilityProgramId, fbNftRewardProgramId) {
54
+ process.env["ANCHOR_WALLET"] = adminKeyPath;
55
+ var provider = anchor_1.AnchorProvider.local(clusterUrl, {
56
+ commitment: "confirmed",
57
+ preflightCommitment: "confirmed",
58
+ skipPreflight: true
59
+ });
60
+ client = new PerpetualsClient_1.PerpetualsClient(provider, programId, composabilityProgramId, fbNftRewardProgramId, null);
61
+ client.log("Client Initialized");
62
+ }
63
+ var prettyPrint = function (object) {
64
+ console.log(JSON.stringify(object, null, 2));
65
+ };
66
+ var url = 'https://flashtr-flash-885f.devnet.rpcpool.com/e0f3d11e-6673-4e02-b3f8-361d596ee7fe';
67
+ console.log("url:", url);
68
+ var adminKey = (_a = process.env["KEYPAIR_PATH"]) !== null && _a !== void 0 ? _a : "/Users/aw/.config/solana/Beta-Hcik.json";
69
+ console.log("adminKey path:", adminKey);
70
+ var main2 = function () { return __awaiter(void 0, void 0, void 0, function () {
71
+ var POOL_CONFIG, programId, composabilityProgramId, poolName, poolKey, poolData, poolAccount, custodyAccounts, i, custodyAccountKey, custodyAccountInfo, ca, lpTokenInfo, pythClient, pythHttpClientResult, priceDataSOL, priceOracleSOL, emaPriceOracleSOL, priceDataUSDC, priceOracleUSDC, emaPriceOracleUSDC, priceDataBTC, priceOracleBTC, emaPriceOracleBTC, priceDataETH, priceOracleETH, emaPriceOracleETH, nprices, custodyData, lpStats, apy;
72
+ return __generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0:
75
+ POOL_CONFIG = PoolConfig_1.PoolConfig.fromIdsByName('devnet.1', 'devnet');
76
+ programId = POOL_CONFIG.programId;
77
+ composabilityProgramId = POOL_CONFIG.perpComposibilityProgramId;
78
+ initClient(url, adminKey, programId, composabilityProgramId, POOL_CONFIG.fbNftRewardProgramId);
79
+ poolName = "devnet.1";
80
+ poolKey = POOL_CONFIG.poolAddress;
81
+ return [4, client.getPool(poolName)];
82
+ case 1:
83
+ poolData = _a.sent();
84
+ poolAccount = new PoolAccount_1.PoolAccount(poolKey, poolData);
85
+ custodyAccounts = [];
86
+ i = 0;
87
+ _a.label = 2;
88
+ case 2:
89
+ if (!(i < POOL_CONFIG.custodies.length)) return [3, 5];
90
+ custodyAccountKey = client.getCustodyKey(poolName, POOL_CONFIG.custodies[i].mintKey);
91
+ return [4, client.program.account.custody.fetch(custodyAccountKey)];
92
+ case 3:
93
+ custodyAccountInfo = _a.sent();
94
+ ca = new CustodyAccount_1.CustodyAccount(POOL_CONFIG.custodies[i].custodyAccount, custodyAccountInfo);
95
+ custodyAccounts.push(ca);
96
+ _a.label = 4;
97
+ case 4:
98
+ i++;
99
+ return [3, 2];
100
+ case 5: return [4, (0, spl_token_1.getMint)(client.provider.connection, POOL_CONFIG.lpTokenMint)];
101
+ case 6:
102
+ lpTokenInfo = _a.sent();
103
+ poolClient = new PoolDataClient_1.PoolDataClient(POOL_CONFIG, poolAccount, lpTokenInfo, custodyAccounts);
104
+ pythClient = new client_1.PythHttpClient(client.provider.connection, (0, client_1.getPythProgramKeyForCluster)('devnet'));
105
+ return [4, pythClient.getData()];
106
+ case 7:
107
+ pythHttpClientResult = _a.sent();
108
+ priceDataSOL = pythHttpClientResult.productPrice.get('Crypto.SOL/USD');
109
+ priceOracleSOL = new OraclePrice_1.OraclePrice({
110
+ price: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.aggregate.priceComponent.toString()),
111
+ exponent: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.exponent),
112
+ confidence: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.confidence),
113
+ timestamp: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.timestamp.toString()),
114
+ });
115
+ emaPriceOracleSOL = new OraclePrice_1.OraclePrice({
116
+ price: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.emaPrice.valueComponent.toString()),
117
+ exponent: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.exponent),
118
+ confidence: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.emaConfidence.valueComponent.toString()),
119
+ timestamp: new bn_js_1.BN(priceDataSOL === null || priceDataSOL === void 0 ? void 0 : priceDataSOL.timestamp.toString()),
120
+ });
121
+ priceDataUSDC = pythHttpClientResult.productPrice.get('Crypto.USDC/USD');
122
+ priceOracleUSDC = new OraclePrice_1.OraclePrice({
123
+ price: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.aggregate.priceComponent.toString()),
124
+ exponent: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.exponent),
125
+ confidence: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.confidence),
126
+ timestamp: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.timestamp.toString()),
127
+ });
128
+ emaPriceOracleUSDC = new OraclePrice_1.OraclePrice({
129
+ price: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.emaPrice.valueComponent.toString()),
130
+ exponent: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.exponent),
131
+ confidence: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.emaConfidence.valueComponent.toString()),
132
+ timestamp: new bn_js_1.BN(priceDataUSDC === null || priceDataUSDC === void 0 ? void 0 : priceDataUSDC.timestamp.toString()),
133
+ });
134
+ priceDataBTC = pythHttpClientResult.productPrice.get('Crypto.BTC/USD');
135
+ priceOracleBTC = new OraclePrice_1.OraclePrice({
136
+ price: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.aggregate.priceComponent.toString()),
137
+ exponent: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.exponent),
138
+ confidence: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.confidence),
139
+ timestamp: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.timestamp.toString()),
140
+ });
141
+ emaPriceOracleBTC = new OraclePrice_1.OraclePrice({
142
+ price: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.emaPrice.valueComponent.toString()),
143
+ exponent: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.exponent),
144
+ confidence: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.emaConfidence.valueComponent.toString()),
145
+ timestamp: new bn_js_1.BN(priceDataBTC === null || priceDataBTC === void 0 ? void 0 : priceDataBTC.timestamp.toString()),
146
+ });
147
+ priceDataETH = pythHttpClientResult.productPrice.get('Crypto.ETH/USD');
148
+ priceOracleETH = new OraclePrice_1.OraclePrice({
149
+ price: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.aggregate.priceComponent.toString()),
150
+ exponent: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.exponent),
151
+ confidence: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.confidence),
152
+ timestamp: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.timestamp.toString()),
153
+ });
154
+ emaPriceOracleETH = new OraclePrice_1.OraclePrice({
155
+ price: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.emaPrice.valueComponent.toString()),
156
+ exponent: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.exponent),
157
+ confidence: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.emaConfidence.valueComponent.toString()),
158
+ timestamp: new bn_js_1.BN(priceDataETH === null || priceDataETH === void 0 ? void 0 : priceDataETH.timestamp.toString()),
159
+ });
160
+ nprices = new Map();
161
+ nprices.set('USDC', { price: priceOracleUSDC, emaPrice: emaPriceOracleUSDC, isStale: false });
162
+ nprices.set('SOL', { price: priceOracleSOL, emaPrice: emaPriceOracleSOL, isStale: false });
163
+ nprices.set('BTC', { price: priceOracleBTC, emaPrice: emaPriceOracleBTC, isStale: false });
164
+ nprices.set('ETH', { price: priceOracleETH, emaPrice: emaPriceOracleETH, isStale: false });
165
+ custodyData = poolClient.getCustodyStats(nprices);
166
+ console.log("custodyData[0].availableToAddUsdUi:", custodyData[0].availableToAddUsdUi);
167
+ lpStats = poolClient.getLpStats(nprices);
168
+ console.log("lpStats:", lpStats.priceUi);
169
+ console.log("custodyAccounts[0].feesStats.rewardPerLpStaked:", custodyAccounts[0].feesStats.rewardPerLpStaked.toString());
170
+ apy = client.getApyPercentageUi(custodyAccounts[0], custodyAccounts[0].feesStats.rewardPerLpStaked.subn(3000), new bn_js_1.BN(1 * Math.pow(10, 6)));
171
+ console.log("apy:", apy.toString());
172
+ return [2];
173
+ }
174
+ });
175
+ }); };