@gearbox-protocol/sdk 18.2.0-next.12 → 18.2.0-next.14

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.
Files changed (56) hide show
  1. package/dist/cjs/abi/310/iKillSwitchProxy.js +130 -0
  2. package/dist/cjs/permissionless/api/index.js +2 -1
  3. package/dist/cjs/permissionless/api/oracles/PermissionlessOracles.js +40 -5
  4. package/dist/cjs/permissionless/api/oracles/index.js +2 -1
  5. package/dist/cjs/permissionless/api/oracles/score/formula.js +19 -24
  6. package/dist/cjs/permissionless/api/oracles/score/index.js +1 -1
  7. package/dist/cjs/permissionless/api/oracles/score/run.js +186 -105
  8. package/dist/cjs/permissionless/api/oracles/stress/index.js +1 -0
  9. package/dist/cjs/permissionless/api/oracles/stress/run.js +63 -13
  10. package/dist/cjs/permissionless/bindings/bytecode-repository.js +8 -0
  11. package/dist/cjs/permissionless/bindings/governance/governor.js +1 -1
  12. package/dist/cjs/permissionless/bindings/index.js +7 -2
  13. package/dist/cjs/permissionless/bindings/kill-switch-proxy.js +188 -0
  14. package/dist/cjs/permissionless/bindings/market-configurator-factory.js +39 -1
  15. package/dist/cjs/permissionless/bindings/market-configurator.js +142 -0
  16. package/dist/cjs/permissionless/index.js +10 -3
  17. package/dist/cjs/permissionless/utils/index.js +1 -0
  18. package/dist/cjs/permissionless/utils/literals.js +2 -0
  19. package/dist/esm/abi/310/iKillSwitchProxy.js +129 -0
  20. package/dist/esm/permissionless/api/index.js +4 -4
  21. package/dist/esm/permissionless/api/oracles/PermissionlessOracles.js +41 -6
  22. package/dist/esm/permissionless/api/oracles/index.js +4 -4
  23. package/dist/esm/permissionless/api/oracles/score/formula.js +20 -24
  24. package/dist/esm/permissionless/api/oracles/score/index.js +3 -3
  25. package/dist/esm/permissionless/api/oracles/score/run.js +187 -107
  26. package/dist/esm/permissionless/api/oracles/stress/index.js +2 -2
  27. package/dist/esm/permissionless/api/oracles/stress/run.js +64 -15
  28. package/dist/esm/permissionless/bindings/bytecode-repository.js +8 -0
  29. package/dist/esm/permissionless/bindings/governance/governor.js +1 -1
  30. package/dist/esm/permissionless/bindings/index.js +4 -3
  31. package/dist/esm/permissionless/bindings/kill-switch-proxy.js +184 -0
  32. package/dist/esm/permissionless/bindings/market-configurator-factory.js +37 -0
  33. package/dist/esm/permissionless/bindings/market-configurator.js +143 -1
  34. package/dist/esm/permissionless/index.js +8 -7
  35. package/dist/esm/permissionless/utils/index.js +2 -2
  36. package/dist/esm/permissionless/utils/literals.js +2 -1
  37. package/dist/types/abi/310/iKillSwitchProxy.d.ts +114 -0
  38. package/dist/types/permissionless/api/index.d.ts +5 -5
  39. package/dist/types/permissionless/api/oracles/PermissionlessOracles.d.ts +30 -6
  40. package/dist/types/permissionless/api/oracles/index.d.ts +5 -5
  41. package/dist/types/permissionless/api/oracles/score/formula.d.ts +14 -17
  42. package/dist/types/permissionless/api/oracles/score/index.d.ts +4 -4
  43. package/dist/types/permissionless/api/oracles/score/run.d.ts +28 -10
  44. package/dist/types/permissionless/api/oracles/score/types.d.ts +33 -28
  45. package/dist/types/permissionless/api/oracles/stress/index.d.ts +2 -2
  46. package/dist/types/permissionless/api/oracles/stress/run.d.ts +11 -0
  47. package/dist/types/permissionless/bindings/bytecode-repository.d.ts +10 -1
  48. package/dist/types/permissionless/bindings/index.d.ts +4 -3
  49. package/dist/types/permissionless/bindings/kill-switch-proxy.d.ts +205 -0
  50. package/dist/types/permissionless/bindings/market-configurator-factory.d.ts +30 -0
  51. package/dist/types/permissionless/bindings/market-configurator.d.ts +30 -1
  52. package/dist/types/permissionless/bindings/types.d.ts +27 -0
  53. package/dist/types/permissionless/index.d.ts +9 -8
  54. package/dist/types/permissionless/utils/index.d.ts +2 -2
  55. package/dist/types/permissionless/utils/literals.d.ts +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/abi/310/iKillSwitchProxy.ts
