@vultisig/rujira 8.0.0 → 10.0.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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # @vultisig/rujira
2
2
 
3
+ ## 10.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`9f71a0e`](https://github.com/vultisig/vultisig-sdk/commit/9f71a0e430aadcb96707448c5e5e077aa0b561e0), [`aea1c28`](https://github.com/vultisig/vultisig-sdk/commit/aea1c28051345ddef9c952108b203caa8b7fa032)]:
8
+ - @vultisig/sdk@0.15.0
9
+
10
+ ## 9.0.0
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [[`9e2ffd6`](https://github.com/vultisig/vultisig-sdk/commit/9e2ffd6f6a8e2c8ad507b6ed2e2c1232bf8a98c7), [`8bef556`](https://github.com/vultisig/vultisig-sdk/commit/8bef55651cba506a515083765d6f7745cce54abe), [`99296f5`](https://github.com/vultisig/vultisig-sdk/commit/99296f5aaf3f9bfb7fe694de034037683e7435ed)]:
15
+ - @vultisig/sdk@0.14.0
16
+
3
17
  ## 8.0.0
4
18
 
5
19
  ### Patch Changes
package/dist/client.d.ts CHANGED
@@ -4,7 +4,10 @@ import { type RujiraConfig } from './config.js';
4
4
  import { RujiraDiscovery } from './discovery/discovery.js';
5
5
  import { RujiraAssets } from './modules/assets.js';
6
6
  import { RujiraDeposit } from './modules/deposit.js';
7
+ import { RujiraGhost } from './modules/ghost.js';
7
8
  import { RujiraOrderbook } from './modules/orderbook.js';
9
+ import { RujiraPerps } from './modules/perps.js';
10
+ import { RujiraStaking } from './modules/staking.js';
8
11
  import { RujiraSwap, type RujiraSwapOptions } from './modules/swap.js';
9
12
  import { RujiraWithdraw } from './modules/withdraw.js';
10
13
  import type { RujiraSigner } from './signer/types.js';
@@ -27,6 +30,9 @@ export declare class RujiraClient {
27
30
  readonly assets: RujiraAssets;
28
31
  readonly deposit: RujiraDeposit;
29
32
  readonly withdraw: RujiraWithdraw;
33
+ readonly staking: RujiraStaking;
34
+ readonly ghost: RujiraGhost;
35
+ readonly perps: RujiraPerps;
30
36
  readonly discovery: RujiraDiscovery;
31
37
  private queryClient;
32
38
  private stargateClient;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -6,7 +6,10 @@ import { RujiraDiscovery } from './discovery/discovery.js';
6
6
  import { RujiraError, RujiraErrorCode, wrapError } from './errors.js';
7
7
  import { RujiraAssets } from './modules/assets.js';
8
8
  import { RujiraDeposit } from './modules/deposit.js';
9
+ import { RujiraGhost } from './modules/ghost.js';
9
10
  import { RujiraOrderbook } from './modules/orderbook.js';
11
+ import { RujiraPerps } from './modules/perps.js';
12
+ import { RujiraStaking } from './modules/staking.js';
10
13
  import { RujiraSwap } from './modules/swap.js';
11
14
  import { RujiraWithdraw } from './modules/withdraw.js';
12
15
  import { base64Encode } from './utils/encoding.js';
@@ -37,6 +40,9 @@ export class RujiraClient {
37
40
  this.assets = new RujiraAssets(this);
38
41
  this.deposit = new RujiraDeposit(this);
39
42
  this.withdraw = new RujiraWithdraw(this);
43
+ this.staking = new RujiraStaking(this);
44
+ this.ghost = new RujiraGhost(this);
45
+ this.perps = new RujiraPerps(this);
40
46
  this.discovery = new RujiraDiscovery({
41
47
  rpcEndpoint: this.config.rpcEndpoint,
42
48
  debug: this.debug,
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,QAA0B,CAAC;AAE5D,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAE9C,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYzD,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,QAA0B,CAAA;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,WAAW,CAAA;AAE7C,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,QAAQ,CAAA;AAEvC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,WAAW,CAAA;AAEzC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,YAAY,CAAA;AAE1C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYzD,CAAA;AAED,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,IAAI,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,eAAe;IAEzB,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAG/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IAGrC,oBAAoB,yBAAyB;IAC7C,gBAAgB,qBAAqB;IAGrC,QAAQ,aAAa;IACrB,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,qBAAqB,0BAA0B;IAG/C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAG7C,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAG7B,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IAGjC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,2CAA2C;IAC3C,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,+BAA+B;IAC/B,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClC,sCAAsC;IACtC,SAAgB,SAAS,EAAE,OAAO,CAAC;gBAGjC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,UAAQ;IAcnB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUlC;AAmDD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,kBAAgC,GAAG,WAAW,CAiElG"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,oBAAY,eAAe;IAEzB,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAG/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IAGrC,oBAAoB,yBAAyB;IAC7C,gBAAgB,qBAAqB;IAGrC,QAAQ,aAAa;IACrB,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,qBAAqB,0BAA0B;IAG/C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAG7C,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAG7B,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IAGjC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,2CAA2C;IAC3C,SAAgB,IAAI,EAAE,eAAe,CAAA;IACrC,+BAA+B;IAC/B,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjC,sCAAsC;IACtC,SAAgB,SAAS,EAAE,OAAO,CAAA;gBAEtB,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,UAAQ;IAaxF;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUlC;AA+CD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,kBAAgC,GAAG,WAAW,CA6DlG"}
package/dist/errors.js CHANGED
@@ -55,6 +55,7 @@ export class RujiraError extends Error {
55
55
  this.retryable = retryable;
56
56
  // Maintain proper stack trace (Node.js specific)
57
57
  if (typeof Error.captureStackTrace === 'function') {
58
+ ;
58
59
  Error.captureStackTrace(this, RujiraError);
59
60
  }
60
61
  }
@@ -113,11 +114,7 @@ const USER_FRIENDLY_MESSAGES = {
113
114
  /**
114
115
  * Retryable error codes
115
116
  */
116
- const RETRYABLE_ERRORS = new Set([
117
- RujiraErrorCode.NETWORK_ERROR,
118
- RujiraErrorCode.RPC_ERROR,
119
- RujiraErrorCode.TIMEOUT,
120
- ]);
117
+ const RETRYABLE_ERRORS = new Set([RujiraErrorCode.NETWORK_ERROR, RujiraErrorCode.RPC_ERROR, RujiraErrorCode.TIMEOUT]);
121
118
  /**
122
119
  * Check if an error is retryable
123
120
  */
package/dist/index.d.ts CHANGED
@@ -33,7 +33,13 @@ export * from './types.js';
33
33
  export type { RujiraClientOptions } from './client.js';
34
34
  export { RujiraClient } from './client.js';
35
35
  export { RujiraAssets } from './modules/assets.js';
36
+ export type { GhostTransactionParams, GhostVaultInfo, GhostVaultStatus } from './modules/ghost.js';
37
+ export { RujiraGhost } from './modules/ghost.js';
36
38
  export { RujiraOrderbook } from './modules/orderbook.js';
39
+ export type { PerpsMarket, PerpsTransactionParams } from './modules/perps.js';
40
+ export { RujiraPerps } from './modules/perps.js';
41
+ export type { StakeParams, StakeTransactionParams, StakingPosition, UnstakeParams } from './modules/staking.js';
42
+ export { RujiraStaking } from './modules/staking.js';
37
43
  export { RujiraSwap } from './modules/swap.js';
38
44
  export type { RujiraSigner, VultisigVault } from './signer/types.js';
39
45
  export { VultisigRujiraProvider } from './signer/vultisig-provider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,YAAY,EACV,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAA;AAGzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAG1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAGtE,cAAc,mBAAmB,CAAA;AAGjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,YAAY,EACV,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAA;AAGzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAG1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAGtE,cAAc,mBAAmB,CAAA;AAGjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -33,7 +33,10 @@ export * from './types.js';
33
33
  export { RujiraClient } from './client.js';
34
34
  // Module exports
35
35
  export { RujiraAssets } from './modules/assets.js';
36
+ export { RujiraGhost } from './modules/ghost.js';
36
37
  export { RujiraOrderbook } from './modules/orderbook.js';
38
+ export { RujiraPerps } from './modules/perps.js';
39
+ export { RujiraStaking } from './modules/staking.js';
37
40
  export { RujiraSwap } from './modules/swap.js';
38
41
  export { VultisigRujiraProvider } from './signer/vultisig-provider.js';
39
42
  // Asset registry (formerly @vultisig/assets)
@@ -0,0 +1,123 @@
1
+ /**
2
+ * GHOST Money Market module for lending/borrowing on Rujira
3
+ * @module modules/ghost
4
+ */
5
+ import type { Coin } from '@cosmjs/proto-signing';
6
+ import type { RujiraClient } from '../client.js';
7
+ export type GhostVaultInfo = {
8
+ /** Vault contract address */
9
+ address: string;
10
+ /** Asset denom (e.g. 'btc-btc') */
11
+ denom: string;
12
+ /** Human-readable asset name */
13
+ asset: string;
14
+ };
15
+ export type GhostVaultStatus = {
16
+ /** Vault contract address */
17
+ address: string;
18
+ /** Asset denom */
19
+ denom: string;
20
+ /** Raw status response from contract */
21
+ status: Record<string, unknown>;
22
+ };
23
+ export type GhostVaultConfig = {
24
+ /** Vault contract address */
25
+ address: string;
26
+ /** Raw config response from contract */
27
+ config: Record<string, unknown>;
28
+ };
29
+ export type GhostTransactionParams = {
30
+ contractAddress: string;
31
+ executeMsg: object;
32
+ funds: Coin[];
33
+ };
34
+ export type GhostCreditTransactionParams = {
35
+ contractAddress: string;
36
+ executeMsg: object;
37
+ funds: Coin[];
38
+ };
39
+ export declare class RujiraGhost {
40
+ private readonly client;
41
+ private discoveredVaults;
42
+ constructor(client: RujiraClient);
43
+ /**
44
+ * List known GHOST lending vaults (hardcoded, instant).
45
+ */
46
+ listVaults(): GhostVaultInfo[];
47
+ /**
48
+ * Discover vaults dynamically from chain via code_id query.
49
+ * Falls back to hardcoded addresses on failure. Cached per instance.
50
+ */
51
+ discoverVaults(): Promise<GhostVaultInfo[]>;
52
+ /**
53
+ * Get vault contract address for an asset.
54
+ */
55
+ getVaultAddress(denom: string): string | null;
56
+ /**
57
+ * Query vault status (utilization, rates, pool sizes).
58
+ */
59
+ getVaultStatus(denom: string): Promise<GhostVaultStatus>;
60
+ /**
61
+ * Query vault configuration (interest rate params, underlying denom).
62
+ */
63
+ getVaultConfig(denom: string): Promise<GhostVaultConfig>;
64
+ /**
65
+ * Build deposit (lend) transaction params.
66
+ * Deposits assets into a GHOST vault to earn yield.
67
+ * Returns receipt tokens representing your share.
68
+ */
69
+ buildDeposit(params: {
70
+ denom: string;
71
+ amount: string;
72
+ }): GhostTransactionParams;
73
+ /**
74
+ * Build withdraw (unlend) transaction params.
75
+ * Withdraws assets from a GHOST vault by returning receipt tokens.
76
+ */
77
+ buildWithdraw(params: {
78
+ denom: string;
79
+ receiptAmount: string;
80
+ }): GhostTransactionParams;
81
+ /**
82
+ * Build create credit account transaction.
83
+ */
84
+ buildCreateCreditAccount(params: {
85
+ salt: string;
86
+ label: string;
87
+ tag?: string;
88
+ }): GhostCreditTransactionParams;
89
+ /**
90
+ * Build borrow transaction via credit account dispatch.
91
+ */
92
+ buildBorrow(params: {
93
+ creditAccount: string;
94
+ denom: string;
95
+ amount: string;
96
+ }): GhostCreditTransactionParams;
97
+ /**
98
+ * Build repay transaction via credit account dispatch.
99
+ */
100
+ buildRepay(params: {
101
+ creditAccount: string;
102
+ denom: string;
103
+ amount: string;
104
+ }): GhostCreditTransactionParams;
105
+ /**
106
+ * Build close credit position transaction.
107
+ */
108
+ buildClosePosition(params: {
109
+ creditAccount: string;
110
+ }): GhostCreditTransactionParams;
111
+ /**
112
+ * Query credit accounts for an owner.
113
+ */
114
+ getCreditAccounts(owner: string): Promise<Record<string, unknown>>;
115
+ /**
116
+ * Query a specific credit account.
117
+ */
118
+ getCreditAccount(creditAccount: string): Promise<Record<string, unknown>>;
119
+ /** Ghost Credit contract address */
120
+ get creditContract(): string;
121
+ private resolveVault;
122
+ }
123
+ //# sourceMappingURL=ghost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost.d.ts","sourceRoot":"","sources":["../../src/modules/ghost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * GHOST Money Market module for lending/borrowing on Rujira
3
+ * @module modules/ghost
4
+ */
5
+ import { RujiraError, RujiraErrorCode, wrapError } from '../errors.js';
6
+ import { isPositiveBigInt } from '../utils/format.js';
7
+ // Known vault contract addresses (mainnet)
8
+ const GHOST_VAULTS = {
9
+ // Major L1 assets
10
+ 'btc-btc': 'thor18e6gxcvmqfn06l09gurgwh3urlj9xztqagaslgspl2l74ejuujnqqlzzun',
11
+ 'eth-eth': 'thor1xufzny7n3565jy3rvglacengpn6eufw7lk5y9h4zxludkfe96q4s9j5uln',
12
+ 'bch-bch': 'thor1km2sgadhmev34v40evf8qh2yw77hxecakn9nu0g35zdtsf905ehqhqk76r',
13
+ 'doge-doge': 'thor1drfu6vrn06gam7fdk07xqmavthgy6rnmnmm2mh4fa047qsny52aqvxuck9',
14
+ 'ltc-ltc': 'thor1633kq6mxwn24ezdn38xpngksx8wlu458yesdqf3xhs2cfaan96cs2c3gdz',
15
+ 'xrp-xrp': 'thor1cvry7e7uzd89dv4hls5rg5m4xykczzu2qvj8dq5e93c75566tk9q7cya3l',
16
+ 'gaia-atom': 'thor1wl05yf4keucptp9m69yzenafmn674r9jcwfwdufar75hq9hcmu9sk66g8w',
17
+ 'avax-avax': 'thor13etu2zrdqlh69j87dd5dlnfpwa6cuhzlphm7jhj097uvue7mpc5s8y7xal',
18
+ // Stablecoins
19
+ 'eth-usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 'thor1hs6wzyk4tf25ujd7lu07hhnkj4tl38m3wpp6qqw50y5r3e3x7zksnvj3qr',
20
+ 'eth-usdt-0xdac17f958d2ee523a2206206994597c13d831ec7': 'thor1smdzjdm5q5e5kf6farvcgmxe44uhga2ety68veu2nupf5dzx55xsn3u4rj',
21
+ 'avax-usdc-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e': 'thor1hvfg2t2nrjc7svttlq0asehy5hhkvltzjyl7gr3xkredp202hv4synlrle',
22
+ 'base-usdc-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913': 'thor19l9tl8h6nkf5ea4qaxqht6qzgrh5nnh3sng588plke7n72swhn4s5lpyru',
23
+ 'bsc-usdt-0x55d398326f99059ff775485246999027b3197955': 'thor1es23h3sdeytdhntaa88xl3fndj3vahpzm3d0xe8f2vf80d8kygwqlm7zux',
24
+ // THORChain native
25
+ rune: 'thor12xadusl39ad4ru8j333pgylav2lqkgldf0l2etx6wv9u5npzm3as4l5nxx',
26
+ tcy: 'thor197g3d76rp4dsvfy5zz67h5fr3aj8vjmzezmfy9c8z7t9nh63wsms85amlw',
27
+ 'x/ruji': 'thor1dqfh48jyjnm60g5xu89vf2q9dm8dv99lcft60php6quljrzc4k9syuugtm',
28
+ // Base chain
29
+ 'base-eth': 'thor1yskkyzurah4yxj49udkgacpfj0mkyfmm23al5rmng7nuktd3vpusv8r66h',
30
+ 'base-cbbtc-0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf': 'thor1ycnr44val8v9rexn0qa06m920gr4rrrnldkcnf3pah5nr0lkdsxsnxnwsm',
31
+ // Wrapped assets
32
+ 'eth-dai-0x6b175474e89094c44da98b954eedeac495271d0f': 'thor1pkuuapnanzxseywxgp2dmd39p2ysgws2gq9dzs2kw680ed7x58rq03fs9a',
33
+ 'eth-wbtc-0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': 'thor1374grrwf8fndz2glcas7vt6y0fa5vw4lxgh7ay9wm4kc5cjymygsatfs6k',
34
+ 'eth-usdp-0x8e870d67f660d95d5be530380d0ec0bd388289e1': 'thor1jj7nt72ne7mvtsfvp9rze6w4d8pz69cr5s04602gestqpleamweqw8wm6y',
35
+ 'eth-gusd-0x056fd409e1d7a124bd7017459dfea2f387b6d5cd': 'thor1u6razughlrjdu99ku3n803fq0pj5upnut2axj0kxpeaanch9kh7qfprdsn',
36
+ };
37
+ const GHOST_CREDIT_CONTRACT = 'thor1ekkt8wfls055t7f7yznj07j0s4mtndkq546swutzv2de7sfcxptq27duyt';
38
+ /**
39
+ * GHOST Money Market module.
40
+ *
41
+ * Supports lending (vault deposit/withdraw) and borrowing (credit accounts).
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const client = new RujiraClient();
46
+ * await client.connect();
47
+ *
48
+ * // List available vaults
49
+ * const vaults = client.ghost.listVaults();
50
+ *
51
+ * // Query vault status
52
+ * const status = await client.ghost.getVaultStatus('btc-btc');
53
+ *
54
+ * // Build deposit transaction
55
+ * const tx = client.ghost.buildDeposit({ denom: 'btc-btc', amount: '100000' });
56
+ * ```
57
+ */
58
+ // Ghost vault code ID for dynamic discovery
59
+ const GHOST_VAULT_CODE_ID = 114;
60
+ export class RujiraGhost {
61
+ constructor(client) {
62
+ this.discoveredVaults = null;
63
+ this.client = client;
64
+ }
65
+ // --- Vault Discovery ---
66
+ /**
67
+ * List known GHOST lending vaults (hardcoded, instant).
68
+ */
69
+ listVaults() {
70
+ const vaults = this.discoveredVaults ?? GHOST_VAULTS;
71
+ return Object.entries(vaults).map(([denom, address]) => ({
72
+ address,
73
+ denom,
74
+ asset: denom
75
+ .split('-')
76
+ .map(s => s.toUpperCase())
77
+ .join('-'),
78
+ }));
79
+ }
80
+ /**
81
+ * Discover vaults dynamically from chain via code_id query.
82
+ * Falls back to hardcoded addresses on failure. Cached per instance.
83
+ */
84
+ async discoverVaults() {
85
+ if (this.discoveredVaults)
86
+ return this.listVaults();
87
+ try {
88
+ const restUrl = this.client.config.restEndpoint;
89
+ const resp = await fetch(`${restUrl}/cosmwasm/wasm/v1/code/${GHOST_VAULT_CODE_ID}/contracts?pagination.limit=100`);
90
+ if (!resp.ok)
91
+ throw new Error(`HTTP ${resp.status}`);
92
+ const data = (await resp.json());
93
+ const contracts = data.contracts ?? [];
94
+ if (contracts.length > 0) {
95
+ const vaultMap = {};
96
+ for (const addr of contracts) {
97
+ try {
98
+ const config = await this.client.queryContract(addr, { config: {} });
99
+ if (config.denom) {
100
+ vaultMap[config.denom] = addr;
101
+ }
102
+ }
103
+ catch {
104
+ // Skip broken contracts
105
+ }
106
+ }
107
+ if (Object.keys(vaultMap).length > 0) {
108
+ this.discoveredVaults = vaultMap;
109
+ }
110
+ }
111
+ }
112
+ catch {
113
+ // Fall through to hardcoded
114
+ }
115
+ return this.listVaults();
116
+ }
117
+ /**
118
+ * Get vault contract address for an asset.
119
+ */
120
+ getVaultAddress(denom) {
121
+ const vaults = this.discoveredVaults ?? GHOST_VAULTS;
122
+ return vaults[denom.toLowerCase()] ?? null;
123
+ }
124
+ // --- Vault Queries ---
125
+ /**
126
+ * Query vault status (utilization, rates, pool sizes).
127
+ */
128
+ async getVaultStatus(denom) {
129
+ const address = this.resolveVault(denom);
130
+ try {
131
+ const status = await this.client.queryContract(address, { status: {} });
132
+ return { address, denom, status };
133
+ }
134
+ catch (error) {
135
+ throw wrapError(error);
136
+ }
137
+ }
138
+ /**
139
+ * Query vault configuration (interest rate params, underlying denom).
140
+ */
141
+ async getVaultConfig(denom) {
142
+ const address = this.resolveVault(denom);
143
+ try {
144
+ const config = await this.client.queryContract(address, { config: {} });
145
+ return { address, config };
146
+ }
147
+ catch (error) {
148
+ throw wrapError(error);
149
+ }
150
+ }
151
+ // --- Vault Lending Operations ---
152
+ /**
153
+ * Build deposit (lend) transaction params.
154
+ * Deposits assets into a GHOST vault to earn yield.
155
+ * Returns receipt tokens representing your share.
156
+ */
157
+ buildDeposit(params) {
158
+ const address = this.resolveVault(params.denom);
159
+ if (!params.amount || !isPositiveBigInt(params.amount)) {
160
+ throw new RujiraError(RujiraErrorCode.INVALID_AMOUNT, 'Deposit amount must be positive');
161
+ }
162
+ return {
163
+ contractAddress: address,
164
+ executeMsg: { deposit: {} },
165
+ funds: [{ denom: params.denom.toLowerCase(), amount: params.amount }],
166
+ };
167
+ }
168
+ /**
169
+ * Build withdraw (unlend) transaction params.
170
+ * Withdraws assets from a GHOST vault by returning receipt tokens.
171
+ */
172
+ buildWithdraw(params) {
173
+ const address = this.resolveVault(params.denom);
174
+ if (!params.receiptAmount || !isPositiveBigInt(params.receiptAmount)) {
175
+ throw new RujiraError(RujiraErrorCode.INVALID_AMOUNT, 'Withdraw amount must be positive');
176
+ }
177
+ // Receipt token denom follows the x/ghost-vault/{underlying_denom} format.
178
+ // Verified on-chain: tx 2677B142... (GHOST withdraw on mainnet thorchain-1)
179
+ return {
180
+ contractAddress: address,
181
+ executeMsg: { withdraw: {} },
182
+ funds: [{ denom: `x/ghost-vault/${params.denom.toLowerCase()}`, amount: params.receiptAmount }],
183
+ };
184
+ }
185
+ // --- Credit Account Operations ---
186
+ /**
187
+ * Build create credit account transaction.
188
+ */
189
+ buildCreateCreditAccount(params) {
190
+ return {
191
+ contractAddress: GHOST_CREDIT_CONTRACT,
192
+ executeMsg: {
193
+ create: {
194
+ salt: params.salt,
195
+ label: params.label,
196
+ tag: params.tag ?? null,
197
+ },
198
+ },
199
+ funds: [],
200
+ };
201
+ }
202
+ /**
203
+ * Build borrow transaction via credit account dispatch.
204
+ */
205
+ buildBorrow(params) {
206
+ if (!params.amount || !isPositiveBigInt(params.amount)) {
207
+ throw new RujiraError(RujiraErrorCode.INVALID_AMOUNT, 'Borrow amount must be positive');
208
+ }
209
+ return {
210
+ contractAddress: GHOST_CREDIT_CONTRACT,
211
+ executeMsg: {
212
+ account: {
213
+ addr: params.creditAccount,
214
+ msgs: [{ borrow: { denom: params.denom, amount: params.amount } }],
215
+ },
216
+ },
217
+ funds: [],
218
+ };
219
+ }
220
+ /**
221
+ * Build repay transaction via credit account dispatch.
222
+ */
223
+ buildRepay(params) {
224
+ if (!params.amount || !isPositiveBigInt(params.amount)) {
225
+ throw new RujiraError(RujiraErrorCode.INVALID_AMOUNT, 'Repay amount must be positive');
226
+ }
227
+ return {
228
+ contractAddress: GHOST_CREDIT_CONTRACT,
229
+ executeMsg: {
230
+ account: {
231
+ addr: params.creditAccount,
232
+ msgs: [{ repay: { denom: params.denom, amount: params.amount } }],
233
+ },
234
+ },
235
+ funds: [{ denom: params.denom, amount: params.amount }],
236
+ };
237
+ }
238
+ /**
239
+ * Build close credit position transaction.
240
+ */
241
+ buildClosePosition(params) {
242
+ return {
243
+ contractAddress: GHOST_CREDIT_CONTRACT,
244
+ executeMsg: {
245
+ account: {
246
+ addr: params.creditAccount,
247
+ msgs: [{ close: {} }],
248
+ },
249
+ },
250
+ funds: [],
251
+ };
252
+ }
253
+ /**
254
+ * Query credit accounts for an owner.
255
+ */
256
+ async getCreditAccounts(owner) {
257
+ try {
258
+ return await this.client.queryContract(GHOST_CREDIT_CONTRACT, {
259
+ accounts: { owner },
260
+ });
261
+ }
262
+ catch (error) {
263
+ throw wrapError(error);
264
+ }
265
+ }
266
+ /**
267
+ * Query a specific credit account.
268
+ */
269
+ async getCreditAccount(creditAccount) {
270
+ try {
271
+ return await this.client.queryContract(GHOST_CREDIT_CONTRACT, {
272
+ account: creditAccount,
273
+ });
274
+ }
275
+ catch (error) {
276
+ throw wrapError(error);
277
+ }
278
+ }
279
+ /** Ghost Credit contract address */
280
+ get creditContract() {
281
+ return GHOST_CREDIT_CONTRACT;
282
+ }
283
+ // --- Internal ---
284
+ resolveVault(denom) {
285
+ const vaults = this.discoveredVaults ?? GHOST_VAULTS;
286
+ const address = vaults[denom.toLowerCase()];
287
+ if (!address) {
288
+ const supported = Object.keys(vaults).join(', ');
289
+ throw new RujiraError(RujiraErrorCode.INVALID_ASSET, `Unknown GHOST vault for denom '${denom}'. Supported: ${supported}`);
290
+ }
291
+ return address;
292
+ }
293
+ }
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Orderbook module for limit orders on Rujira DEX
3
3
  */
4
+ import { Coin } from '@cosmjs/proto-signing';
4
5
  import type { RujiraClient } from '../client.js';
5
- import type { LimitOrderParams, Order, OrderBook, OrderResult, OrderSide } from '../types.js';
6
+ import type { FinExecuteMsg, LimitOrderParams, Order, OrderBook, OrderResult, OrderSide } from '../types.js';
6
7
  /**
7
8
  * Orderbook module for managing limit orders.
8
9
  *
@@ -60,6 +61,23 @@ export declare class RujiraOrderbook {
60
61
  cancelOrder(contractAddress: string, side: OrderSide, price: string): Promise<{
61
62
  txHash: string;
62
63
  }>;
64
+ /**
65
+ * Build a limit order transaction without executing.
66
+ * Returns contract address, message, and funds for external signing.
67
+ */
68
+ buildPlaceOrder(params: LimitOrderParams): Promise<{
69
+ contractAddress: string;
70
+ msg: FinExecuteMsg;
71
+ funds: Coin[];
72
+ }>;
73
+ /**
74
+ * Build a cancel order transaction without executing.
75
+ */
76
+ buildCancelOrder(contractAddress: string, side: OrderSide, price: string): {
77
+ contractAddress: string;
78
+ msg: FinExecuteMsg;
79
+ funds: Coin[];
80
+ };
63
81
  /**
64
82
  * Get user's open orders.
65
83
  */
@@ -1 +1 @@
1
- {"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/modules/orderbook.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAGhD,OAAO,KAAK,EAIV,gBAAgB,EAChB,KAAK,EACL,SAAS,EAET,WAAW,EACX,SAAS,EACV,MAAM,aAAa,CAAA;AAIpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAEjD;;;;;OAKG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAcpF;;;;;OAKG;IACG,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAuC1E;;;OAGG;YACW,iBAAiB;IAiC/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsDhE;;OAEG;IACG,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAcvG;;OAEG;IACG,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAiEpH;;OAEG;IACG,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAgD/F,eAAe;IAa7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,mBAAmB;YAcb,aAAa;IAyB3B,OAAO,CAAC,oBAAoB;CAS7B"}
1
+ {"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/modules/orderbook.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAI5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAGhD,OAAO,KAAK,EAEV,aAAa,EAEb,gBAAgB,EAChB,KAAK,EACL,SAAS,EAET,WAAW,EACX,SAAS,EAEV,MAAM,aAAa,CAAA;AAKpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAEjD;;;;;OAKG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAcpF;;;;;OAKG;IACG,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAuC1E;;;OAGG;YACW,iBAAiB;IAiC/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsDhE;;OAEG;IACG,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAavG;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QACvD,eAAe,EAAE,MAAM,CAAA;QACvB,GAAG,EAAE,aAAa,CAAA;QAClB,KAAK,EAAE,IAAI,EAAE,CAAA;KACd,CAAC;IAwBF;;OAEG;IACH,gBAAgB,CACd,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,GACZ;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE;IAWjE;;OAEG;IACG,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAiEpH;;OAEG;IACG,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAgD/F,eAAe;IAa7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,mBAAmB;YAcb,aAAa;IAyB3B,OAAO,CAAC,oBAAoB;CAS7B"}