flash-sdk 1.0.128 → 1.0.130

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ /// <reference types="@solana/web3.js" />
2
+ import { PriceServiceConnection } from "@pythnetwork/price-service-client";
3
+ import { PoolConfig } from "./PoolConfig";
4
+ import { Program } from "@coral-xyz/anchor";
5
+ import { Perpetuals } from "./idl/perpetuals";
6
+ export declare const pythPriceServiceConnection: PriceServiceConnection;
7
+ export declare const getPythnetOraclePrices: (program: Program<Perpetuals>, poolConfig: PoolConfig, backupOracleSecretKey: string) => Promise<import("@solana/web3.js").TransactionInstruction>;
@@ -0,0 +1,89 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getPythnetOraclePrices = exports.pythPriceServiceConnection = void 0;
43
+ var price_service_client_1 = require("@pythnetwork/price-service-client");
44
+ var web3_js_1 = require("@solana/web3.js");
45
+ var bn_js_1 = __importDefault(require("bn.js"));
46
+ var bs58_1 = __importDefault(require("bs58"));
47
+ var tweetnacl_1 = __importDefault(require("tweetnacl"));
48
+ exports.pythPriceServiceConnection = new price_service_client_1.PriceServiceConnection('https://hermes.pyth.network', {
49
+ priceFeedRequestConfig: {},
50
+ });
51
+ var getPythnetOraclePrices = function (program, poolConfig, backupOracleSecretKey) { return __awaiter(void 0, void 0, void 0, function () {
52
+ var pythPriceIds, currentPrices, backupOracleAccount, caches_1, permissionlessPythCache, message, signature, preInstruction;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ pythPriceIds = poolConfig.custodies.map(function (f) { return f.pythPriceId; });
57
+ return [4, exports.pythPriceServiceConnection.getLatestPriceFeeds(pythPriceIds)];
58
+ case 1:
59
+ currentPrices = _a.sent();
60
+ backupOracleAccount = web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(backupOracleSecretKey));
61
+ if (pythPriceIds.length === currentPrices.length) {
62
+ caches_1 = currentPrices.map(function (price) {
63
+ var uncheckedPrice = price.getPriceUnchecked();
64
+ var uncheckedEmaPrice = price.getEmaPriceUnchecked();
65
+ return {
66
+ price: new bn_js_1.default(uncheckedPrice.price),
67
+ expo: uncheckedPrice.expo,
68
+ conf: new bn_js_1.default(uncheckedPrice.conf),
69
+ ema: new bn_js_1.default(uncheckedEmaPrice.price),
70
+ publishTime: new bn_js_1.default(uncheckedPrice.publishTime)
71
+ };
72
+ });
73
+ permissionlessPythCache = {
74
+ backupCache: caches_1
75
+ };
76
+ message = program._coder.types.encode('PermissionlessPythCache', permissionlessPythCache);
77
+ signature = tweetnacl_1.default.sign.detached(message, backupOracleAccount.secretKey);
78
+ preInstruction = web3_js_1.Ed25519Program.createInstructionWithPublicKey({
79
+ publicKey: backupOracleAccount.publicKey.toBytes(),
80
+ message: message,
81
+ signature: signature,
82
+ });
83
+ return [2, preInstruction];
84
+ }
85
+ return [2];
86
+ }
87
+ });
88
+ }); };
89
+ exports.getPythnetOraclePrices = getPythnetOraclePrices;
@@ -119,6 +119,11 @@ export type PerpComposability = {
119
119
  "name": "eventAuthority";
120
120
  "isMut": false;
121
121
  "isSigner": false;
122
+ },
123
+ {
124
+ "name": "ixSysvar";
125
+ "isMut": false;
126
+ "isSigner": false;
122
127
  }
123
128
  ];
124
129
  "args": [
@@ -242,6 +247,11 @@ export type PerpComposability = {
242
247
  "name": "eventAuthority";
243
248
  "isMut": false;
244
249
  "isSigner": false;
250
+ },
251
+ {
252
+ "name": "ixSysvar";
253
+ "isMut": false;
254
+ "isSigner": false;
245
255
  }
246
256
  ];
247
257
  "args": [
@@ -365,6 +375,11 @@ export type PerpComposability = {
365
375
  "name": "eventAuthority";
366
376
  "isMut": false;
367
377
  "isSigner": false;
378
+ },
379
+ {
380
+ "name": "ixSysvar";
381
+ "isMut": false;
382
+ "isSigner": false;
368
383
  }
369
384
  ];
370
385
  "args": [
@@ -488,6 +503,11 @@ export type PerpComposability = {
488
503
  "name": "eventAuthority";
489
504
  "isMut": false;
490
505
  "isSigner": false;
506
+ },
507
+ {
508
+ "name": "ixSysvar";
509
+ "isMut": false;
510
+ "isSigner": false;
491
511
  }
492
512
  ];