3
+ const iKillSwitchProxyAbi = [
4
+ {
5
+ type: "constructor",
6
+ inputs: [{
7
+ name: "_owner",
8
+ internalType: "address",
9
+ type: "address"
10
+ }, {
11
+ name: "_caller",
12
+ internalType: "address",
13
+ type: "address"
14
+ }],
15
+ stateMutability: "nonpayable"
16
+ },
17
+ {
18
+ type: "function",
19
+ inputs: [],
20
+ name: "caller",
21
+ outputs: [{
22
+ name: "",
23
+ internalType: "address",
24
+ type: "address"
25
+ }],
26
+ stateMutability: "view"
27
+ },
28
+ {
29
+ type: "function",
30
+ inputs: [],
31
+ name: "contractType",
32
+ outputs: [{
33
+ name: "",
34
+ internalType: "bytes32",
35
+ type: "bytes32"
36
+ }],
37
+ stateMutability: "view"
38
+ },
39
+ {
40
+ type: "function",
41
+ inputs: [],
42
+ name: "isKilled",
43
+ outputs: [{
44
+ name: "",
45
+ internalType: "bool",
46
+ type: "bool"
47
+ }],
48
+ stateMutability: "view"
49
+ },
50
+ {
51
+ type: "function",
52
+ inputs: [],
53
+ name: "kill",
54
+ outputs: [],
55
+ stateMutability: "nonpayable"
56
+ },
57
+ {
58
+ type: "function",
59
+ inputs: [],
60
+ name: "owner",
61
+ outputs: [{
62
+ name: "",
63
+ internalType: "address",
64
+ type: "address"
65
+ }],
66
+ stateMutability: "view"
67
+ },
68
+ {
69
+ type: "function",
70
+ inputs: [{
71
+ name: "target",
72
+ internalType: "address",
73
+ type: "address"
74
+ }, {
75
+ name: "data",
76
+ internalType: "bytes",
77
+ type: "bytes"
78
+ }],
79
+ name: "proxyCall",
80
+ outputs: [{
81
+ name: "result",
82
+ internalType: "bytes",
83
+ type: "bytes"
84
+ }],
85
+ stateMutability: "nonpayable"
86
+ },
87
+ {
88
+ type: "function",
89
+ inputs: [],
90
+ name: "version",
91
+ outputs: [{
92
+ name: "",
93
+ internalType: "uint256",
94
+ type: "uint256"
95
+ }],
96
+ stateMutability: "view"
97
+ },
98
+ {
99
+ type: "event",
100
+ anonymous: false,
101
+ inputs: [],
102
+ name: "Killed"
103
+ },
104
+ {
105
+ type: "error",
106
+ inputs: [{
107
+ name: "caller",
108
+ internalType: "address",
109
+ type: "address"
110
+ }],
111
+ name: "CallerIsNotOwnerException"
112
+ },
113
+ {
114
+ type: "error",
115
+ inputs: [],
116
+ name: "KilledException"
117
+ },
118
+ {
119
+ type: "error",
120
+ inputs: [],
121
+ name: "OnlyCallerException"
122
+ },
123
+ {
124
+ type: "error",
125
+ inputs: [],
126
+ name: "OwnerSameAsCallerException"
127
+ }
128
+ ];
129
+ //#endregion
130
+ exports.iKillSwitchProxyAbi = iKillSwitchProxyAbi;
@@ -35,7 +35,6 @@ exports.PriceFeedNotInStoreError = require_permissionless_api_errors.PriceFeedNo
35
35
  exports.PriceFeedSaltMissingError = require_permissionless_api_errors.PriceFeedSaltMissingError;
