@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.
- package/README.md +305 -110
- package/dist/cjs/codama/accounts/config.js +88 -0
- package/dist/cjs/codama/accounts/config.js.map +1 -0
- package/dist/cjs/codama/accounts/contractState.js +17 -39
- package/dist/cjs/codama/accounts/contractState.js.map +1 -1
- package/dist/cjs/codama/accounts/index.js +1 -1
- package/dist/cjs/codama/accounts/index.js.map +1 -1
- package/dist/cjs/codama/accounts/rentalState.js +18 -33
- package/dist/cjs/codama/accounts/rentalState.js.map +1 -1
- package/dist/cjs/codama/accounts/thread.js +15 -32
- package/dist/cjs/codama/accounts/thread.js.map +1 -1
- package/dist/cjs/codama/errors/srsly.js +24 -3
- package/dist/cjs/codama/errors/srsly.js.map +1 -1
- package/dist/cjs/codama/instructions/acceptRental.js +202 -224
- package/dist/cjs/codama/instructions/acceptRental.js.map +1 -1
- package/dist/cjs/codama/instructions/cancelRental.js +100 -136
- package/dist/cjs/codama/instructions/cancelRental.js.map +1 -1
- package/dist/cjs/codama/instructions/closeContract.js +95 -116
- package/dist/cjs/codama/instructions/closeContract.js.map +1 -1
- package/dist/cjs/codama/instructions/closeRental.js +119 -132
- package/dist/cjs/codama/instructions/closeRental.js.map +1 -1
- package/dist/cjs/codama/instructions/createContract.js +127 -143
- package/dist/cjs/codama/instructions/createContract.js.map +1 -1
- package/dist/cjs/codama/instructions/index.js +2 -1
- package/dist/cjs/codama/instructions/index.js.map +1 -1
- package/dist/cjs/codama/instructions/initializeConfig.js +131 -0
- package/dist/cjs/codama/instructions/initializeConfig.js.map +1 -0
- package/dist/cjs/codama/instructions/payRental.js +125 -129
- package/dist/cjs/codama/instructions/payRental.js.map +1 -1
- package/dist/cjs/codama/instructions/resetRental.js +55 -77
- package/dist/cjs/codama/instructions/resetRental.js.map +1 -1
- package/dist/cjs/codama/instructions/updateConfig.js +145 -0
- package/dist/cjs/codama/instructions/updateConfig.js.map +1 -0
- package/dist/cjs/codama/programs/srsly.js +12 -8
- package/dist/cjs/codama/programs/srsly.js.map +1 -1
- package/dist/cjs/codama/shared/index.js +6 -2
- package/dist/cjs/codama/shared/index.js.map +1 -1
- package/dist/cjs/codama/types/trigger.js +1 -1
- package/dist/cjs/codama/types/trigger.js.map +1 -1
- package/dist/cjs/codama/types/triggerContext.js +1 -1
- package/dist/cjs/codama/types/triggerContext.js.map +1 -1
- package/dist/cjs/contract/close.js +75 -34
- package/dist/cjs/contract/close.js.map +1 -1
- package/dist/cjs/contract/create.js +59 -43
- package/dist/cjs/contract/create.js.map +1 -1
- package/dist/cjs/index.js +7 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +54 -0
- package/dist/cjs/rental/accept.js +68 -40
- package/dist/cjs/rental/accept.js.map +1 -1
- package/dist/cjs/rental/cancel.js +36 -28
- package/dist/cjs/rental/cancel.js.map +1 -1
- package/dist/cjs/rental/close.js +37 -29
- package/dist/cjs/rental/close.js.map +1 -1
- package/dist/cjs/rental/reset.js +46 -42
- package/dist/cjs/rental/reset.js.map +1 -1
- package/dist/cjs/utils/config.js +319 -0
- package/dist/cjs/utils/config.js.map +1 -0
- package/dist/cjs/utils/constants.js +69 -9
- package/dist/cjs/utils/constants.js.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/profiles.js +96 -95
- package/dist/cjs/utils/profiles.js.map +1 -1
- package/dist/esm/codama/accounts/config.js +76 -0
- package/dist/esm/codama/accounts/config.js.map +1 -0
- package/dist/esm/codama/accounts/contractState.js +3 -7
- package/dist/esm/codama/accounts/contractState.js.map +1 -1
- package/dist/esm/codama/accounts/index.js +1 -1
- package/dist/esm/codama/accounts/index.js.map +1 -1
- package/dist/esm/codama/accounts/rentalState.js +3 -1
- package/dist/esm/codama/accounts/rentalState.js.map +1 -1
- package/dist/esm/codama/errors/srsly.js +23 -2
- package/dist/esm/codama/errors/srsly.js.map +1 -1
- package/dist/esm/codama/instructions/acceptRental.js +30 -39
- package/dist/esm/codama/instructions/acceptRental.js.map +1 -1
- package/dist/esm/codama/instructions/cancelRental.js +10 -33
- package/dist/esm/codama/instructions/cancelRental.js.map +1 -1
- package/dist/esm/codama/instructions/closeContract.js +17 -25
- package/dist/esm/codama/instructions/closeContract.js.map +1 -1
- package/dist/esm/codama/instructions/closeRental.js +19 -19
- package/dist/esm/codama/instructions/closeRental.js.map +1 -1
- package/dist/esm/codama/instructions/createContract.js +13 -16
- package/dist/esm/codama/instructions/createContract.js.map +1 -1
- package/dist/esm/codama/instructions/index.js +2 -1
- package/dist/esm/codama/instructions/index.js.map +1 -1
- package/dist/esm/codama/instructions/initializeConfig.js +121 -0
- package/dist/esm/codama/instructions/initializeConfig.js.map +1 -0
- package/dist/esm/codama/instructions/payRental.js +34 -25
- package/dist/esm/codama/instructions/payRental.js.map +1 -1
- package/dist/esm/codama/instructions/resetRental.js +0 -9
- package/dist/esm/codama/instructions/resetRental.js.map +1 -1
- package/dist/esm/codama/instructions/updateConfig.js +135 -0
- package/dist/esm/codama/instructions/updateConfig.js.map +1 -0
- package/dist/esm/codama/programs/srsly.js +12 -8
- package/dist/esm/codama/programs/srsly.js.map +1 -1
- package/dist/esm/contract/close.js +68 -16
- package/dist/esm/contract/close.js.map +1 -1
- package/dist/esm/contract/create.js +60 -33
- package/dist/esm/contract/create.js.map +1 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +54 -0
- package/dist/esm/rental/accept.js +70 -31
- package/dist/esm/rental/accept.js.map +1 -1
- package/dist/esm/rental/cancel.js +37 -18
- package/dist/esm/rental/cancel.js.map +1 -1
- package/dist/esm/rental/close.js +38 -19
- package/dist/esm/rental/close.js.map +1 -1
- package/dist/esm/rental/reset.js +48 -33
- package/dist/esm/rental/reset.js.map +1 -1
- package/dist/esm/utils/config.js +277 -0
- package/dist/esm/utils/config.js.map +1 -0
- package/dist/esm/utils/constants.js +60 -7
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/profiles.js +39 -19
- package/dist/esm/utils/profiles.js.map +1 -1
- package/dist/types/codama/accounts/config.d.ts +52 -0
- package/dist/types/codama/accounts/config.d.ts.map +1 -0
- package/dist/types/codama/accounts/contractState.d.ts +2 -4
- package/dist/types/codama/accounts/contractState.d.ts.map +1 -1
- package/dist/types/codama/accounts/index.d.ts +1 -1
- package/dist/types/codama/accounts/index.d.ts.map +1 -1
- package/dist/types/codama/accounts/rentalState.d.ts +2 -0
- package/dist/types/codama/accounts/rentalState.d.ts.map +1 -1
- package/dist/types/codama/errors/srsly.d.ts +16 -2
- package/dist/types/codama/errors/srsly.d.ts.map +1 -1
- package/dist/types/codama/instructions/acceptRental.d.ts +41 -34
- package/dist/types/codama/instructions/acceptRental.d.ts.map +1 -1
- package/dist/types/codama/instructions/cancelRental.d.ts +14 -10
- package/dist/types/codama/instructions/cancelRental.d.ts.map +1 -1
- package/dist/types/codama/instructions/closeContract.d.ts +29 -21
- package/dist/types/codama/instructions/closeContract.d.ts.map +1 -1
- package/dist/types/codama/instructions/closeRental.d.ts +20 -12
- package/dist/types/codama/instructions/closeRental.d.ts.map +1 -1
- package/dist/types/codama/instructions/createContract.d.ts +27 -23
- package/dist/types/codama/instructions/createContract.d.ts.map +1 -1
- package/dist/types/codama/instructions/index.d.ts +2 -1
- package/dist/types/codama/instructions/index.d.ts.map +1 -1
- package/dist/types/codama/instructions/initializeConfig.d.ts +60 -0
- package/dist/types/codama/instructions/initializeConfig.d.ts.map +1 -0
- package/dist/types/codama/instructions/payRental.d.ts +28 -13
- package/dist/types/codama/instructions/payRental.d.ts.map +1 -1
- package/dist/types/codama/instructions/resetRental.d.ts +3 -3
- package/dist/types/codama/instructions/resetRental.d.ts.map +1 -1
- package/dist/types/codama/instructions/updateConfig.d.ts +93 -0
- package/dist/types/codama/instructions/updateConfig.d.ts.map +1 -0
- package/dist/types/codama/programs/srsly.d.ts +11 -8
- package/dist/types/codama/programs/srsly.d.ts.map +1 -1
- package/dist/types/contract/close.d.ts +20 -24
- package/dist/types/contract/close.d.ts.map +1 -1
- package/dist/types/contract/create.d.ts +34 -22
- package/dist/types/contract/create.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/rental/accept.d.ts +42 -20
- package/dist/types/rental/accept.d.ts.map +1 -1
- package/dist/types/rental/cancel.d.ts +16 -11
- package/dist/types/rental/cancel.d.ts.map +1 -1
- package/dist/types/rental/close.d.ts +16 -11
- package/dist/types/rental/close.d.ts.map +1 -1
- package/dist/types/rental/reset.d.ts +17 -20
- package/dist/types/rental/reset.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +167 -0
- package/dist/types/utils/config.d.ts.map +1 -0
- package/dist/types/utils/constants.d.ts +23 -7
- package/dist/types/utils/constants.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/profiles.d.ts +14 -8
- package/dist/types/utils/profiles.d.ts.map +1 -1
- package/package.json +36 -14
- package/target/idl/srsly.json +3279 -0
- package/target/types/srsly.ts +1 -0
- package/dist/cjs/codama/accounts/fleet.js +0 -94
- package/dist/cjs/codama/accounts/fleet.js.map +0 -1
- package/dist/cjs/codama/instructions/normalizeAdmin.js +0 -165
- package/dist/cjs/codama/instructions/normalizeAdmin.js.map +0 -1
- package/dist/esm/codama/accounts/fleet.js +0 -64
- package/dist/esm/codama/accounts/fleet.js.map +0 -1
- package/dist/esm/codama/instructions/normalizeAdmin.js +0 -142
- package/dist/esm/codama/instructions/normalizeAdmin.js.map +0 -1
- package/dist/types/codama/accounts/fleet.d.ts +0 -38
- package/dist/types/codama/accounts/fleet.d.ts.map +0 -1
- package/dist/types/codama/instructions/normalizeAdmin.d.ts +0 -67
- package/dist/types/codama/instructions/normalizeAdmin.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -4,194 +4,389 @@
|
|
|
4
4
|
[](https://www.typescriptlang.org/)
|
|
5
5
|
[](https://solana.com/)
|
|
6
6
|
|
|
7
|
-
A TypeScript SDK for
|
|
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
|
-
##
|
|
9
|
+
## What This SDK Does
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
The SRSLY SDK is a complete toolkit that helps you create Solana transactions for fleet rentals. It provides:
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
32
|
+
## Quick Start
|
|
24
33
|
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
77
|
+
### Option 2: Pack for Wallet Adapters (Browser)
|
|
30
78
|
|
|
31
79
|
```typescript
|
|
32
|
-
import {
|
|
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
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
//
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
|
171
|
+
// Create rental contract instruction
|
|
72
172
|
const createIx = await createContract({
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
182
|
+
// Close contract instruction
|
|
81
183
|
const closeIx = await closeContract({
|
|
82
|
-
|
|
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
|
|
195
|
+
// Accept rental offer instruction
|
|
100
196
|
const acceptIx = await acceptRental({
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
206
|
+
// Cancel active rental instruction
|
|
107
207
|
const cancelIx = await cancelRental({
|
|
108
|
-
|
|
208
|
+
borrower: borrowerWallet,
|
|
209
|
+
contract: contractAddress,
|
|
210
|
+
rentalState: rentalStateAddress
|
|
109
211
|
});
|
|
110
212
|
|
|
111
|
-
// Close
|
|
213
|
+
// Close completed rental instruction
|
|
112
214
|
const closeIx = await closeRental({
|
|
113
|
-
|
|
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
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
###
|
|
262
|
+
### Per-Instruction Configuration
|
|
123
263
|
|
|
124
|
-
|
|
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
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
318
|
+
```typescript
|
|
319
|
+
// This will throw a clear error for atlasnet/holosim
|
|
320
|
+
setConfig({ programs: 'atlasnet' }); // Missing rpcUrl!
|
|
139
321
|
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
##
|
|
326
|
+
## Types and Constants
|
|
145
327
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
328
|
+
```typescript
|
|
329
|
+
import type {
|
|
330
|
+
ContractState,
|
|
331
|
+
RentalState,
|
|
332
|
+
ConfigOptions,
|
|
333
|
+
PaymentFrequency
|
|
334
|
+
} from '@wuwei-labs/srsly';
|
|
149
335
|
|
|
150
|
-
|
|
336
|
+
import {
|
|
337
|
+
ATLAS_TO_STARDUST,
|
|
338
|
+
FACTION_MAPPING,
|
|
339
|
+
toAddress
|
|
340
|
+
} from '@wuwei-labs/srsly';
|
|
151
341
|
|
|
152
|
-
|
|
342
|
+
// Conversion rate: 1 ATLAS = 100,000,000 stardust
|
|
343
|
+
console.log(ATLAS_TO_STARDUST); // 100_000_000
|
|
153
344
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
350
|
+
// Address conversion utility
|
|
351
|
+
const addressObj = toAddress("123abc..."); // converts string to Address<string>
|
|
352
|
+
console.log(addressObj); // Address<string>
|
|
353
|
+
```
|
|
159
354
|
|
|
160
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
380
|
+
## Package Structure
|
|
176
381
|
|
|
177
|
-
The SDK
|
|
382
|
+
The SDK provides optimized builds for different environments:
|
|
178
383
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
##
|
|
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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"}
|