493
513
  "args": [
@@ -122,6 +122,11 @@ exports.IDL = {
122
122
  "name": "eventAuthority",
123
123
  "isMut": false,
124
124
  "isSigner": false
125
+ },
126
+ {
127
+ "name": "ixSysvar",
128
+ "isMut": false,
129
+ "isSigner": false
125
130
  }
126
131
  ],
127
132
  "args": [
@@ -245,6 +250,11 @@ exports.IDL = {
245
250
  "name": "eventAuthority",
246
251
  "isMut": false,
247
252
  "isSigner": false
253
+ },
254
+ {
255
+ "name": "ixSysvar",
256
+ "isMut": false,
257
+ "isSigner": false
248
258
  }
249
259
  ],
250
260
  "args": [
@@ -368,6 +378,11 @@ exports.IDL = {
368
378
  "name": "eventAuthority",
369
379
  "isMut": false,
370
380
  "isSigner": false
381
+ },
382
+ {
383
+ "name": "ixSysvar",
384
+ "isMut": false,
385
+ "isSigner": false
371
386
  }
372
387
  ],
373
388
  "args": [
@@ -491,6 +506,11 @@ exports.IDL = {
491
506
  "name": "eventAuthority",
492
507
  "isMut": false,
493
508
  "isSigner": false
509
+ },
510
+ {
511
+ "name": "ixSysvar",
512
+ "isMut": false,
513
+ "isSigner": false
494
514
  }
495
515
  ],
496
516
  "args": [
@@ -668,6 +668,11 @@ export type Perpetuals = {
668
668
  "name": "collateralCustodyCustomOracleAccount";
669
669
  "isMut": false;
670
670
  "isSigner": false;
671
+ },
672
+ {
673
+ "name": "ixSysvar";
674
+ "isMut": false;
675
+ "isSigner": false;
671
676
  }
672
677
  ];
673
678
  "args": [
@@ -771,6 +776,11 @@ export type Perpetuals = {
771
776
  "name": "program";
772
777
  "isMut": false;
773
778
  "isSigner": false;
779
+ },
780
+ {
781
+ "name": "ixSysvar";
782
+ "isMut": false;
783
+ "isSigner": false;
774
784
  }
775
785
  ];
776
786
  "args": [
@@ -860,6 +870,11 @@ export type Perpetuals = {
860
870
  "name": "program";
861
871
  "isMut": false;
862
872
  "isSigner": false;
873
+ },
874
+ {
875
+ "name": "ixSysvar";
876
+ "isMut": false;
877
+ "isSigner": false;
863
878
  }
864
879
  ];
865
880
  "args": [
@@ -948,6 +963,11 @@ export type Perpetuals = {
948
963
  "name": "program";
949
964
  "isMut": false;
950
965
  "isSigner": false;
966
+ },
967
+ {
968
+ "name": "ixSysvar";
969
+ "isMut": false;
970
+ "isSigner": false;
951
971
  }
952
972
  ];
953
973
  "args": [
@@ -1051,6 +1071,11 @@ export type Perpetuals = {
1051
1071
  "name": "program";
1052
1072
  "isMut": false;
1053
1073
  "isSigner": false;
1074
+ },
1075
+ {
1076
+ "name": "ixSysvar";
1077
+ "isMut": false;
1078
+ "isSigner": false;
1054
1079
  }
1055
1080
  ];
1056
1081
  "args": [
@@ -1149,6 +1174,11 @@ export type Perpetuals = {
1149
1174
  "name": "program";
1150
1175
  "isMut": false;
1151
1176
  "isSigner": false;
1177
+ },
1178
+ {
1179
+ "name": "ixSysvar";
1180
+ "isMut": false;
1181
+ "isSigner": false;
1152
1182
  }
1153
1183
  ];
1154
1184
  "args": [
@@ -1247,6 +1277,11 @@ export type Perpetuals = {
1247
1277
  "name": "program";
1248
1278
  "isMut": false;
1249
1279
  "isSigner": false;
1280
+ },
1281
+ {
1282
+ "name": "ixSysvar";
1283
+ "isMut": false;
1284
+ "isSigner": false;
1250
1285
  }
1251
1286
  ];
1252
1287
  "args": [
@@ -1257,6 +1292,7 @@ export type Perpetuals = {
1257
1292
  };
1258
1293
  }
1259
1294
  ];
1295
+ "returns": "u64";
1260
1296
  },
1261
1297
  {
1262
1298
  "name": "increaseSize";
@@ -1325,6 +1361,11 @@ export type Perpetuals = {
1325
1361
  "name": "program";
1326
1362
  "isMut": false;
1327
1363
  "isSigner": false;
1364
+ },
1365
+ {
1366
+ "name": "ixSysvar";
1367
+ "isMut": false;
1368
+ "isSigner": false;
1328
1369
  }
1329
1370
  ];