36
36
  exports.PriceFeedStalenessUnknownError = require_permissionless_api_errors.PriceFeedStalenessUnknownError;
37
37
  exports.RATE_FEED_TYPE = require_permissionless_api_oracles_stress_run.RATE_FEED_TYPE;
38
- exports.REVERT_SCORE = require_permissionless_api_oracles_score_formula.REVERT_SCORE;
39
38
  exports.SCORE_MULTIPLIER = require_permissionless_api_oracles_score_formula.SCORE_MULTIPLIER;
40
39
  exports.UNBOUNDED_DOWN = require_permissionless_api_oracles_stress_override.UNBOUNDED_DOWN;
41
40
  exports.UNBOUNDED_UP = require_permissionless_api_oracles_stress_override.UNBOUNDED_UP;
@@ -47,11 +46,13 @@ exports.groupOverride = require_permissionless_api_oracles_stress_override.group
47
46
  exports.perturb = require_permissionless_api_oracles_stress_override.perturb;
48
47
  exports.priceFeedSalt = require_permissionless_api_deploy_PermissionlessDeploy.priceFeedSalt;
49
48
  exports.rateStub = require_permissionless_api_oracles_stress_override.rateStub;
49
+ exports.readFeedTrees = require_permissionless_api_oracles_stress_run.readFeedTrees;
50
50
  exports.readForest = require_permissionless_api_oracles_stress_run.readForest;
51
51
  exports.readRateTargets = require_permissionless_api_oracles_stress_run.readRateTargets;
52
52
  exports.readUnder = require_permissionless_api_oracles_stress_run.readUnder;
53
53
  exports.roundDataStub = require_permissionless_api_oracles_stress_override.roundDataStub;
54
54
  exports.runAssetScores = require_permissionless_api_oracles_score_run.runAssetScores;
55
+ exports.runFeedPairScore = require_permissionless_api_oracles_score_run.runFeedPairScore;
55
56
  exports.runStressTest = require_permissionless_api_oracles_stress_run.runStressTest;
56
57
  exports.scoreGroup = require_permissionless_api_oracles_stress_score.scoreGroup;
57
58
  exports.scoreOfFactor = require_permissionless_api_oracles_score_formula.scoreOfFactor;
@@ -360,14 +360,16 @@ var PermissionlessOracles = class extends require_offchain_AbstractOffchainNames
360
360
  * three leaves anything to simulate.
361
361
  **/
