@n1xyz/nord-ts 0.0.1 → 0.0.4

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 (237) hide show
  1. package/.eslintrc.js +11 -0
  2. package/README.md +148 -65
  3. package/dist/bridge/NordUser.d.ts +78 -0
  4. package/dist/bridge/NordUser.js +196 -0
  5. package/dist/bridge/client.d.ts +150 -0
  6. package/dist/bridge/client.js +394 -0
  7. package/dist/bridge/const.d.ts +23 -0
  8. package/dist/bridge/const.js +47 -0
  9. package/dist/bridge/index.d.ts +5 -0
  10. package/dist/bridge/index.js +23 -0
  11. package/dist/bridge/types.d.ts +118 -0
  12. package/dist/bridge/types.js +16 -0
  13. package/dist/bridge/utils.d.ts +64 -0
  14. package/dist/bridge/utils.js +131 -0
  15. package/dist/client.d.ts +70 -0
  16. package/dist/client.js +129 -0
  17. package/dist/const.d.ts +2 -5
  18. package/dist/const.js +18 -22
  19. package/dist/constants/endpoints.d.ts +65 -0
  20. package/dist/constants/endpoints.js +68 -0
  21. package/dist/gen/common.d.ts +6 -1
  22. package/dist/gen/common.js +19 -9
  23. package/dist/gen/nord.d.ts +75 -17
  24. package/dist/gen/nord.js +987 -423
  25. package/dist/idl/bridge.d.ts +2 -0
  26. package/dist/idl/bridge.js +703 -0
  27. package/dist/index.d.ts +8 -5
  28. package/dist/index.js +18 -2
  29. package/dist/models/account.d.ts +58 -0
  30. package/dist/models/account.js +6 -0
  31. package/dist/models/index.d.ts +8 -0
  32. package/dist/models/index.js +28 -0
  33. package/dist/models/market.d.ts +137 -0
  34. package/dist/models/market.js +6 -0
  35. package/dist/models/order.d.ts +211 -0
  36. package/dist/models/order.js +6 -0
  37. package/dist/models/token.d.ts +50 -0
  38. package/dist/models/token.js +6 -0
  39. package/dist/nord/Nord.d.ts +222 -49
  40. package/dist/nord/Nord.js +290 -278
  41. package/dist/nord/NordError.d.ts +23 -0
  42. package/dist/nord/NordError.js +48 -0
  43. package/dist/nord/NordImpl.d.ts +6 -2
  44. package/dist/nord/NordImpl.js +21 -1
  45. package/dist/nord/NordUser.d.ts +208 -42
  46. package/dist/nord/NordUser.js +389 -157
  47. package/dist/nord/Subscriber.d.ts +37 -0
  48. package/dist/nord/Subscriber.js +29 -0
  49. package/dist/nord/api/actions.d.ts +101 -0
  50. package/dist/nord/api/actions.js +250 -0
  51. package/dist/nord/api/core.d.ts +49 -0
  52. package/dist/nord/api/core.js +121 -0
  53. package/dist/nord/api/index.d.ts +1 -0
  54. package/dist/nord/api/index.js +17 -0
  55. package/dist/nord/api/market.d.ts +36 -0
  56. package/dist/nord/api/market.js +98 -0
  57. package/dist/nord/api/metrics.d.ts +67 -0
  58. package/dist/nord/api/metrics.js +132 -0
  59. package/dist/nord/api/orderFunctions.d.ts +168 -0
  60. package/dist/nord/api/orderFunctions.js +133 -0
  61. package/dist/nord/api/queries.d.ts +81 -0
  62. package/dist/nord/api/queries.js +187 -0
  63. package/dist/nord/client/Nord.d.ts +335 -0
  64. package/dist/nord/client/Nord.js +532 -0
  65. package/dist/nord/client/NordUser.d.ts +320 -0
  66. package/dist/nord/client/NordUser.js +701 -0
  67. package/dist/nord/core.d.ts +48 -0
  68. package/dist/nord/core.js +97 -0
  69. package/dist/nord/index.d.ts +9 -2
  70. package/dist/nord/index.js +30 -6
  71. package/dist/nord/market.d.ts +36 -0
  72. package/dist/nord/market.js +90 -0
  73. package/dist/nord/metrics.d.ts +67 -0
  74. package/dist/nord/metrics.js +124 -0
  75. package/dist/nord/models/Subscriber.d.ts +37 -0
  76. package/dist/nord/models/Subscriber.js +29 -0
  77. package/dist/nord/queries.d.ts +81 -0
  78. package/dist/nord/queries.js +181 -0
  79. package/dist/nord/types.d.ts +88 -0
  80. package/dist/nord/types.js +2 -0
  81. package/dist/nord/utils/NordError.d.ts +35 -0
  82. package/dist/nord/utils/NordError.js +46 -0
  83. package/dist/nord/websocket.d.ts +49 -0
  84. package/dist/nord/websocket.js +107 -0
  85. package/dist/operations/account.d.ts +58 -0
  86. package/dist/operations/account.js +112 -0
  87. package/dist/operations/market.d.ts +65 -0
  88. package/dist/operations/market.js +131 -0
  89. package/dist/operations/orders.d.ts +57 -0
  90. package/dist/operations/orders.js +129 -0
  91. package/dist/solana/NordUser.d.ts +78 -0
  92. package/dist/solana/NordUser.js +196 -0
  93. package/dist/solana/client.d.ts +139 -0
  94. package/dist/solana/client.js +360 -0
  95. package/dist/solana/const.d.ts +23 -0
  96. package/dist/solana/const.js +47 -0
  97. package/dist/solana/index.d.ts +5 -0
  98. package/dist/solana/index.js +23 -0
  99. package/dist/solana/types.d.ts +118 -0
  100. package/dist/solana/types.js +16 -0
  101. package/dist/solana/utils.d.ts +64 -0
  102. package/dist/solana/utils.js +131 -0
  103. package/dist/types/api.d.ts +152 -0
  104. package/dist/types/api.js +6 -0
  105. package/dist/types/config.d.ts +34 -0
  106. package/dist/types/config.js +6 -0
  107. package/dist/types.d.ts +144 -87
  108. package/dist/types.js +13 -2
  109. package/dist/utils/errors.d.ts +96 -0
  110. package/dist/utils/errors.js +132 -0
  111. package/dist/utils/http.d.ts +35 -0
  112. package/dist/utils/http.js +105 -0
  113. package/dist/utils.d.ts +14 -5
  114. package/dist/utils.js +26 -7
  115. package/dist/websocket/NordWebSocketClient.d.ts +71 -0
  116. package/dist/websocket/NordWebSocketClient.js +343 -0
  117. package/dist/websocket/client.d.ts +93 -0
  118. package/dist/websocket/client.js +222 -0
  119. package/dist/websocket/events.d.ts +19 -0
  120. package/dist/websocket/events.js +2 -0
  121. package/dist/websocket/index.d.ts +2 -0
  122. package/dist/websocket/index.js +5 -0
  123. package/dist/websocket.d.ts +55 -0
  124. package/dist/websocket.js +211 -0
  125. package/docs/assets/navigation.js +1 -1
  126. package/docs/assets/search.js +1 -1
  127. package/docs/classes/Nord.html +2 -15
  128. package/docs/classes/NordUser.html +4 -4
  129. package/docs/enums/FillMode.html +2 -2
  130. package/docs/enums/KeyType.html +2 -2
  131. package/docs/enums/PeakTpsPeriodUnit.html +2 -2
  132. package/docs/enums/Side.html +2 -2
  133. package/docs/functions/assert.html +1 -1
  134. package/docs/functions/bigIntToProtoU128.html +1 -1
  135. package/docs/functions/checkPubKeyLength.html +1 -1
  136. package/docs/functions/checkedFetch.html +1 -1
  137. package/docs/functions/decodeLengthDelimited.html +1 -1
  138. package/docs/functions/encodeLengthDelimited.html +1 -1
  139. package/docs/functions/fillModeToProtoFillMode.html +1 -1
  140. package/docs/functions/findMarket.html +1 -1
  141. package/docs/functions/findToken.html +1 -1
  142. package/docs/functions/makeWalletSignFn.html +1 -1
  143. package/docs/functions/optExpect.html +1 -1
  144. package/docs/functions/optMap.html +1 -1
  145. package/docs/functions/optUnwrap.html +1 -1
  146. package/docs/functions/panic.html +1 -1
  147. package/docs/functions/signAction.html +1 -1
  148. package/docs/functions/toScaledU128.html +1 -1
  149. package/docs/functions/toScaledU64.html +1 -1
  150. package/docs/interfaces/Account.html +2 -2
  151. package/docs/interfaces/ActionInfo.html +2 -2
  152. package/docs/interfaces/ActionQuery.html +2 -2
  153. package/docs/interfaces/ActionResponse.html +2 -2
  154. package/docs/interfaces/ActionsExtendedInfo.html +2 -2
  155. package/docs/interfaces/ActionsQuery.html +2 -2
  156. package/docs/interfaces/ActionsResponse.html +2 -2
  157. package/docs/interfaces/AggregateMetrics.html +2 -2
  158. package/docs/interfaces/BlockQuery.html +2 -2
  159. package/docs/interfaces/BlockResponse.html +2 -2
  160. package/docs/interfaces/BlockSummary.html +2 -2
  161. package/docs/interfaces/BlockSummaryResponse.html +2 -2
  162. package/docs/interfaces/DeltaEvent.html +2 -2
  163. package/docs/interfaces/ERC20TokenInfo.html +2 -2
  164. package/docs/interfaces/Info.html +2 -2
  165. package/docs/interfaces/Market.html +2 -2
  166. package/docs/interfaces/MarketStats.html +2 -2
  167. package/docs/interfaces/MarketsStatsResponse.html +2 -2
  168. package/docs/interfaces/NordConfig.html +2 -2
  169. package/docs/interfaces/Order.html +2 -2
  170. package/docs/interfaces/OrderInfo.html +2 -2
  171. package/docs/interfaces/PerpMarketStats.html +2 -2
  172. package/docs/interfaces/RollmanActionExtendedInfo.html +2 -2
  173. package/docs/interfaces/RollmanActionInfo.html +2 -2
  174. package/docs/interfaces/RollmanActionResponse.html +2 -2
  175. package/docs/interfaces/RollmanActionsResponse.html +2 -2
  176. package/docs/interfaces/RollmanBlockResponse.html +2 -2
  177. package/docs/interfaces/SubscriberConfig.html +2 -2
  178. package/docs/interfaces/Token.html +2 -2
  179. package/docs/interfaces/Trade.html +2 -2
  180. package/docs/interfaces/Trades.html +2 -2
  181. package/docs/modules.html +0 -7
  182. package/docs/types/BigIntValue.html +1 -1
  183. package/docs/variables/DEBUG_KEYS.html +1 -1
  184. package/docs/variables/DEFAULT_FUNDING_AMOUNTS.html +1 -1
  185. package/docs/variables/DEV_CONTRACT_ADDRESS.html +1 -1
  186. package/docs/variables/DEV_TOKEN_INFOS.html +1 -1
  187. package/docs/variables/DEV_URL.html +1 -1
  188. package/docs/variables/ERC20_ABI.html +1 -1
  189. package/docs/variables/EVM_DEV_URL.html +1 -1
  190. package/docs/variables/FAUCET_PRIVATE_ADDRESS.html +1 -1
  191. package/docs/variables/MAX_BUFFER_LEN.html +1 -1
  192. package/docs/variables/NORD_GETTERS_FACET_ABI.html +1 -1
  193. package/docs/variables/NORD_RAMP_FACET_ABI.html +1 -1
  194. package/docs/variables/SESSION_TTL.html +1 -1
  195. package/docs/variables/WEBSERVER_DEV_URL.html +1 -1
  196. package/docs/variables/ZERO_DECIMAL.html +1 -1
  197. package/package.json +10 -12
  198. package/src/bridge/client.ts +487 -0
  199. package/src/bridge/const.ts +53 -0
  200. package/src/bridge/index.ts +7 -0
  201. package/src/bridge/types.ts +127 -0
  202. package/src/bridge/utils.ts +140 -0
  203. package/src/const.ts +20 -25
  204. package/src/gen/common.ts +27 -10
  205. package/src/gen/nord.ts +1044 -483
  206. package/src/idl/bridge.ts +702 -0
  207. package/src/index.ts +24 -5
  208. package/src/nord/{actions.ts → api/actions.ts} +33 -37
  209. package/src/nord/api/core.ts +130 -0
  210. package/src/nord/api/market.ts +125 -0
  211. package/src/nord/api/metrics.ts +154 -0
  212. package/src/nord/api/queries.ts +236 -0
  213. package/src/nord/client/Nord.ts +652 -0
  214. package/src/nord/client/NordUser.ts +1105 -0
  215. package/src/nord/index.ts +16 -2
  216. package/src/nord/models/Subscriber.ts +57 -0
  217. package/src/nord/utils/NordError.ts +72 -0
  218. package/src/types.ts +170 -99
  219. package/src/utils.ts +40 -19
  220. package/src/websocket/NordWebSocketClient.ts +432 -0
  221. package/src/websocket/events.ts +31 -0
  222. package/src/websocket/index.ts +2 -0
  223. package/tests/utils.spec.ts +24 -24
  224. package/docs/classes/Subscriber.html +0 -6
  225. package/docs/functions/createWebSocketSubscription.html +0 -12
  226. package/docs/interfaces/OrderbookOrder.html +0 -6
  227. package/docs/interfaces/OrderbookResponse.html +0 -10
  228. package/docs/interfaces/TradeInfo.html +0 -20
  229. package/docs/interfaces/TradesQueryParams.html +0 -10
  230. package/docs/interfaces/TradesResponse.html +0 -12
  231. package/src/abis/ERC20_ABI.ts +0 -310
  232. package/src/abis/NORD_GETTERS_FACET_ABI.ts +0 -192
  233. package/src/abis/NORD_RAMP_FACET_ABI.ts +0 -141
  234. package/src/abis/index.ts +0 -3
  235. package/src/nord/Nord.ts +0 -504
  236. package/src/nord/NordImpl.ts +0 -8
  237. package/src/nord/NordUser.ts +0 -469