1330
1371
  "args": [
@@ -1408,6 +1449,11 @@ export type Perpetuals = {
1408
1449
  "name": "program";
1409
1450
  "isMut": false;
1410
1451
  "isSigner": false;
1452
+ },
1453
+ {
1454
+ "name": "ixSysvar";
1455
+ "isMut": false;
1456
+ "isSigner": false;
1411
1457
  }
1412
1458
  ];
1413
1459
  "args": [
@@ -1506,6 +1552,11 @@ export type Perpetuals = {
1506
1552
  "name": "program";
1507
1553
  "isMut": false;
1508
1554
  "isSigner": false;
1555
+ },
1556
+ {
1557
+ "name": "ixSysvar";
1558
+ "isMut": false;
1559
+ "isSigner": false;
1509
1560
  }
1510
1561
  ];
1511
1562
  "args": [
@@ -1516,6 +1567,7 @@ export type Perpetuals = {
1516
1567
  };
1517
1568
  }
1518
1569
  ];
1570
+ "returns": "u64";
1519
1571
  },
1520
1572
  {
1521
1573
  "name": "liquidate";
@@ -1604,6 +1656,11 @@ export type Perpetuals = {
1604
1656
  "name": "program";
1605
1657
  "isMut": false;
1606
1658
  "isSigner": false;
1659
+ },
1660
+ {
1661
+ "name": "ixSysvar";
1662
+ "isMut": false;
1663
+ "isSigner": false;
1607
1664
  }
1608
1665
  ];
1609
1666
  "args": [
@@ -1632,6 +1689,11 @@ export type Perpetuals = {
1632
1689
  "name": "pool";
1633
1690
  "isMut": true;
1634
1691
  "isSigner": false;
1692
+ },
1693
+ {
1694
+ "name": "ixSysvar";
1695
+ "isMut": false;
1696
+ "isSigner": false;
1635
1697
  }
1636
1698
  ];
1637
1699
  "args": [];
@@ -1669,6 +1731,11 @@ export type Perpetuals = {
1669
1731
  "name": "lpTokenMint";
1670
1732
  "isMut": false;
1671
1733
  "isSigner": false;
1734
+ },
1735
+ {
1736
+ "name": "ixSysvar";
1737
+ "isMut": false;
1738
+ "isSigner": false;
1672
1739
  }
1673
1740
  ];
1674
1741
  "args": [
@@ -1715,6 +1782,11 @@ export type Perpetuals = {
1715
1782
  "name": "lpTokenMint";
1716
1783
  "isMut": false;
1717
1784
  "isSigner": false;
1785
+ },
1786
+ {
1787
+ "name": "ixSysvar";
1788
+ "isMut": false;
1789
+ "isSigner": false;
1718
1790
  }
1719
1791
  ];
1720
1792
  "args": [
@@ -1771,6 +1843,11 @@ export type Perpetuals = {
1771
1843
  "name": "collateralCustodyCustomOracleAccount";
1772
1844
  "isMut": false;
1773
1845
  "isSigner": false;
1846
+ },
1847
+ {
1848
+ "name": "ixSysvar";
1849
+ "isMut": false;
1850
+ "isSigner": false;
1774
1851
  }
1775
1852
  ];
1776
1853
  "args": [
@@ -1832,6 +1909,11 @@ export type Perpetuals = {
1832
1909
  "name": "collateralCustodyCustomOracleAccount";
1833
1910
  "isMut": false;
1834
1911
  "isSigner": false;
1912
+ },
1913
+ {
1914
+ "name": "ixSysvar";
1915
+ "isMut": false;
1916
+ "isSigner": false;
1835
1917
  }
1836
1918
  ];
1837
1919
  "args": [
@@ -1893,6 +1975,11 @@ export type Perpetuals = {
1893
1975
  "name": "collateralCustodyCustomOracleAccount";
1894
1976
  "isMut": false;
1895
1977
  "isSigner": false;
1978
+ },
1979
+ {
1980
+ "name": "ixSysvar";
1981
+ "isMut": false;
1982
+ "isSigner": false;
1896
1983
  }
1897
1984
  ];
1898
1985
  "args": [
@@ -1954,6 +2041,11 @@ export type Perpetuals = {
1954
2041
  "name": "collateralCustodyCustomOracleAccount";
1955
2042
  "isMut": false;
1956
2043
  "isSigner": false;
2044
+ },
2045
+ {
2046
+ "name": "ixSysvar";
2047
+ "isMut": false;
2048
+ "isSigner": false;
1957
2049
  }
1958
2050
  ];
