@wuwei-labs/srsly 2.0.0-beta.2 → 2.0.0-beta.21

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 (188) hide show
  1. package/README.md +305 -110
  2. package/dist/cjs/codama/accounts/config.js +88 -0
  3. package/dist/cjs/codama/accounts/config.js.map +1 -0
  4. package/dist/cjs/codama/accounts/contractState.js +17 -39
  5. package/dist/cjs/codama/accounts/contractState.js.map +1 -1
  6. package/dist/cjs/codama/accounts/index.js +1 -1
  7. package/dist/cjs/codama/accounts/index.js.map +1 -1
  8. package/dist/cjs/codama/accounts/rentalState.js +18 -33
  9. package/dist/cjs/codama/accounts/rentalState.js.map +1 -1
  10. package/dist/cjs/codama/accounts/thread.js +15 -32
  11. package/dist/cjs/codama/accounts/thread.js.map +1 -1
  12. package/dist/cjs/codama/errors/srsly.js +24 -3
  13. package/dist/cjs/codama/errors/srsly.js.map +1 -1
  14. package/dist/cjs/codama/instructions/acceptRental.js +202 -224
  15. package/dist/cjs/codama/instructions/acceptRental.js.map +1 -1
  16. package/dist/cjs/codama/instructions/cancelRental.js +100 -136
  17. package/dist/cjs/codama/instructions/cancelRental.js.map +1 -1
  18. package/dist/cjs/codama/instructions/closeContract.js +95 -116
  19. package/dist/cjs/codama/instructions/closeContract.js.map +1 -1
  20. package/dist/cjs/codama/instructions/closeRental.js +119 -132
  21. package/dist/cjs/codama/instructions/closeRental.js.map +1 -1
  22. package/dist/cjs/codama/instructions/createContract.js +127 -143
  23. package/dist/cjs/codama/instructions/createContract.js.map +1 -1
  24. package/dist/cjs/codama/instructions/index.js +2 -1
  25. package/dist/cjs/codama/instructions/index.js.map +1 -1
  26. package/dist/cjs/codama/instructions/initializeConfig.js +131 -0
  27. package/dist/cjs/codama/instructions/initializeConfig.js.map +1 -0
  28. package/dist/cjs/codama/instructions/payRental.js +125 -129
  29. package/dist/cjs/codama/instructions/payRental.js.map +1 -1
  30. package/dist/cjs/codama/instructions/resetRental.js +55 -77
  31. package/dist/cjs/codama/instructions/resetRental.js.map +1 -1
  32. package/dist/cjs/codama/instructions/updateConfig.js +145 -0
  33. package/dist/cjs/codama/instructions/updateConfig.js.map +1 -0
  34. package/dist/cjs/codama/programs/srsly.js +12 -8
  35. package/dist/cjs/codama/programs/srsly.js.map +1 -1
  36. package/dist/cjs/codama/shared/index.js +6 -2
  37. package/dist/cjs/codama/shared/index.js.map +1 -1
  38. package/dist/cjs/codama/types/trigger.js +1 -1
  39. package/dist/cjs/codama/types/trigger.js.map +1 -1
  40. package/dist/cjs/codama/types/triggerContext.js +1 -1
  41. package/dist/cjs/codama/types/triggerContext.js.map +1 -1
  42. package/dist/cjs/contract/close.js +75 -34
  43. package/dist/cjs/contract/close.js.map +1 -1
  44. package/dist/cjs/contract/create.js +59 -43
  45. package/dist/cjs/contract/create.js.map +1 -1
  46. package/dist/cjs/index.js +7 -1
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/package.json +54 -0
  49. package/dist/cjs/rental/accept.js +68 -40
  50. package/dist/cjs/rental/accept.js.map +1 -1
  51. package/dist/cjs/rental/cancel.js +36 -28
  52. package/dist/cjs/rental/cancel.js.map +1 -1
  53. package/dist/cjs/rental/close.js +37 -29
  54. package/dist/cjs/rental/close.js.map +1 -1
  55. package/dist/cjs/rental/reset.js +46 -42
  56. package/dist/cjs/rental/reset.js.map +1 -1
  57. package/dist/cjs/utils/config.js +319 -0
  58. package/dist/cjs/utils/config.js.map +1 -0
  59. package/dist/cjs/utils/constants.js +69 -9
  60. package/dist/cjs/utils/constants.js.map +1 -1
  61. package/dist/cjs/utils/index.js +1 -0
  62. package/dist/cjs/utils/index.js.map +1 -1
  63. package/dist/cjs/utils/profiles.js +96 -95
  64. package/dist/cjs/utils/profiles.js.map +1 -1
  65. package/dist/esm/codama/accounts/config.js +76 -0
  66. package/dist/esm/codama/accounts/config.js.map +1 -0
  67. package/dist/esm/codama/accounts/contractState.js +3 -7
  68. package/dist/esm/codama/accounts/contractState.js.map +1 -1
  69. package/dist/esm/codama/accounts/index.js +1 -1
  70. package/dist/esm/codama/accounts/index.js.map +1 -1
  71. package/dist/esm/codama/accounts/rentalState.js +3 -1
  72. package/dist/esm/codama/accounts/rentalState.js.map +1 -1
  73. package/dist/esm/codama/errors/srsly.js +23 -2
  74. package/dist/esm/codama/errors/srsly.js.map +1 -1
  75. package/dist/esm/codama/instructions/acceptRental.js +30 -39
  76. package/dist/esm/codama/instructions/acceptRental.js.map +1 -1
  77. package/dist/esm/codama/instructions/cancelRental.js +10 -33
  78. package/dist/esm/codama/instructions/cancelRental.js.map +1 -1
  79. package/dist/esm/codama/instructions/closeContract.js +17 -25
  80. package/dist/esm/codama/instructions/closeContract.js.map +1 -1
  81. package/dist/esm/codama/instructions/closeRental.js +19 -19
  82. package/dist/esm/codama/instructions/closeRental.js.map +1 -1
  83. package/dist/esm/codama/instructions/createContract.js +13 -16
  84. package/dist/esm/codama/instructions/createContract.js.map +1 -1
  85. package/dist/esm/codama/instructions/index.js +2 -1
  86. package/dist/esm/codama/instructions/index.js.map +1 -1
  87. package/dist/esm/codama/instructions/initializeConfig.js +121 -0
  88. package/dist/esm/codama/instructions/initializeConfig.js.map +1 -0
  89. package/dist/esm/codama/instructions/payRental.js +34 -25
  90. package/dist/esm/codama/instructions/payRental.js.map +1 -1
  91. package/dist/esm/codama/instructions/resetRental.js +0 -9
  92. package/dist/esm/codama/instructions/resetRental.js.map +1 -1
  93. package/dist/esm/codama/instructions/updateConfig.js +135 -0
  94. package/dist/esm/codama/instructions/updateConfig.js.map +1 -0
  95. package/dist/esm/codama/programs/srsly.js +12 -8
  96. package/dist/esm/codama/programs/srsly.js.map +1 -1
  97. package/dist/esm/contract/close.js +68 -16
  98. package/dist/esm/contract/close.js.map +1 -1
  99. package/dist/esm/contract/create.js +60 -33
  100. package/dist/esm/contract/create.js.map +1 -1
  101. package/dist/esm/index.js +5 -1
  102. package/dist/esm/index.js.map +1 -1
  103. package/dist/esm/package.json +54 -0
  104. package/dist/esm/rental/accept.js +70 -31
  105. package/dist/esm/rental/accept.js.map +1 -1
  106. package/dist/esm/rental/cancel.js +37 -18
  107. package/dist/esm/rental/cancel.js.map +1 -1
  108. package/dist/esm/rental/close.js +38 -19
  109. package/dist/esm/rental/close.js.map +1 -1
  110. package/dist/esm/rental/reset.js +48 -33
  111. package/dist/esm/rental/reset.js.map +1 -1
  112. package/dist/esm/utils/config.js +277 -0
  113. package/dist/esm/utils/config.js.map +1 -0
  114. package/dist/esm/utils/constants.js +60 -7
  115. package/dist/esm/utils/constants.js.map +1 -1
  116. package/dist/esm/utils/index.js +1 -0
  117. package/dist/esm/utils/index.js.map +1 -1
  118. package/dist/esm/utils/profiles.js +39 -19
  119. package/dist/esm/utils/profiles.js.map +1 -1
  120. package/dist/types/codama/accounts/config.d.ts +52 -0
  121. package/dist/types/codama/accounts/config.d.ts.map +1 -0
  122. package/dist/types/codama/accounts/contractState.d.ts +2 -4
  123. package/dist/types/codama/accounts/contractState.d.ts.map +1 -1
  124. package/dist/types/codama/accounts/index.d.ts +1 -1
  125. package/dist/types/codama/accounts/index.d.ts.map +1 -1
  126. package/dist/types/codama/accounts/rentalState.d.ts +2 -0
  127. package/dist/types/codama/accounts/rentalState.d.ts.map +1 -1
  128. package/dist/types/codama/errors/srsly.d.ts +16 -2
  129. package/dist/types/codama/errors/srsly.d.ts.map +1 -1
  130. package/dist/types/codama/instructions/acceptRental.d.ts +41 -34
  131. package/dist/types/codama/instructions/acceptRental.d.ts.map +1 -1
  132. package/dist/types/codama/instructions/cancelRental.d.ts +14 -10
  133. package/dist/types/codama/instructions/cancelRental.d.ts.map +1 -1
  134. package/dist/types/codama/instructions/closeContract.d.ts +29 -21
  135. package/dist/types/codama/instructions/closeContract.d.ts.map +1 -1
  136. package/dist/types/codama/instructions/closeRental.d.ts +20 -12
  137. package/dist/types/codama/instructions/closeRental.d.ts.map +1 -1
  138. package/dist/types/codama/instructions/createContract.d.ts +27 -23
  139. package/dist/types/codama/instructions/createContract.d.ts.map +1 -1
  140. package/dist/types/codama/instructions/index.d.ts +2 -1
  141. package/dist/types/codama/instructions/index.d.ts.map +1 -1
  142. package/dist/types/codama/instructions/initializeConfig.d.ts +60 -0
  143. package/dist/types/codama/instructions/initializeConfig.d.ts.map +1 -0
  144. package/dist/types/codama/instructions/payRental.d.ts +28 -13
  145. package/dist/types/codama/instructions/payRental.d.ts.map +1 -1
  146. package/dist/types/codama/instructions/resetRental.d.ts +3 -3
  147. package/dist/types/codama/instructions/resetRental.d.ts.map +1 -1
  148. package/dist/types/codama/instructions/updateConfig.d.ts +93 -0
  149. package/dist/types/codama/instructions/updateConfig.d.ts.map +1 -0
  150. package/dist/types/codama/programs/srsly.d.ts +11 -8
  151. package/dist/types/codama/programs/srsly.d.ts.map +1 -1
  152. package/dist/types/contract/close.d.ts +20 -24
  153. package/dist/types/contract/close.d.ts.map +1 -1
  154. package/dist/types/contract/create.d.ts +34 -22
  155. package/dist/types/contract/create.d.ts.map +1 -1
  156. package/dist/types/index.d.ts +4 -1
  157. package/dist/types/index.d.ts.map +1 -1
  158. package/dist/types/rental/accept.d.ts +42 -20
  159. package/dist/types/rental/accept.d.ts.map +1 -1
  160. package/dist/types/rental/cancel.d.ts +16 -11
  161. package/dist/types/rental/cancel.d.ts.map +1 -1
  162. package/dist/types/rental/close.d.ts +16 -11
  163. package/dist/types/rental/close.d.ts.map +1 -1
  164. package/dist/types/rental/reset.d.ts +17 -20
  165. package/dist/types/rental/reset.d.ts.map +1 -1
  166. package/dist/types/utils/config.d.ts +167 -0
  167. package/dist/types/utils/config.d.ts.map +1 -0
  168. package/dist/types/utils/constants.d.ts +23 -7
  169. package/dist/types/utils/constants.d.ts.map +1 -1
  170. package/dist/types/utils/index.d.ts +1 -0
  171. package/dist/types/utils/index.d.ts.map +1 -1
  172. package/dist/types/utils/profiles.d.ts +14 -8
  173. package/dist/types/utils/profiles.d.ts.map +1 -1
  174. package/package.json +36 -14
  175. package/target/idl/srsly.json +3279 -0
  176. package/target/types/srsly.ts +1 -0
  177. package/dist/cjs/codama/accounts/fleet.js +0 -94
  178. package/dist/cjs/codama/accounts/fleet.js.map +0 -1
  179. package/dist/cjs/codama/instructions/normalizeAdmin.js +0 -165
  180. package/dist/cjs/codama/instructions/normalizeAdmin.js.map +0 -1
  181. package/dist/esm/codama/accounts/fleet.js +0 -64
  182. package/dist/esm/codama/accounts/fleet.js.map +0 -1
  183. package/dist/esm/codama/instructions/normalizeAdmin.js +0 -142
  184. package/dist/esm/codama/instructions/normalizeAdmin.js.map +0 -1
  185. package/dist/types/codama/accounts/fleet.d.ts +0 -38
  186. package/dist/types/codama/accounts/fleet.d.ts.map +0 -1
  187. package/dist/types/codama/instructions/normalizeAdmin.d.ts +0 -67
  188. package/dist/types/codama/instructions/normalizeAdmin.d.ts.map +0 -1