362
362
  /**
363
- * Every asset's score out of 10 for how its markets guard its price.
363
+ * Every asset's manipulation resistance: how far, from 1 to 10 times, a
364
+ * lying source can push the price its markets hold for it.
364
365
  *
365
366
  * Each source group behind an asset's feeds — Chainlink, Redstone, Lido and
366
- * so on — is made in turn to answer five times what it answers now, and a
367
+ * so on — is made in turn to answer ten times what it answers now, and a
367
368
  * market scores by how far that moves its final price, `min(main,
368
- * reserve)`: 10 for not at all, 0 for the full five times, on a log scale.
369
- * A price that stops answering scores 5. An asset scores its worst running
370
- * market that takes it as collateral.
369
+ * reserve)`, as a multiple either way: 1 for not at all, 1.04 for 4%, 10
370
+ * for the whole lie. A group under which the price stops answering moves
371
+ * nothing and is listed rather than scored. An asset scores its worst
372
+ * running market, underlying or collateral.
371
373
  *
372
374
  * Simulated on the chain as it stands, through state overrides in
373
375
  * `eth_call`: one call per source group per chain, so the node behind the
@@ -409,6 +411,39 @@ var PermissionlessOracles = class extends require_offchain_AbstractOffchainNames
409
411
  }
410
412
  }))).flat();
411
413
  }
414
+ /**
415
+ * The manipulation resistance of any main feed and reserve on a chain,
416
+ * scored the way {@link assetScores} scores a market holding them — for
417
+ * trying a pair before any market does.
418
+ *
419
+ * ```ts
420
+ * const pair = await permissionless.oracles.feedPairScore({
421
+ * chainId: 1,
422
+ * main: "0x…",
423
+ * reserve: "0x…",
424
+ * });
425
+ * ```
426
+ *
427
+ * Reads the chain directly, through state overrides in `eth_call`, so the
428
+ * client has to have attached and the node behind it has to accept them.
429
+ *
430
+ * @throws When the client has not attached, when the chain has no client or
431
+ * no PriceFeedCompressor, or when there is nothing to score: a feed the
432
+ * compressor cannot read, a `ZeroPriceFeed` main, or a final price that does
433
+ * not answer.
434
+ **/
435
+ async feedPairScore({ chainId, main, reserve }) {
436
+ const client = this.#chains.client(chainId);
437
+ const compressor = await new require_permissionless_bindings_address_provider.AddressProviderContract("0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38", client).getLatestVersionAddress(require_onchain_constants_address_provider.AP_PRICE_FEED_COMPRESSOR);
438
+ return require_permissionless_api_oracles_score_run.runFeedPairScore({
439
+ client,
440
+ chainId,
441
+ compressor,
442
+ main,
443
+ reserve,
444
+ logger: this.logger ?? void 0
445
+ });
446
+ }
412
447
  async stressTest({ chainId, ...options }) {
413
448
  const client = this.#chains.client(chainId);
414
449
  const compressor = await new require_permissionless_bindings_address_provider.AddressProviderContract("0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38", client).getLatestVersionAddress(require_onchain_constants_address_provider.AP_PRICE_FEED_COMPRESSOR);
@@ -14,7 +14,6 @@ exports.GET_PRICES_CHUNK_SIZE = require_permissionless_api_oracles_Permissionles
14
14
  exports.GET_PRICES_GAS_LIMIT_BY_CHAIN_ID = require_permissionless_api_oracles_PermissionlessOracles.GET_PRICES_GAS_LIMIT_BY_CHAIN_ID;
15
15
  exports.PermissionlessOracles = require_permissionless_api_oracles_PermissionlessOracles.PermissionlessOracles;
16
16
  exports.RATE_FEED_TYPE = require_permissionless_api_oracles_stress_run.RATE_FEED_TYPE;
17
- exports.REVERT_SCORE = require_permissionless_api_oracles_score_formula.REVERT_SCORE;
18
17
  exports.SCORE_MULTIPLIER = require_permissionless_api_oracles_score_formula.SCORE_MULTIPLIER;
19
18
  exports.UNBOUNDED_DOWN = require_permissionless_api_oracles_stress_override.UNBOUNDED_DOWN;
20
19
  exports.UNBOUNDED_UP = require_permissionless_api_oracles_stress_override.UNBOUNDED_UP;
@@ -24,11 +23,13 @@ exports.finalPrice = require_permissionless_api_oracles_score_formula.finalPrice
24
23
  exports.groupOverride = require_permissionless_api_oracles_stress_override.groupOverride;
25
24
  exports.perturb = require_permissionless_api_oracles_stress_override.perturb;
26
25
  exports.rateStub = require_permissionless_api_oracles_stress_override.rateStub;
26
+ exports.readFeedTrees = require_permissionless_api_oracles_stress_run.readFeedTrees;
27
27
  exports.readForest = require_permissionless_api_oracles_stress_run.readForest;
28
28
  exports.readRateTargets = require_permissionless_api_oracles_stress_run.readRateTargets;
29
29
  exports.readUnder = require_permissionless_api_oracles_stress_run.readUnder;
30
30
  exports.roundDataStub = require_permissionless_api_oracles_stress_override.roundDataStub;
31
31
  exports.runAssetScores = require_permissionless_api_oracles_score_run.runAssetScores;
32
+ exports.runFeedPairScore = require_permissionless_api_oracles_score_run.runFeedPairScore;
32
33
  exports.runStressTest = require_permissionless_api_oracles_stress_run.runStressTest;
33
34
  exports.scoreGroup = require_permissionless_api_oracles_stress_score.scoreGroup;
34
35
  exports.scoreOfFactor = require_permissionless_api_oracles_score_formula.scoreOfFactor;
@@ -1,26 +1,20 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region src/permissionless/api/oracles/score/formula.ts
3
3
  /** What every source of a group is made to answer, as a multiple of now. */
4
- const SCORE_MULTIPLIER = 5;
4
+ const SCORE_MULTIPLIER = 10;
5
5
  /**
6
- * The score of a price that stops answering under the lie.
6
+ * How far the final price moved, as a multiple of where it was, either way:
7
+ * 1 for a price that did not move, 1.04 for one 4% off, and
8
+ * {@link SCORE_MULTIPLIER} for one that took the whole lie — the most it can
9
+ * take from one leg, and where a price over two legs of one group, moved
10
+ * further, is held too.
7
11
  *
8
- * Half marks: nobody can borrow against a wrong number, but nobody can be
9
- * liquidated either until the feed is replaced.
10
- */
11
- const REVERT_SCORE = 5;
12
- /**
13
- * 0 to 10 by how far the final price moved, on a log scale against the lie
14
- * itself: 10 for a price that did not move, 0 for one that moved by the full
15
- * {@link SCORE_MULTIPLIER} or more, either way. Rounded to a half point.
16
- *
17
- * A bound holding a price within a few percent keeps a 10; a price that let
18
- * half the lie through, ×√5, scores 5.
12
+ * `null` for a price that stopped answering, which is not a move.
19
13
  */
20
14
  function scoreOfFactor(factor) {
21
- if (factor === null || !Number.isFinite(factor) || factor <= 0) return 5;
22
- const moved = Math.abs(Math.log(factor)) / Math.log(5);
23
- return Math.round(10 * Math.max(0, 1 - moved) * 2) / 2;
15
+ if (factor === null || !Number.isFinite(factor) || factor <= 0) return null;
16
+ const move = factor >= 1 ? factor : 1 / factor;
17
+ return Math.min(10, move);
24
18
  }
25
19
  /**
26
20
  * The price a market settles on: the lower of main and reserve, or the main
@@ -38,22 +32,23 @@ function factorOf(base, stressed) {
38
32
  return Number(stressed) / Number(base);
39
33
  }
40
34
  /**
41
- * The market's score and the group it comes from: the lowest of its groups,
42
- * ties going to the group that moved the price further. 10 where no source
43
- * feeds the price at all, since nothing can be made to lie about it.
35
+ * The market's score and the group it comes from: the furthest any group
36
+ * moved its price. 1 where nothing moved it — no group did, or no source
37
+ * feeds the price at all.
38
+ *
39
+ * A group under which the price stops answering moves nothing and does not
40
+ * set the score; it is listed after those that do, for a reader to see.
44
41
  */
45
42
  function worstOf(impacts) {
46
- const distance = (impact) => impact.factor === null ? Infinity : Math.abs(Math.log(impact.factor));
47
- const sorted = [...impacts].sort((a, b) => a.score - b.score || distance(b) - distance(a));
48
- const worst = sorted[0] ?? null;
43
+ const sorted = [...impacts].sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
44
+ const worst = sorted.find((impact) => impact.score !== null) ?? null;
49
45
  return {
50
- score: worst?.score ?? 10,
46
+ score: worst?.score ?? 1,
51
47
  impacts: sorted,
52
48
  worst
53
49
  };
54
50
  }
55
51
  //#endregion
56
- exports.REVERT_SCORE = REVERT_SCORE;
57
52
  exports.SCORE_MULTIPLIER = SCORE_MULTIPLIER;
58
53
  exports.factorOf = factorOf;
59
54
  exports.finalPrice = finalPrice;
@@ -2,10 +2,10 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_permissionless_api_oracles_score_formula = require("./formula.js");
3
3
  const require_permissionless_api_oracles_score_run = require("./run.js");
4
4
  require("./types.js");
5
- exports.REVERT_SCORE = require_permissionless_api_oracles_score_formula.REVERT_SCORE;
6
5
  exports.SCORE_MULTIPLIER = require_permissionless_api_oracles_score_formula.SCORE_MULTIPLIER;
7
6
  exports.factorOf = require_permissionless_api_oracles_score_formula.factorOf;
8
7
  exports.finalPrice = require_permissionless_api_oracles_score_formula.finalPrice;
9
8
  exports.runAssetScores = require_permissionless_api_oracles_score_run.runAssetScores;
9
+ exports.runFeedPairScore = require_permissionless_api_oracles_score_run.runFeedPairScore;
10
10
  exports.scoreOfFactor = require_permissionless_api_oracles_score_formula.scoreOfFactor;
11
11
  exports.worstOf = require_permissionless_api_oracles_score_formula.worstOf;