@mysten-incubation/hashi 0.3.0 → 0.4.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/CHANGELOG.md +16 -0
- package/README.md +1 -1
- package/dist/bitcoin.d.mts +15 -8
- package/dist/bitcoin.mjs +71 -27
- package/dist/client.d.mts +37 -11
- package/dist/client.mjs +90 -15
- package/dist/constants.mjs +2 -2
- package/dist/contracts/hashi/bitcoin_state.mjs +8 -0
- package/dist/contracts/hashi/committee.mjs +10 -3
- package/dist/contracts/hashi/committee_set.mjs +32 -3
- package/dist/contracts/hashi/config.mjs +10 -10
- package/dist/contracts/hashi/config_value.mjs +10 -0
- package/dist/contracts/hashi/deposit.mjs +18 -9
- package/dist/contracts/hashi/deposit_queue.mjs +11 -3
- package/dist/contracts/hashi/hashi.mjs +12 -2
- package/dist/contracts/hashi/mpc_signing.mjs +56 -0
- package/dist/contracts/hashi/proposals.mjs +6 -0
- package/dist/contracts/hashi/treasury.mjs +10 -4
- package/dist/contracts/hashi/utxo.mjs +7 -0
- package/dist/contracts/hashi/utxo_pool.mjs +10 -3
- package/dist/contracts/hashi/versioning.mjs +28 -0
- package/dist/contracts/hashi/withdraw.mjs +17 -1
- package/dist/contracts/hashi/withdrawal_queue.mjs +44 -24
- package/dist/errors.d.mts +28 -1
- package/dist/errors.mjs +17 -1
- package/dist/guardian.d.mts +26 -0
- package/dist/guardian.mjs +101 -0
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +3 -2
- package/dist/types.d.mts +64 -3
- package/package.json +1 -1
package/dist/errors.mjs
CHANGED
|
@@ -52,6 +52,22 @@ var HashiFetchError = class extends Error {
|
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
|
+
* Thrown by the `client.hashi.guardian.*` methods when the guardian `/info`
|
|
56
|
+
* endpoint can't be resolved, reached, parsed, or is not yet initialized.
|
|
57
|
+
* `code` is a stable discriminator for programmatic handling; `url` is the
|
|
58
|
+
* `/info` endpoint that failed (`null` for `not-configured`); `status` carries
|
|
59
|
+
* the HTTP status for `http-error`.
|
|
60
|
+
*/
|
|
61
|
+
var HashiGuardianError = class extends Error {
|
|
62
|
+
constructor(details, options) {
|
|
63
|
+
super(details.message, options);
|
|
64
|
+
this.name = "HashiGuardianError";
|
|
65
|
+
this.code = details.code;
|
|
66
|
+
this.url = details.url ?? null;
|
|
67
|
+
this.status = details.status;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
55
71
|
* Thrown by `HashiClient.deposit()` and `HashiClient.requestWithdrawal()` when
|
|
56
72
|
* one or more amounts are below the live on-chain minimum. Deposits may carry
|
|
57
73
|
* multiple violations (one per offending UTXO) so callers can fix the whole
|
|
@@ -115,4 +131,4 @@ var InvalidBitcoinAddressError = class extends Error {
|
|
|
115
131
|
};
|
|
116
132
|
|
|
117
133
|
//#endregion
|
|
118
|
-
export { AmountBelowMinimumError, HashiConfigError, HashiFetchError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError };
|
|
134
|
+
export { AmountBelowMinimumError, HashiConfigError, HashiFetchError, HashiGuardianError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { GuardianLimiterConfig, GuardianLimiterState, RawGuardianInfo } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/guardian.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Project the token-bucket capacity (sats) forward to `timestampSecs`, mirroring
|
|
6
|
+
* the guardian's Rust limiter: `min(available + elapsed * refillRate, max)`.
|
|
7
|
+
* Timestamps are unix seconds; one at or before `lastUpdatedAtSecs` yields the
|
|
8
|
+
* stored balance.
|
|
9
|
+
*/
|
|
10
|
+
declare function projectCapacity(config: GuardianLimiterConfig, state: GuardianLimiterState, timestampSecs: bigint): bigint;
|
|
11
|
+
/**
|
|
12
|
+
* Estimate the seconds until `amountSats` of capacity is available given the
|
|
13
|
+
* current bucket. Returns `0n` if it is available now, or `null` if it can
|
|
14
|
+
* never be satisfied in a single withdrawal — either the amount exceeds the
|
|
15
|
+
* bucket's maximum capacity, or the refill rate is `0` and a deficit remains.
|
|
16
|
+
*/
|
|
17
|
+
declare function estimateWaitSecs(config: GuardianLimiterConfig, state: GuardianLimiterState, amountSats: bigint, nowSecs: bigint): bigint | null;
|
|
18
|
+
/**
|
|
19
|
+
* Fetch and parse the guardian's read-only `/info` JSON. `origin` is the base
|
|
20
|
+
* URL (no path — e.g. the on-chain `guardian_url`); `/info` is appended here.
|
|
21
|
+
* `u64` strings are parsed to `bigint`, and `limiter` is `null` for an
|
|
22
|
+
* unprovisioned guardian. Failures are wrapped in {@link HashiGuardianError}.
|
|
23
|
+
*/
|
|
24
|
+
declare function fetchGuardianInfo(origin: string): Promise<RawGuardianInfo>;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { estimateWaitSecs, fetchGuardianInfo, projectCapacity };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { HashiGuardianError } from "./errors.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/guardian.ts
|
|
4
|
+
/**
|
|
5
|
+
* Project the token-bucket capacity (sats) forward to `timestampSecs`, mirroring
|
|
6
|
+
* the guardian's Rust limiter: `min(available + elapsed * refillRate, max)`.
|
|
7
|
+
* Timestamps are unix seconds; one at or before `lastUpdatedAtSecs` yields the
|
|
8
|
+
* stored balance.
|
|
9
|
+
*/
|
|
10
|
+
function projectCapacity(config, state, timestampSecs) {
|
|
11
|
+
const refilled = (timestampSecs > state.lastUpdatedAtSecs ? timestampSecs - state.lastUpdatedAtSecs : 0n) * config.refillRateSatsPerSec;
|
|
12
|
+
const projected = state.numTokensAvailableSats + refilled;
|
|
13
|
+
return projected < config.maxBucketCapacitySats ? projected : config.maxBucketCapacitySats;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Estimate the seconds until `amountSats` of capacity is available given the
|
|
17
|
+
* current bucket. Returns `0n` if it is available now, or `null` if it can
|
|
18
|
+
* never be satisfied in a single withdrawal — either the amount exceeds the
|
|
19
|
+
* bucket's maximum capacity, or the refill rate is `0` and a deficit remains.
|
|
20
|
+
*/
|
|
21
|
+
function estimateWaitSecs(config, state, amountSats, nowSecs) {
|
|
22
|
+
if (amountSats > config.maxBucketCapacitySats) return null;
|
|
23
|
+
const available = projectCapacity(config, state, nowSecs);
|
|
24
|
+
if (available >= amountSats) return 0n;
|
|
25
|
+
const deficit = amountSats - available;
|
|
26
|
+
if (config.refillRateSatsPerSec === 0n) return null;
|
|
27
|
+
return (deficit + config.refillRateSatsPerSec - 1n) / config.refillRateSatsPerSec;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetch and parse the guardian's read-only `/info` JSON. `origin` is the base
|
|
31
|
+
* URL (no path — e.g. the on-chain `guardian_url`); `/info` is appended here.
|
|
32
|
+
* `u64` strings are parsed to `bigint`, and `limiter` is `null` for an
|
|
33
|
+
* unprovisioned guardian. Failures are wrapped in {@link HashiGuardianError}.
|
|
34
|
+
*/
|
|
35
|
+
async function fetchGuardianInfo(origin) {
|
|
36
|
+
const endpoint = `${origin.replace(/\/+$/, "")}/info`;
|
|
37
|
+
let res;
|
|
38
|
+
try {
|
|
39
|
+
res = await fetch(endpoint, { headers: { Accept: "application/json" } });
|
|
40
|
+
} catch (cause) {
|
|
41
|
+
throw new HashiGuardianError({
|
|
42
|
+
message: `Guardian endpoint unreachable: ${endpoint}`,
|
|
43
|
+
code: "unreachable",
|
|
44
|
+
url: endpoint
|
|
45
|
+
}, { cause });
|
|
46
|
+
}
|
|
47
|
+
if (!res.ok) throw new HashiGuardianError({
|
|
48
|
+
message: `Guardian /info returned HTTP ${res.status}`,
|
|
49
|
+
code: "http-error",
|
|
50
|
+
url: endpoint,
|
|
51
|
+
status: res.status
|
|
52
|
+
});
|
|
53
|
+
let body;
|
|
54
|
+
try {
|
|
55
|
+
body = await res.json();
|
|
56
|
+
} catch (cause) {
|
|
57
|
+
throw new HashiGuardianError({
|
|
58
|
+
message: "Guardian /info returned a non-JSON body",
|
|
59
|
+
code: "malformed-response",
|
|
60
|
+
url: endpoint
|
|
61
|
+
}, { cause });
|
|
62
|
+
}
|
|
63
|
+
const u64 = (value, field) => {
|
|
64
|
+
if (typeof value !== "string") throw new HashiGuardianError({
|
|
65
|
+
message: `Guardian /info field \`${field}\` must be a string, got ${typeof value}`,
|
|
66
|
+
code: "malformed-response",
|
|
67
|
+
url: endpoint
|
|
68
|
+
});
|
|
69
|
+
try {
|
|
70
|
+
return BigInt(value);
|
|
71
|
+
} catch (cause) {
|
|
72
|
+
throw new HashiGuardianError({
|
|
73
|
+
message: `Guardian /info field \`${field}\` is not an integer: ${JSON.stringify(value)}`,
|
|
74
|
+
code: "malformed-response",
|
|
75
|
+
url: endpoint
|
|
76
|
+
}, { cause });
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const rawLimiter = body.limiter;
|
|
80
|
+
return {
|
|
81
|
+
limiter: rawLimiter == null ? null : {
|
|
82
|
+
state: {
|
|
83
|
+
numTokensAvailableSats: u64(rawLimiter.state?.numTokensAvailableSats, "limiter.state.numTokensAvailableSats"),
|
|
84
|
+
lastUpdatedAtSecs: u64(rawLimiter.state?.lastUpdatedAtSecs, "limiter.state.lastUpdatedAtSecs"),
|
|
85
|
+
nextSeq: u64(rawLimiter.state?.nextSeq, "limiter.state.nextSeq")
|
|
86
|
+
},
|
|
87
|
+
config: {
|
|
88
|
+
refillRateSatsPerSec: u64(rawLimiter.config?.refillRateSatsPerSec, "limiter.config.refillRateSatsPerSec"),
|
|
89
|
+
maxBucketCapacitySats: u64(rawLimiter.config?.maxBucketCapacitySats, "limiter.config.maxBucketCapacitySats")
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
gitRevision: body.gitRevision ?? "",
|
|
93
|
+
committeeEpoch: body.committeeEpoch == null ? null : u64(body.committeeEpoch, "committeeEpoch"),
|
|
94
|
+
btcPubkey: body.btcPubkey ?? null,
|
|
95
|
+
signingPubKey: body.signingPubKey ?? "",
|
|
96
|
+
signedAtMs: body.signedAtMs == null ? null : u64(body.signedAtMs, "signedAtMs")
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
export { estimateWaitSecs, fetchGuardianInfo, projectCapacity };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BitcoinNetwork, CancelWithdrawalParams, DepositFees, DepositHistoryItem, DepositInfo, DepositParams, DepositStatus, GovernanceConfig, HashiClientOptions, HbtcBalance, NetworkConfig, SuiNetwork, TransactionHistoryItem, UtxoId, UtxoLookupResult, UtxoOutput, UtxoUsageResult, WaitOptions, WithdrawalFees, WithdrawalHistoryItem, WithdrawalInfo, WithdrawalParams, WithdrawalStatus } from "./types.mjs";
|
|
1
|
+
import { BitcoinNetwork, CancelWithdrawalParams, DepositFees, DepositHistoryItem, DepositInfo, DepositParams, DepositStatus, GovernanceConfig, GuardianInfoProvider, GuardianLimiterConfig, GuardianLimiterRaw, GuardianLimiterSnapshot, GuardianLimiterState, GuardianWithdrawCheck, HashiClientOptions, HbtcBalance, NetworkConfig, RawGuardianInfo, SuiNetwork, TransactionHistoryItem, UtxoId, UtxoLookupResult, UtxoOutput, UtxoUsageResult, WaitOptions, WithdrawalFees, WithdrawalHistoryItem, WithdrawalInfo, WithdrawalParams, WithdrawalStatus } from "./types.mjs";
|
|
2
2
|
import { HashiClient, hashi } from "./client.mjs";
|
|
3
|
-
import { AmountBelowMinimumError, AmountViolation, HashiConfigError, HashiFetchError, HashiPausedError, InvalidBitcoinAddressCode, InvalidBitcoinAddressError, InvalidParamsError } from "./errors.mjs";
|
|
3
|
+
import { AmountBelowMinimumError, AmountViolation, GuardianErrorCode, HashiConfigError, HashiFetchError, HashiGuardianError, HashiPausedError, InvalidBitcoinAddressCode, InvalidBitcoinAddressError, InvalidParamsError } from "./errors.mjs";
|
|
4
4
|
import { DepositAddressInputs, arkworksToSec1Compressed, bitcoinAddressToWitnessProgram, deriveChildPubkey, generateDepositAddress, twoOfTwoTaprootScriptPathAddress, witnessProgramToAddress } from "./bitcoin.mjs";
|
|
5
|
-
|
|
5
|
+
import { estimateWaitSecs, fetchGuardianInfo, projectCapacity } from "./guardian.mjs";
|
|
6
|
+
export { AmountBelowMinimumError, type AmountViolation, type BitcoinNetwork, type CancelWithdrawalParams, type DepositAddressInputs, type DepositFees, type DepositHistoryItem, type DepositInfo, type DepositParams, type DepositStatus, type GovernanceConfig, type GuardianErrorCode, type GuardianInfoProvider, type GuardianLimiterConfig, type GuardianLimiterRaw, type GuardianLimiterSnapshot, type GuardianLimiterState, type GuardianWithdrawCheck, HashiClient, type HashiClientOptions, HashiConfigError, HashiFetchError, HashiGuardianError, HashiPausedError, type HbtcBalance, type InvalidBitcoinAddressCode, InvalidBitcoinAddressError, InvalidParamsError, type NetworkConfig, type RawGuardianInfo, type SuiNetwork, type TransactionHistoryItem, type UtxoId, type UtxoLookupResult, type UtxoOutput, type UtxoUsageResult, type WaitOptions, type WithdrawalFees, type WithdrawalHistoryItem, type WithdrawalInfo, type WithdrawalParams, type WithdrawalStatus, arkworksToSec1Compressed, bitcoinAddressToWitnessProgram, deriveChildPubkey, estimateWaitSecs, fetchGuardianInfo, generateDepositAddress, hashi, projectCapacity, twoOfTwoTaprootScriptPathAddress, witnessProgramToAddress };
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { AmountBelowMinimumError, HashiConfigError, HashiFetchError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError } from "./errors.mjs";
|
|
1
|
+
import { AmountBelowMinimumError, HashiConfigError, HashiFetchError, HashiGuardianError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError } from "./errors.mjs";
|
|
2
2
|
import { arkworksToSec1Compressed, bitcoinAddressToWitnessProgram, deriveChildPubkey, generateDepositAddress, twoOfTwoTaprootScriptPathAddress, witnessProgramToAddress } from "./bitcoin.mjs";
|
|
3
|
+
import { estimateWaitSecs, fetchGuardianInfo, projectCapacity } from "./guardian.mjs";
|
|
3
4
|
import { HashiClient, hashi } from "./client.mjs";
|
|
4
5
|
|
|
5
|
-
export { AmountBelowMinimumError, HashiClient, HashiConfigError, HashiFetchError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError, arkworksToSec1Compressed, bitcoinAddressToWitnessProgram, deriveChildPubkey, generateDepositAddress, hashi, twoOfTwoTaprootScriptPathAddress, witnessProgramToAddress };
|
|
6
|
+
export { AmountBelowMinimumError, HashiClient, HashiConfigError, HashiFetchError, HashiGuardianError, HashiPausedError, InvalidBitcoinAddressError, InvalidParamsError, arkworksToSec1Compressed, bitcoinAddressToWitnessProgram, deriveChildPubkey, estimateWaitSecs, fetchGuardianInfo, generateDepositAddress, hashi, projectCapacity, twoOfTwoTaprootScriptPathAddress, witnessProgramToAddress };
|
package/dist/types.d.mts
CHANGED
|
@@ -20,6 +20,10 @@ interface HashiClientOptions<Name = "HashiClient"> {
|
|
|
20
20
|
btcRpcUrl?: string;
|
|
21
21
|
/** Override the Sui GraphQL endpoint URL (defaults to `https://fullnode.{network}.sui.io:443/graphql`). */
|
|
22
22
|
graphqlUrl?: string;
|
|
23
|
+
/** Guardian origin URL (e.g. `https://hashi-guardian-devnet.mystenlabs.com`); the SDK appends `/info`. Takes precedence over the on-chain `guardian_url` config. */
|
|
24
|
+
guardianUrl?: string;
|
|
25
|
+
/** Custom guardian-info source. When set, the SDK calls this instead of fetching `/info` — useful for caching, tests, or bespoke transports. */
|
|
26
|
+
guardianInfoProvider?: GuardianInfoProvider;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* Frozen snapshot of every governance-controlled protocol parameter, returned
|
|
@@ -53,8 +57,8 @@ interface GovernanceConfig {
|
|
|
53
57
|
readonly guardianPublicKey: Uint8Array | null;
|
|
54
58
|
/**
|
|
55
59
|
* Guardian's BIP-340 x-only secp256k1 BTC public key (32 bytes), the
|
|
56
|
-
* `pk1` slot of the
|
|
57
|
-
* if unset (deposit-address derivation will fail).
|
|
60
|
+
* `pk1` slot of the immediate 2-of-2 leaf in the on-chain deposit-address
|
|
61
|
+
* descriptor. `null` if unset (deposit-address derivation will fail).
|
|
58
62
|
*/
|
|
59
63
|
readonly guardianBtcPublicKey: Uint8Array | null;
|
|
60
64
|
}
|
|
@@ -229,5 +233,62 @@ interface UtxoLookupResult {
|
|
|
229
233
|
/** Amount in satoshis. */
|
|
230
234
|
readonly amountSats: bigint;
|
|
231
235
|
}
|
|
236
|
+
interface GuardianLimiterState {
|
|
237
|
+
/** Available tokens in satoshis at the snapshot instant. */
|
|
238
|
+
readonly numTokensAvailableSats: bigint;
|
|
239
|
+
/** Unix seconds when the bucket was last updated. */
|
|
240
|
+
readonly lastUpdatedAtSecs: bigint;
|
|
241
|
+
/** Next expected withdrawal sequence number. */
|
|
242
|
+
readonly nextSeq: bigint;
|
|
243
|
+
}
|
|
244
|
+
interface GuardianLimiterConfig {
|
|
245
|
+
/** Token refill rate in satoshis per second. */
|
|
246
|
+
readonly refillRateSatsPerSec: bigint;
|
|
247
|
+
/** Maximum bucket capacity in satoshis. */
|
|
248
|
+
readonly maxBucketCapacitySats: bigint;
|
|
249
|
+
}
|
|
250
|
+
/** Raw limiter state + config, as returned by the guardian `/info` endpoint. */
|
|
251
|
+
interface GuardianLimiterRaw {
|
|
252
|
+
readonly state: GuardianLimiterState;
|
|
253
|
+
readonly config: GuardianLimiterConfig;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Curated guardian identity + limiter, parsed from `GET {guardianUrl}/info`.
|
|
257
|
+
* `limiter` is `null` until the guardian is provisioned/activated.
|
|
258
|
+
*/
|
|
259
|
+
interface RawGuardianInfo {
|
|
260
|
+
readonly limiter: GuardianLimiterRaw | null;
|
|
261
|
+
/** Guardian build git revision (untrusted, enclave-self-reported). */
|
|
262
|
+
readonly gitRevision: string;
|
|
263
|
+
/** Current committee epoch; `null` before the guardian is initialized. */
|
|
264
|
+
readonly committeeEpoch: bigint | null;
|
|
265
|
+
/** Guardian x-only 32-byte BTC pubkey (hex); `null` before provisioning. */
|
|
266
|
+
readonly btcPubkey: string | null;
|
|
267
|
+
/** Guardian ed25519 32-byte signing pubkey (hex). */
|
|
268
|
+
readonly signingPubKey: string;
|
|
269
|
+
/** `GuardianInfo` signing timestamp (ms since epoch); `null` if absent. */
|
|
270
|
+
readonly signedAtMs: bigint | null;
|
|
271
|
+
}
|
|
272
|
+
/** Pluggable source for {@link RawGuardianInfo}; see `HashiClientOptions.guardianInfoProvider`. */
|
|
273
|
+
type GuardianInfoProvider = () => Promise<RawGuardianInfo>;
|
|
274
|
+
/** Derived limiter view returned by `client.hashi.guardian.limiterStatus()`. */
|
|
275
|
+
interface GuardianLimiterSnapshot {
|
|
276
|
+
readonly state: GuardianLimiterState;
|
|
277
|
+
readonly config: GuardianLimiterConfig;
|
|
278
|
+
/** Projected available tokens (sats), accounting for refill since `lastUpdatedAtSecs`. */
|
|
279
|
+
readonly availableNowSats: bigint;
|
|
280
|
+
/** Bucket fill as a percentage in [0, 100]. */
|
|
281
|
+
readonly bucketFillPercent: number;
|
|
282
|
+
/** Unix seconds at which the bucket refills to full (assuming no withdrawals). `null` if already full or the refill rate is 0. */
|
|
283
|
+
readonly fullAtSecs: bigint | null;
|
|
284
|
+
}
|
|
285
|
+
/** Result of `client.hashi.guardian.canWithdraw(amountSats)`. */
|
|
286
|
+
interface GuardianWithdrawCheck {
|
|
287
|
+
readonly allowed: boolean;
|
|
288
|
+
/** Current available capacity in sats. */
|
|
289
|
+
readonly availableNowSats: bigint;
|
|
290
|
+
/** Seconds until `amountSats` is available; `0n` if available now; `null` if it exceeds max capacity (or the refill rate is 0). */
|
|
291
|
+
readonly estimatedWaitSecs: bigint | null;
|
|
292
|
+
}
|
|
232
293
|
//#endregion
|
|
233
|
-
export { BitcoinNetwork, CancelWithdrawalParams, DepositFees, DepositHistoryItem, DepositInfo, DepositParams, DepositStatus, GovernanceConfig, HashiClientOptions, HbtcBalance, NetworkConfig, SuiNetwork, TransactionHistoryItem, UtxoId, UtxoLookupResult, UtxoOutput, UtxoUsageResult, WaitOptions, WithdrawalFees, WithdrawalHistoryItem, WithdrawalInfo, WithdrawalParams, WithdrawalStatus };
|
|
294
|
+
export { BitcoinNetwork, CancelWithdrawalParams, DepositFees, DepositHistoryItem, DepositInfo, DepositParams, DepositStatus, GovernanceConfig, GuardianInfoProvider, GuardianLimiterConfig, GuardianLimiterRaw, GuardianLimiterSnapshot, GuardianLimiterState, GuardianWithdrawCheck, HashiClientOptions, HbtcBalance, NetworkConfig, RawGuardianInfo, SuiNetwork, TransactionHistoryItem, UtxoId, UtxoLookupResult, UtxoOutput, UtxoUsageResult, WaitOptions, WithdrawalFees, WithdrawalHistoryItem, WithdrawalInfo, WithdrawalParams, WithdrawalStatus };
|