package/README.md CHANGED
@@ -4,194 +4,389 @@
4
4
  [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
5
5
  [![Solana](https://img.shields.io/badge/Solana-000?style=flat&logo=solana&logoColor=9945FF)](https://solana.com/)
6
6
 
7
- A TypeScript SDK for interacting with the SRSLY (Space Rental from SLY) Solana program - a decentralized rental system for Star Atlas.
7
+ A TypeScript SDK for building and sending Solana transactions to interact with the SRSLY (Space Rental from SLY) program - a decentralized rental system for Star Atlas fleets.
8
8
 
9
- ## Installation
9
+ ## What This SDK Does
10
10
 
11
- ### NPM
11
+ The SRSLY SDK is a complete toolkit that helps you create Solana transactions for fleet rentals. It provides:
12
12
 
13
- ```bash
14
- npm install @wuwei-labs/srsly
15
- ```
13
+ - ✅ Account derivation and validation
14
+ - Instruction data encoding
15
+ - ✅ Type-safe parameter handling
16
+ - ✅ Direct transaction sending via `.send()` (server/CLI)
17
+ - ✅ Unsigned transaction building via `.pack()` (browser/wallets)
18
+ - ✅ Wallet-agnostic design (works with any signing method)
19
+
20
+ **Current Status**: Full instruction building, transaction packing, and direct sending support.
16
21
 
17
- ### PNPM
22
+ ## Installation
18
23
 
19
24
  ```bash
25
+ npm install @wuwei-labs/srsly
26
+ # or
20
27
  pnpm add @wuwei-labs/srsly
28
+ # or
29
+ yarn add @wuwei-labs/srsly
21
30
  ```
22
31
 
23
- ### Yarn
32
+ ## Quick Start
24
33
 
25
- ```bash
26
- yarn add @wuwei-labs/srsly
34
+ ### Option 1: Pack and Send (Server/CLI)
35
+
36
+ ```typescript
37
+ import { createContract, setConfig } from '@wuwei-labs/srsly';
38
+ import { createKeyPairSignerFromBytes } from '@solana/kit';
39
+
40
+ // 1. Configure SDK with RPC endpoint
41
+ setConfig({
42
+ programs: 'atlasnet',
43
+ rpcUrl: 'https://api.atlasnet.solana.com'
44
+ });
45
+
46
+ // 2. Create signer from keypair
47
+ const signer = await createKeyPairSignerFromBytes(keypairBytes);
48
+
49
+ // 3. Pack transaction then send in two steps
50
+ const packedTx = await createContract({
51
+ owner: signer,
52
+ fleet: fleetAddress,
53
+ ownerProfile: profileAddress,
54
+ rate: 1000000, // ATLAS tokens
55
+ durationMin: 86400, // 1 day
56
+ durationMax: 604800, // 1 week
57
+ paymentsFreq: 'daily'
58
+ }).pack(signer.address); // Pack with fee payer
59
+
60
+ const signature = await packedTx.send(signer); // Send with signer
61
+
62
+ console.log('Transaction signature:', signature);
63
+
64
+ // With custom transaction options
65
+ const customPackedTx = await createContract(params)
66
+ .set({
67
+ transactionOptions: {
68
+ commitment: 'finalized',
69
+ skipPreflight: true
70
+ }
71
+ })
72
+ .pack(signer.address);
73
+
74
+ const signature = await customPackedTx.send(signer);
27
75
  ```
28
76
 
29
- ## Quick Start
77
+ ### Option 2: Pack for Wallet Adapters (Browser)
30
78
 
31
79
  ```typescript
32
- import { Connection, PublicKey } from '@solana/web3.js';
33
- import {
34
- createContract,
35
- acceptRental,
36
- getSrslyProgram,
37
- ContractState,
38
- RentalState
39
- } from '@wuwei-labs/srsly';
80
+ import { createContract, setConfig } from '@wuwei-labs/srsly';
40
81
 
41
- // Initialize connection
42
- const connection = new Connection('https://api.mainnet-beta.solana.com');
43
- const program = getSrslyProgram(connection);
44
-
45
- // Create a rental contract
46
- const contractInstruction = await createContract({
47
- rate: 1000000, // Rate in lamports
48
- durationMin: 86400, // 1 day in seconds
49
- durationMax: 604800, // 1 week in seconds
50
- paymentFreq: 'daily',
51
- ownerKeyIndex: 0
82
+ // 1. Configure SDK with RPC endpoint for blockhash
83
+ setConfig({
84
+ programs: 'atlasnet',
85
+ rpcUrl: 'https://api.atlasnet.solana.com'
52
86
  });
53
87
 
54
- // Accept a rental
55
- const rentalInstruction = await acceptRental({
56
- contractAddress: contractPublicKey,
57
- duration: 86400, // 1 day
58
- amount: 1000000 // Amount in lamports
88
+ // 2. Pack transaction for wallet adapter
89
+ const packedTx = await createContract({
90
+ owner: walletPublicKey,
91
+ fleet: fleetAddress,
92
+ ownerProfile: profileAddress,
93
+ rate: 1000000, // ATLAS tokens
94
+ durationMin: 86400, // 1 day
95
+ durationMax: 604800, // 1 week
96
+ paymentsFreq: 'daily'
97
+ }).pack(walletPublicKey); // Pack with fee payer address
98
+
99
+ // 3. Sign and send with wallet adapter
100
+ import { useWallet } from '@solana/wallet-adapter-react';
101
+ import { VersionedTransaction } from '@solana/web3.js';
102
+
103
+ const wallet = useWallet();
104
+
105
+ // The messageBytes are now properly formatted for web3.js compatibility
106
+ const versionedTx = VersionedTransaction.deserialize(packedTx.messageBytes);
107
+ const signedTx = await wallet.signTransaction(versionedTx);
108
+
109
+ // Send the signed transaction
110
+ const signature = await connection.sendRawTransaction(signedTx.serialize());
111
+
112
+ // Note: packedTx also has a .send() method, but it requires a TransactionSigner
113
+ // which wallet adapters don't provide directly
114
+ ```
115
+
116
+ ### Option 3: Manual Instruction Building
117
+
118
+ ```typescript
119
+ import { createContract } from '@wuwei-labs/srsly';
120
+
121
+ // Build instruction only (no RPC calls)
122
+ const instruction = await createContract({
123
+ owner: walletPublicKey,
124
+ fleet: fleetAddress,
125
+ ownerProfile: profileAddress,
126
+ rate: 1000000,
127
+ durationMin: 86400,
128
+ durationMax: 604800,
129
+ paymentsFreq: 'daily'
59
130
  });
131
+
132
+ // Handle transaction building and submission yourself
133
+ // ... use instruction with your preferred transaction building method
60
134
  ```
61
135
 
62
136
  ## Core Features
63
137
 
64
- ### Contract Management
138
+ ### Dual Compatibility
139
+
140
+ The SDK provides two optimized paths for different environments:
141
+
142
+ - **🌐 Browser/Wallet Adapter Path**: Uses `.pack()` to create `messageBytes` compatible with `web3.js` `VersionedTransaction.deserialize()`
143
+ - **🖥️ Server/CLI Path**: Uses `.pack().send()` with `@solana/kit` for direct transaction submission
144
+
145
+ Both paths are independent and fully optimized for their respective use cases.
65
146
 
66
- Create and manage rental contracts for Star Atlas:
147
+ ### Flexible Address Input
148
+
149
+ The SDK accepts both string and Address types for all address parameters, automatically converting them to the proper format:
150
+
151
+ ```typescript
152
+ import { createContract, address } from '@wuwei-labs/srsly';
153
+
154
+ // Mixed usage allowed
155
+ const createIx = await createContract({
156
+ owner: wallet,
157
+ fleet: "123abc...", // string
158
+ ownerProfile: address("456def..."), // Address<string>
159
+ rate: 5000000,
160
+ durationMin: 86400,
161
+ durationMax: 2592000,
162
+ paymentsFreq: 'daily'
163
+ });
164
+ ```
165
+
166
+ ### Contract Management
67
167
 
68
168
  ```typescript
69
169
  import { createContract, closeContract } from '@wuwei-labs/srsly';
70
170
 
71
- // Create a new rental contract
171
+ // Create rental contract instruction
72
172
  const createIx = await createContract({
73
- rate: 5000000, // 0.005 SOL per day
74
- durationMin: 86400, // Minimum 1 day
75
- durationMax: 2592000, // Maximum 30 days
76
- paymentFreq: 'daily',
77
- ownerKeyIndex: 0
173
+ owner: wallet,
174
+ fleet: fleetAddress,
175
+ ownerProfile: profileAddress,
176
+ rate: 5000000,
177
+ durationMin: 86400,
178
+ durationMax: 2592000,
179
+ paymentsFreq: 'daily'
78
180
  });
79
181
 
80
- // Close an existing contract
182
+ // Close contract instruction
81
183
  const closeIx = await closeContract({
82
- contractAddress: contractPublicKey
184
+ owner: wallet,
185
+ fleet: fleetAddress,
186
+ contract: contractAddress
83
187
  });
84
188
  ```
85
189
 
86
190
  ### Rental Operations
87
191
 
88
- Handle rental lifecycle operations:
89
-
90
192
  ```typescript
91
- import {
92
- acceptRental,
93
- cancelRental,
94
- closeRental,
95
- payRental,
96
- resetRental
97
- } from '@wuwei-labs/srsly';
193
+ import { acceptRental, cancelRental, closeRental } from '@wuwei-labs/srsly';
98
194
 
99
- // Accept a rental offer
195
+ // Accept rental offer instruction
100
196
  const acceptIx = await acceptRental({
101
- contractAddress: contractPublicKey,
102
- duration: 86400,
103
- amount: 1000000
197
+ borrower: borrowerWallet,
198
+ borrowerProfile: borrowerProfileAddress,
199
+ borrowerFaction: 'mud', // or 1, 2, 3
200
+ fleet: fleetAddress,
201
+ contract: contractAddress,
202
+ rate: 100, // ATLAS per day
203
+ duration: 86400 // 1 day in seconds
104
204
  });
105
205
 
106
- // Cancel an active rental
206
+ // Cancel active rental instruction
107
207
  const cancelIx = await cancelRental({
108
- rentalAddress: rentalPublicKey
208
+ borrower: borrowerWallet,
209
+ contract: contractAddress,
210
+ rentalState: rentalStateAddress
109
211
  });
110
212
 
111
- // Close a completed rental
213
+ // Close completed rental instruction
112
214
  const closeIx = await closeRental({
113
- rentalAddress: rentalPublicKey
215
+ borrower: borrowerWallet,
216
+ contract: contractAddress,
217
+ rentalState: rentalStateAddress,
218
+ ownerTokenAccount: ownerTokenAccountAddress
219
+ });
220
+ ```
221
+
222
+ ## Network Configuration
223
+
224
+ The SDK supports multiple network configurations:
225
+
226
+ ### Global Configuration
227
+
228
+ ```typescript
229
+ import { setConfig, getConfig, clearConfig } from '@wuwei-labs/srsly';
230
+
231
+ // Use mainnet programs (includes default RPC URL)
232
+ setConfig({ programs: 'mainnet' });
233
+
234
+ // Use atlasnet programs (default) - requires explicit RPC URL
235
+ setConfig({
236
+ programs: 'atlasnet',
237
+ rpcUrl: 'https://api.atlasnet.solana.com' // Required for atlasnet
238
+ });
239
+
240
+ // Use holosim test programs - requires explicit RPC URL
241
+ setConfig({
242
+ programs: 'holosim',
243
+ rpcUrl: 'https://api.atlasnet.solana.com' // Required for holosim
114
244
  });
115
245
 
116
- // Reset rental state (admin only)
117
- const resetIx = await resetRental({
118
- rentalAddress: rentalPublicKey
246
+ // Custom configuration
247
+ setConfig({
248
+ programs: 'mainnet',
249
+ srslyProgramAddress: 'custom-srsly-program...',
250
+ gameId: 'custom-game-id...',
251
+ atlasMint: 'custom-atlas-mint...'
252
+ // mainnet includes default RPC URL
119
253
  });
254
+
255
+ // Check current config
256
+ console.log(getConfig());
257
+
258
+ // Reset to defaults
259
+ clearConfig();
120
260
  ```
121
261
 
122
- ### Account State Management
262
+ ### Per-Instruction Configuration
123
263
 
124
- Fetch and decode account states:
264
+ ```typescript
265
+ // Override global config for specific instructions
266
+ const ix = await createContract(params).set({ programs: 'mainnet' });
267
+
268
+ // Chain multiple configurations
269
+ const ix2 = await acceptRental(params)
270
+ .set({ programs: 'holosim' })
271
+ .set({ gameId: 'custom-game-id...' });
272
+ ```
273
+
274
+ ## Payment System
275
+
276
+ SRSLY implements an escrow-based payment system:
277
+
278
+ 1. **Escrow**: Borrower deposits full rental amount upfront
279
+ 2. **Periodic Payments**: Automated payments based on frequency (daily/weekly/monthly)
280
+ 3. **Fees**: 10% platform fee, optional 10% referral sharing
281
+ 4. **Refunds**: Pro-rata refunds for early cancellation (24-hour minimum)
125
282
 
126
283
  ```typescript
127
- import { ContractState, RentalState } from '@wuwei-labs/srsly';
284
+ // Payment calculation
285
+ const rate = 1000; // ATLAS per day
286
+ const duration = 86400; // 1 day in seconds
287
+ const totalAmount = rate * duration * ATLAS_TO_STARDUST; // in stardust
288
+ ```
289
+
290
+ ## Available Networks
128
291
 
129
- // Fetch contract state
130
- const contractAccount = await connection.getAccountInfo(contractPublicKey);
131
- const contractState = ContractState.fromAccountInfo(contractAccount)[0];
292
+ ```typescript
293
+ // Program address sets
294
+ const networks = {
295
+ mainnet: {
296
+ sageProgram: 'SAGE2HAwep459SNq61LHvjxPk4pLPEJLoMETef7f7EE',
297
+ gameId: 'GAMEzqJehF8yAnKiTARUuhZMvLvkZVAsCVri5vSfemLr',
298
+ atlasMint: 'ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx',
299
+ rpcUrl: 'https://api.mainnet-beta.solana.com' // Default RPC for mainnet
300
+ },
301
+ atlasnet: {
302
+ sageProgram: 'SAgeTraQfBMdvGVDJYoEvjnbq5szW7RJPi6obDTDQUF',
303
+ gameId: 'GAMEC7U7cqmFFaRow33j1LwuV8u4YhAS1mJ5Dqjnar2k',
304
+ atlasMint: 'ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx'
305
+ // No default RPC - must provide rpcUrl required permissions
306
+ },
307
+ holosim: {
308
+ sageProgram: 'SAgeTraQfBMdvGVDJYoEvjnbq5szW7RJPi6obDTDQUF',
309
+ gameId: 'GAMEC7U7cqmFFaRow33j1LwuV8u4YhAS1mJ5Dqjnar2k',
310
+ atlasMint: 'ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx'
311
+ // No default RPC - must provide rpcUrl required permissions
312
+ }
313
+ };
314
+ ```
132
315
 
133
- console.log('Contract rate:', contractState.rate.toString());
134
- console.log('Duration range:', contractState.durationMin.toString(), '-', contractState.durationMax.toString());
316
+ **Note**: Atlasnet and holosim networks require you to explicitly provide an `rpcUrl` in your configuration since they don't have default RPC endpoints. If you forget to provide an RPC URL, you'll get a helpful error message:
135
317
 
136
- // Fetch rental state
137
- const rentalAccount = await connection.getAccountInfo(rentalPublicKey);
138
- const rentalState = RentalState.fromAccountInfo(rentalAccount)[0];
318
+ ```typescript
319
+ // This will throw a clear error for atlasnet/holosim
320
+ setConfig({ programs: 'atlasnet' }); // Missing rpcUrl!
139
321
 
140
- console.log('Rental status:', rentalState.status);
141
- console.log('Start time:', new Date(rentalState.startTime.toNumber() * 1000));
322
+ await createContract(params).pack(address);
323
+ // Error: RPC URL is required for atlasnet network. Please provide your RPC endpoint via setConfig({ rpcUrl: "your-rpc-url-with-api-key" })
142
324
  ```
143
325
 
144
- ## Program Information
326
+ ## Types and Constants
145
327
 
146
- - **Program ID**: `SRSLY1fq9TJqCk1gNSE7VZL2bztvTn9wm4VR8u8jMKT`
147
- - **Network**: Solana Mainnet or Atlasnet
148
- - **Built with**: Anchor Framework
328
+ ```typescript
329
+ import type {
330
+ ContractState,
331
+ RentalState,
332
+ ConfigOptions,
333
+ PaymentFrequency
334
+ } from '@wuwei-labs/srsly';
149
335
 
150
- ## Payment Frequencies
336
+ import {
337
+ ATLAS_TO_STARDUST,
338
+ FACTION_MAPPING,
339
+ toAddress
340
+ } from '@wuwei-labs/srsly';
151
341
 
152
- The SDK supports multiple payment frequencies:
342
+ // Conversion rate: 1 ATLAS = 100,000,000 stardust
343
+ console.log(ATLAS_TO_STARDUST); // 100_000_000
153
344
 
154
- - `daily` - Daily payments
155
- - `weekly` - Weekly payments
156
- - `monthly` - Monthly payments
345
+ // Faction mappings
346
+ console.log(FACTION_MAPPING[1]); // 'mud'
347
+ console.log(FACTION_MAPPING[2]); // 'oni'
348
+ console.log(FACTION_MAPPING[3]); // 'ustur'
157
349
 
158
- ## Error Handling
350
+ // Address conversion utility
351
+ const addressObj = toAddress("123abc..."); // converts string to Address<string>
352
+ console.log(addressObj); // Address<string>
353
+ ```
159
354
 
160
- The SDK includes comprehensive error types:
355
+ ## IDL and Program Information
356
+
357
+ ```typescript
358
+ // Access program IDLs
359
+ import mainnetIdl from '@wuwei-labs/srsly/idl/mainnet';
360
+ import atlasnetIdl from '@wuwei-labs/srsly/idl/atlasnet';
361
+ ```
362
+
363
+ ## Error Handling
161
364
 
162
365
  ```typescript
163
366
  import { SrslyError } from '@wuwei-labs/srsly';
164
367
 
165
368
  try {
166
- const instruction = await createContract({...});
369
+ const instruction = await createContract(params);
370
+ // Add to transaction and send...
167
371
  } catch (error) {
168
372
  if (error instanceof SrslyError) {
169
- console.error('SRSLY Error:', error.message);
170
- console.error('Error code:', error.code);
373
+ console.error('SRSLY SDK Error:', error.message, error.code);
374
+ } else {
375
+ console.error('Other Error:', error);
171
376
  }
172
377
  }
173
378
  ```
174
379
 
175
- ## Types
380
+ ## Package Structure
176
381
 
177
- The SDK exports all necessary types for TypeScript development:
382
+ The SDK provides optimized builds for different environments:
178
383
 
179
- ```typescript
180
- import type {
181
- ContractState,
182
- RentalState,
183
- PaymentFrequency,
184
- ClockData,
185
- ThreadResponse
186
- } from '@wuwei-labs/srsly';
187
- ```
384
+ - **CommonJS**: `./dist/cjs/` (Node.js, webpack)
385
+ - **ESM**: `./dist/esm/` (Modern ES modules)
386
+ - **Types**: `./dist/types/` (TypeScript definitions)
387
+ - **Shared**: `./dist/shared/codama/` (Optimized codama exports)
188
388
 
189
- ## Documentation
389
+ ## Links
190
390
 
391
+ - **NPM Package**: [@wuwei-labs/srsly](https://www.npmjs.com/package/@wuwei-labs/srsly)
191
392
  - **TypeDoc Documentation**: [API Reference](https://wuwei-labs.github.io/srsly/)
192
-
193
- ## Related Projects
194
-
195
- - **Star Atlas**: The metaverse gaming ecosystem
196
- - **Solana**: The blockchain platform powering SRSLY
197
- - **Anchor**: The framework used to build the SRSLY program
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * This code was AUTOGENERATED using the codama library.
4
+ * Please DO NOT EDIT THIS FILE, instead use visitors
5
+ * to add features, then rerun codama to update it.
6
+ *
7
+ * @see https://github.com/codama-idl/codama
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.CONFIG_DISCRIMINATOR = void 0;
11
+ exports.getConfigDiscriminatorBytes = getConfigDiscriminatorBytes;
12
+ exports.getConfigEncoder = getConfigEncoder;
13
+ exports.getConfigDecoder = getConfigDecoder;
14
+ exports.getConfigCodec = getConfigCodec;
15
+ exports.decodeConfig = decodeConfig;
16
+ exports.fetchConfig = fetchConfig;
17
+ exports.fetchMaybeConfig = fetchMaybeConfig;
18
+ exports.fetchAllConfig = fetchAllConfig;
19
+ exports.fetchAllMaybeConfig = fetchAllMaybeConfig;
20
+ const kit_1 = require("@solana/kit");
21
+ const types_1 = require("../types");
22
+ exports.CONFIG_DISCRIMINATOR = new Uint8Array([
23
+ 155, 12, 170, 224, 30, 250, 204, 130,
24
+ ]);
25
+ function getConfigDiscriminatorBytes() {
26
+ return (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 8).encode(exports.CONFIG_DISCRIMINATOR);
27
+ }
28
+ function getConfigEncoder() {
29
+ return (0, kit_1.transformEncoder)((0, kit_1.getStructEncoder)([
30
+ ['discriminator', (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 8)],
31
+ ['version', (0, kit_1.getU8Encoder)()],
32
+ ['bump', (0, kit_1.getU8Encoder)()],
33
+ ['authority', (0, kit_1.getAddressEncoder)()],
34
+ ['stardustToAtlas', (0, kit_1.getU64Encoder)()],
35
+ ['serviceFeeBps', (0, kit_1.getU64Encoder)()],
36
+ ['referralFeeBps', (0, kit_1.getU64Encoder)()],
37
+ ['baseBps', (0, kit_1.getU64Encoder)()],
38
+ ['rentalDurationMinSeconds', (0, kit_1.getU64Encoder)()],
39
+ ['rentalDurationMaxSeconds', (0, kit_1.getU64Encoder)()],
40
+ ['feesAccount', (0, kit_1.getAddressEncoder)()],
41
+ ['atlasMint', (0, kit_1.getAddressEncoder)()],
42
+ ['defaultPaymentFrequency', (0, types_1.getPaymentFrequencyEncoder)()],
43
+ ['allowedFrequencies', (0, kit_1.getArrayEncoder)((0, types_1.getPaymentFrequencyEncoder)())],
44
+ ]), (value) => ({ ...value, discriminator: exports.CONFIG_DISCRIMINATOR }));
45
+ }
46
+ function getConfigDecoder() {
47
+ return (0, kit_1.getStructDecoder)([
48
+ ['discriminator', (0, kit_1.fixDecoderSize)((0, kit_1.getBytesDecoder)(), 8)],
49
+ ['version', (0, kit_1.getU8Decoder)()],
50
+ ['bump', (0, kit_1.getU8Decoder)()],
51
+ ['authority', (0, kit_1.getAddressDecoder)()],
52
+ ['stardustToAtlas', (0, kit_1.getU64Decoder)()],
53
+ ['serviceFeeBps', (0, kit_1.getU64Decoder)()],
54
+ ['referralFeeBps', (0, kit_1.getU64Decoder)()],
55
+ ['baseBps', (0, kit_1.getU64Decoder)()],
56
+ ['rentalDurationMinSeconds', (0, kit_1.getU64Decoder)()],
57
+ ['rentalDurationMaxSeconds', (0, kit_1.getU64Decoder)()],
58
+ ['feesAccount', (0, kit_1.getAddressDecoder)()],
59
+ ['atlasMint', (0, kit_1.getAddressDecoder)()],
60
+ ['defaultPaymentFrequency', (0, types_1.getPaymentFrequencyDecoder)()],
61
+ ['allowedFrequencies', (0, kit_1.getArrayDecoder)((0, types_1.getPaymentFrequencyDecoder)())],
62
+ ]);
63
+ }
64
+ function getConfigCodec() {
65
+ return (0, kit_1.combineCodec)(getConfigEncoder(), getConfigDecoder());
66
+ }
67
+ function decodeConfig(encodedAccount) {
68
+ return (0, kit_1.decodeAccount)(encodedAccount, getConfigDecoder());
69
+ }
70
+ async function fetchConfig(rpc, address, config) {
71
+ const maybeAccount = await fetchMaybeConfig(rpc, address, config);
72
+ (0, kit_1.assertAccountExists)(maybeAccount);
73
+ return maybeAccount;
74
+ }
75
+ async function fetchMaybeConfig(rpc, address, config) {
76
+ const maybeAccount = await (0, kit_1.fetchEncodedAccount)(rpc, address, config);
77
+ return decodeConfig(maybeAccount);
78
+ }
79
+ async function fetchAllConfig(rpc, addresses, config) {
80
+ const maybeAccounts = await fetchAllMaybeConfig(rpc, addresses, config);
81
+ (0, kit_1.assertAccountsExist)(maybeAccounts);
82
+ return maybeAccounts;
83
+ }
84
+ async function fetchAllMaybeConfig(rpc, addresses, config) {
85
+ const maybeAccounts = await (0, kit_1.fetchEncodedAccounts)(rpc, addresses, config);
86
+ return maybeAccounts.map((maybeAccount) => decodeConfig(maybeAccount));
87
+ }
88
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/codama/accounts/config.ts"],"names":[],"mappings":"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"}