1959
2051
  "args": [
@@ -2013,6 +2105,11 @@ export type Perpetuals = {
2013
2105
  "name": "collateralCustodyCustomOracleAccount";
2014
2106
  "isMut": false;
2015
2107
  "isSigner": false;
2108
+ },
2109
+ {
2110
+ "name": "ixSysvar";
2111
+ "isMut": false;
2112
+ "isSigner": false;
2016
2113
  }
2017
2114
  ];
2018
2115
  "args": [
@@ -2052,6 +2149,11 @@ export type Perpetuals = {
2052
2149
  "name": "custodyCustomOracleAccount";
2053
2150
  "isMut": false;
2054
2151
  "isSigner": false;
2152
+ },
2153
+ {
2154
+ "name": "ixSysvar";
2155
+ "isMut": false;
2156
+ "isSigner": false;
2055
2157
  }
2056
2158
  ];
2057
2159
  "args": [
@@ -2108,6 +2210,11 @@ export type Perpetuals = {
2108
2210
  "name": "dispensingCustodyCustomOracleAccount";
2109
2211
  "isMut": false;
2110
2212
  "isSigner": false;
2213
+ },
2214
+ {
2215
+ "name": "ixSysvar";
2216
+ "isMut": false;
2217
+ "isSigner": false;
2111
2218
  }
2112
2219
  ];
2113
2220
  "args": [
@@ -2134,6 +2241,11 @@ export type Perpetuals = {
2134
2241
  "name": "pool";
2135
2242
  "isMut": false;
2136
2243
  "isSigner": false;
2244
+ },
2245
+ {
2246
+ "name": "ixSysvar";
2247
+ "isMut": false;
2248
+ "isSigner": false;
2137
2249
  }
2138
2250
  ];
2139
2251
  "args": [
@@ -2163,6 +2275,11 @@ export type Perpetuals = {
2163
2275
  "name": "lpTokenMint";
2164
2276
  "isMut": false;
2165
2277
  "isSigner": false;
2278
+ },
2279
+ {
2280
+ "name": "ixSysvar";
2281
+ "isMut": false;
2282
+ "isSigner": false;
2166
2283
  }
2167
2284
  ];
2168
2285
  "args": [
@@ -3611,6 +3728,50 @@ export type Perpetuals = {
3611
3728
  ];
3612
3729
  };
3613
3730
  },
3731
+ {
3732
+ "name": "BackupOracle";
3733
+ "type": {
3734
+ "kind": "struct";
3735
+ "fields": [
3736
+ {
3737
+ "name": "price";
3738
+ "type": "u64";
3739
+ },
3740
+ {
3741
+ "name": "expo";
3742
+ "type": "i32";
3743
+ },
3744
+ {
3745
+ "name": "conf";
3746
+ "type": "u64";
3747
+ },
3748
+ {
3749
+ "name": "ema";
3750
+ "type": "u64";
3751
+ },
3752
+ {
3753
+ "name": "publishTime";
3754
+ "type": "i64";
3755
+ }
3756
+ ];
3757
+ };
3758
+ },
3759
+ {
3760
+ "name": "PermissionlessPythCache";
3761
+ "type": {
3762
+ "kind": "struct";
3763
+ "fields": [
3764
+ {
3765
+ "name": "backupCache";
3766
+ "type": {
3767
+ "vec": {
3768
+ "defined": "BackupOracle";
3769
+ };
3770
+ };
3771
+ }
3772
+ ];
3773
+ };
3774
+ },
3614
3775
  {
3615
3776
  "name": "PriceAndFee";
3616
3777
  "type": {
@@ -4477,6 +4638,26 @@ export type Perpetuals = {
4477
4638
  "code": 6029;
4478
4639
  "name": "MinCollateral";
4479
4640
  "msg": "Minimum collateral limit breached";
4641
+ },
4642
+ {
4643
+ "code": 6030;
4644
+ "name": "PermissionlessOracleMissingSignature";
4645
+ "msg": "Permissionless oracle update must be preceded by Ed25519 signature verification instruction";
4646
+ },
4647
+ {
4648
+ "code": 6031;
4649
+ "name": "PermissionlessOracleMalformedEd25519Data";
4650
+ "msg": "Ed25519 signature verification data does not match expected format";
4651
+ },
4652
+ {
4653
+ "code": 6032;
4654
+ "name": "PermissionlessOracleSignerMismatch";
4655
+ "msg": "Ed25519 signature was not signed by the oracle authority";
4656
+ },
4657
+ {
4658
+ "code": 6033;
4659
+ "name": "PermissionlessOracleMessageMismatch";
4660
+ "msg": "Signed message does not match instruction params";
4480
4661
  }
4481
4662
  ];
4482
4663
  };