@zenx-labs/godl-supply 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +289 -0
- package/dist/accounts.d.ts +35 -0
- package/dist/accounts.d.ts.map +1 -0
- package/dist/accounts.js +276 -0
- package/dist/accounts.js.map +1 -0
- package/dist/cache/store.d.ts +11 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +31 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/client.d.ts +65 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +210 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +13 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +13 -0
- package/dist/constants.js.map +1 -0
- package/dist/generated/accounts/automation.d.ts +39 -0
- package/dist/generated/accounts/automation.d.ts.map +1 -0
- package/dist/generated/accounts/automation.js +60 -0
- package/dist/generated/accounts/automation.js.map +1 -0
- package/dist/generated/accounts/board.d.ts +31 -0
- package/dist/generated/accounts/board.d.ts.map +1 -0
- package/dist/generated/accounts/board.js +52 -0
- package/dist/generated/accounts/board.js.map +1 -0
- package/dist/generated/accounts/config.d.ts +39 -0
- package/dist/generated/accounts/config.d.ts.map +1 -0
- package/dist/generated/accounts/config.js +60 -0
- package/dist/generated/accounts/config.js.map +1 -0
- package/dist/generated/accounts/index.d.ts +19 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/index.js +19 -0
- package/dist/generated/accounts/index.js.map +1 -0
- package/dist/generated/accounts/miner.d.ts +58 -0
- package/dist/generated/accounts/miner.d.ts.map +1 -0
- package/dist/generated/accounts/miner.js +79 -0
- package/dist/generated/accounts/miner.js.map +1 -0
- package/dist/generated/accounts/poolMember.d.ts +33 -0
- package/dist/generated/accounts/poolMember.d.ts.map +1 -0
- package/dist/generated/accounts/poolMember.js +54 -0
- package/dist/generated/accounts/poolMember.js.map +1 -0
- package/dist/generated/accounts/poolRound.d.ts +35 -0
- package/dist/generated/accounts/poolRound.d.ts.map +1 -0
- package/dist/generated/accounts/poolRound.js +56 -0
- package/dist/generated/accounts/poolRound.js.map +1 -0
- package/dist/generated/accounts/referrer.d.ts +37 -0
- package/dist/generated/accounts/referrer.d.ts.map +1 -0
- package/dist/generated/accounts/referrer.js +58 -0
- package/dist/generated/accounts/referrer.js.map +1 -0
- package/dist/generated/accounts/round.d.ts +49 -0
- package/dist/generated/accounts/round.d.ts.map +1 -0
- package/dist/generated/accounts/round.js +70 -0
- package/dist/generated/accounts/round.js.map +1 -0
- package/dist/generated/accounts/stake.d.ts +44 -0
- package/dist/generated/accounts/stake.d.ts.map +1 -0
- package/dist/generated/accounts/stake.js +65 -0
- package/dist/generated/accounts/stake.js.map +1 -0
- package/dist/generated/accounts/stakeV2.d.ts +56 -0
- package/dist/generated/accounts/stakeV2.d.ts.map +1 -0
- package/dist/generated/accounts/stakeV2.js +77 -0
- package/dist/generated/accounts/stakeV2.js.map +1 -0
- package/dist/generated/accounts/treasury.d.ts +40 -0
- package/dist/generated/accounts/treasury.d.ts.map +1 -0
- package/dist/generated/accounts/treasury.js +61 -0
- package/dist/generated/accounts/treasury.js.map +1 -0
- package/dist/generated/errors/godl.d.ts +24 -0
- package/dist/generated/errors/godl.d.ts.map +1 -0
- package/dist/generated/errors/godl.js +30 -0
- package/dist/generated/errors/godl.js.map +1 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/generated/errors/index.js +9 -0
- package/dist/generated/errors/index.js.map +1 -0
- package/dist/generated/index.d.ts +13 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +13 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/instructions/automate.d.ts +68 -0
- package/dist/generated/instructions/automate.d.ts.map +1 -0
- package/dist/generated/instructions/automate.js +94 -0
- package/dist/generated/instructions/automate.js.map +1 -0
- package/dist/generated/instructions/automateLegacy.d.ts +65 -0
- package/dist/generated/instructions/automateLegacy.d.ts.map +1 -0
- package/dist/generated/instructions/automateLegacy.js +92 -0
- package/dist/generated/instructions/automateLegacy.js.map +1 -0
- package/dist/generated/instructions/automateV3.d.ts +74 -0
- package/dist/generated/instructions/automateV3.d.ts.map +1 -0
- package/dist/generated/instructions/automateV3.js +98 -0
- package/dist/generated/instructions/automateV3.js.map +1 -0
- package/dist/generated/instructions/checkpointV3.d.ts +58 -0
- package/dist/generated/instructions/checkpointV3.d.ts.map +1 -0
- package/dist/generated/instructions/checkpointV3.js +87 -0
- package/dist/generated/instructions/checkpointV3.js.map +1 -0
- package/dist/generated/instructions/claimGodl.d.ts +70 -0
- package/dist/generated/instructions/claimGodl.d.ts.map +1 -0
- package/dist/generated/instructions/claimGodl.js +103 -0
- package/dist/generated/instructions/claimGodl.js.map +1 -0
- package/dist/generated/instructions/claimReferral.d.ts +58 -0
- package/dist/generated/instructions/claimReferral.d.ts.map +1 -0
- package/dist/generated/instructions/claimReferral.js +88 -0
- package/dist/generated/instructions/claimReferral.js.map +1 -0
- package/dist/generated/instructions/claimSol.d.ts +46 -0
- package/dist/generated/instructions/claimSol.d.ts.map +1 -0
- package/dist/generated/instructions/claimSol.js +75 -0
- package/dist/generated/instructions/claimSol.js.map +1 -0
- package/dist/generated/instructions/claimYield.d.ts +65 -0
- package/dist/generated/instructions/claimYield.d.ts.map +1 -0
- package/dist/generated/instructions/claimYield.js +103 -0
- package/dist/generated/instructions/claimYield.js.map +1 -0
- package/dist/generated/instructions/claimYieldV2.d.ts +68 -0
- package/dist/generated/instructions/claimYieldV2.d.ts.map +1 -0
- package/dist/generated/instructions/claimYieldV2.js +105 -0
- package/dist/generated/instructions/claimYieldV2.js.map +1 -0
- package/dist/generated/instructions/compoundYieldV2.d.ts +65 -0
- package/dist/generated/instructions/compoundYieldV2.d.ts.map +1 -0
- package/dist/generated/instructions/compoundYieldV2.js +98 -0
- package/dist/generated/instructions/compoundYieldV2.js.map +1 -0
- package/dist/generated/instructions/deploy.d.ts +71 -0
- package/dist/generated/instructions/deploy.d.ts.map +1 -0
- package/dist/generated/instructions/deploy.js +101 -0
- package/dist/generated/instructions/deploy.js.map +1 -0
- package/dist/generated/instructions/deployV3.d.ts +80 -0
- package/dist/generated/instructions/deployV3.d.ts.map +1 -0
- package/dist/generated/instructions/deployV3.js +108 -0
- package/dist/generated/instructions/deployV3.js.map +1 -0
- package/dist/generated/instructions/deposit.d.ts +65 -0
- package/dist/generated/instructions/deposit.d.ts.map +1 -0
- package/dist/generated/instructions/deposit.js +103 -0
- package/dist/generated/instructions/deposit.js.map +1 -0
- package/dist/generated/instructions/depositV2.d.ts +74 -0
- package/dist/generated/instructions/depositV2.d.ts.map +1 -0
- package/dist/generated/instructions/depositV2.js +110 -0
- package/dist/generated/instructions/depositV2.js.map +1 -0
- package/dist/generated/instructions/fundAutomation.d.ts +40 -0
- package/dist/generated/instructions/fundAutomation.d.ts.map +1 -0
- package/dist/generated/instructions/fundAutomation.js +66 -0
- package/dist/generated/instructions/fundAutomation.js.map +1 -0
- package/dist/generated/instructions/index.d.ts +30 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/index.js +30 -0
- package/dist/generated/instructions/index.js.map +1 -0
- package/dist/generated/instructions/initializeReferrer.d.ts +55 -0
- package/dist/generated/instructions/initializeReferrer.d.ts.map +1 -0
- package/dist/generated/instructions/initializeReferrer.js +85 -0
- package/dist/generated/instructions/initializeReferrer.js.map +1 -0
- package/dist/generated/instructions/log.d.ts +37 -0
- package/dist/generated/instructions/log.d.ts.map +1 -0
- package/dist/generated/instructions/log.js +59 -0
- package/dist/generated/instructions/log.js.map +1 -0
- package/dist/generated/instructions/setReferrer.d.ts +47 -0
- package/dist/generated/instructions/setReferrer.d.ts.map +1 -0
- package/dist/generated/instructions/setReferrer.js +68 -0
- package/dist/generated/instructions/setReferrer.js.map +1 -0
- package/dist/generated/instructions/setStakeExecutor.d.ts +47 -0
- package/dist/generated/instructions/setStakeExecutor.d.ts.map +1 -0
- package/dist/generated/instructions/setStakeExecutor.js +69 -0
- package/dist/generated/instructions/setStakeExecutor.js.map +1 -0
- package/dist/generated/instructions/stakeNft.d.ts +52 -0
- package/dist/generated/instructions/stakeNft.d.ts.map +1 -0
- package/dist/generated/instructions/stakeNft.js +78 -0
- package/dist/generated/instructions/stakeNft.js.map +1 -0
- package/dist/generated/instructions/unstakeNft.d.ts +52 -0
- package/dist/generated/instructions/unstakeNft.d.ts.map +1 -0
- package/dist/generated/instructions/unstakeNft.js +78 -0
- package/dist/generated/instructions/unstakeNft.js.map +1 -0
- package/dist/generated/instructions/withdraw.d.ts +65 -0
- package/dist/generated/instructions/withdraw.d.ts.map +1 -0
- package/dist/generated/instructions/withdraw.js +103 -0
- package/dist/generated/instructions/withdraw.js.map +1 -0
- package/dist/generated/instructions/withdrawV2.d.ts +68 -0
- package/dist/generated/instructions/withdrawV2.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawV2.js +105 -0
- package/dist/generated/instructions/withdrawV2.js.map +1 -0
- package/dist/generated/programs/godl.d.ts +56 -0
- package/dist/generated/programs/godl.d.ts.map +1 -0
- package/dist/generated/programs/godl.js +74 -0
- package/dist/generated/programs/godl.js.map +1 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/programs/index.js +9 -0
- package/dist/generated/programs/index.js.map +1 -0
- package/dist/generated/shared/index.d.ts +50 -0
- package/dist/generated/shared/index.d.ts.map +1 -0
- package/dist/generated/shared/index.js +80 -0
- package/dist/generated/shared/index.js.map +1 -0
- package/dist/generated/types/index.d.ts +9 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +9 -0
- package/dist/generated/types/index.js.map +1 -0
- package/dist/generated/types/numeric.d.ts +17 -0
- package/dist/generated/types/numeric.d.ts.map +1 -0
- package/dist/generated/types/numeric.js +18 -0
- package/dist/generated/types/numeric.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/autominer.d.ts +6 -0
- package/dist/instructions/autominer.d.ts.map +1 -0
- package/dist/instructions/autominer.js +68 -0
- package/dist/instructions/autominer.js.map +1 -0
- package/dist/instructions/index.d.ts +4 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +4 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/mining.d.ts +7 -0
- package/dist/instructions/mining.d.ts.map +1 -0
- package/dist/instructions/mining.js +96 -0
- package/dist/instructions/mining.js.map +1 -0
- package/dist/instructions/staking.d.ts +13 -0
- package/dist/instructions/staking.d.ts.map +1 -0
- package/dist/instructions/staking.js +169 -0
- package/dist/instructions/staking.js.map +1 -0
- package/dist/pda.d.ts +16 -0
- package/dist/pda.d.ts.map +1 -0
- package/dist/pda.js +58 -0
- package/dist/pda.js.map +1 -0
- package/dist/slot/tracker.d.ts +13 -0
- package/dist/slot/tracker.d.ts.map +1 -0
- package/dist/slot/tracker.js +47 -0
- package/dist/slot/tracker.js.map +1 -0
- package/dist/types.d.ts +178 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket/codecs.d.ts +12 -0
- package/dist/websocket/codecs.d.ts.map +1 -0
- package/dist/websocket/codecs.js +243 -0
- package/dist/websocket/codecs.js.map +1 -0
- package/dist/websocket/connection.d.ts +30 -0
- package/dist/websocket/connection.d.ts.map +1 -0
- package/dist/websocket/connection.js +212 -0
- package/dist/websocket/connection.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# @zenx-labs/godl-supply
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for interacting with the [GODL](https://godl.dev) on-chain program on Solana. Provides real-time WebSocket streaming, account fetching with caching, transaction building, and full type safety.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @zenx-labs/godl-supply
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { GodlSupply } from '@zenx-labs/godl-supply'
|
|
15
|
+
|
|
16
|
+
const sdk = new GodlSupply(signer, {
|
|
17
|
+
rpcUrl: 'https://api.mainnet-beta.solana.com', // optional, defaults to public mainnet
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
// Connect to real-time WebSocket stream
|
|
21
|
+
await sdk.connect()
|
|
22
|
+
|
|
23
|
+
// Listen for events
|
|
24
|
+
sdk.on('board', (board) => {
|
|
25
|
+
console.log('Round:', board.roundId)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
sdk.on('treasury', (treasury) => {
|
|
29
|
+
console.log('Balance:', treasury.balance)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
// Fetch account data (cached + RPC fallback)
|
|
33
|
+
const board = await sdk.getBoard()
|
|
34
|
+
const miner = await sdk.getMiner('68m3ocDFeJ1iQE9Pyu9Exn1HdpGcTgh12zpjWM7K8pKU')
|
|
35
|
+
|
|
36
|
+
// Disconnect when done
|
|
37
|
+
sdk.disconnect()
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Signer
|
|
41
|
+
|
|
42
|
+
The SDK expects a `Signer` compatible with the [gill](https://github.com/solana-developers/gill) library:
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import type { Signer } from '@zenx-labs/godl-supply'
|
|
46
|
+
|
|
47
|
+
const signer: Signer = {
|
|
48
|
+
address: address('YourPublicKey...'),
|
|
49
|
+
async signAndSendTransactions(transactions, config) {
|
|
50
|
+
// Sign and submit transactions to the network
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Configuration
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
type GodlSupplyConfig = {
|
|
59
|
+
rpcUrl?: string // Solana RPC endpoint (default: public mainnet)
|
|
60
|
+
wsUrl?: string // GODL stream WebSocket URL (default: wss://stream.godl.dev/stream)
|
|
61
|
+
streamApiUrl?: string // GODL stream REST API URL (default: https://stream.godl.dev)
|
|
62
|
+
commitment?: 'confirmed' | 'finalized' | 'processed' // default: 'confirmed'
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## API Reference
|
|
67
|
+
|
|
68
|
+
### Lifecycle
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
await sdk.connect() // Connect to WebSocket stream and sync initial state
|
|
72
|
+
sdk.disconnect() // Disconnect and clear cache
|
|
73
|
+
sdk.isConnected // boolean
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Events
|
|
77
|
+
|
|
78
|
+
The SDK emits typed events via WebSocket. Subscribe with `on()` and unsubscribe with the returned function or `off()`.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// Subscribe
|
|
82
|
+
const unsub = sdk.on('board', (board) => { /* ... */ })
|
|
83
|
+
|
|
84
|
+
// Unsubscribe
|
|
85
|
+
unsub()
|
|
86
|
+
// or
|
|
87
|
+
sdk.off('board', handler)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### Available Events
|
|
91
|
+
|
|
92
|
+
| Event | Data Type | Description |
|
|
93
|
+
|------------------|-----------------|------------------------------------------|
|
|
94
|
+
| `board` | `Board` | Current board state (round info, slots) |
|
|
95
|
+
| `round` | `Round` | Round deployment data and results |
|
|
96
|
+
| `resetEvent` | `ResetEvent` | Round reset with winners and payouts |
|
|
97
|
+
| `treasury` | `Treasury` | Treasury balances and reward factors |
|
|
98
|
+
| `miner` | `Miner` | Your miner account updates |
|
|
99
|
+
| `automation` | `Automation` | Your autominer account updates |
|
|
100
|
+
| `slotData` | `SlotData` | Slot synchronization data |
|
|
101
|
+
| `solMotherlode` | `SolMotherlode` | SOL motherlode amount |
|
|
102
|
+
| `poolMember` | `PoolMember` | Your pool membership data |
|
|
103
|
+
| `poolRound` | `PoolRound` | Pool round deployment data |
|
|
104
|
+
| `slotTick` | `bigint` | Emitted every ~400ms with current slot |
|
|
105
|
+
| `connected` | `boolean` | WebSocket connection state changes |
|
|
106
|
+
| `error` | `Error` | WebSocket errors |
|
|
107
|
+
|
|
108
|
+
### Slot Tracking
|
|
109
|
+
|
|
110
|
+
The SDK maintains a local slot counter that increments every ~400ms after the initial sync from the WebSocket.
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
const currentSlot = sdk.getSlot()
|
|
114
|
+
|
|
115
|
+
const unsub = sdk.onSlotTick((slot) => {
|
|
116
|
+
console.log('Slot:', slot)
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Account Getters
|
|
121
|
+
|
|
122
|
+
All account getters use a two-tier strategy: check the in-memory cache first (15s TTL), then fall back to the stream API or RPC. The WebSocket stream also keeps the cache warm with real-time updates.
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Global state
|
|
126
|
+
const board = await sdk.getBoard()
|
|
127
|
+
const treasury = await sdk.getTreasury()
|
|
128
|
+
const config = await sdk.getConfig()
|
|
129
|
+
|
|
130
|
+
// Per-user accounts (defaults to signer if no authority provided)
|
|
131
|
+
const miner = await sdk.getMiner()
|
|
132
|
+
const miner2 = await sdk.getMiner('SomeOtherPublicKey...')
|
|
133
|
+
const automation = await sdk.getAutomation() // returns null if not set up
|
|
134
|
+
const stake = await sdk.getStake()
|
|
135
|
+
const stakeV2 = await sdk.getStakeV2(0n) // by stake ID
|
|
136
|
+
const allStakes = await sdk.getStakeV2Accounts() // all StakeV2 accounts
|
|
137
|
+
|
|
138
|
+
// Round data
|
|
139
|
+
const round = await sdk.getRound(42n) // returns null if not found
|
|
140
|
+
const poolRound = await sdk.getPoolRound(42n)
|
|
141
|
+
|
|
142
|
+
// Pool and referral
|
|
143
|
+
const poolMember = await sdk.getPoolMember() // returns null if not a member
|
|
144
|
+
const referrer = await sdk.getReferrer() // returns null if not a referrer
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Mining
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// Deploy to the board
|
|
151
|
+
const sig = await sdk.deploy({
|
|
152
|
+
amount: 100,
|
|
153
|
+
squares: [0, 5, 12, 18, 24],
|
|
154
|
+
varAddress: address('...'),
|
|
155
|
+
isPooled: false, // optional, default: false
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
// Claim rewards
|
|
159
|
+
const sig = await sdk.claim({
|
|
160
|
+
claimSol: true,
|
|
161
|
+
claimGodl: true,
|
|
162
|
+
})
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Autominer
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// Set up autominer
|
|
169
|
+
const sig = await sdk.setupAutominer({
|
|
170
|
+
amount: 100,
|
|
171
|
+
deposit: 500_000,
|
|
172
|
+
squares: [0, 5, 12, 18, 24],
|
|
173
|
+
strategy: 1,
|
|
174
|
+
numRounds: 10,
|
|
175
|
+
claimAndFund: false, // optional
|
|
176
|
+
isPooled: false, // optional
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
// Fund autominer
|
|
180
|
+
const sig = await sdk.fundAutomation(1_000_000)
|
|
181
|
+
|
|
182
|
+
// Stop autominer
|
|
183
|
+
const sig = await sdk.stopAutominer()
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Staking
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// V1 Staking
|
|
190
|
+
const sig = await sdk.stakeDeposit(1_000_000n)
|
|
191
|
+
const sig = await sdk.stakeWithdraw(500_000n)
|
|
192
|
+
const sig = await sdk.stakeClaimYield(100_000n)
|
|
193
|
+
|
|
194
|
+
// V2 Staking (with lock duration and multiplier)
|
|
195
|
+
const sig = await sdk.stakeV2Deposit(0n, 1_000_000n, 30n) // id, amount, lockDuration
|
|
196
|
+
const sig = await sdk.stakeV2Withdraw(0n, 500_000n)
|
|
197
|
+
const sig = await sdk.stakeV2ClaimYield(0n, 100_000n)
|
|
198
|
+
const sig = await sdk.stakeV2CompoundYield(0n)
|
|
199
|
+
|
|
200
|
+
// Set executor for V2 stake
|
|
201
|
+
const sig = await sdk.setStakeExecutor(0n, address('executor...'))
|
|
202
|
+
|
|
203
|
+
// NFT boost
|
|
204
|
+
const sig = await sdk.stakeNft(0n, address('nftAsset...'))
|
|
205
|
+
const sig = await sdk.unstakeNft(0n, address('nftAsset...'))
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Low-Level Instruction Builders
|
|
209
|
+
|
|
210
|
+
For custom transaction composition, you can use the instruction builders directly:
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
import {
|
|
214
|
+
getDeployV3Instruction,
|
|
215
|
+
getCheckpointV3Instruction,
|
|
216
|
+
getClaimSolInstruction,
|
|
217
|
+
getClaimGodlInstruction,
|
|
218
|
+
getAutomateV3Instruction,
|
|
219
|
+
getStopAutominerInstruction,
|
|
220
|
+
getFundAutomationInstruction,
|
|
221
|
+
getStakeDepositInstruction,
|
|
222
|
+
getStakeWithdrawInstruction,
|
|
223
|
+
getStakeClaimYieldInstruction,
|
|
224
|
+
getStakeV2DepositInstruction,
|
|
225
|
+
getStakeV2WithdrawInstruction,
|
|
226
|
+
getStakeV2ClaimYieldInstruction,
|
|
227
|
+
getStakeV2CompoundYieldInstruction,
|
|
228
|
+
getSetStakeExecutorV2Instruction,
|
|
229
|
+
getStakeNftInstruction,
|
|
230
|
+
getUnstakeNftInstruction,
|
|
231
|
+
} from '@zenx-labs/godl-supply'
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## PDA Derivation
|
|
235
|
+
|
|
236
|
+
All PDA helpers return `[PublicKey, bumpSeed]`:
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import {
|
|
240
|
+
getBoardPda,
|
|
241
|
+
getTreasuryPda,
|
|
242
|
+
getConfigPda,
|
|
243
|
+
getRoundPda,
|
|
244
|
+
getMinerPda,
|
|
245
|
+
getAutomationPda,
|
|
246
|
+
getStakePda,
|
|
247
|
+
getStakeV2Pda,
|
|
248
|
+
getPoolRoundPda,
|
|
249
|
+
getPoolMemberPda,
|
|
250
|
+
getGodlAta, // returns Promise<Address>
|
|
251
|
+
} from '@zenx-labs/godl-supply'
|
|
252
|
+
|
|
253
|
+
const [boardKey, bump] = getBoardPda()
|
|
254
|
+
const [minerKey, bump] = getMinerPda(publicKey)
|
|
255
|
+
const [stakeKey, bump] = getStakeV2Pda(publicKey, 0n)
|
|
256
|
+
const ata = await getGodlAta(address('owner...'))
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Advanced Usage
|
|
260
|
+
|
|
261
|
+
The SDK exports internal components for custom integrations:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
import { HotCache, SlotTracker, AccountFetcher } from '@zenx-labs/godl-supply'
|
|
265
|
+
|
|
266
|
+
// Custom cache with 5s TTL
|
|
267
|
+
const cache = new HotCache(5_000)
|
|
268
|
+
|
|
269
|
+
// Direct account fetching without the full client
|
|
270
|
+
const fetcher = new AccountFetcher(rpc, cache, 'https://stream.godl.dev')
|
|
271
|
+
const initData = await fetcher.fetchInitData()
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Constants
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
import {
|
|
278
|
+
GODL_PROGRAM_ID, // Program public key
|
|
279
|
+
GODL_MINT, // GODL token mint address
|
|
280
|
+
ENTROPY_PROGRAM_ADDRESS, // Entropy program for randomness
|
|
281
|
+
EXECUTOR_ADDRESS, // Autominer executor
|
|
282
|
+
AUTOMATION_FEE, // Fee per automation round (30,000 lamports)
|
|
283
|
+
NFT_BOOST_COLLECTION, // NFT collection for stake boosts
|
|
284
|
+
} from '@zenx-labs/godl-supply'
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## License
|
|
288
|
+
|
|
289
|
+
MIT
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Rpc, type SolanaRpcApi, type FetchAccountConfig } from 'gill';
|
|
2
|
+
import type { Treasury, Board, Config, Miner, Automation, Round, Stake, StakeV2, PoolRound, PoolMember, ReferrerInfo, SolMotherlode, SlotData } from './types.js';
|
|
3
|
+
import type { HotCache } from './cache/store.js';
|
|
4
|
+
export interface InitData {
|
|
5
|
+
board: Board;
|
|
6
|
+
round: Round;
|
|
7
|
+
treasury: Treasury;
|
|
8
|
+
slotData: SlotData;
|
|
9
|
+
solMotherlode: SolMotherlode;
|
|
10
|
+
poolRound: PoolRound;
|
|
11
|
+
lastMotherlodeRoundId: bigint | null;
|
|
12
|
+
}
|
|
13
|
+
export declare class AccountFetcher {
|
|
14
|
+
private rpc;
|
|
15
|
+
private cache;
|
|
16
|
+
private streamApiUrl;
|
|
17
|
+
private initDataLoaded;
|
|
18
|
+
constructor(rpc: Rpc<SolanaRpcApi>, cache: HotCache, streamApiUrl?: string);
|
|
19
|
+
fetchInitData(): Promise<InitData | null>;
|
|
20
|
+
private ensureInitData;
|
|
21
|
+
getBoard(): Promise<Board>;
|
|
22
|
+
getTreasury(): Promise<Treasury>;
|
|
23
|
+
getConfig(): Promise<Config>;
|
|
24
|
+
getMiner(authority: string): Promise<Miner>;
|
|
25
|
+
getAutomation(authority: string): Promise<Automation | null>;
|
|
26
|
+
getAutomationLegacy(authority: string): Promise<Automation>;
|
|
27
|
+
getRound(roundId: bigint, config?: FetchAccountConfig): Promise<Round | null>;
|
|
28
|
+
getStake(authority: string): Promise<Stake>;
|
|
29
|
+
getStakeV2(authority: string, id: bigint): Promise<StakeV2>;
|
|
30
|
+
getStakeV2Accounts(authority: string): Promise<StakeV2[]>;
|
|
31
|
+
getPoolRound(roundId: bigint, config?: FetchAccountConfig): Promise<PoolRound | null>;
|
|
32
|
+
getPoolMember(authority: string, config?: FetchAccountConfig): Promise<PoolMember | null>;
|
|
33
|
+
getReferrer(authority: string): Promise<ReferrerInfo | null>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAuCpF,OAAO,KAAK,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,KAAK,EACL,OAAO,EACP,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,EACb,QAAQ,EACT,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,aAAa,CAAA;IAC5B,SAAS,EAAE,SAAS,CAAA;IACpB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;CACrC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,cAAc,CAAQ;gBAElB,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,MAAM;IAMpE,aAAa,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAmCjC,cAAc;IAMtB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAgB1B,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAoBhC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAmB5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAgB3C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkB5D,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAU3D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAwB7E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAU3C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuCzD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAsBrF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAiBzF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAkBnE"}
|
package/dist/accounts.js
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
|
2
|
+
import { address } from 'gill';
|
|
3
|
+
import bs58 from 'bs58';
|
|
4
|
+
import { fetchMiner, fetchMaybeRound, fetchStake, fetchStakeV2, fetchTreasury, fetchAutomation, fetchMaybeAutomation, fetchConfig, fetchBoard, fetchMaybePoolRound, fetchMaybePoolMember, fetchReferrer, getStakeV2Decoder, } from './generated/index.js';
|
|
5
|
+
import { getBoardPda, getTreasuryPda, getConfigPda, getMinerPda, getAutomationPda, getAutomationLegacyPda, getRoundPda, getStakePda, getStakeV2Pda, getPoolRoundPda, getPoolMemberPda, } from './pda.js';
|
|
6
|
+
import { GODL_PROGRAM_ID, DEFAULT_STREAM_API_URL } from './constants.js';
|
|
7
|
+
import { decodeBoard, decodeRound, decodeTreasury, decodeSlotData, decodeSolMotherlode, decodePoolRound, } from './websocket/codecs.js';
|
|
8
|
+
export class AccountFetcher {
|
|
9
|
+
rpc;
|
|
10
|
+
cache;
|
|
11
|
+
streamApiUrl;
|
|
12
|
+
initDataLoaded = false;
|
|
13
|
+
constructor(rpc, cache, streamApiUrl) {
|
|
14
|
+
this.rpc = rpc;
|
|
15
|
+
this.cache = cache;
|
|
16
|
+
this.streamApiUrl = streamApiUrl ?? DEFAULT_STREAM_API_URL;
|
|
17
|
+
}
|
|
18
|
+
async fetchInitData() {
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(`${this.streamApiUrl}/api/init-data`, {
|
|
21
|
+
cache: 'no-store',
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok)
|
|
24
|
+
return null;
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
if (!data.round || !data.board || !data.slotData)
|
|
27
|
+
return null;
|
|
28
|
+
const board = decodeBoard(new Uint8Array(Buffer.from(data.board, 'base64')));
|
|
29
|
+
const round = decodeRound(new Uint8Array(Buffer.from(data.round, 'base64')));
|
|
30
|
+
const treasury = decodeTreasury(new Uint8Array(Buffer.from(data.treasury, 'base64')));
|
|
31
|
+
const slotData = decodeSlotData(new Uint8Array(Buffer.from(data.slotData, 'base64')));
|
|
32
|
+
const solMotherlode = decodeSolMotherlode(new Uint8Array(Buffer.from(data.solMotherlode, 'base64')));
|
|
33
|
+
const poolRound = decodePoolRound(new Uint8Array(Buffer.from(data.poolRound, 'base64')));
|
|
34
|
+
const lastMotherlodeRoundId = data.lastMotherlodeRoundId ? BigInt(data.lastMotherlodeRoundId) : null;
|
|
35
|
+
this.cache.set('board', board);
|
|
36
|
+
this.cache.set('currentRound', round);
|
|
37
|
+
this.cache.set(`round:${round.id}`, round);
|
|
38
|
+
this.cache.set('treasury', treasury);
|
|
39
|
+
this.cache.set('slotData', slotData);
|
|
40
|
+
this.cache.set('solMotherlode', solMotherlode);
|
|
41
|
+
this.cache.set('poolRound', poolRound);
|
|
42
|
+
this.cache.set(`poolRound:${poolRound.id}`, poolRound);
|
|
43
|
+
this.initDataLoaded = true;
|
|
44
|
+
return { board, round, treasury, slotData, solMotherlode, poolRound, lastMotherlodeRoundId };
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async ensureInitData() {
|
|
51
|
+
if (!this.initDataLoaded) {
|
|
52
|
+
await this.fetchInitData();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async getBoard() {
|
|
56
|
+
const cached = this.cache.get('board');
|
|
57
|
+
if (cached)
|
|
58
|
+
return cached;
|
|
59
|
+
await this.ensureInitData();
|
|
60
|
+
const fromInit = this.cache.get('board');
|
|
61
|
+
if (fromInit)
|
|
62
|
+
return fromInit;
|
|
63
|
+
// Fallback to RPC
|
|
64
|
+
const [boardPda] = getBoardPda();
|
|
65
|
+
const board = await fetchBoard(this.rpc, address(boardPda.toBase58()));
|
|
66
|
+
const result = { ...board.data };
|
|
67
|
+
this.cache.set('board', result);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
async getTreasury() {
|
|
71
|
+
const cached = this.cache.get('treasury');
|
|
72
|
+
if (cached)
|
|
73
|
+
return cached;
|
|
74
|
+
await this.ensureInitData();
|
|
75
|
+
const fromInit = this.cache.get('treasury');
|
|
76
|
+
if (fromInit)
|
|
77
|
+
return fromInit;
|
|
78
|
+
// Fallback to RPC
|
|
79
|
+
const [treasuryPda] = getTreasuryPda();
|
|
80
|
+
const treasury = await fetchTreasury(this.rpc, address(treasuryPda.toBase58()));
|
|
81
|
+
const result = {
|
|
82
|
+
...treasury.data,
|
|
83
|
+
minerRewardsFactor: new Uint8Array(treasury.data.minerRewardsFactor.bits),
|
|
84
|
+
stakeRewardsFactor: new Uint8Array(treasury.data.stakeRewardsFactor.bits),
|
|
85
|
+
};
|
|
86
|
+
this.cache.set('treasury', result);
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
async getConfig() {
|
|
90
|
+
const cached = this.cache.get('config');
|
|
91
|
+
if (cached)
|
|
92
|
+
return cached;
|
|
93
|
+
// Config is not part of init-data, always fetch from RPC
|
|
94
|
+
const [configPda] = getConfigPda();
|
|
95
|
+
const config = await fetchConfig(this.rpc, address(configPda.toBase58()));
|
|
96
|
+
const result = {
|
|
97
|
+
...config.data,
|
|
98
|
+
admin: config.data.admin.toString(),
|
|
99
|
+
buryAuthority: config.data.buryAuthority.toString(),
|
|
100
|
+
feeCollector: config.data.feeCollector.toString(),
|
|
101
|
+
swapProgram: config.data.swapProgram.toString(),
|
|
102
|
+
varAddress: config.data.varAddress.toString(),
|
|
103
|
+
};
|
|
104
|
+
this.cache.set('config', result);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
async getMiner(authority) {
|
|
108
|
+
const cacheKey = `miner:${authority}`;
|
|
109
|
+
const cached = this.cache.get(cacheKey);
|
|
110
|
+
if (cached)
|
|
111
|
+
return cached;
|
|
112
|
+
const [minerPda] = getMinerPda(new PublicKey(authority));
|
|
113
|
+
const miner = await fetchMiner(this.rpc, address(minerPda.toBase58()));
|
|
114
|
+
const result = {
|
|
115
|
+
...miner.data,
|
|
116
|
+
authority: miner.data.authority.toString(),
|
|
117
|
+
rewardsFactor: new Uint8Array(miner.data.rewardsFactor.bits),
|
|
118
|
+
};
|
|
119
|
+
this.cache.set(cacheKey, result);
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
async getAutomation(authority) {
|
|
123
|
+
const cacheKey = `automation:${authority}`;
|
|
124
|
+
const cached = this.cache.get(cacheKey);
|
|
125
|
+
if (cached)
|
|
126
|
+
return cached;
|
|
127
|
+
const [automationPda] = getAutomationPda(new PublicKey(authority));
|
|
128
|
+
const automation = await fetchMaybeAutomation(this.rpc, address(automationPda.toBase58()));
|
|
129
|
+
if (!automation.exists)
|
|
130
|
+
return null;
|
|
131
|
+
const result = {
|
|
132
|
+
...automation.data,
|
|
133
|
+
authority: automation.data.authority.toString(),
|
|
134
|
+
executor: automation.data.executor.toString(),
|
|
135
|
+
};
|
|
136
|
+
this.cache.set(cacheKey, result);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
async getAutomationLegacy(authority) {
|
|
140
|
+
const [automationPda] = getAutomationLegacyPda(new PublicKey(authority));
|
|
141
|
+
const automation = await fetchAutomation(this.rpc, address(automationPda.toBase58()));
|
|
142
|
+
return {
|
|
143
|
+
...automation.data,
|
|
144
|
+
authority: automation.data.authority.toString(),
|
|
145
|
+
executor: automation.data.executor.toString(),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async getRound(roundId, config) {
|
|
149
|
+
const cacheKey = `round:${roundId}`;
|
|
150
|
+
const cached = this.cache.get(cacheKey);
|
|
151
|
+
if (cached)
|
|
152
|
+
return cached;
|
|
153
|
+
await this.ensureInitData();
|
|
154
|
+
const fromInit = this.cache.get(cacheKey);
|
|
155
|
+
if (fromInit)
|
|
156
|
+
return fromInit;
|
|
157
|
+
// Fallback to RPC for historical rounds
|
|
158
|
+
const [roundPda] = getRoundPda(roundId);
|
|
159
|
+
const maybeRound = await fetchMaybeRound(this.rpc, address(roundPda.toBase58()), config);
|
|
160
|
+
if (!maybeRound.exists)
|
|
161
|
+
return null;
|
|
162
|
+
const result = {
|
|
163
|
+
...maybeRound.data,
|
|
164
|
+
slotHash: new Uint8Array(maybeRound.data.slotHash.buffer),
|
|
165
|
+
rentPayer: maybeRound.data.rentPayer.toString(),
|
|
166
|
+
topMiner: maybeRound.data.topMiner.toString(),
|
|
167
|
+
};
|
|
168
|
+
this.cache.set(cacheKey, result);
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
async getStake(authority) {
|
|
172
|
+
const [stakePda] = getStakePda(new PublicKey(authority));
|
|
173
|
+
const stake = await fetchStake(this.rpc, address(stakePda.toBase58()));
|
|
174
|
+
return {
|
|
175
|
+
...stake.data,
|
|
176
|
+
authority: stake.data.authority.toString(),
|
|
177
|
+
rewardsFactor: new Uint8Array(stake.data.rewardsFactor.bits),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
async getStakeV2(authority, id) {
|
|
181
|
+
const [stakeV2Pda] = getStakeV2Pda(new PublicKey(authority), id);
|
|
182
|
+
const stakeV2 = await fetchStakeV2(this.rpc, address(stakeV2Pda.toBase58()));
|
|
183
|
+
return {
|
|
184
|
+
...stakeV2.data,
|
|
185
|
+
authority: stakeV2.data.authority.toString(),
|
|
186
|
+
rewardsFactor: new Uint8Array(stakeV2.data.rewardsFactor.bits),
|
|
187
|
+
isNftStaked: stakeV2.data.isNftStaked,
|
|
188
|
+
buffer: new Uint8Array(stakeV2.data.buffer.buffer),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
async getStakeV2Accounts(authority) {
|
|
192
|
+
const discriminator = new Uint8Array(8);
|
|
193
|
+
const view = new DataView(discriminator.buffer);
|
|
194
|
+
view.setBigUint64(0, 115n, true);
|
|
195
|
+
const filters = [
|
|
196
|
+
{ memcmp: { offset: 0n, bytes: bs58.encode(discriminator) } },
|
|
197
|
+
{ memcmp: { offset: 16n, bytes: authority } },
|
|
198
|
+
];
|
|
199
|
+
const response = await this.rpc
|
|
200
|
+
.getProgramAccounts(address(GODL_PROGRAM_ID.toBase58()), {
|
|
201
|
+
encoding: 'base64',
|
|
202
|
+
filters: filters,
|
|
203
|
+
})
|
|
204
|
+
.send();
|
|
205
|
+
const accountsResponse = response;
|
|
206
|
+
const accounts = (Array.isArray(accountsResponse) ? accountsResponse : (accountsResponse.value ?? []));
|
|
207
|
+
if (!accounts || accounts.length === 0)
|
|
208
|
+
return [];
|
|
209
|
+
const decoder = getStakeV2Decoder();
|
|
210
|
+
return accounts.map(({ account }) => {
|
|
211
|
+
const data = Buffer.from(account.data[0], 'base64');
|
|
212
|
+
const decoded = decoder.decode(data);
|
|
213
|
+
return {
|
|
214
|
+
...decoded,
|
|
215
|
+
authority: decoded.authority.toString(),
|
|
216
|
+
rewardsFactor: new Uint8Array(decoded.rewardsFactor.bits),
|
|
217
|
+
isNftStaked: decoded.isNftStaked,
|
|
218
|
+
buffer: new Uint8Array(decoded.buffer),
|
|
219
|
+
};
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
async getPoolRound(roundId, config) {
|
|
223
|
+
const cacheKey = `poolRound:${roundId}`;
|
|
224
|
+
const cached = this.cache.get(cacheKey);
|
|
225
|
+
if (cached)
|
|
226
|
+
return cached;
|
|
227
|
+
await this.ensureInitData();
|
|
228
|
+
const fromInit = this.cache.get(cacheKey);
|
|
229
|
+
if (fromInit)
|
|
230
|
+
return fromInit;
|
|
231
|
+
// Fallback to RPC
|
|
232
|
+
const [poolRoundPda] = getPoolRoundPda(roundId);
|
|
233
|
+
const maybePoolRound = await fetchMaybePoolRound(this.rpc, address(poolRoundPda.toBase58()), config);
|
|
234
|
+
if (!maybePoolRound.exists)
|
|
235
|
+
return null;
|
|
236
|
+
const result = {
|
|
237
|
+
...maybePoolRound.data,
|
|
238
|
+
rentPayer: maybePoolRound.data.rentPayer.toString(),
|
|
239
|
+
};
|
|
240
|
+
this.cache.set(cacheKey, result);
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
async getPoolMember(authority, config) {
|
|
244
|
+
const cacheKey = `poolMember:${authority}`;
|
|
245
|
+
const cached = this.cache.get(cacheKey);
|
|
246
|
+
if (cached)
|
|
247
|
+
return cached;
|
|
248
|
+
const [poolMemberPda] = getPoolMemberPda(new PublicKey(authority));
|
|
249
|
+
const maybePoolMember = await fetchMaybePoolMember(this.rpc, address(poolMemberPda.toBase58()), config);
|
|
250
|
+
if (!maybePoolMember.exists)
|
|
251
|
+
return null;
|
|
252
|
+
const result = {
|
|
253
|
+
...maybePoolMember.data,
|
|
254
|
+
authority: maybePoolMember.data.authority.toString(),
|
|
255
|
+
};
|
|
256
|
+
this.cache.set(cacheKey, result);
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
async getReferrer(authority) {
|
|
260
|
+
const [referrerPda] = PublicKey.findProgramAddressSync([Buffer.from('referrer'), new PublicKey(authority).toBuffer()], GODL_PROGRAM_ID);
|
|
261
|
+
try {
|
|
262
|
+
const referrer = await fetchReferrer(this.rpc, address(referrerPda.toBase58()));
|
|
263
|
+
return {
|
|
264
|
+
rewardsSol: referrer.data.rewardsSol,
|
|
265
|
+
rewardsGodl: referrer.data.rewardsGodl,
|
|
266
|
+
cumulativeRewardsSol: referrer.data.cumulativeRewardsSol,
|
|
267
|
+
cumulativeRewardsGodl: referrer.data.cumulativeRewardsGodl,
|
|
268
|
+
referrerCount: referrer.data.referrerCount,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class HotCache {
|
|
2
|
+
private store;
|
|
3
|
+
private ttlMs;
|
|
4
|
+
constructor(ttlMs?: number);
|
|
5
|
+
set<T>(key: string, data: T): void;
|
|
6
|
+
get<T>(key: string): T | null;
|
|
7
|
+
has(key: string): boolean;
|
|
8
|
+
delete(key: string): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,GAAE,MAAqB;IAIxC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAIlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAU7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CACHE_TTL_MS } from '../constants.js';
|
|
2
|
+
export class HotCache {
|
|
3
|
+
store = new Map();
|
|
4
|
+
ttlMs;
|
|
5
|
+
constructor(ttlMs = CACHE_TTL_MS) {
|
|
6
|
+
this.ttlMs = ttlMs;
|
|
7
|
+
}
|
|
8
|
+
set(key, data) {
|
|
9
|
+
this.store.set(key, { data, updatedAt: Date.now() });
|
|
10
|
+
}
|
|
11
|
+
get(key) {
|
|
12
|
+
const entry = this.store.get(key);
|
|
13
|
+
if (!entry)
|
|
14
|
+
return null;
|
|
15
|
+
if (Date.now() - entry.updatedAt > this.ttlMs) {
|
|
16
|
+
this.store.delete(key);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return entry.data;
|
|
20
|
+
}
|
|
21
|
+
has(key) {
|
|
22
|
+
return this.get(key) !== null;
|
|
23
|
+
}
|
|
24
|
+
delete(key) {
|
|
25
|
+
this.store.delete(key);
|
|
26
|
+
}
|
|
27
|
+
clear() {
|
|
28
|
+
this.store.clear();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAO9C,MAAM,OAAO,QAAQ;IACX,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAA;IAC9C,KAAK,CAAQ;IAErB,YAAY,QAAgB,YAAY;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,IAAO;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,KAAK,CAAC,IAAS,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;CACF"}
|