@@ -0,0 +1,150 @@
1
+ import * as anchor from '@coral-xyz/anchor';
2
+ import { AnchorProvider } from '@coral-xyz/anchor';
3
+ import { Connection, Keypair, PublicKey } from '@solana/web3.js';
4
+ import { BlockFacts, DepositSplParams, PdaSeedType, SolanaBridgeConfig, WithdrawalParams } from './types';
5
+ /**
6
+ * Solana Bridge Client for interacting with the bridge program
7
+ */
8
+ export declare class SolanaBridgeClient {
9
+ /** Anchor program instance */
10
+ program: any;
11
+ /** Solana connection */
12
+ connection: Connection;
13
+ /** Program ID */
14
+ programId: PublicKey;
15
+ /** Configuration */
16
+ config: SolanaBridgeConfig;
17
+ /** Anchor provider */
18
+ provider: AnchorProvider;
19
+ /**
20
+ * Create a new Solana Bridge Client
21
+ *
22
+ * @param config Bridge configuration
23
+ * @param wallet Anchor wallet for signing transactions
24
+ */
25
+ constructor(config: SolanaBridgeConfig, wallet: anchor.Wallet);
26
+ /**
27
+ * Derive a PDA (Program Derived Address) for the given seeds
28
+ *
29
+ * @param type PDA seed type
30
+ * @param seeds Additional seeds
31
+ * @returns [PDA, bump]
32
+ */
33
+ findPda(type: PdaSeedType, ...seeds: (Buffer | PublicKey | string | number)[]): Promise<[PublicKey, number]>;
34
+ /**
35
+ * Find the contract storage PDA
36
+ *
37
+ * @returns [PDA, bump]
38
+ */
39
+ findContractStoragePda(): Promise<[PublicKey, number]>;
40
+ /**
41
+ * Find the asset whitelisted PDA for a token mint
42
+ *
43
+ * @param mint Token mint address
44
+ * @returns [PDA, bump]
45
+ */
46
+ findAssetWhitelistedPda(mint: PublicKey): Promise<[PublicKey, number]>;
47
+ /**
48
+ * Find the deposit storage PDA for a deposit index
49
+ *
50
+ * @param depositIndex Deposit index
51
+ * @returns [PDA, bump]
52
+ */
53
+ findDepositStoragePda(depositIndex: number): Promise<[PublicKey, number]>;
54
+ /**
55
+ * Find the block storage PDA for a block ID
56
+ *
57
+ * @param blockId Block ID
58
+ * @returns [PDA, bump]
59
+ */
60
+ findBlockStoragePda(blockId: number): Promise<[PublicKey, number]>;
61
+ /**
62
+ * Find the withdrawal nullifier PDA
63
+ *
64
+ * @param blockId Block ID
65
+ * @param leafIndex Leaf index
66
+ * @returns [PDA, bump]
67
+ */
68
+ findWithdrawalNullifierPda(blockId: number, leafIndex: number): Promise<[PublicKey, number]>;
69
+ /**
70
+ * Find the authority PDA
71
+ *
72
+ * @returns [PDA, bump]
73
+ */
74
+ findAuthorityPda(): Promise<[PublicKey, number]>;
75
+ /**
76
+ * Helper method to sign and send a transaction
77
+ *
78
+ * @param transaction Transaction to sign and send
79
+ * @param signers Additional signers (beyond the provider's wallet)
80
+ * @returns Transaction signature
81
+ */
82
+ private signAndSendTransaction;
83
+ /**
84
+ * Deposit SPL tokens to the bridge
85
+ *
86
+ * @param params Deposit parameters
87
+ * @param signer Signer keypair
88
+ * @returns Transaction signature
89
+ */
90
+ depositSpl(params: DepositSplParams): Promise<string>;
91
+ /**
92
+ * Withdraw tokens from the bridge
93
+ *
94
+ * @param params Withdrawal parameters
95
+ * @param signer Signer keypair
96
+ * @returns Transaction signature
97
+ */
98
+ withdraw(params: WithdrawalParams, signer: Keypair): Promise<string>;
99
+ /**
100
+ * Whitelist an asset (token) for use with the bridge
101
+ *
102
+ * @param mint Token mint address
103
+ * @param signer Operator keypair
104
+ * @returns Transaction signature
105
+ */
106
+ whitelistAsset(mint: PublicKey, signer: Keypair): Promise<string>;
107
+ /**
108
+ * Propose a new block
109
+ *
110
+ * @param facts Block facts
111
+ * @param signer Operator keypair
112
+ * @returns Transaction signature
113
+ */
114
+ proposeBlock(facts: BlockFacts, signer: Keypair): Promise<string>;
115
+ /**
116
+ * Finalize a block
117
+ *
118
+ * @param blockId Block ID
119
+ * @param stateUpdateId State update ID
120
+ * @param signer Payer keypair
121
+ * @returns Transaction signature
122
+ */
123
+ finalizeBlock(blockId: number, stateUpdateId: number, signer: Keypair): Promise<string>;
124
+ /**
125
+ * Finalize a DA fact
126
+ *
127
+ * @param fact DA fact (32-byte array)
128
+ * @param signer Payer keypair
129
+ * @returns Transaction signature
130
+ */
131
+ finalizeDaFact(fact: Buffer, signer: Keypair): Promise<string>;
132
+ /**
133
+ * Initialize the bridge contract
134
+ *
135
+ * @param operator Operator public key
136
+ * @param initialAppStateCommitment Initial app state commitment (32-byte array)
137
+ * @param signer Payer keypair
138
+ * @returns Transaction signature
139
+ */
140
+ initialize(operator: PublicKey, initialAppStateCommitment: Buffer, signer: Keypair): Promise<string>;
141
+ /**
142
+ * Create an associated token account if it doesn't exist
143
+ *
144
+ * @param mint Token mint
145
+ * @param owner Account owner
146
+ * @param payer Transaction payer
147
+ * @returns Associated token account address
148
+ */
149
+ createTokenAccountIfNeeded(mint: PublicKey, owner: PublicKey, payer: Keypair): Promise<PublicKey>;
150
+ }
@@ -0,0 +1,394 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SolanaBridgeClient = void 0;
37
+ const anchor = __importStar(require("@coral-xyz/anchor"));
38
+ const anchor_1 = require("@coral-xyz/anchor");
39
+ const spl_token_1 = require("@solana/spl-token");
40
+ const web3_js_1 = require("@solana/web3.js");
41
+ const types_1 = require("./types");
42
+ // Import the BRIDGE_IDL
43
+ const bridge_1 = require("../idl/bridge");
44
+ /**
45
+ * Solana Bridge Client for interacting with the bridge program
46
+ */
47
+ class SolanaBridgeClient {
48
+ /**
49
+ * Create a new Solana Bridge Client
50
+ *
51
+ * @param config Bridge configuration
52
+ * @param wallet Anchor wallet for signing transactions
53
+ */
54
+ constructor(config, wallet) {
55
+ this.config = config;
56
+ this.connection = new web3_js_1.Connection(config.rpcUrl, {
57
+ commitment: config.commitment,
58
+ });
59
+ this.programId = new web3_js_1.PublicKey(config.programId);
60
+ // Create the provider
61
+ const provider = new anchor_1.AnchorProvider(this.connection, wallet, {
62
+ commitment: config.commitment,
63
+ skipPreflight: true, // Skip simulation
64
+ });
65
+ // Set the provider globally
66
+ anchor.setProvider(provider);
67
+ // Store the provider
68
+ this.provider = provider;
69
+ this.program = new anchor.Program({ ...bridge_1.BRIDGE_IDL, address: config.programId }, provider);
70
+ }
71
+ /**
72
+ * Derive a PDA (Program Derived Address) for the given seeds
73
+ *
74
+ * @param type PDA seed type
75
+ * @param seeds Additional seeds
76
+ * @returns [PDA, bump]
77
+ */
78
+ async findPda(type, ...seeds) {
79
+ const seedBuffers = [
80
+ Buffer.from(type),
81
+ ...seeds.map((seed) => {
82
+ if (seed instanceof web3_js_1.PublicKey) {
83
+ return seed.toBuffer();
84
+ }
85
+ else if (typeof seed === 'string') {
86
+ return Buffer.from(seed);
87
+ }
88
+ else if (typeof seed === 'number') {
89
+ // Convert number to little-endian byte array (8 bytes for u64)
90
+ const buffer = Buffer.alloc(8);
91
+ buffer.writeBigUInt64LE(BigInt(seed), 0);
92
+ return buffer;
93
+ }
94
+ return seed;
95
+ }),
96
+ ];
97
+ return web3_js_1.PublicKey.findProgramAddressSync(seedBuffers, this.programId);
98
+ }
99
+ /**
100
+ * Find the contract storage PDA
101
+ *
102
+ * @returns [PDA, bump]
103
+ */
104
+ async findContractStoragePda() {
105
+ return this.findPda(types_1.PdaSeedType.ContractStorage);
106
+ }
107
+ /**
108
+ * Find the asset whitelisted PDA for a token mint
109
+ *
110
+ * @param mint Token mint address
111
+ * @returns [PDA, bump]
112
+ */
113
+ async findAssetWhitelistedPda(mint) {
114
+ return this.findPda(types_1.PdaSeedType.AssetWhitelisted, mint);
115
+ }
116
+ /**
117
+ * Find the deposit storage PDA for a deposit index
118
+ *
119
+ * @param depositIndex Deposit index
120
+ * @returns [PDA, bump]
121
+ */
122
+ async findDepositStoragePda(depositIndex) {
123
+ return this.findPda(types_1.PdaSeedType.DepositStorage, depositIndex);
124
+ }
125
+ /**
126
+ * Find the block storage PDA for a block ID
127
+ *
128
+ * @param blockId Block ID
129
+ * @returns [PDA, bump]
130
+ */
131
+ async findBlockStoragePda(blockId) {
132
+ return this.findPda(types_1.PdaSeedType.BlockStorage, blockId);
133
+ }
134
+ /**
135
+ * Find the withdrawal nullifier PDA
136
+ *
137
+ * @param blockId Block ID
138
+ * @param leafIndex Leaf index
139
+ * @returns [PDA, bump]
140
+ */
141
+ async findWithdrawalNullifierPda(blockId, leafIndex) {
142
+ return this.findPda(types_1.PdaSeedType.WithdrawalNullifier, blockId, leafIndex);
143
+ }
144
+ /**
145
+ * Find the authority PDA
146
+ *
147
+ * @returns [PDA, bump]
148
+ */
149
+ async findAuthorityPda() {
150
+ return this.findPda(types_1.PdaSeedType.Authority);
151
+ }
152
+ /**
153
+ * Helper method to sign and send a transaction
154
+ *
155
+ * @param transaction Transaction to sign and send
156
+ * @param signers Additional signers (beyond the provider's wallet)
157
+ * @returns Transaction signature
158
+ */
159
+ async signAndSendTransaction(transaction, signers = []) {
160
+ // Use the provider to sign and send the transaction with skipPreflight
161
+ const txSignature = await this.provider.sendAndConfirm(transaction, signers, {
162
+ skipPreflight: true,
163
+ });
164
+ return txSignature;
165
+ }
166
+ /**
167
+ * Deposit SPL tokens to the bridge
168
+ *
169
+ * @param params Deposit parameters
170
+ * @param signer Signer keypair
171
+ * @returns Transaction signature
172
+ */
173
+ async depositSpl(params) {
174
+ const [contractStorage] = await this.findContractStoragePda();
175
+ const [assetWhitelisted] = await this.findAssetWhitelistedPda(params.mint);
176
+ // Get the last deposit index from contract storage
177
+ const contractStorageAccount = await this.program.account.contractStorage.fetch(contractStorage);
178
+ const lastDepositIndex = contractStorageAccount.lastDepositIndex.toNumber();
179
+ // Find the deposit PDA for this deposit
180
+ const [deposit] = await this.findDepositStoragePda(lastDepositIndex + 1);
181
+ // Find the previous deposit PDA if it exists
182
+ let prevDeposit = undefined;
183
+ if (lastDepositIndex > 0) {
184
+ const [prevDepositPda] = await this.findDepositStoragePda(lastDepositIndex);
185
+ prevDeposit = prevDepositPda;
186
+ }
187
+ // Build the transaction
188
+ const accounts = {
189
+ depositor: this.provider.wallet.publicKey,
190
+ deposit,
191
+ assetWhitelisted,
192
+ contractStorage,
193
+ fromAccount: params.fromAccount,
194
+ toAccount: params.toAccount,
195
+ tokenProgram: spl_token_1.TOKEN_2022_PROGRAM_ID,
196
+ systemProgram: web3_js_1.SystemProgram.programId,
197
+ };
198
+ // Create the transaction
199
+ const tx = await this.program.methods
200
+ .depositSpl(params.amount)
201
+ .accounts({ ...accounts, prevDeposit: prevDeposit })
202
+ .transaction();
203
+ // Check if toAccount is initialized and add preinstruction if needed
204
+ try {
205
+ await this.connection.getTokenAccountBalance(params.toAccount);
206
+ }
207
+ catch (error) {
208
+ // Account doesn't exist, add instruction to create it
209
+ // Get the authority PDA which is the owner of the toAccount
210
+ const [authority] = await this.findAuthorityPda();
211
+ const createTokenAccountIx = (0, spl_token_1.createAssociatedTokenAccountInstruction)(this.provider.wallet.publicKey, // payer
212
+ params.toAccount, // associated token account address
213
+ authority, // owner of the token account
214
+ params.mint, // token mint
215
+ spl_token_1.TOKEN_2022_PROGRAM_ID);
216
+ // Add the instruction to the beginning of the transaction
217
+ tx.instructions.unshift(createTokenAccountIx);
218
+ }
219
+ // Sign and send the transaction using our helper method
220
+ return await this.signAndSendTransaction(tx);
221
+ }
222
+ /**
223
+ * Withdraw tokens from the bridge
224
+ *
225
+ * @param params Withdrawal parameters
226
+ * @param signer Signer keypair
227
+ * @returns Transaction signature
228
+ */
229
+ async withdraw(params, signer) {
230
+ const [stateUpdate] = await this.findBlockStoragePda(params.claim.blockId.toNumber());
231
+ const [withdrawalNullifier] = await this.findWithdrawalNullifierPda(params.claim.blockId.toNumber(), params.claim.leafIndex.toNumber());
232
+ const [authority] = await this.findAuthorityPda();
233
+ // Build the transaction
234
+ const tx = await this.program.methods
235
+ .withdraw(params.claim)
236
+ .accounts({
237
+ payer: signer.publicKey,
238
+ stateUpdate,
239
+ withdrawalNullifier,
240
+ fromAccount: params.fromAccount,
241
+ toAccount: params.toAccount,
242
+ authority,
243
+ tokenProgram: spl_token_1.TOKEN_2022_PROGRAM_ID,
244
+ systemProgram: web3_js_1.SystemProgram.programId,
245
+ })
246
+ .transaction();
247
+ // Sign and send the transaction using our helper method
248
+ return await this.signAndSendTransaction(tx, [signer]);
249
+ }
250
+ /**
251
+ * Whitelist an asset (token) for use with the bridge
252
+ *
253
+ * @param mint Token mint address
254
+ * @param signer Operator keypair
255
+ * @returns Transaction signature
256
+ */
257
+ async whitelistAsset(mint, signer) {
258
+ const [contractStorage] = await this.findContractStoragePda();
259
+ const [assetWhitelisted] = await this.findAssetWhitelistedPda(mint);
260
+ // Build the transaction
261
+ const tx = await this.program.methods
262
+ .whitelistAsset(mint)
263
+ .accounts({
264
+ operator: signer.publicKey,
265
+ contractStorage,
266
+ assetWhitelisted,
267
+ systemProgram: web3_js_1.SystemProgram.programId,
268
+ })
269
+ .transaction();
270
+ // Sign and send the transaction using our helper method
271
+ return await this.signAndSendTransaction(tx, [signer]);
272
+ }
273
+ /**
274
+ * Propose a new block
275
+ *
276
+ * @param facts Block facts
277
+ * @param signer Operator keypair
278
+ * @returns Transaction signature
279
+ */
280
+ async proposeBlock(facts, signer) {
281
+ const [contractStorage] = await this.findContractStoragePda();
282
+ // Get the last block ID from contract storage
283
+ const contractStorageAccount = await this.program.account.contractStorage.fetch(contractStorage);
284
+ const [block] = await this.findBlockStoragePda(contractStorageAccount.lastBlockId.toNumber() + 1);
285
+ // Find the last deposit PDA
286
+ const [lastDeposit] = await this.findDepositStoragePda(facts.nextStateFacts.lastDepositIndex.toNumber());
287
+ // Find the DA fact state
288
+ const daFactState = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(types_1.PdaSeedType.DaFactStorage), facts.daCommitment], this.programId)[0];
289
+ // Build the transaction
290
+ const tx = await this.program.methods
291
+ .proposeBlock(facts)
292
+ .accounts({
293
+ operator: signer.publicKey,
294
+ block,
295
+ lastDeposit,
296
+ daFactState,
297
+ contractStorage,
298
+ systemProgram: web3_js_1.SystemProgram.programId,
299
+ })
300
+ .transaction();
301
+ // Sign and send the transaction using our helper method
302
+ return await this.signAndSendTransaction(tx, [signer]);
303
+ }
304
+ /**
305
+ * Finalize a block
306
+ *
307
+ * @param blockId Block ID
308
+ * @param stateUpdateId State update ID
309
+ * @param signer Payer keypair
310
+ * @returns Transaction signature
311
+ */
312
+ async finalizeBlock(blockId, stateUpdateId, signer) {
313
+ const [contractStorage] = await this.findContractStoragePda();
314
+ const [block] = await this.findBlockStoragePda(blockId);
315
+ // Build the transaction
316
+ const tx = await this.program.methods
317
+ .finalizeBlock(new anchor.BN(stateUpdateId))
318
+ .accounts({
319
+ payer: signer.publicKey,
320
+ block,
321
+ contractStorage,
322
+ systemProgram: web3_js_1.SystemProgram.programId,
323
+ })
324
+ .transaction();
325
+ // Sign and send the transaction using our helper method
326
+ return await this.signAndSendTransaction(tx, [signer]);
327
+ }
328
+ /**
329
+ * Finalize a DA fact
330
+ *
331
+ * @param fact DA fact (32-byte array)
332
+ * @param signer Payer keypair
333
+ * @returns Transaction signature
334
+ */
335
+ async finalizeDaFact(fact, signer) {
336
+ const factStateStorage = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(types_1.PdaSeedType.DaFactStorage), fact], this.programId)[0];
337
+ // Build the transaction
338
+ const tx = await this.program.methods
339
+ .finalizeDaFact(Array.from(fact))
340
+ .accounts({
341
+ payer: signer.publicKey,
342
+ factStateStorage,
343
+ systemProgram: web3_js_1.SystemProgram.programId,
344
+ })
345
+ .transaction();
346
+ // Sign and send the transaction using our helper method
347
+ return await this.signAndSendTransaction(tx, [signer]);
348
+ }
349
+ /**
350
+ * Initialize the bridge contract
351
+ *
352
+ * @param operator Operator public key
353
+ * @param initialAppStateCommitment Initial app state commitment (32-byte array)
354
+ * @param signer Payer keypair
355
+ * @returns Transaction signature
356
+ */
357
+ async initialize(operator, initialAppStateCommitment, signer) {
358
+ const [contractStorage] = await this.findContractStoragePda();
359
+ // Build the transaction
360
+ const tx = await this.program.methods
361
+ .initialize(operator, Array.from(initialAppStateCommitment))
362
+ .accounts({
363
+ payer: signer.publicKey,
364
+ program: this.programId,
365
+ contractStorage,
366
+ systemProgram: web3_js_1.SystemProgram.programId,
367
+ })
368
+ .transaction();
369
+ // Sign and send the transaction using our helper method
370
+ return await this.signAndSendTransaction(tx, [signer]);
371
+ }
372
+ /**
373
+ * Create an associated token account if it doesn't exist
374
+ *
375
+ * @param mint Token mint
376
+ * @param owner Account owner
377
+ * @param payer Transaction payer
378
+ * @returns Associated token account address
379
+ */
380
+ async createTokenAccountIfNeeded(mint, owner, payer) {
381
+ const associatedTokenAddress = await (0, spl_token_1.getAssociatedTokenAddress)(mint, owner);
382
+ try {
383
+ await this.connection.getTokenAccountBalance(associatedTokenAddress);
384
+ }
385
+ catch (error) {
386
+ // Account doesn't exist, create it
387
+ const transaction = new web3_js_1.Transaction().add((0, spl_token_1.createAssociatedTokenAccountInstruction)(payer.publicKey, associatedTokenAddress, owner, mint));
388
+ // Sign and send the transaction using our helper method
389
+ await this.signAndSendTransaction(transaction, [payer]);
390
+ }
391
+ return associatedTokenAddress;
392
+ }
393
+ }
394
+ exports.SolanaBridgeClient = SolanaBridgeClient;
@@ -0,0 +1,23 @@
1
+ import { SPLTokenInfo } from './types';
2
+ import { Commitment } from '@solana/web3.js';
3
+ export declare const SOLANA_MAINNET_URL = "https://api.mainnet-beta.solana.com";
4
+ export declare const SOLANA_DEVNET_URL = "https://api.devnet.solana.com";
5
+ export declare const SOLANA_TESTNET_URL = "https://api.testnet.solana.com";
6
+ export declare const SOLANA_LOCALNET_URL = "http://localhost:8899";
7
+ export declare const DEFAULT_COMMITMENT: Commitment;
8
+ export declare const DEV_URL = "http://localhost";
9
+ export declare const WEBSERVER_DEV_URL: string;
10
+ export declare const SOLANA_PROGRAM_ID = "CVDFLCAjXhVWiPXH9nTCTpCgVzmDVoiPzNJYuccr1dqB";
11
+ export declare const DEV_TOKEN_INFOS: SPLTokenInfo[];
12
+ export declare const DEFAULT_FUNDING_AMOUNTS: {
13
+ [key: string]: [string, number];
14
+ };
15
+ export declare const PDA_SEEDS: {
16
+ CONTRACT_STORAGE: string;
17
+ ASSET_WHITELISTED: string;
18
+ DEPOSIT_STORAGE: string;
19
+ BLOCK_STORAGE: string;
20
+ WITHDRAWAL_NULLIFIER: string;
21
+ AUTHORITY: string;
22
+ DA_FACT_STORAGE: string;
23
+ };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PDA_SEEDS = exports.DEFAULT_FUNDING_AMOUNTS = exports.DEV_TOKEN_INFOS = exports.SOLANA_PROGRAM_ID = exports.WEBSERVER_DEV_URL = exports.DEV_URL = exports.DEFAULT_COMMITMENT = exports.SOLANA_LOCALNET_URL = exports.SOLANA_TESTNET_URL = exports.SOLANA_DEVNET_URL = exports.SOLANA_MAINNET_URL = void 0;
4
+ // Solana RPC endpoints
5
+ exports.SOLANA_MAINNET_URL = 'https://api.mainnet-beta.solana.com';
6
+ exports.SOLANA_DEVNET_URL = 'https://api.devnet.solana.com';
7
+ exports.SOLANA_TESTNET_URL = 'https://api.testnet.solana.com';
8
+ exports.SOLANA_LOCALNET_URL = 'http://localhost:8899';
9
+ // Default commitment level
10
+ exports.DEFAULT_COMMITMENT = 'confirmed';
11
+ // Webserver configuration
12
+ const WEBSERVER_PORT = '80';
13
+ exports.DEV_URL = 'http://localhost';
14
+ exports.WEBSERVER_DEV_URL = exports.DEV_URL + ':' + WEBSERVER_PORT;
15
+ // Program ID (will be supplied externally)
16
+ exports.SOLANA_PROGRAM_ID = 'CVDFLCAjXhVWiPXH9nTCTpCgVzmDVoiPzNJYuccr1dqB';
17
+ // Sample token information for development
18
+ exports.DEV_TOKEN_INFOS = [
19
+ {
20
+ mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC on devnet
21
+ precision: 6,
22
+ tokenId: 0,
23
+ name: 'usdc',
24
+ },
25
+ {
26
+ mint: 'So11111111111111111111111111111111111111112', // Wrapped SOL
27
+ precision: 9,
28
+ tokenId: 1,
29
+ name: 'sol',
30
+ },
31
+ ];
32
+ // Default funding amounts for development
33
+ exports.DEFAULT_FUNDING_AMOUNTS = {
34
+ SOL: ['0.2', 9],
35
+ // USDC mint address
36
+ EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: ['10000', 6],
37
+ };
38
+ // PDA seed constants
39
+ exports.PDA_SEEDS = {
40
+ CONTRACT_STORAGE: 'contract_storage',
41
+ ASSET_WHITELISTED: 'asset_whitelisted',
42
+ DEPOSIT_STORAGE: 'deposit_storage',
43
+ BLOCK_STORAGE: 'block_storage',
44
+ WITHDRAWAL_NULLIFIER: 'withdrawal_nullifier',
45
+ AUTHORITY: 'authority',
46
+ DA_FACT_STORAGE: 'da_fact_storage',
47
+ };
@@ -0,0 +1,5 @@
1
+ export * from './client';
2
+ export * from './types';
3
+ export * from './utils';
4
+ import { BRIDGE_IDL } from '../idl/bridge';
5
+ export { BRIDGE_IDL };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.BRIDGE_IDL = void 0;
18
+ __exportStar(require("./client"), exports);
19
+ __exportStar(require("./types"), exports);
20
+ __exportStar(require("./utils"), exports);
21
+ // Re-export the IDL for convenience
22
+ const bridge_1 = require("../idl/bridge");
23
+ Object.defineProperty(exports, "BRIDGE_IDL", { enumerable: true, get: function () { return bridge_1.BRIDGE_IDL; } });