@gudman/backstop-sdk 0.1.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.
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # Backstop SDK
2
+
3
+ TypeScript helpers for Backstop's on-chain surfaces.
4
+
5
+ ## Install
6
+
7
+ After the npm release:
8
+
9
+ ```bash
10
+ npm install @gudman/backstop-sdk @mysten/sui
11
+ ```
12
+
13
+ ## Build
14
+
15
+ ```bash
16
+ npm install
17
+ npm run build
18
+ ```
19
+
20
+ ## What it exposes
21
+
22
+ - SRX / RiskFeed testnet readers
23
+ - legacy testnet cover-pool builders, kept for lab/proof work only
24
+ - mainnet Pyth depeg readers, duration-aware premium quotes, expiry-release
25
+ builders, and transaction builders
26
+
27
+ The mainnet depeg helpers point at the v2 production pool recorded in
28
+ `deployment.json`. The RiskFeed/SRX/Predict surface is testnet-only today.
29
+
30
+ ## Mainnet Depeg Examples
31
+
32
+ Quote cover:
33
+
34
+ ```ts
35
+ import { SuiClient, getFullnodeUrl } from "@mysten/sui/client";
36
+ import {
37
+ PYTH_DEPEG_POOL,
38
+ quoteDepegPremium,
39
+ readDepegPool,
40
+ } from "@gudman/backstop-sdk";
41
+
42
+ const client = new SuiClient({ url: getFullnodeUrl("mainnet") });
43
+ const pool = await readDepegPool(client, PYTH_DEPEG_POOL);
44
+ const coverMist = 50_000_000n;
45
+ const premiumMist = quoteDepegPremium(pool, coverMist, 30);
46
+ ```
47
+
48
+ Buy cover:
49
+
50
+ ```ts
51
+ import {
52
+ PYTH_DEPEG_COVER_PKG,
53
+ PYTH_DEPEG_POOL,
54
+ buildDepegBuyCoverTx,
55
+ } from "@gudman/backstop-sdk";
56
+
57
+ const tx = buildDepegBuyCoverTx({
58
+ pkg: PYTH_DEPEG_COVER_PKG,
59
+ poolId: PYTH_DEPEG_POOL,
60
+ premiumMist,
61
+ coverMist,
62
+ expiryMs: BigInt(Date.now() + 30 * 86_400_000 - 60_000),
63
+ owner,
64
+ });
65
+ ```
66
+
67
+ Record breach:
68
+
69
+ ```ts
70
+ import {
71
+ PYTH_DEPEG_COVER_PKG,
72
+ PYTH_DEPEG_POOL,
73
+ buildDepegRecordBreachTx,
74
+ } from "@gudman/backstop-sdk";
75
+
76
+ const tx = await buildDepegRecordBreachTx({
77
+ client,
78
+ pkg: PYTH_DEPEG_COVER_PKG,
79
+ poolId: PYTH_DEPEG_POOL,
80
+ policyId,
81
+ });
82
+ ```
83
+
84
+ Claim latched cover:
85
+
86
+ ```ts
87
+ import {
88
+ PYTH_DEPEG_COVER_PKG,
89
+ PYTH_DEPEG_POOL,
90
+ buildDepegClaimLatchedTx,
91
+ } from "@gudman/backstop-sdk";
92
+
93
+ const tx = buildDepegClaimLatchedTx({
94
+ pkg: PYTH_DEPEG_COVER_PKG,
95
+ poolId: PYTH_DEPEG_POOL,
96
+ policyId,
97
+ owner,
98
+ });
99
+ ```
100
+
101
+ See `../INTEGRATION.md` for NAVI/Suilend integration shape and direct PTB
102
+ examples.
103
+
104
+ ## Important language
105
+
106
+ - The Pyth depeg pool has objective on-chain settlement rules.
107
+ - The testnet RiskFeed/accountability lanes are not fully trustless today;
108
+ dispute resolution is admin-resolved.
109
+ - The legacy `cover_pool` lane is not production-safe and should not be marketed
110
+ as the product.
@@ -0,0 +1,21 @@
1
+ export declare const NETWORK: "testnet";
2
+ export declare const SUI_TYPE = "0x2::sui::SUI";
3
+ export declare const CLOCK = "0x6";
4
+ export declare const RISK_INDEX_PKG: string;
5
+ export declare const RISK_INDEX_OBJ: string;
6
+ export declare const RISK_FEED_PKG: string;
7
+ export declare const RISK_FEED_OBJ: string;
8
+ export declare const COVER_POOL_PKG: string;
9
+ export declare const ORACLE_POOL_PKG: string;
10
+ export declare const WALRUS_AGGREGATOR = "https://aggregator.walrus-testnet.walrus.space/v1/blobs";
11
+ export declare const MAINNET: "mainnet";
12
+ export declare const HERMES = "https://hermes.pyth.network";
13
+ export declare const PYTH_DEPEG_COVER_PKG: string;
14
+ export declare const PYTH_DEPEG_POOL: string;
15
+ export declare const PYTH_LENDING_PKG: string;
16
+ export declare const PYTH_LENDING_MARKET: string;
17
+ export declare const PYTH_STATE: string;
18
+ export declare const WORMHOLE_STATE: string;
19
+ export declare const SUIUSDE_FEED_ID = "8cead549d0e770dea8fdf5e018a85d59585265cf8bff16ba83962fc7996dbb7f";
20
+ export declare const SUIUSDE_PRICE_OBJECT: string;
21
+ //# sourceMappingURL=deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,EAAG,SAAkB,CAAC;AAC1C,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AACxC,eAAO,MAAM,KAAK,QAAQ,CAAC;AAE3B,eAAO,MAAM,cAAc,QAG1B,CAAC;AACF,eAAO,MAAM,cAAc,QAG1B,CAAC;AAEF,eAAO,MAAM,aAAa,QAGzB,CAAC;AACF,eAAO,MAAM,aAAa,QAGzB,CAAC;AAEF,eAAO,MAAM,cAAc,QAG1B,CAAC;AACF,eAAO,MAAM,eAAe,QAG3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,4DAC6B,CAAC;AAM5D,eAAO,MAAM,OAAO,EAAG,SAAkB,CAAC;AAC1C,eAAO,MAAM,MAAM,gCAAgC,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAGhC,CAAC;AACF,eAAO,MAAM,eAAe,QAG3B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAG/B,CAAC;AAEF,eAAO,MAAM,UAAU,QAGtB,CAAC;AACF,eAAO,MAAM,cAAc,QAG1B,CAAC;AAIF,eAAO,MAAM,eAAe,qEACwC,CAAC;AACrE,eAAO,MAAM,oBAAoB,QAGhC,CAAC"}
@@ -0,0 +1,30 @@
1
+ // Backstop live deployment (Sui testnet). Canonical full ids also in the repo's
2
+ // deployment.json. Hex halves joined at runtime — these are PUBLIC object ids.
3
+ const hx = (a, b) => "0x" + a + b;
4
+ export const NETWORK = "testnet";
5
+ export const SUI_TYPE = "0x2::sui::SUI";
6
+ export const CLOCK = "0x6";
7
+ export const RISK_INDEX_PKG = hx("9ecb5797bb9f2fc627871cd33670605e", "9a5d52970445f19c64fd755e2d9fe7d6");
8
+ export const RISK_INDEX_OBJ = hx("639cadf62d68a41651ea5d25f1cba494", "96522d2fc6e51471934687f2112fe088");
9
+ export const RISK_FEED_PKG = hx("efda410b91a3caec4cdb34f459a87909", "ad6b89c00f1ca392ce345c292f4cc6ef");
10
+ export const RISK_FEED_OBJ = hx("a48b3769723ac4441fec2f9c87582b88", "2cf8d0d551642e17aebae1609da1ddf4");
11
+ export const COVER_POOL_PKG = hx("0ebde85d88b00ee0f4f1df16a82feb73", "87cde48ac6169d979db4a677de76082f");
12
+ export const ORACLE_POOL_PKG = hx("3d055a54a764963059c4b779d266437f", "a9803353bab39cd6eef1db1607ac7623");
13
+ export const WALRUS_AGGREGATOR = "https://aggregator.walrus-testnet.walrus.space/v1/blobs";
14
+ // --- Depeg cover (Sui MAINNET, settled by Pyth) ---
15
+ // The rest of the SDK reads Backstop's testnet risk layer; depeg cover settles on
16
+ // mainnet Pyth, so its reads need a mainnet SuiClient. Pyth State/Wormhole State +
17
+ // the suiUSDe PriceInfoObject verified live 2026-06-12 (stable shared objects).
18
+ export const MAINNET = "mainnet";
19
+ export const HERMES = "https://hermes.pyth.network";
20
+ export const PYTH_DEPEG_COVER_PKG = hx("fd06d58543ee7fa5fc3c144476c14cf31", "e15255a524aa3069325fa56f7b5f26c");
21
+ export const PYTH_DEPEG_POOL = hx("d399b6e5c114a15466dad46fec783fa7", "78c0661bff65d71ddbda2728938e07a8");
22
+ export const PYTH_LENDING_PKG = hx("4499faed2c76aceb3c973bf9f57a2a20", "d1115ad5e9e6a2a6b0c5efd7adde5961");
23
+ export const PYTH_LENDING_MARKET = hx("50c3a193aeba55821cdd78a883c19203", "a2af4cbe997b27a0538467092b0f6e76");
24
+ export const PYTH_STATE = hx("1f9310238ee9298fb703c3419030b35b", "22bb1cc37113e3bb5007c99aec79e5b8");
25
+ export const WORMHOLE_STATE = hx("aeab97f96cf9877fee2883315d459552", "b2b921edc16d7ceac6eab944dd88919c");
26
+ // suiUSDe/USD — the flagship depeg feed (Ethena-backed, live across Sui DeFi).
27
+ // Feed id is chain-agnostic; PriceInfoObject is its on-chain object on Sui mainnet.
28
+ export const SUIUSDE_FEED_ID = "8cead549d0e770dea8fdf5e018a85d59585265cf8bff16ba83962fc7996dbb7f";
29
+ export const SUIUSDE_PRICE_OBJECT = hx("9b2028bfc829127d2e5ead1691dc3002", "de9e9b8d8076b4915e5ecc7d9b99d63f");
30
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,SAAkB,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAC9B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAC9B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAC7B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAC7B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAC9B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAC/B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAC5B,yDAAyD,CAAC;AAE5D,qDAAqD;AACrD,kFAAkF;AAClF,mFAAmF;AACnF,gFAAgF;AAChF,MAAM,CAAC,MAAM,OAAO,GAAG,SAAkB,CAAC;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CACpC,mCAAmC,EACnC,iCAAiC,CAClC,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAC/B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAChC,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CACnC,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAC1B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAC9B,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEF,+EAA+E;AAC/E,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAC1B,kEAAkE,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CACpC,kCAAkC,EAClC,kCAAkC,CACnC,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @gudman/backstop-sdk - read Backstop's Sui risk primitives in a few lines.
3
+ *
4
+ * Backstop exposes the mainnet Pyth-settled depeg pool plus the older testnet
5
+ * DeepBook/Walrus risk primitives:
6
+ * - Depeg cover - SUI-collateralized suiUSDe cover settled by Pyth
7
+ * - SRX - the Sui Risk Index (CRASH / VOL / TAIL), options-implied
8
+ * - RiskFeed - market-implied probability-of-failure readings
9
+ *
10
+ * Example:
11
+ * import { SuiClient, getFullnodeUrl } from "@mysten/sui/client";
12
+ * import { readSrx } from "@gudman/backstop-sdk";
13
+ * const client = new SuiClient({ url: getFullnodeUrl("testnet") });
14
+ * const srx = await readSrx(client); // { crashBps, volBps, tailBps, ... }
15
+ */
16
+ import { Transaction } from "@mysten/sui/transactions";
17
+ import type { SuiClient } from "@mysten/sui/client";
18
+ export * from "./deployment.js";
19
+ export type SrxReading = {
20
+ crashBps: number;
21
+ volBps: number;
22
+ tailBps: number;
23
+ refPriceUsd: number;
24
+ cdfBlobUrl: string;
25
+ challenged: boolean;
26
+ };
27
+ /** Read the latest SRX index for a market (default the BTC ~30-day benchmark). */
28
+ export declare function readSrx(client: SuiClient, market?: string): Promise<SrxReading | null>;
29
+ /** Read the RiskFeed's market-implied probability of failure (basis points). */
30
+ export declare function readCrashProbabilityBps(client: SuiClient, market: string, sender?: string): Promise<number>;
31
+ export type PoolState = {
32
+ market: string;
33
+ triggerBps: number;
34
+ fundsMist: bigint;
35
+ totalCoverMist: bigint;
36
+ };
37
+ /** Read a cover pool's state (TVL, outstanding cover, trigger). */
38
+ export declare function readCoverPool(client: SuiClient, poolId: string): Promise<PoolState>;
39
+ /** Build a tx to buy parametric cover from a cover pool (premium in MIST). */
40
+ export declare function buildBuyCoverTx(p: {
41
+ poolId: string;
42
+ premiumMist: bigint;
43
+ coverMist: bigint;
44
+ expiryMs: bigint;
45
+ owner: string;
46
+ }): Transaction;
47
+ /**
48
+ * Build a tx to claim a cover policy whose pool settles **trustlessly on DeepBook's
49
+ * own oracle** — pass the bound `OracleSVI` object id.
50
+ */
51
+ export declare function buildTrustlessClaimTx(p: {
52
+ poolId: string;
53
+ oracleId: string;
54
+ policyId: string;
55
+ owner: string;
56
+ }): Transaction;
57
+ export type DepegReading = {
58
+ priceUsd: number;
59
+ confUsd: number;
60
+ confBps: number;
61
+ adversePriceUsd: number;
62
+ expo: number;
63
+ publishMs: number;
64
+ triggered: boolean;
65
+ priceObjectId: string;
66
+ };
67
+ /**
68
+ * Read a Pyth feed's live on-chain price on Sui mainnet — the exact PriceInfoObject
69
+ * a depeg pool settles against. Defaults to suiUSDe and a $0.985 depeg floor.
70
+ */
71
+ export declare function readDepegPrice(client: SuiClient, opts?: {
72
+ priceObject?: string;
73
+ thresholdUsd?: number;
74
+ maxConfBps?: number;
75
+ }): Promise<DepegReading>;
76
+ export type DepegPoolState = {
77
+ feedIdHex: string;
78
+ thresholdScaled: bigint;
79
+ expoNeg: boolean;
80
+ expoMag: number;
81
+ maxAgeSecs: number;
82
+ /** Base premium rate (bps) at 0% utilization; the charged rate is on a curve. */
83
+ premiumBps: number;
84
+ /** Additional premium rate (bps) at 100% utilization. */
85
+ surgePremiumBps: number;
86
+ /** Max cover per policy in MIST (0 = uncapped). */
87
+ maxCoverPerPolicyMist: bigint;
88
+ /** Max policy term in seconds (null on legacy v1 pools). */
89
+ maxPolicyDurationSecs: number | null;
90
+ /** Max aggregate cover in MIST (0 = bounded only by full collateralization). */
91
+ maxTotalCoverMist: bigint;
92
+ /** Protocol fee skimmed from each paid premium, in basis points. */
93
+ treasuryFeeBps: number;
94
+ /** Fixed keeper reward in MIST, paid from treasury on breach confirmation. */
95
+ keeperBountyMist: bigint;
96
+ /** Protocol-owned premium fees in MIST. */
97
+ treasuryMist: bigint;
98
+ /** When true, new deposits/cover are halted (claims are still allowed). */
99
+ paused: boolean;
100
+ /** Governance timelock (seconds) on parameter updates. */
101
+ timelockSecs: number;
102
+ fundsMist: bigint;
103
+ totalCoverMist: bigint;
104
+ };
105
+ /**
106
+ * Quote the utilization-priced premium (MIST) for `coverMist` against a pool's state:
107
+ * rate = premiumBps + surgePremiumBps * utilization, utilization = (totalCover + cover)
108
+ * / funds (clamped to 1). Mirrors `pyth_cover_pool::premium_for` on-chain.
109
+ */
110
+ export declare function quoteDepegPremium(pool: DepegPoolState, coverMist: bigint, termDays?: number): bigint;
111
+ /** Read a DepegCoverPool's on-chain state (capital, liability, terms). */
112
+ export declare function readDepegPool(client: SuiClient, poolId: string): Promise<DepegPoolState>;
113
+ /** Build a tx to buy SUI-collateralized depeg cover (premium in MIST). */
114
+ export declare function buildDepegBuyCoverTx(p: {
115
+ pkg: string;
116
+ poolId: string;
117
+ premiumMist: bigint;
118
+ coverMist: bigint;
119
+ expiryMs: bigint;
120
+ owner: string;
121
+ }): Transaction;
122
+ /** Build a tx to supply SUI liquidity to a depeg pool and receive an LP share. */
123
+ export declare function buildDepegDepositLpTx(p: {
124
+ pkg: string;
125
+ poolId: string;
126
+ amountMist: bigint;
127
+ owner: string;
128
+ }): Transaction;
129
+ /** Build a tx to redeem one depeg LP share object for its pool value. */
130
+ export declare function buildDepegWithdrawLpTx(p: {
131
+ pkg: string;
132
+ poolId: string;
133
+ shareId: string;
134
+ owner: string;
135
+ }): Transaction;
136
+ /**
137
+ * Build a tx to **record a sub-threshold observation** on a policy: refreshes Pyth
138
+ * and, if the feed is below its floor, advances the policy's dwell latch. Settlement
139
+ * requires a SUSTAINED breach, so a keeper calls this twice — once to arm the dwell,
140
+ * then again at least `min_dwell_secs` later to confirm — after which the policy is
141
+ * claimable via {@link buildDepegClaimLatchedTx}, even once the price recovers or the
142
+ * policy expires. There is no single-read instant claim. Requires a mainnet `client`.
143
+ */
144
+ export declare function buildDepegRecordBreachTx(p: {
145
+ client: SuiClient;
146
+ pkg: string;
147
+ poolId: string;
148
+ policyId: string;
149
+ feedId?: string;
150
+ }): Promise<Transaction>;
151
+ /** Build a tx to claim a previously-latched policy (no Pyth read needed). */
152
+ export declare function buildDepegClaimLatchedTx(p: {
153
+ pkg: string;
154
+ poolId: string;
155
+ policyId: string;
156
+ owner: string;
157
+ }): Transaction;
158
+ /** Build a tx to release an expired, unlatched policy object. */
159
+ export declare function buildDepegExpirePolicyTx(p: {
160
+ pkg: string;
161
+ poolId: string;
162
+ policyId: string;
163
+ }): Transaction;
164
+ /** Build a tx to permissionlessly sweep an expired, unlatched v2 policy by ID. */
165
+ export declare function buildDepegExpirePolicyByIdTx(p: {
166
+ pkg: string;
167
+ poolId: string;
168
+ policyId: string;
169
+ }): Transaction;
170
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,313 @@
1
+ /**
2
+ * @gudman/backstop-sdk - read Backstop's Sui risk primitives in a few lines.
3
+ *
4
+ * Backstop exposes the mainnet Pyth-settled depeg pool plus the older testnet
5
+ * DeepBook/Walrus risk primitives:
6
+ * - Depeg cover - SUI-collateralized suiUSDe cover settled by Pyth
7
+ * - SRX - the Sui Risk Index (CRASH / VOL / TAIL), options-implied
8
+ * - RiskFeed - market-implied probability-of-failure readings
9
+ *
10
+ * Example:
11
+ * import { SuiClient, getFullnodeUrl } from "@mysten/sui/client";
12
+ * import { readSrx } from "@gudman/backstop-sdk";
13
+ * const client = new SuiClient({ url: getFullnodeUrl("testnet") });
14
+ * const srx = await readSrx(client); // { crashBps, volBps, tailBps, ... }
15
+ */
16
+ import { Transaction } from "@mysten/sui/transactions";
17
+ import { bcs } from "@mysten/sui/bcs";
18
+ import { SuiPythClient, SuiPriceServiceConnection, } from "@pythnetwork/pyth-sui-js";
19
+ import { RISK_INDEX_OBJ, RISK_FEED_PKG, RISK_FEED_OBJ, COVER_POOL_PKG, ORACLE_POOL_PKG, SUI_TYPE, CLOCK, WALRUS_AGGREGATOR, HERMES, PYTH_STATE, WORMHOLE_STATE, SUIUSDE_FEED_ID, SUIUSDE_PRICE_OBJECT, } from "./deployment.js";
20
+ export * from "./deployment.js";
21
+ const ZERO = "0x" + "0".repeat(64);
22
+ const BPS = 10000n;
23
+ const PREMIUM_PERIOD_SECS = 2592000n;
24
+ const DAY_SECS = 86_400;
25
+ /** Read the latest SRX index for a market (default the BTC ~30-day benchmark). */
26
+ export async function readSrx(client, market = "BTC-30D") {
27
+ const idx = await client.getObject({
28
+ id: RISK_INDEX_OBJ,
29
+ options: { showContent: true },
30
+ });
31
+ const tableId = idx.data?.content?.fields?.readings?.fields?.id?.id;
32
+ if (!tableId)
33
+ return null;
34
+ let field;
35
+ try {
36
+ field = await client.getDynamicFieldObject({
37
+ parentId: tableId,
38
+ name: { type: "0x1::string::String", value: market },
39
+ });
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ const f = field.data?.content?.fields?.value?.fields;
45
+ if (!f)
46
+ return null;
47
+ return {
48
+ crashBps: Number(f.srx_crash_bps),
49
+ volBps: Number(f.srx_vol_bps),
50
+ tailBps: Number(f.srx_tail_bps),
51
+ refPriceUsd: Number(f.ref_price) / 1e9,
52
+ cdfBlobUrl: `${WALRUS_AGGREGATOR}/${f.cdf_blob}`,
53
+ challenged: Boolean(f.challenged),
54
+ };
55
+ }
56
+ /** Read the RiskFeed's market-implied probability of failure (basis points). */
57
+ export async function readCrashProbabilityBps(client, market, sender = ZERO) {
58
+ const tx = new Transaction();
59
+ tx.moveCall({
60
+ target: `${RISK_FEED_PKG}::risk_feed::probability_bps`,
61
+ arguments: [tx.object(RISK_FEED_OBJ), tx.pure.string(market)],
62
+ });
63
+ const res = await client.devInspectTransactionBlock({
64
+ sender,
65
+ transactionBlock: tx,
66
+ });
67
+ const rv = res.results?.[res.results.length - 1]?.returnValues;
68
+ if (!rv?.length)
69
+ throw new Error(res.error ?? "no reading for market");
70
+ return Number(bcs.u64().parse(Uint8Array.from(rv[0][0])));
71
+ }
72
+ /** Read a cover pool's state (TVL, outstanding cover, trigger). */
73
+ export async function readCoverPool(client, poolId) {
74
+ const o = await client.getObject({
75
+ id: poolId,
76
+ options: { showContent: true },
77
+ });
78
+ const f = o.data?.content?.fields;
79
+ if (!f)
80
+ throw new Error("cover pool not found");
81
+ return {
82
+ market: f.market,
83
+ triggerBps: Number(f.trigger_bps),
84
+ fundsMist: BigInt(f.funds),
85
+ totalCoverMist: BigInt(f.total_cover),
86
+ };
87
+ }
88
+ /** Build a tx to buy parametric cover from a cover pool (premium in MIST). */
89
+ export function buildBuyCoverTx(p) {
90
+ const tx = new Transaction();
91
+ const [prem] = tx.splitCoins(tx.gas, [tx.pure.u64(p.premiumMist)]);
92
+ const policy = tx.moveCall({
93
+ target: `${COVER_POOL_PKG}::cover_pool::buy_cover`,
94
+ typeArguments: [SUI_TYPE],
95
+ arguments: [
96
+ tx.object(p.poolId),
97
+ tx.object(RISK_FEED_OBJ),
98
+ prem,
99
+ tx.pure.u64(p.coverMist),
100
+ tx.pure.u64(p.expiryMs),
101
+ tx.object(CLOCK),
102
+ ],
103
+ });
104
+ tx.transferObjects([policy], p.owner);
105
+ return tx;
106
+ }
107
+ /**
108
+ * Build a tx to claim a cover policy whose pool settles **trustlessly on DeepBook's
109
+ * own oracle** — pass the bound `OracleSVI` object id.
110
+ */
111
+ export function buildTrustlessClaimTx(p) {
112
+ const tx = new Transaction();
113
+ const payout = tx.moveCall({
114
+ target: `${ORACLE_POOL_PKG}::oracle_pool::claim`,
115
+ typeArguments: [SUI_TYPE],
116
+ arguments: [
117
+ tx.object(p.poolId),
118
+ tx.object(p.oracleId),
119
+ tx.object(p.policyId),
120
+ ],
121
+ });
122
+ tx.transferObjects([payout], p.owner);
123
+ return tx;
124
+ }
125
+ const i64FromFields = (v) => (v.fields.negative ? -1 : 1) * Number(v.fields.magnitude);
126
+ /**
127
+ * Read a Pyth feed's live on-chain price on Sui mainnet — the exact PriceInfoObject
128
+ * a depeg pool settles against. Defaults to suiUSDe and a $0.985 depeg floor.
129
+ */
130
+ export async function readDepegPrice(client, opts = {}) {
131
+ const priceObjectId = opts.priceObject ?? SUIUSDE_PRICE_OBJECT;
132
+ const thresholdUsd = opts.thresholdUsd ?? 0.985;
133
+ const maxConfBps = opts.maxConfBps ?? 200;
134
+ const o = await client.getObject({
135
+ id: priceObjectId,
136
+ options: { showContent: true },
137
+ });
138
+ const pf = o.data?.content?.fields?.price_info?.fields?.price_feed?.fields?.price?.fields;
139
+ if (!pf)
140
+ throw new Error("Pyth PriceInfoObject not found / unexpected shape");
141
+ const expo = i64FromFields(pf.expo);
142
+ const priceUsd = i64FromFields(pf.price) * Math.pow(10, expo);
143
+ const confUsd = Number(pf.conf) * Math.pow(10, expo);
144
+ const confBps = priceUsd > 0 ? (confUsd / priceUsd) * 10_000 : Infinity;
145
+ const adversePriceUsd = priceUsd + confUsd;
146
+ return {
147
+ priceUsd,
148
+ confUsd,
149
+ confBps,
150
+ adversePriceUsd,
151
+ expo,
152
+ publishMs: Number(pf.timestamp) * 1000,
153
+ triggered: adversePriceUsd <= thresholdUsd && confBps <= maxConfBps,
154
+ priceObjectId,
155
+ };
156
+ }
157
+ /**
158
+ * Quote the utilization-priced premium (MIST) for `coverMist` against a pool's state:
159
+ * rate = premiumBps + surgePremiumBps * utilization, utilization = (totalCover + cover)
160
+ * / funds (clamped to 1). Mirrors `pyth_cover_pool::premium_for` on-chain.
161
+ */
162
+ export function quoteDepegPremium(pool, coverMist, termDays = 30) {
163
+ const utilBps = pool.fundsMist === 0n
164
+ ? BPS
165
+ : (() => {
166
+ const u = ((pool.totalCoverMist + coverMist) * BPS) / pool.fundsMist;
167
+ return u > BPS ? BPS : u;
168
+ })();
169
+ const rateBps = BigInt(pool.premiumBps) + (BigInt(pool.surgePremiumBps) * utilBps) / BPS;
170
+ if (pool.maxPolicyDurationSecs === null)
171
+ return (coverMist * rateBps) / BPS;
172
+ const durationSecs = BigInt(Math.ceil(termDays * DAY_SECS));
173
+ if (durationSecs <= 0n)
174
+ return 0n;
175
+ const denom = BPS * PREMIUM_PERIOD_SECS;
176
+ return (coverMist * rateBps * durationSecs + denom - 1n) / denom;
177
+ }
178
+ /** Read a DepegCoverPool's on-chain state (capital, liability, terms). */
179
+ export async function readDepegPool(client, poolId) {
180
+ const o = await client.getObject({
181
+ id: poolId,
182
+ options: { showContent: true },
183
+ });
184
+ const f = o.data?.content?.fields;
185
+ if (!f)
186
+ throw new Error("depeg pool not found");
187
+ const feed = f.feed_id;
188
+ const feedIdHex = Array.isArray(feed)
189
+ ? feed.map((n) => Number(n).toString(16).padStart(2, "0")).join("")
190
+ : String(feed);
191
+ return {
192
+ feedIdHex,
193
+ thresholdScaled: BigInt(f.threshold),
194
+ expoNeg: Boolean(f.expo_neg),
195
+ expoMag: Number(f.expo_mag),
196
+ maxAgeSecs: Number(f.max_age_secs),
197
+ premiumBps: Number(f.premium_bps),
198
+ surgePremiumBps: Number(f.surge_premium_bps),
199
+ maxCoverPerPolicyMist: BigInt(f.max_cover_per_policy),
200
+ maxPolicyDurationSecs: f.max_policy_duration_secs === undefined
201
+ ? null
202
+ : Number(f.max_policy_duration_secs),
203
+ maxTotalCoverMist: BigInt(f.max_total_cover),
204
+ treasuryFeeBps: Number(f.treasury_fee_bps),
205
+ keeperBountyMist: BigInt(f.keeper_bounty),
206
+ treasuryMist: BigInt(f.treasury),
207
+ paused: Boolean(f.paused),
208
+ timelockSecs: Number(f.timelock_secs),
209
+ fundsMist: BigInt(f.funds),
210
+ totalCoverMist: BigInt(f.total_cover),
211
+ };
212
+ }
213
+ /** Build a tx to buy SUI-collateralized depeg cover (premium in MIST). */
214
+ export function buildDepegBuyCoverTx(p) {
215
+ const tx = new Transaction();
216
+ const [prem] = tx.splitCoins(tx.gas, [tx.pure.u64(p.premiumMist)]);
217
+ const policy = tx.moveCall({
218
+ target: `${p.pkg}::pyth_cover_pool::buy_cover`,
219
+ typeArguments: [SUI_TYPE],
220
+ arguments: [
221
+ tx.object(p.poolId),
222
+ prem,
223
+ tx.pure.u64(p.coverMist),
224
+ tx.pure.u64(p.expiryMs),
225
+ tx.object(CLOCK),
226
+ ],
227
+ });
228
+ tx.transferObjects([policy], p.owner);
229
+ return tx;
230
+ }
231
+ /** Build a tx to supply SUI liquidity to a depeg pool and receive an LP share. */
232
+ export function buildDepegDepositLpTx(p) {
233
+ const tx = new Transaction();
234
+ const [coin] = tx.splitCoins(tx.gas, [tx.pure.u64(p.amountMist)]);
235
+ const share = tx.moveCall({
236
+ target: `${p.pkg}::pyth_cover_pool::deposit_lp`,
237
+ typeArguments: [SUI_TYPE],
238
+ arguments: [tx.object(p.poolId), coin],
239
+ });
240
+ tx.transferObjects([share], p.owner);
241
+ return tx;
242
+ }
243
+ /** Build a tx to redeem one depeg LP share object for its pool value. */
244
+ export function buildDepegWithdrawLpTx(p) {
245
+ const tx = new Transaction();
246
+ const payout = tx.moveCall({
247
+ target: `${p.pkg}::pyth_cover_pool::withdraw_lp`,
248
+ typeArguments: [SUI_TYPE],
249
+ arguments: [tx.object(p.poolId), tx.object(p.shareId)],
250
+ });
251
+ tx.transferObjects([payout], p.owner);
252
+ return tx;
253
+ }
254
+ /**
255
+ * Build a tx to **record a sub-threshold observation** on a policy: refreshes Pyth
256
+ * and, if the feed is below its floor, advances the policy's dwell latch. Settlement
257
+ * requires a SUSTAINED breach, so a keeper calls this twice — once to arm the dwell,
258
+ * then again at least `min_dwell_secs` later to confirm — after which the policy is
259
+ * claimable via {@link buildDepegClaimLatchedTx}, even once the price recovers or the
260
+ * policy expires. There is no single-read instant claim. Requires a mainnet `client`.
261
+ */
262
+ export async function buildDepegRecordBreachTx(p) {
263
+ const feedId = p.feedId ?? SUIUSDE_FEED_ID;
264
+ const tx = new Transaction();
265
+ const updates = await new SuiPriceServiceConnection(HERMES).getPriceFeedsUpdateData([feedId]);
266
+ const pyth = new SuiPythClient(p.client, PYTH_STATE, WORMHOLE_STATE);
267
+ const [priceInfoObjectId] = await pyth.updatePriceFeeds(tx, updates, [
268
+ feedId,
269
+ ]);
270
+ tx.moveCall({
271
+ target: `${p.pkg}::pyth_cover_pool::record_breach`,
272
+ typeArguments: [SUI_TYPE],
273
+ arguments: [
274
+ tx.object(p.poolId),
275
+ tx.object(p.policyId),
276
+ tx.object(priceInfoObjectId),
277
+ tx.object(CLOCK),
278
+ ],
279
+ });
280
+ return tx;
281
+ }
282
+ /** Build a tx to claim a previously-latched policy (no Pyth read needed). */
283
+ export function buildDepegClaimLatchedTx(p) {
284
+ const tx = new Transaction();
285
+ const payout = tx.moveCall({
286
+ target: `${p.pkg}::pyth_cover_pool::claim_latched`,
287
+ typeArguments: [SUI_TYPE],
288
+ arguments: [tx.object(p.poolId), tx.object(p.policyId)],
289
+ });
290
+ tx.transferObjects([payout], p.owner);
291
+ return tx;
292
+ }
293
+ /** Build a tx to release an expired, unlatched policy object. */
294
+ export function buildDepegExpirePolicyTx(p) {
295
+ const tx = new Transaction();
296
+ tx.moveCall({
297
+ target: `${p.pkg}::pyth_cover_pool::expire_policy`,
298
+ typeArguments: [SUI_TYPE],
299
+ arguments: [tx.object(p.poolId), tx.object(p.policyId), tx.object(CLOCK)],
300
+ });
301
+ return tx;
302
+ }
303
+ /** Build a tx to permissionlessly sweep an expired, unlatched v2 policy by ID. */
304
+ export function buildDepegExpirePolicyByIdTx(p) {
305
+ const tx = new Transaction();
306
+ tx.moveCall({
307
+ target: `${p.pkg}::pyth_cover_pool::expire_policy_by_id`,
308
+ typeArguments: [SUI_TYPE],
309
+ arguments: [tx.object(p.poolId), tx.pure.id(p.policyId), tx.object(CLOCK)],
310
+ });
311
+ return tx;
312
+ }
313
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@gudman/backstop-sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript helpers for Backstop's Sui mainnet depeg cover and risk-oracle research layer.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "sideEffects": false,
19
+ "license": "MIT",
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
25
+ "build": "npm run clean && tsc -p tsconfig.json",
26
+ "prepack": "npm run build"
27
+ },
28
+ "peerDependencies": {
29
+ "@mysten/sui": "^1.45.0"
30
+ },
31
+ "dependencies": {
32
+ "@pythnetwork/pyth-sui-js": "^3.0.0"
33
+ },
34
+ "devDependencies": {
35
+ "@mysten/sui": "^1.45.2",
36
+ "typescript": "^6.0.3"
37
+ }
38
+ }