surfman 0.1.0 → 0.1.2
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 +237 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/README.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# surfman
|
|
2
|
+
|
|
3
|
+
CLI tool for SurfPool RPC API interaction - Command-line interface for Solana local development and testing.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/surfman)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
> 📖 **[SurfPool Documentation](https://docs.surfpool.run/)** - Learn more about SurfPool's local development environment
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- ⚡ **38 Commands**: Complete CLI coverage of all Surfpool APIs
|
|
13
|
+
- 🔧 **Testing Tools**: Time travel, account manipulation, network reset
|
|
14
|
+
- 🌐 **Network Queries**: Blocks, transactions, fees, cluster info
|
|
15
|
+
- 📦 **Account Tools**: Query accounts, tokens, balances
|
|
16
|
+
- 📊 **Analytics**: Scan program accounts, find largest holders
|
|
17
|
+
- 🎨 **Beautiful Output**: Colorful, well-formatted terminal output
|
|
18
|
+
- 📖 **Dual Help**: `-h` for common commands, `--help` for complete list
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g surfman
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Check version
|
|
30
|
+
surfman --version
|
|
31
|
+
|
|
32
|
+
# Show help
|
|
33
|
+
surfman -h # Frequently used commands
|
|
34
|
+
surfman --help # Complete command list
|
|
35
|
+
|
|
36
|
+
# Time travel (testing)
|
|
37
|
+
surfman time-travel --relative +1w
|
|
38
|
+
|
|
39
|
+
# Request airdrop
|
|
40
|
+
surfman request-airdrop --pubkey <ADDRESS> --amount 10
|
|
41
|
+
|
|
42
|
+
# Get account info
|
|
43
|
+
surfman get-account-info --pubkey <ADDRESS>
|
|
44
|
+
|
|
45
|
+
# Get latest blockhash
|
|
46
|
+
surfman get-latest-blockhash
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Command Categories
|
|
50
|
+
|
|
51
|
+
### 🔧 Testing & Development (9 commands)
|
|
52
|
+
|
|
53
|
+
**Time Control:**
|
|
54
|
+
```bash
|
|
55
|
+
surfman time-travel --absolute-epoch 100
|
|
56
|
+
surfman time-travel --relative +1w
|
|
57
|
+
surfman pause-clock
|
|
58
|
+
surfman resume-clock
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Account Manipulation:**
|
|
62
|
+
```bash
|
|
63
|
+
surfman set-account --pubkey <ADDR> --lamports 1000000
|
|
64
|
+
surfman set-token-account --address <ADDR> --amount 100
|
|
65
|
+
surfman reset-account --pubkey <ADDR>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Network Management:**
|
|
69
|
+
```bash
|
|
70
|
+
surfman reset-network
|
|
71
|
+
surfman get-local-signatures
|
|
72
|
+
surfman set-program-authority --program-id <ID> --new-authority <ADDR>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 🌐 Network Operations (18 commands)
|
|
76
|
+
|
|
77
|
+
**Block Queries:**
|
|
78
|
+
```bash
|
|
79
|
+
surfman get-latest-blockhash
|
|
80
|
+
surfman get-block --slot 1000
|
|
81
|
+
surfman get-block-time --slot 1000
|
|
82
|
+
surfman get-blocks --start-slot 1000 --end-slot 2000
|
|
83
|
+
surfman get-blocks-with-limit --start-slot 1000 --limit 100
|
|
84
|
+
surfman get-first-available-block
|
|
85
|
+
surfman minimum-ledger-slot
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Transaction Operations:**
|
|
89
|
+
```bash
|
|
90
|
+
surfman get-transaction --signature <SIG>
|
|
91
|
+
surfman send-transaction --data <TX_DATA>
|
|
92
|
+
surfman simulate-transaction --data <TX_DATA>
|
|
93
|
+
surfman get-signature-statuses --signatures <SIG1,SIG2>
|
|
94
|
+
surfman get-signatures-for-address --address <ADDR>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Network Info & Fees:**
|
|
98
|
+
```bash
|
|
99
|
+
surfman is-blockhash-valid --blockhash <HASH>
|
|
100
|
+
surfman get-fee-for-message --message <MSG>
|
|
101
|
+
surfman get-recent-prioritization-fees
|
|
102
|
+
surfman get-cluster-nodes
|
|
103
|
+
surfman get-recent-performance-samples
|
|
104
|
+
surfman request-airdrop --pubkey <ADDR> --amount 1
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 📦 Account Queries (5 commands)
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
surfman get-account-info --pubkey <ADDR>
|
|
111
|
+
surfman get-multiple-accounts --pubkeys <ADDR1,ADDR2>
|
|
112
|
+
surfman get-token-account-balance --address <ADDR>
|
|
113
|
+
surfman get-token-supply --mint <MINT>
|
|
114
|
+
surfman get-block-commitment --slot 1000
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 📊 Scan & Analytics (6 commands)
|
|
118
|
+
|
|
119
|
+
**Batch Queries:**
|
|
120
|
+
```bash
|
|
121
|
+
surfman get-program-accounts --program-id <ID> --data-size 165
|
|
122
|
+
surfman get-largest-accounts --filter circulating
|
|
123
|
+
surfman get-supply --exclude-accounts
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Token Distribution:**
|
|
127
|
+
```bash
|
|
128
|
+
surfman get-token-largest-accounts --mint <MINT>
|
|
129
|
+
surfman get-token-accounts-by-owner --owner <ADDR> --mint <MINT>
|
|
130
|
+
surfman get-token-accounts-by-delegate --delegate <ADDR> --program-id <ID>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Common Use Cases
|
|
134
|
+
|
|
135
|
+
### Testing Smart Contracts
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Time travel to future epoch
|
|
139
|
+
surfman time-travel --relative +1d
|
|
140
|
+
|
|
141
|
+
# Set up test account with SOL
|
|
142
|
+
surfman set-account --pubkey <TEST_ADDR> --lamports 10000000000
|
|
143
|
+
|
|
144
|
+
# Run your tests...
|
|
145
|
+
|
|
146
|
+
# Reset when done
|
|
147
|
+
surfman reset-network
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Token Analysis
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Get total supply
|
|
154
|
+
surfman get-supply
|
|
155
|
+
|
|
156
|
+
# Find largest token holders
|
|
157
|
+
surfman get-token-largest-accounts --mint <TOKEN_MINT>
|
|
158
|
+
|
|
159
|
+
# Check specific wallet tokens
|
|
160
|
+
surfman get-token-accounts-by-owner --owner <WALLET> --mint <TOKEN_MINT>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Transaction Monitoring
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Get recent transaction history
|
|
167
|
+
surfman get-signatures-for-address --address <ADDR> --limit 10
|
|
168
|
+
|
|
169
|
+
# Check transaction details
|
|
170
|
+
surfman get-transaction --signature <SIG>
|
|
171
|
+
|
|
172
|
+
# Check signature status
|
|
173
|
+
surfman get-signature-statuses --signatures <SIG1,SIG2>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Program Account Scanning
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
# Find all accounts owned by a program
|
|
180
|
+
surfman get-program-accounts --program-id <PROGRAM_ID>
|
|
181
|
+
|
|
182
|
+
# Filter by data size
|
|
183
|
+
surfman get-program-accounts --program-id <PROGRAM_ID> --data-size 165
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Options
|
|
187
|
+
|
|
188
|
+
Most commands support:
|
|
189
|
+
- `--rpc <url>` - Custom RPC endpoint (default: http://localhost:8899)
|
|
190
|
+
- `--commitment <level>` - Commitment level (finalized, confirmed, processed)
|
|
191
|
+
- `--encoding <type>` - Data encoding (base58, base64, jsonParsed)
|
|
192
|
+
|
|
193
|
+
## Configuration
|
|
194
|
+
|
|
195
|
+
Set default RPC endpoint:
|
|
196
|
+
```bash
|
|
197
|
+
export SURFMAN_RPC_URL=http://localhost:8899
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## SDK Package
|
|
201
|
+
|
|
202
|
+
For programmatic usage in TypeScript/JavaScript:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
npm install surfman-sdk
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import { Surfman } from 'surfman-sdk';
|
|
210
|
+
|
|
211
|
+
const client = new Surfman('http://localhost:8899');
|
|
212
|
+
await client.cheatcodes.timeTravel({ relativeEpoch: 1 });
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Documentation
|
|
216
|
+
|
|
217
|
+
- [SurfPool Documentation](https://docs.surfpool.run/) - Official SurfPool docs
|
|
218
|
+
- [GitHub Repository](https://github.com/ennea8/surfman)
|
|
219
|
+
- [SDK Package](https://www.npmjs.com/package/surfman-sdk)
|
|
220
|
+
- [Report Issues](https://github.com/ennea8/surfman/issues)
|
|
221
|
+
|
|
222
|
+
## Help
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Quick view (common commands)
|
|
226
|
+
surfman -h
|
|
227
|
+
|
|
228
|
+
# Complete command list
|
|
229
|
+
surfman --help
|
|
230
|
+
|
|
231
|
+
# Command-specific help
|
|
232
|
+
surfman <command> --help
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
export { }
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/cheatcodes/time-travel.ts","../src/utils/logger.ts","../src/commands/cheatcodes/set-account.ts","../src/commands/cheatcodes/set-program-authority.ts","../src/commands/cheatcodes/pause-clock.ts","../src/commands/cheatcodes/resume-clock.ts","../src/commands/cheatcodes/get-local-signatures.ts","../src/commands/cheatcodes/set-token-account.ts","../src/commands/cheatcodes/reset-account.ts","../src/commands/cheatcodes/reset-network.ts","../src/commands/network/get-latest-blockhash.ts","../src/commands/network/get-block.ts","../src/commands/network/get-transaction.ts","../src/commands/network/send-transaction.ts","../src/commands/network/get-cluster-nodes.ts","../src/commands/network/request-airdrop.ts","../src/commands/network/get-blocks.ts","../src/commands/network/get-signatures-for-address.ts","../src/commands/network/is-blockhash-valid.ts","../src/commands/network/get-fee-for-message.ts","../src/commands/network/get-recent-prioritization-fees.ts","../src/commands/network/get-block-time.ts","../src/commands/network/get-blocks-with-limit.ts","../src/commands/network/get-first-available-block.ts","../src/commands/network/minimum-ledger-slot.ts","../src/commands/network/get-signature-statuses.ts","../src/commands/network/simulate-transaction.ts","../src/commands/network/get-recent-performance-samples.ts","../src/commands/accounts/get-account-info.ts","../src/commands/accounts/get-multiple-accounts.ts","../src/commands/accounts/get-block-commitment.ts","../src/commands/accounts/get-token-account-balance.ts","../src/commands/accounts/get-token-supply.ts","../src/commands/scan/get-program-accounts.ts","../src/commands/scan/get-largest-accounts.ts","../src/commands/scan/get-supply.ts","../src/commands/scan/get-token-largest-accounts.ts","../src/commands/scan/get-token-accounts-by-owner.ts","../src/commands/scan/get-token-accounts-by-delegate.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createTimeTravelCommand } from './commands/cheatcodes/time-travel';\nimport { createSetAccountCommand } from './commands/cheatcodes/set-account';\nimport { createSetProgramAuthorityCommand } from './commands/cheatcodes/set-program-authority';\nimport { createPauseClockCommand } from './commands/cheatcodes/pause-clock';\nimport { createResumeClockCommand } from './commands/cheatcodes/resume-clock';\nimport { createGetLocalSignaturesCommand } from './commands/cheatcodes/get-local-signatures';\nimport { createSetTokenAccountCommand } from './commands/cheatcodes/set-token-account';\nimport { createResetAccountCommand } from './commands/cheatcodes/reset-account';\nimport { createResetNetworkCommand } from './commands/cheatcodes/reset-network';\nimport { createGetLatestBlockhashCommand } from './commands/network/get-latest-blockhash';\nimport { createGetBlockCommand } from './commands/network/get-block';\nimport { createGetTransactionCommand } from './commands/network/get-transaction';\nimport { createSendTransactionCommand } from './commands/network/send-transaction';\nimport { createGetClusterNodesCommand } from './commands/network/get-cluster-nodes';\nimport { createRequestAirdropCommand } from './commands/network/request-airdrop';\nimport { createGetBlocksCommand } from './commands/network/get-blocks';\nimport { createGetSignaturesForAddressCommand } from './commands/network/get-signatures-for-address';\nimport { createIsBlockhashValidCommand } from './commands/network/is-blockhash-valid';\nimport { createGetFeeForMessageCommand } from './commands/network/get-fee-for-message';\nimport { createGetRecentPrioritizationFeesCommand } from './commands/network/get-recent-prioritization-fees';\nimport { createGetBlockTimeCommand } from './commands/network/get-block-time';\nimport { createGetBlocksWithLimitCommand } from './commands/network/get-blocks-with-limit';\nimport { createGetFirstAvailableBlockCommand } from './commands/network/get-first-available-block';\nimport { createMinimumLedgerSlotCommand } from './commands/network/minimum-ledger-slot';\nimport { createGetSignatureStatusesCommand } from './commands/network/get-signature-statuses';\nimport { createSimulateTransactionCommand } from './commands/network/simulate-transaction';\nimport { createGetRecentPerformanceSamplesCommand } from './commands/network/get-recent-performance-samples';\nimport { createGetAccountInfoCommand } from './commands/accounts/get-account-info';\nimport { createGetMultipleAccountsCommand } from './commands/accounts/get-multiple-accounts';\nimport { createGetBlockCommitmentCommand } from './commands/accounts/get-block-commitment';\nimport { createGetTokenAccountBalanceCommand } from './commands/accounts/get-token-account-balance';\nimport { createGetTokenSupplyCommand } from './commands/accounts/get-token-supply';\nimport { createGetProgramAccountsCommand } from './commands/scan/get-program-accounts';\nimport { createGetLargestAccountsCommand } from './commands/scan/get-largest-accounts';\nimport { createGetSupplyCommand } from './commands/scan/get-supply';\nimport { createGetTokenLargestAccountsCommand } from './commands/scan/get-token-largest-accounts';\nimport { createGetTokenAccountsByOwnerCommand } from './commands/scan/get-token-accounts-by-owner';\nimport { createGetTokenAccountsByDelegateCommand } from './commands/scan/get-token-accounts-by-delegate';\n\nconst program = new Command();\n\n// Check for --help to show complete list\nconst isFullHelp = process.argv.includes('--help');\nconst isShortHelp = process.argv.includes('-h');\n\n// Handle --help flag to show complete command list\nif (isFullHelp) {\n console.log(chalk.bold.cyan('\\n🌊 Surfman CLI - Complete Command List\\n'));\n \n console.log(chalk.bold.yellow('📦 Account Queries (5 commands):\\n'));\n console.log(` ${chalk.yellow('get-account-info')} Get detailed account information`);\n console.log(` ${chalk.yellow('get-multiple-accounts')} Batch query multiple accounts`);\n console.log(` ${chalk.yellow('get-token-account-balance')} Get token account balance`);\n console.log(` ${chalk.yellow('get-token-supply')} Get total token supply`);\n console.log(` ${chalk.yellow('get-block-commitment')} Get block commitment data\\n`);\n \n console.log(chalk.bold.blue('🌐 Network Operations (18 commands):\\n'));\n console.log(chalk.dim(' Block Queries:'));\n console.log(` ${chalk.blue('get-latest-blockhash')} Get the latest blockhash`);\n console.log(` ${chalk.blue('get-block')} Get block information by slot`);\n console.log(` ${chalk.blue('get-block-time')} Get block production time`);\n console.log(` ${chalk.blue('get-blocks')} Get list of confirmed blocks`);\n console.log(` ${chalk.blue('get-blocks-with-limit')} Get blocks with limit`);\n console.log(` ${chalk.blue('get-first-available-block')} Get first available block`);\n console.log(` ${chalk.blue('minimum-ledger-slot')} Get minimum ledger slot\\n`);\n \n console.log(chalk.dim(' Transaction Operations:'));\n console.log(` ${chalk.blue('get-transaction')} Get transaction details`);\n console.log(` ${chalk.blue('get-signature-statuses')} Get signature statuses`);\n console.log(` ${chalk.blue('get-signatures-for-address')} Get address transaction history`);\n console.log(` ${chalk.blue('send-transaction')} Send a signed transaction`);\n console.log(` ${chalk.blue('simulate-transaction')} Simulate transaction execution\\n`);\n \n console.log(chalk.dim(' Network Info & Fees:'));\n console.log(` ${chalk.blue('is-blockhash-valid')} Check if blockhash is valid`);\n console.log(` ${chalk.blue('get-fee-for-message')} Get fee for a message`);\n console.log(` ${chalk.blue('get-recent-prioritization-fees')} Get recent priority fees`);\n console.log(` ${chalk.blue('get-cluster-nodes')} Get cluster node information`);\n console.log(` ${chalk.blue('get-recent-performance-samples')} Get performance samples`);\n console.log(` ${chalk.blue('request-airdrop')} Request lamports airdrop\\n`);\n \n console.log(chalk.bold.magenta('🔧 Testing & Development (9 commands):\\n'));\n console.log(chalk.dim(' Time Control:'));\n console.log(` ${chalk.magenta('time-travel')} Time travel to epoch/slot/timestamp`);\n console.log(` ${chalk.magenta('pause-clock')} Pause the network clock`);\n console.log(` ${chalk.magenta('resume-clock')} Resume the network clock\\n`);\n \n console.log(chalk.dim(' Account Manipulation:'));\n console.log(` ${chalk.magenta('set-account')} Modify account data/lamports/owner`);\n console.log(` ${chalk.magenta('set-token-account')} Update token account properties`);\n console.log(` ${chalk.magenta('reset-account')} Reset account to initial state\\n`);\n \n console.log(chalk.dim(' Network Management:'));\n console.log(` ${chalk.magenta('reset-network')} Reset entire network state`);\n console.log(` ${chalk.magenta('get-local-signatures')} Get recent local signatures`);\n console.log(` ${chalk.magenta('set-program-authority')} Set/remove program authority\\n`);\n \n console.log(chalk.bold.green('📊 Scan & Analytics (6 commands):\\n'));\n console.log(chalk.dim(' Batch Queries:'));\n console.log(` ${chalk.green('get-program-accounts')} Get all accounts owned by a program`);\n console.log(` ${chalk.green('get-largest-accounts')} Get top 20 accounts by balance`);\n console.log(` ${chalk.green('get-supply')} Get network supply information\\n`);\n \n console.log(chalk.dim(' Token Distribution:'));\n console.log(` ${chalk.green('get-token-largest-accounts')} Get largest token holders`);\n console.log(` ${chalk.green('get-token-accounts-by-owner')} Get token accounts by owner`);\n console.log(` ${chalk.green('get-token-accounts-by-delegate')} Get delegated token accounts\\n`);\n \n console.log(chalk.bold.cyan('📊 Summary:\\n'));\n console.log(` Total Commands: ${chalk.bold('38')}`);\n console.log(` Account Queries: ${chalk.yellow('5')}`);\n console.log(` Network Operations: ${chalk.blue('18')}`);\n console.log(` Testing & Development: ${chalk.magenta('9')}`);\n console.log(` Scan & Analytics: ${chalk.green('6')}\\n`);\n \n console.log(chalk.gray('💡 Use ') + chalk.cyan('surfman <command> --help') + chalk.gray(' for detailed options\\n'));\n process.exit(0);\n}\n\nprogram\n .name('surfman')\n .description('CLI tool for SurfPool RPC API interaction')\n .version('0.1.0');\n\n// Custom help configuration\nprogram.configureHelp({\n formatHelp: (cmd, helper) => {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n\n let output = '';\n \n // Title\n output += chalk.bold.cyan('\\n🌊 Surfman CLI\\n\\n');\n output += chalk.gray('CLI tool for SurfPool RPC API interaction\\n\\n');\n\n // Usage\n output += chalk.bold('Usage:\\n');\n output += ` $ surfman ${chalk.yellow('<command>')} ${chalk.gray('[options]')}\\n\\n`;\n\n // Options\n output += chalk.bold('Options:\\n');\n output += ` -V, --version ${chalk.gray('Output the version number')}\\n`;\n output += ` -h ${chalk.gray('Display frequently used commands (quick view)')}\\n`;\n output += ` --help ${chalk.gray('Display all commands grouped by module')}\\n\\n`;\n\n // Frequently Used Commands\n output += chalk.bold.green('⭐ Frequently Used:\\n');\n output += ` ${chalk.cyan('get-account-info')} ${chalk.gray('Get account information')}\\n`;\n output += ` ${chalk.cyan('get-latest-blockhash')} ${chalk.gray('Get latest blockhash')}\\n`;\n output += ` ${chalk.cyan('send-transaction')} ${chalk.gray('Send a transaction')}\\n`;\n output += ` ${chalk.cyan('request-airdrop')} ${chalk.gray('Request SOL airdrop')}\\n`;\n output += ` ${chalk.cyan('time-travel')} ${chalk.gray('Time travel for testing')}\\n\\n`;\n\n // Account Queries\n output += chalk.bold.yellow('📦 Account Queries:\\n');\n output += ` ${chalk.yellow('get-account-info')} Get detailed account information\\n`;\n output += ` ${chalk.yellow('get-multiple-accounts')} Batch query multiple accounts\\n`;\n output += ` ${chalk.yellow('get-token-account-balance')} Get token account balance\\n`;\n output += ` ${chalk.yellow('get-token-supply')} Get total token supply\\n`;\n output += ` ${chalk.yellow('get-block-commitment')} Get block commitment data\\n\\n`;\n\n // Network Operations\n output += chalk.bold.blue('🌐 Network Operations:\\n');\n output += ` ${chalk.blue('get-latest-blockhash')} Get the latest blockhash\\n`;\n output += ` ${chalk.blue('get-block')} Get block by slot\\n`;\n output += ` ${chalk.blue('get-transaction')} Get transaction details\\n`;\n output += ` ${chalk.blue('send-transaction')} Send a signed transaction\\n`;\n output += ` ${chalk.blue('simulate-transaction')} Simulate transaction execution\\n`;\n output += ` ${chalk.blue('get-signatures-for-address')} Get address transaction history\\n`;\n output += ` ${chalk.blue('request-airdrop')} Request lamports airdrop\\n`;\n output += ` ${chalk.blue('get-cluster-nodes')} Get cluster node info\\n\\n`;\n\n // Testing & Development (Cheatcodes)\n output += chalk.bold.magenta('🔧 Testing & Development:\\n');\n output += ` ${chalk.magenta('time-travel')} Time travel to epoch/slot\\n`;\n output += ` ${chalk.magenta('pause-clock')} Pause network clock\\n`;\n output += ` ${chalk.magenta('resume-clock')} Resume network clock\\n`;\n output += ` ${chalk.magenta('set-account')} Modify account data\\n`;\n output += ` ${chalk.magenta('set-token-account')} Update token account\\n`;\n output += ` ${chalk.magenta('reset-account')} Reset account state\\n`;\n output += ` ${chalk.magenta('reset-network')} Reset entire network\\n`;\n output += ` ${chalk.magenta('set-program-authority')} Set program authority\\n\\n`;\n\n // Additional Commands\n output += chalk.bold.gray('📋 Additional Commands:\\n');\n output += chalk.gray(' get-blocks, get-block-time, is-blockhash-valid,\\n');\n output += chalk.gray(' get-fee-for-message, get-signature-statuses,\\n');\n output += chalk.gray(' get-recent-prioritization-fees, and more...\\n\\n');\n\n // Footer\n output += chalk.gray('💡 Tips:\\n');\n output += chalk.gray(' Use ') + chalk.cyan('surfman --help') + chalk.gray(' to see all 38 commands grouped by module\\n');\n output += chalk.gray(' Use ') + chalk.cyan('surfman <command> --help') + chalk.gray(' for detailed command options\\n');\n output += chalk.gray('📖 Documentation: ') + chalk.cyan('https://github.com/your-repo/surfman\\n');\n\n return output;\n },\n});\n\n// Cheatcodes\nprogram.addCommand(createTimeTravelCommand());\nprogram.addCommand(createSetAccountCommand());\nprogram.addCommand(createSetProgramAuthorityCommand());\nprogram.addCommand(createPauseClockCommand());\nprogram.addCommand(createResumeClockCommand());\nprogram.addCommand(createGetLocalSignaturesCommand());\nprogram.addCommand(createSetTokenAccountCommand());\nprogram.addCommand(createResetAccountCommand());\nprogram.addCommand(createResetNetworkCommand());\n\n// Network\nprogram.addCommand(createGetLatestBlockhashCommand());\nprogram.addCommand(createGetBlockCommand());\nprogram.addCommand(createGetTransactionCommand());\nprogram.addCommand(createSendTransactionCommand());\nprogram.addCommand(createGetClusterNodesCommand());\nprogram.addCommand(createRequestAirdropCommand());\nprogram.addCommand(createGetBlocksCommand());\nprogram.addCommand(createGetSignaturesForAddressCommand());\nprogram.addCommand(createIsBlockhashValidCommand());\nprogram.addCommand(createGetFeeForMessageCommand());\nprogram.addCommand(createGetRecentPrioritizationFeesCommand());\nprogram.addCommand(createGetBlockTimeCommand());\nprogram.addCommand(createGetBlocksWithLimitCommand());\nprogram.addCommand(createGetFirstAvailableBlockCommand());\nprogram.addCommand(createMinimumLedgerSlotCommand());\nprogram.addCommand(createGetSignatureStatusesCommand());\nprogram.addCommand(createSimulateTransactionCommand());\nprogram.addCommand(createGetRecentPerformanceSamplesCommand());\n\n// Accounts\nprogram.addCommand(createGetAccountInfoCommand());\nprogram.addCommand(createGetMultipleAccountsCommand());\nprogram.addCommand(createGetBlockCommitmentCommand());\nprogram.addCommand(createGetTokenAccountBalanceCommand());\nprogram.addCommand(createGetTokenSupplyCommand());\n\n// Scan\nprogram.addCommand(createGetProgramAccountsCommand());\nprogram.addCommand(createGetLargestAccountsCommand());\nprogram.addCommand(createGetSupplyCommand());\nprogram.addCommand(createGetTokenLargestAccountsCommand());\nprogram.addCommand(createGetTokenAccountsByOwnerCommand());\nprogram.addCommand(createGetTokenAccountsByDelegateCommand());\n\nprogram.parse();\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createTimeTravelCommand(): Command {\n const command = new Command('time-travel')\n .description('Time travel to a specific epoch, slot, or timestamp')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--epoch <number>', 'Absolute epoch number')\n .option('--slot <number>', 'Absolute slot number')\n .option('--timestamp <number>', 'Absolute timestamp (microseconds)')\n .option('--relative <time>', 'Relative time (e.g., +1d, +1w, +12h, +30m)')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n let config: any = {};\n\n if (options.epoch) {\n config.absoluteEpoch = parseInt(options.epoch);\n } else if (options.slot) {\n config.absoluteSlot = parseInt(options.slot);\n } else if (options.timestamp) {\n config.absoluteTimestamp = parseInt(options.timestamp);\n } else if (options.relative) {\n const timeStr = options.relative;\n let secondsToAdd = 0;\n\n if (timeStr.endsWith('d')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 24 * 60 * 60;\n } else if (timeStr.endsWith('w')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 7 * 24 * 60 * 60;\n } else if (timeStr.endsWith('h')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 60 * 60;\n } else if (timeStr.endsWith('m')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 60;\n } else if (timeStr.endsWith('s')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1));\n } else {\n throw new Error('Invalid time format. Use: +1d, +1w, +1h, +30m, +60s');\n }\n\n const currentTimestamp = Date.now();\n config.absoluteTimestamp = currentTimestamp + secondsToAdd * 1000;\n } else {\n const oneWeekInMilliseconds = 7 * 24 * 60 * 60 * 1000;\n config.absoluteTimestamp = Date.now() + oneWeekInMilliseconds;\n logger.info('No time specified, defaulting to +1 week');\n }\n\n const result = await client.cheatcodes.timeTravel(config);\n\n logger.success('Time travel successful!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to time travel: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import chalk from 'chalk';\n\nexport const logger = {\n info: (message: string) => console.log(chalk.blue('ℹ'), message),\n success: (message: string) => console.log(chalk.green('✓'), message),\n error: (message: string) => console.error(chalk.red('✗'), message),\n warn: (message: string) => console.warn(chalk.yellow('⚠'), message),\n log: (message: string) => console.log(message),\n};\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetAccountCommand(): Command {\n const command = new Command('set-account')\n .description('Modify account data, lamports, owner, etc.')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--data <hex>', 'Account data (hex string)')\n .option('--lamports <amount>', 'Account lamports')\n .option('--owner <address>', 'Account owner')\n .option('--executable', 'Mark account as executable')\n .option('--rent-epoch <epoch>', 'Rent epoch')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const update: any = {};\n\n if (options.data) {\n update.data = options.data;\n }\n if (options.lamports) {\n update.lamports = parseInt(options.lamports);\n }\n if (options.owner) {\n update.owner = options.owner;\n }\n if (options.executable) {\n update.executable = true;\n }\n if (options.rentEpoch) {\n update.rentEpoch = parseInt(options.rentEpoch);\n }\n\n if (Object.keys(update).length === 0) {\n logger.error('No update fields specified. Use --data, --lamports, --owner, etc.');\n process.exit(1);\n }\n\n await client.cheatcodes.setAccount(options.pubkey, update);\n\n logger.success(`Account ${options.pubkey} updated successfully!`);\n logger.log('Updated fields:');\n Object.entries(update).forEach(([key, value]) => {\n logger.log(` ${key}: ${value}`);\n });\n } catch (error) {\n logger.error(`Failed to set account: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetProgramAuthorityCommand(): Command {\n const command = new Command('set-program-authority')\n .description('Set or remove program upgrade authority')\n .requiredOption('--program-id <address>', 'Program ID')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--new-authority <address>', 'New authority address')\n .option('--remove-authority', 'Remove authority (make program immutable)')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n let newAuthority: string | null;\n\n if (options.removeAuthority) {\n newAuthority = null;\n logger.info('Removing program authority (making immutable)');\n } else if (options.newAuthority) {\n newAuthority = options.newAuthority;\n logger.info(`Setting new authority to: ${newAuthority}`);\n } else {\n logger.error('Must specify either --new-authority or --remove-authority');\n process.exit(1);\n }\n\n await client.cheatcodes.setProgramAuthority(\n options.programId,\n newAuthority\n );\n\n logger.success(`Program authority updated successfully!`);\n logger.log(` Program ID: ${options.programId}`);\n logger.log(` New Authority: ${newAuthority ?? 'null (removed)'}`);\n } catch (error) {\n logger.error(\n `Failed to set program authority: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createPauseClockCommand(): Command {\n const command = new Command('pause-clock')\n .description('Pause the Surfnet clock (freeze time progression)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const result = await client.cheatcodes.pauseClock();\n\n logger.success('Clock paused successfully!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to pause clock: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResumeClockCommand(): Command {\n const command = new Command('resume-clock')\n .description('Resume the Surfnet clock (restart time progression)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const result = await client.cheatcodes.resumeClock();\n\n logger.success('Clock resumed successfully!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to resume clock: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLocalSignaturesCommand(): Command {\n const command = new Command('get-local-signatures')\n .description('Get recent local transaction signatures')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of signatures to return', '50')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const limit = parseInt(options.limit);\n\n const signatures = await client.cheatcodes.getLocalSignatures(limit);\n\n logger.success(`Retrieved ${signatures.length} signature(s):`);\n signatures.forEach((sig, index) => {\n logger.log(`\\n${index + 1}. Signature: ${sig.signature}`);\n logger.log(` Slot: ${sig.slot}`);\n logger.log(` Error: ${sig.err ? JSON.stringify(sig.err) : 'None'}`);\n if (sig.logs && sig.logs.length > 0) {\n logger.log(` Logs: ${sig.logs.length} line(s)`);\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signatures: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetTokenAccountCommand(): Command {\n const command = new Command('set-token-account')\n .description('Set or update token account properties')\n .requiredOption('--owner <address>', 'Token account owner address')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--amount <number>', 'Token amount')\n .option('--delegate <address>', 'Delegate address (use \"none\" to clear)')\n .option('--state <state>', 'Account state (initialized, frozen, etc.)')\n .option('--delegated-amount <number>', 'Delegated amount')\n .option(\n '--close-authority <address>',\n 'Close authority address (use \"none\" to clear)'\n )\n .option('--token-program <address>', 'Token program address')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const update: any = {};\n\n if (options.amount) {\n update.amount = parseInt(options.amount);\n }\n if (options.delegate) {\n if (options.delegate.toLowerCase() === 'none') {\n update.delegate = { NoAccount: true };\n } else {\n update.delegate = { Account: options.delegate };\n }\n }\n if (options.state) {\n update.state = options.state;\n }\n if (options.delegatedAmount) {\n update.delegatedAmount = parseInt(options.delegatedAmount);\n }\n if (options.closeAuthority) {\n if (options.closeAuthority.toLowerCase() === 'none') {\n update.closeAuthority = { NoAccount: true };\n } else {\n update.closeAuthority = { Account: options.closeAuthority };\n }\n }\n\n if (Object.keys(update).length === 0) {\n logger.error('No update fields specified');\n process.exit(1);\n }\n\n await client.cheatcodes.setTokenAccount(\n options.owner,\n options.mint,\n update,\n options.tokenProgram\n );\n\n logger.success('Token account updated successfully!');\n logger.log(` Owner: ${options.owner}`);\n logger.log(` Mint: ${options.mint}`);\n logger.log('Updated fields:');\n Object.entries(update).forEach(([key, value]) => {\n logger.log(` ${key}: ${JSON.stringify(value)}`);\n });\n } catch (error) {\n logger.error(\n `Failed to set token account: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResetAccountCommand(): Command {\n const command = new Command('reset-account')\n .description('Reset an account to its initial state')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option(\n '--include-owned',\n 'Also reset accounts owned by this account',\n false\n )\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.includeOwned\n ? { includeOwnedAccounts: true }\n : undefined;\n\n await client.cheatcodes.resetAccount(options.pubkey, config);\n\n logger.success(`Account ${options.pubkey} reset successfully!`);\n if (options.includeOwned) {\n logger.log(' Owned accounts were also reset');\n }\n } catch (error) {\n logger.error(`Failed to reset account: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResetNetworkCommand(): Command {\n const command = new Command('reset-network')\n .description('Reset the entire Surfnet network to initial state')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--confirm', 'Confirm network reset (required)', false)\n .action(async (options) => {\n try {\n if (!options.confirm) {\n logger.error(\n 'Network reset requires confirmation. Use --confirm flag.'\n );\n logger.warn(\n 'Warning: This will reset ALL accounts and state in the network!'\n );\n process.exit(1);\n }\n\n const client = new Surfman(options.rpc);\n\n logger.warn('Resetting network...');\n await client.cheatcodes.resetNetwork();\n\n logger.success('Network reset successfully!');\n logger.log('All accounts and state have been cleared.');\n } catch (error) {\n logger.error(`Failed to reset network: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLatestBlockhashCommand(): Command {\n const command = new Command('get-latest-blockhash')\n .description('Get the latest blockhash')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const result = await client.network.getLatestBlockhash(config);\n\n logger.success('Latest blockhash retrieved:');\n logger.log(` Blockhash: ${result.blockhash}`);\n logger.log(` Last Valid Block Height: ${result.lastValidBlockHeight}`);\n } catch (error) {\n logger.error(\n `Failed to get latest blockhash: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockCommand(): Command {\n const command = new Command('get-block')\n .description('Get block information by slot')\n .requiredOption('--slot <number>', 'Slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Encoding type', 'json')\n .option('--rewards', 'Include rewards', false)\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const config = {\n encoding: options.encoding,\n rewards: options.rewards,\n };\n\n const block = await client.network.getBlock(slot, config);\n\n if (!block) {\n logger.warn(`No block found at slot ${slot}`);\n return;\n }\n\n logger.success(`Block at slot ${slot}:`);\n logger.log(` Blockhash: ${block.blockhash}`);\n logger.log(` Previous Blockhash: ${block.previousBlockhash}`);\n logger.log(` Parent Slot: ${block.parentSlot}`);\n if (block.blockTime) {\n logger.log(\n ` Block Time: ${new Date(block.blockTime * 1000).toISOString()}`\n );\n }\n if (block.blockHeight !== null && block.blockHeight !== undefined) {\n logger.log(` Block Height: ${block.blockHeight}`);\n }\n if (block.transactions) {\n logger.log(` Transactions: ${block.transactions.length}`);\n }\n } catch (error) {\n logger.error(`Failed to get block: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTransactionCommand(): Command {\n const command = new Command('get-transaction')\n .description('Get transaction details by signature')\n .requiredOption('--signature <sig>', 'Transaction signature')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Encoding type', 'json')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = {\n encoding: options.encoding,\n };\n\n const tx = await client.network.getTransaction(\n options.signature,\n config\n );\n\n if (!tx) {\n logger.warn(`Transaction not found: ${options.signature}`);\n return;\n }\n\n logger.success(`Transaction ${options.signature}:`);\n logger.log(` Slot: ${tx.slot}`);\n if (tx.blockTime) {\n logger.log(\n ` Block Time: ${new Date(tx.blockTime * 1000).toISOString()}`\n );\n }\n if (tx.meta) {\n logger.log(` Status: ${tx.meta.err ? 'Failed' : 'Success'}`);\n if (tx.meta.err) {\n logger.log(` Error: ${JSON.stringify(tx.meta.err)}`);\n }\n }\n } catch (error) {\n logger.error(\n `Failed to get transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSendTransactionCommand(): Command {\n const command = new Command('send-transaction')\n .description('Send a signed transaction')\n .requiredOption('--transaction <data>', 'Base64 encoded transaction')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--skip-preflight', 'Skip preflight checks', false)\n .option('--encoding <type>', 'Encoding type', 'base64')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = {\n skipPreflight: options.skipPreflight,\n encoding: options.encoding,\n };\n\n const signature = await client.network.sendTransaction(\n options.transaction,\n config\n );\n\n logger.success(`Transaction sent successfully!`);\n logger.log(` Signature: ${signature}`);\n } catch (error) {\n logger.error(\n `Failed to send transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetClusterNodesCommand(): Command {\n const command = new Command('get-cluster-nodes')\n .description('Get information about cluster nodes')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const nodes = await client.network.getClusterNodes();\n\n logger.success(`Found ${nodes.length} cluster node(s):`);\n nodes.forEach((node, index) => {\n logger.log(`\\n${index + 1}. ${node.pubkey}`);\n if (node.gossip) logger.log(` Gossip: ${node.gossip}`);\n if (node.tpu) logger.log(` TPU: ${node.tpu}`);\n if (node.rpc) logger.log(` RPC: ${node.rpc}`);\n if (node.version) logger.log(` Version: ${node.version}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get cluster nodes: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createRequestAirdropCommand(): Command {\n const command = new Command('request-airdrop')\n .description('Request an airdrop of lamports')\n .requiredOption('--pubkey <address>', 'Public key to airdrop to')\n .requiredOption('--lamports <amount>', 'Amount in lamports')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const lamports = parseInt(options.lamports);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const signature = await client.network.requestAirdrop(\n options.pubkey,\n lamports,\n config\n );\n\n logger.success(`Airdrop requested successfully!`);\n logger.log(` Signature: ${signature}`);\n logger.log(` Amount: ${lamports} lamports`);\n logger.log(` Recipient: ${options.pubkey}`);\n } catch (error) {\n logger.error(\n `Failed to request airdrop: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlocksCommand(): Command {\n const command = new Command('get-blocks')\n .description('Get list of confirmed blocks between two slots')\n .requiredOption('--start-slot <number>', 'Start slot (inclusive)')\n .option('--end-slot <number>', 'End slot (exclusive)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const startSlot = parseInt(options.startSlot);\n const endSlot = options.endSlot ? parseInt(options.endSlot) : undefined;\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const blocks = await client.network.getBlocks(startSlot, endSlot, config);\n\n logger.success(`Found ${blocks.length} confirmed block(s):`);\n if (blocks.length > 0) {\n logger.log(` First: ${blocks[0]}`);\n logger.log(` Last: ${blocks[blocks.length - 1]}`);\n if (blocks.length <= 20) {\n logger.log(` All slots: ${blocks.join(', ')}`);\n } else {\n logger.log(` (showing first and last only, total: ${blocks.length})`);\n }\n }\n } catch (error) {\n logger.error(`Failed to get blocks: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSignaturesForAddressCommand(): Command {\n const command = new Command('get-signatures-for-address')\n .description('Get confirmed signatures for transactions involving an address')\n .requiredOption('--address <pubkey>', 'Account address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of signatures', '10')\n .option('--before <signature>', 'Start searching backwards from this signature')\n .option('--until <signature>', 'Search until this signature')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n limit: parseInt(options.limit),\n };\n\n if (options.before) config.before = options.before;\n if (options.until) config.until = options.until;\n\n const signatures = await client.network.getSignaturesForAddress(\n options.address,\n config\n );\n\n logger.success(`Found ${signatures.length} signature(s):`);\n signatures.forEach((sig, index) => {\n logger.log(`\\n${index + 1}. ${sig.signature}`);\n logger.log(` Slot: ${sig.slot}`);\n logger.log(` Status: ${sig.err ? 'Failed' : 'Success'}`);\n if (sig.blockTime) {\n logger.log(\n ` Time: ${new Date(sig.blockTime * 1000).toISOString()}`\n );\n }\n if (sig.memo) {\n logger.log(` Memo: ${sig.memo}`);\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signatures: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createIsBlockhashValidCommand(): Command {\n const command = new Command('is-blockhash-valid')\n .description('Check if a blockhash is still valid')\n .requiredOption('--blockhash <hash>', 'Blockhash to check')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const isValid = await client.network.isBlockhashValid(\n options.blockhash,\n config\n );\n\n if (isValid) {\n logger.success(`Blockhash ${options.blockhash} is VALID`);\n } else {\n logger.warn(`Blockhash ${options.blockhash} is EXPIRED`);\n }\n } catch (error) {\n logger.error(\n `Failed to check blockhash: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetFeeForMessageCommand(): Command {\n const command = new Command('get-fee-for-message')\n .description('Get the fee required for a message')\n .requiredOption('--message <data>', 'Base64 encoded message')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const fee = await client.network.getFeeForMessage(\n options.message,\n config\n );\n\n if (fee !== null) {\n logger.success(`Transaction fee: ${fee} lamports`);\n logger.log(` In SOL: ${fee / 1_000_000_000} SOL`);\n } else {\n logger.warn('Could not determine fee (blockhash may be expired)');\n }\n } catch (error) {\n logger.error(`Failed to get fee: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetRecentPrioritizationFeesCommand(): Command {\n const command = new Command('get-recent-prioritization-fees')\n .description('Get recent prioritization fees')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--addresses <addresses...>', 'Account addresses to filter by')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const fees = await client.network.getRecentPrioritizationFees(\n options.addresses\n );\n\n logger.success(`Retrieved ${fees.length} fee sample(s):`);\n \n if (fees.length > 0) {\n const avgFee =\n fees.reduce((sum, f) => sum + f.prioritizationFee, 0) / fees.length;\n const maxFee = Math.max(...fees.map((f) => f.prioritizationFee));\n const minFee = Math.min(...fees.map((f) => f.prioritizationFee));\n\n logger.log(`\\nSummary:`);\n logger.log(` Average Fee: ${avgFee.toFixed(2)} micro-lamports`);\n logger.log(` Max Fee: ${maxFee} micro-lamports`);\n logger.log(` Min Fee: ${minFee} micro-lamports`);\n\n logger.log(`\\nRecent samples (newest first):`);\n fees.slice(0, 10).forEach((fee, index) => {\n logger.log(\n ` ${index + 1}. Slot ${fee.slot}: ${fee.prioritizationFee} micro-lamports`\n );\n });\n }\n } catch (error) {\n logger.error(\n `Failed to get prioritization fees: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockTimeCommand(): Command {\n const command = new Command('get-block-time')\n .description('Get estimated production time of a block')\n .requiredOption('--slot <number>', 'Slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const blockTime = await client.network.getBlockTime(slot);\n\n if (blockTime !== null) {\n const date = new Date(blockTime * 1000);\n logger.success(`Block time for slot ${slot}:`);\n logger.log(` Unix Timestamp: ${blockTime}`);\n logger.log(` Date: ${date.toISOString()}`);\n logger.log(` Local: ${date.toLocaleString()}`);\n } else {\n logger.warn(`No block time available for slot ${slot}`);\n }\n } catch (error) {\n logger.error(`Failed to get block time: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlocksWithLimitCommand(): Command {\n const command = new Command('get-blocks-with-limit')\n .description('Get confirmed blocks starting at a slot with a limit')\n .requiredOption('--start-slot <number>', 'Start slot (inclusive)')\n .requiredOption('--limit <number>', 'Maximum number of blocks')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const startSlot = parseInt(options.startSlot);\n const limit = parseInt(options.limit);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const blocks = await client.network.getBlocksWithLimit(\n startSlot,\n limit,\n config\n );\n\n logger.success(`Found ${blocks.length} confirmed block(s):`);\n if (blocks.length > 0) {\n logger.log(` First: ${blocks[0]}`);\n logger.log(` Last: ${blocks[blocks.length - 1]}`);\n if (blocks.length <= 20) {\n logger.log(` All slots: ${blocks.join(', ')}`);\n } else {\n logger.log(` (showing first and last only, total: ${blocks.length})`);\n }\n }\n } catch (error) {\n logger.error(`Failed to get blocks: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetFirstAvailableBlockCommand(): Command {\n const command = new Command('get-first-available-block')\n .description('Get the slot of the lowest confirmed block')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const slot = await client.network.getFirstAvailableBlock();\n\n logger.success(`First available block:`);\n logger.log(` Slot: ${slot}`);\n } catch (error) {\n logger.error(\n `Failed to get first available block: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createMinimumLedgerSlotCommand(): Command {\n const command = new Command('minimum-ledger-slot')\n .description('Get the minimum slot that the node has information about')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const slot = await client.network.minimumLedgerSlot();\n\n logger.success(`Minimum ledger slot:`);\n logger.log(` Slot: ${slot}`);\n } catch (error) {\n logger.error(\n `Failed to get minimum ledger slot: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSignatureStatusesCommand(): Command {\n const command = new Command('get-signature-statuses')\n .description('Get the statuses of a list of signatures')\n .requiredOption('--signatures <sigs...>', 'Transaction signatures')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--search-history', 'Search transaction history', false)\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.searchHistory\n ? { searchTransactionHistory: true }\n : undefined;\n\n const statuses = await client.network.getSignatureStatuses(\n options.signatures,\n config\n );\n\n logger.success(`Retrieved ${statuses.length} signature status(es):`);\n statuses.forEach((status, index) => {\n const sig = options.signatures[index];\n logger.log(`\\n${index + 1}. ${sig}`);\n \n if (status) {\n logger.log(` Slot: ${status.slot}`);\n logger.log(` Confirmations: ${status.confirmations ?? 'max'}`);\n logger.log(` Status: ${status.err ? 'Failed' : 'Success'}`);\n if (status.confirmationStatus) {\n logger.log(` Confirmation: ${status.confirmationStatus}`);\n }\n if (status.err) {\n logger.log(` Error: ${JSON.stringify(status.err)}`);\n }\n } else {\n logger.log(' Status: Not found');\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signature statuses: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSimulateTransactionCommand(): Command {\n const command = new Command('simulate-transaction')\n .description('Simulate a transaction without committing it')\n .requiredOption('--transaction <data>', 'Base64 encoded transaction')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--sig-verify', 'Enable signature verification', true)\n .option('--commitment <level>', 'Commitment level')\n .option('--encoding <type>', 'Encoding type', 'base64')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n sigVerify: options.sigVerify,\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const result = await client.network.simulateTransaction(\n options.transaction,\n config\n );\n\n if (result.err) {\n logger.error('Transaction simulation failed:');\n logger.log(JSON.stringify(result.err, null, 2));\n } else {\n logger.success('Transaction simulation successful!');\n }\n\n if (result.logs && result.logs.length > 0) {\n logger.log('\\nLogs:');\n result.logs.forEach((log) => logger.log(` ${log}`));\n }\n\n if (result.unitsConsumed) {\n logger.log(`\\nCompute units consumed: ${result.unitsConsumed}`);\n }\n\n if (result.accounts) {\n logger.log(`\\nAccounts modified: ${result.accounts.length}`);\n }\n\n if (result.returnData) {\n logger.log(`\\nReturn data: ${JSON.stringify(result.returnData)}`);\n }\n } catch (error) {\n logger.error(\n `Failed to simulate transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetRecentPerformanceSamplesCommand(): Command {\n const command = new Command('get-recent-performance-samples')\n .description('Get recent performance samples')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of samples', '10')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const limit = parseInt(options.limit);\n\n const samples = await client.network.getRecentPerformanceSamples(limit);\n\n logger.success(`Retrieved ${samples.length} performance sample(s):`);\n samples.forEach((sample, index) => {\n logger.log(`\\n${index + 1}. Slot ${sample.slot}`);\n logger.log(` Transactions: ${sample.numTransactions}`);\n logger.log(` Slots: ${sample.numSlots}`);\n logger.log(` Sample Period: ${sample.samplePeriodSecs}s`);\n if (sample.numNonVoteTransactions !== undefined) {\n logger.log(\n ` Non-vote Transactions: ${sample.numNonVoteTransactions}`\n );\n }\n const tps = (\n sample.numTransactions / sample.samplePeriodSecs\n ).toFixed(2);\n logger.log(` TPS: ${tps}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get performance samples: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetAccountInfoCommand(): Command {\n const command = new Command('get-account-info')\n .description('Get detailed information about an account')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const account = await client.accounts.getAccountInfo(\n options.pubkey,\n config\n );\n\n if (!account) {\n logger.warn(`Account not found: ${options.pubkey}`);\n return;\n }\n\n logger.success(`Account Info for ${options.pubkey}:`);\n logger.log(` Lamports: ${account.lamports}`);\n logger.log(` Owner: ${account.owner}`);\n logger.log(` Executable: ${account.executable}`);\n logger.log(` Rent Epoch: ${account.rentEpoch}`);\n if (account.space !== undefined) {\n logger.log(` Space: ${account.space} bytes`);\n }\n if (account.data) {\n logger.log(` Data: ${JSON.stringify(account.data).substring(0, 100)}...`);\n }\n } catch (error) {\n logger.error(\n `Failed to get account info: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetMultipleAccountsCommand(): Command {\n const command = new Command('get-multiple-accounts')\n .description('Get information for multiple accounts')\n .requiredOption('--pubkeys <addresses...>', 'Account public keys')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const accounts = await client.accounts.getMultipleAccounts(\n options.pubkeys,\n config\n );\n\n logger.success(`Retrieved ${accounts.length} account(s):`);\n accounts.forEach((account, index) => {\n const pubkey = options.pubkeys[index];\n logger.log(`\\n${index + 1}. ${pubkey}`);\n \n if (account) {\n logger.log(` Lamports: ${account.lamports}`);\n logger.log(` Owner: ${account.owner}`);\n logger.log(` Executable: ${account.executable}`);\n } else {\n logger.log(' Status: Account not found');\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockCommitmentCommand(): Command {\n const command = new Command('get-block-commitment')\n .description('Get commitment information for a block')\n .requiredOption('--slot <number>', 'Block slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const commitment = await client.accounts.getBlockCommitment(slot);\n\n logger.success(`Block commitment for slot ${slot}:`);\n logger.log(` Total Stake: ${commitment.totalStake}`);\n if (commitment.commitment) {\n const nonZeroLevels = commitment.commitment\n .map((count, level) => ({ level, count }))\n .filter((item) => item.count > 0);\n \n if (nonZeroLevels.length > 0) {\n logger.log(` Commitment levels:`);\n nonZeroLevels.forEach(({ level, count }) => {\n logger.log(` Level ${level}: ${count} votes`);\n });\n } else {\n logger.log(` No commitment votes recorded`);\n }\n } else {\n logger.log(` No commitment data available`);\n }\n } catch (error) {\n logger.error(\n `Failed to get block commitment: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountBalanceCommand(): Command {\n const command = new Command('get-token-account-balance')\n .description('Get token balance of a token account')\n .requiredOption('--pubkey <address>', 'Token account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const balance = await client.accounts.getTokenAccountBalance(\n options.pubkey,\n config\n );\n\n if (!balance) {\n logger.warn(`No token balance found for ${options.pubkey}`);\n return;\n }\n\n logger.success(`Token account balance for ${options.pubkey}:`);\n logger.log(` Amount: ${balance.amount}`);\n logger.log(` Decimals: ${balance.decimals}`);\n logger.log(` UI Amount: ${balance.uiAmount ?? 'N/A'}`);\n logger.log(` UI Amount String: ${balance.uiAmountString}`);\n } catch (error) {\n logger.error(\n `Failed to get token balance: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenSupplyCommand(): Command {\n const command = new Command('get-token-supply')\n .description('Get total supply of a token')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const supply = await client.accounts.getTokenSupply(\n options.mint,\n config\n );\n\n logger.success(`Token supply for mint ${options.mint}:`);\n logger.log(` Total Supply: ${supply.amount}`);\n logger.log(` Decimals: ${supply.decimals}`);\n logger.log(` UI Amount: ${supply.uiAmount ?? 'N/A'}`);\n logger.log(` UI Amount String: ${supply.uiAmountString}`);\n } catch (error) {\n logger.error(\n `Failed to get token supply: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetProgramAccountsCommand(): Command {\n const command = new Command('get-program-accounts')\n .description('Get all accounts owned by a program')\n .requiredOption('--program-id <address>', 'Program public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--with-context', 'Include context in response', false)\n .option('--data-size <number>', 'Filter by data size')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n withContext: options.withContext,\n };\n\n if (options.dataSize) {\n config.filters = [{ dataSize: parseInt(options.dataSize) }];\n }\n\n const accounts = await client.scan.getProgramAccounts(\n options.programId,\n config\n );\n\n logger.success(`Found ${accounts.length} account(s) owned by ${options.programId}:`);\n \n if (accounts.length > 0) {\n accounts.slice(0, 10).forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n\n if (accounts.length > 10) {\n logger.log(`\\n... and ${accounts.length - 10} more accounts`);\n }\n }\n } catch (error) {\n logger.error(\n `Failed to get program accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLargestAccountsCommand(): Command {\n const command = new Command('get-largest-accounts')\n .description('Get the 20 largest accounts by lamport balance')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--filter <type>', 'Filter type (circulating/nonCirculating)')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {};\n if (options.filter) {\n config.filter = options.filter;\n }\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const accounts = await client.scan.getLargestAccounts(\n Object.keys(config).length > 0 ? config : undefined\n );\n\n logger.success(`Top ${accounts.length} largest accounts:`);\n accounts.forEach((acc, index) => {\n const sol = (acc.lamports / 1e9).toFixed(4);\n logger.log(`${index + 1}. ${acc.address}`);\n logger.log(` Balance: ${acc.lamports} lamports (${sol} SOL)\\n`);\n });\n } catch (error) {\n logger.error(\n `Failed to get largest accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSupplyCommand(): Command {\n const command = new Command('get-supply')\n .description('Get current supply information')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--exclude-accounts', 'Exclude non-circulating accounts list', false)\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n excludeNonCirculatingAccountsList: options.excludeAccounts,\n };\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const supply = await client.scan.getSupply(config);\n\n const totalSOL = (supply.total / 1e9).toFixed(2);\n const circulatingSOL = (supply.circulating / 1e9).toFixed(2);\n const nonCirculatingSOL = (supply.nonCirculating / 1e9).toFixed(2);\n\n logger.success('Network Supply:');\n logger.log(` Total: ${supply.total} lamports (${totalSOL} SOL)`);\n logger.log(` Circulating: ${supply.circulating} lamports (${circulatingSOL} SOL)`);\n logger.log(` Non-Circulating: ${supply.nonCirculating} lamports (${nonCirculatingSOL} SOL)`);\n \n if (!options.excludeAccounts && supply.nonCirculatingAccounts.length > 0) {\n logger.log(`\\n Non-Circulating Accounts: ${supply.nonCirculatingAccounts.length}`);\n }\n } catch (error) {\n logger.error(`Failed to get supply: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenLargestAccountsCommand(): Command {\n const command = new Command('get-token-largest-accounts')\n .description('Get largest holders of a specific token')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const accounts = await client.scan.getTokenLargestAccounts(\n options.mint,\n config\n );\n\n logger.success(`Top ${accounts.length} holders of token ${options.mint}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.address}`);\n logger.log(` Amount: ${acc.amount} (${acc.uiAmountString})`);\n logger.log(` Decimals: ${acc.decimals}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get token largest accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountsByOwnerCommand(): Command {\n const command = new Command('get-token-accounts-by-owner')\n .description('Get all token accounts owned by an address')\n .requiredOption('--owner <address>', 'Owner wallet address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--mint <address>', 'Filter by token mint')\n .option('--program-id <address>', 'Filter by program ID')\n .option('--encoding <type>', 'Data encoding', 'jsonParsed')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n if (!options.mint && !options.programId) {\n logger.error('Must specify either --mint or --program-id filter');\n process.exit(1);\n }\n\n const filter = options.mint\n ? { mint: options.mint }\n : { programId: options.programId };\n\n const config = {\n encoding: options.encoding,\n };\n\n const accounts = await client.scan.getTokenAccountsByOwner(\n options.owner,\n filter,\n config\n );\n\n logger.success(`Found ${accounts.length} token account(s) for ${options.owner}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get token accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountsByDelegateCommand(): Command {\n const command = new Command('get-token-accounts-by-delegate')\n .description('Get token accounts delegated to an address')\n .requiredOption('--delegate <address>', 'Delegate address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--mint <address>', 'Filter by token mint')\n .option('--program-id <address>', 'Filter by program ID')\n .option('--encoding <type>', 'Data encoding', 'jsonParsed')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n if (!options.mint && !options.programId) {\n logger.error('Must specify either --mint or --program-id filter');\n process.exit(1);\n }\n\n const filter = options.mint\n ? { mint: options.mint }\n : { programId: options.programId };\n\n const config = {\n encoding: options.encoding,\n };\n\n const accounts = await client.scan.getTokenAccountsByDelegate(\n options.delegate,\n filter,\n config\n );\n\n logger.success(`Found ${accounts.length} delegated account(s) for ${options.delegate}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get delegated accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n"],"mappings":"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","names":["import_commander","import_chalk","chalk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/cheatcodes/time-travel.ts","../src/utils/logger.ts","../src/commands/cheatcodes/set-account.ts","../src/commands/cheatcodes/set-program-authority.ts","../src/commands/cheatcodes/pause-clock.ts","../src/commands/cheatcodes/resume-clock.ts","../src/commands/cheatcodes/get-local-signatures.ts","../src/commands/cheatcodes/set-token-account.ts","../src/commands/cheatcodes/reset-account.ts","../src/commands/cheatcodes/reset-network.ts","../src/commands/network/get-latest-blockhash.ts","../src/commands/network/get-block.ts","../src/commands/network/get-transaction.ts","../src/commands/network/send-transaction.ts","../src/commands/network/get-cluster-nodes.ts","../src/commands/network/request-airdrop.ts","../src/commands/network/get-blocks.ts","../src/commands/network/get-signatures-for-address.ts","../src/commands/network/is-blockhash-valid.ts","../src/commands/network/get-fee-for-message.ts","../src/commands/network/get-recent-prioritization-fees.ts","../src/commands/network/get-block-time.ts","../src/commands/network/get-blocks-with-limit.ts","../src/commands/network/get-first-available-block.ts","../src/commands/network/minimum-ledger-slot.ts","../src/commands/network/get-signature-statuses.ts","../src/commands/network/simulate-transaction.ts","../src/commands/network/get-recent-performance-samples.ts","../src/commands/accounts/get-account-info.ts","../src/commands/accounts/get-multiple-accounts.ts","../src/commands/accounts/get-block-commitment.ts","../src/commands/accounts/get-token-account-balance.ts","../src/commands/accounts/get-token-supply.ts","../src/commands/scan/get-program-accounts.ts","../src/commands/scan/get-largest-accounts.ts","../src/commands/scan/get-supply.ts","../src/commands/scan/get-token-largest-accounts.ts","../src/commands/scan/get-token-accounts-by-owner.ts","../src/commands/scan/get-token-accounts-by-delegate.ts"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createTimeTravelCommand } from './commands/cheatcodes/time-travel';\nimport { createSetAccountCommand } from './commands/cheatcodes/set-account';\nimport { createSetProgramAuthorityCommand } from './commands/cheatcodes/set-program-authority';\nimport { createPauseClockCommand } from './commands/cheatcodes/pause-clock';\nimport { createResumeClockCommand } from './commands/cheatcodes/resume-clock';\nimport { createGetLocalSignaturesCommand } from './commands/cheatcodes/get-local-signatures';\nimport { createSetTokenAccountCommand } from './commands/cheatcodes/set-token-account';\nimport { createResetAccountCommand } from './commands/cheatcodes/reset-account';\nimport { createResetNetworkCommand } from './commands/cheatcodes/reset-network';\nimport { createGetLatestBlockhashCommand } from './commands/network/get-latest-blockhash';\nimport { createGetBlockCommand } from './commands/network/get-block';\nimport { createGetTransactionCommand } from './commands/network/get-transaction';\nimport { createSendTransactionCommand } from './commands/network/send-transaction';\nimport { createGetClusterNodesCommand } from './commands/network/get-cluster-nodes';\nimport { createRequestAirdropCommand } from './commands/network/request-airdrop';\nimport { createGetBlocksCommand } from './commands/network/get-blocks';\nimport { createGetSignaturesForAddressCommand } from './commands/network/get-signatures-for-address';\nimport { createIsBlockhashValidCommand } from './commands/network/is-blockhash-valid';\nimport { createGetFeeForMessageCommand } from './commands/network/get-fee-for-message';\nimport { createGetRecentPrioritizationFeesCommand } from './commands/network/get-recent-prioritization-fees';\nimport { createGetBlockTimeCommand } from './commands/network/get-block-time';\nimport { createGetBlocksWithLimitCommand } from './commands/network/get-blocks-with-limit';\nimport { createGetFirstAvailableBlockCommand } from './commands/network/get-first-available-block';\nimport { createMinimumLedgerSlotCommand } from './commands/network/minimum-ledger-slot';\nimport { createGetSignatureStatusesCommand } from './commands/network/get-signature-statuses';\nimport { createSimulateTransactionCommand } from './commands/network/simulate-transaction';\nimport { createGetRecentPerformanceSamplesCommand } from './commands/network/get-recent-performance-samples';\nimport { createGetAccountInfoCommand } from './commands/accounts/get-account-info';\nimport { createGetMultipleAccountsCommand } from './commands/accounts/get-multiple-accounts';\nimport { createGetBlockCommitmentCommand } from './commands/accounts/get-block-commitment';\nimport { createGetTokenAccountBalanceCommand } from './commands/accounts/get-token-account-balance';\nimport { createGetTokenSupplyCommand } from './commands/accounts/get-token-supply';\nimport { createGetProgramAccountsCommand } from './commands/scan/get-program-accounts';\nimport { createGetLargestAccountsCommand } from './commands/scan/get-largest-accounts';\nimport { createGetSupplyCommand } from './commands/scan/get-supply';\nimport { createGetTokenLargestAccountsCommand } from './commands/scan/get-token-largest-accounts';\nimport { createGetTokenAccountsByOwnerCommand } from './commands/scan/get-token-accounts-by-owner';\nimport { createGetTokenAccountsByDelegateCommand } from './commands/scan/get-token-accounts-by-delegate';\n\nconst program = new Command();\n\n// Check for --help to show complete list\nconst isFullHelp = process.argv.includes('--help');\nconst isShortHelp = process.argv.includes('-h');\n\n// Handle --help flag to show complete command list\nif (isFullHelp) {\n console.log(chalk.bold.cyan('\\n🌊 Surfman CLI - Complete Command List\\n'));\n \n console.log(chalk.bold.yellow('📦 Account Queries (5 commands):\\n'));\n console.log(` ${chalk.yellow('get-account-info')} Get detailed account information`);\n console.log(` ${chalk.yellow('get-multiple-accounts')} Batch query multiple accounts`);\n console.log(` ${chalk.yellow('get-token-account-balance')} Get token account balance`);\n console.log(` ${chalk.yellow('get-token-supply')} Get total token supply`);\n console.log(` ${chalk.yellow('get-block-commitment')} Get block commitment data\\n`);\n \n console.log(chalk.bold.blue('🌐 Network Operations (18 commands):\\n'));\n console.log(chalk.dim(' Block Queries:'));\n console.log(` ${chalk.blue('get-latest-blockhash')} Get the latest blockhash`);\n console.log(` ${chalk.blue('get-block')} Get block information by slot`);\n console.log(` ${chalk.blue('get-block-time')} Get block production time`);\n console.log(` ${chalk.blue('get-blocks')} Get list of confirmed blocks`);\n console.log(` ${chalk.blue('get-blocks-with-limit')} Get blocks with limit`);\n console.log(` ${chalk.blue('get-first-available-block')} Get first available block`);\n console.log(` ${chalk.blue('minimum-ledger-slot')} Get minimum ledger slot\\n`);\n \n console.log(chalk.dim(' Transaction Operations:'));\n console.log(` ${chalk.blue('get-transaction')} Get transaction details`);\n console.log(` ${chalk.blue('get-signature-statuses')} Get signature statuses`);\n console.log(` ${chalk.blue('get-signatures-for-address')} Get address transaction history`);\n console.log(` ${chalk.blue('send-transaction')} Send a signed transaction`);\n console.log(` ${chalk.blue('simulate-transaction')} Simulate transaction execution\\n`);\n \n console.log(chalk.dim(' Network Info & Fees:'));\n console.log(` ${chalk.blue('is-blockhash-valid')} Check if blockhash is valid`);\n console.log(` ${chalk.blue('get-fee-for-message')} Get fee for a message`);\n console.log(` ${chalk.blue('get-recent-prioritization-fees')} Get recent priority fees`);\n console.log(` ${chalk.blue('get-cluster-nodes')} Get cluster node information`);\n console.log(` ${chalk.blue('get-recent-performance-samples')} Get performance samples`);\n console.log(` ${chalk.blue('request-airdrop')} Request lamports airdrop\\n`);\n \n console.log(chalk.bold.magenta('🔧 Testing & Development (9 commands):\\n'));\n console.log(chalk.dim(' Time Control:'));\n console.log(` ${chalk.magenta('time-travel')} Time travel to epoch/slot/timestamp`);\n console.log(` ${chalk.magenta('pause-clock')} Pause the network clock`);\n console.log(` ${chalk.magenta('resume-clock')} Resume the network clock\\n`);\n \n console.log(chalk.dim(' Account Manipulation:'));\n console.log(` ${chalk.magenta('set-account')} Modify account data/lamports/owner`);\n console.log(` ${chalk.magenta('set-token-account')} Update token account properties`);\n console.log(` ${chalk.magenta('reset-account')} Reset account to initial state\\n`);\n \n console.log(chalk.dim(' Network Management:'));\n console.log(` ${chalk.magenta('reset-network')} Reset entire network state`);\n console.log(` ${chalk.magenta('get-local-signatures')} Get recent local signatures`);\n console.log(` ${chalk.magenta('set-program-authority')} Set/remove program authority\\n`);\n \n console.log(chalk.bold.green('📊 Scan & Analytics (6 commands):\\n'));\n console.log(chalk.dim(' Batch Queries:'));\n console.log(` ${chalk.green('get-program-accounts')} Get all accounts owned by a program`);\n console.log(` ${chalk.green('get-largest-accounts')} Get top 20 accounts by balance`);\n console.log(` ${chalk.green('get-supply')} Get network supply information\\n`);\n \n console.log(chalk.dim(' Token Distribution:'));\n console.log(` ${chalk.green('get-token-largest-accounts')} Get largest token holders`);\n console.log(` ${chalk.green('get-token-accounts-by-owner')} Get token accounts by owner`);\n console.log(` ${chalk.green('get-token-accounts-by-delegate')} Get delegated token accounts\\n`);\n \n console.log(chalk.bold.cyan('📊 Summary:\\n'));\n console.log(` Total Commands: ${chalk.bold('38')}`);\n console.log(` Account Queries: ${chalk.yellow('5')}`);\n console.log(` Network Operations: ${chalk.blue('18')}`);\n console.log(` Testing & Development: ${chalk.magenta('9')}`);\n console.log(` Scan & Analytics: ${chalk.green('6')}\\n`);\n \n console.log(chalk.gray('💡 Use ') + chalk.cyan('surfman <command> --help') + chalk.gray(' for detailed options\\n'));\n process.exit(0);\n}\n\nprogram\n .name('surfman')\n .description('CLI tool for SurfPool RPC API interaction')\n .version('0.1.0');\n\n// Custom help configuration\nprogram.configureHelp({\n formatHelp: (cmd, helper) => {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n\n let output = '';\n \n // Title\n output += chalk.bold.cyan('\\n🌊 Surfman CLI\\n\\n');\n output += chalk.gray('CLI tool for SurfPool RPC API interaction\\n\\n');\n\n // Usage\n output += chalk.bold('Usage:\\n');\n output += ` $ surfman ${chalk.yellow('<command>')} ${chalk.gray('[options]')}\\n\\n`;\n\n // Options\n output += chalk.bold('Options:\\n');\n output += ` -V, --version ${chalk.gray('Output the version number')}\\n`;\n output += ` -h ${chalk.gray('Display frequently used commands (quick view)')}\\n`;\n output += ` --help ${chalk.gray('Display all commands grouped by module')}\\n\\n`;\n\n // Frequently Used Commands\n output += chalk.bold.green('⭐ Frequently Used:\\n');\n output += ` ${chalk.cyan('get-account-info')} ${chalk.gray('Get account information')}\\n`;\n output += ` ${chalk.cyan('get-latest-blockhash')} ${chalk.gray('Get latest blockhash')}\\n`;\n output += ` ${chalk.cyan('send-transaction')} ${chalk.gray('Send a transaction')}\\n`;\n output += ` ${chalk.cyan('request-airdrop')} ${chalk.gray('Request SOL airdrop')}\\n`;\n output += ` ${chalk.cyan('time-travel')} ${chalk.gray('Time travel for testing')}\\n\\n`;\n\n // Account Queries\n output += chalk.bold.yellow('📦 Account Queries:\\n');\n output += ` ${chalk.yellow('get-account-info')} Get detailed account information\\n`;\n output += ` ${chalk.yellow('get-multiple-accounts')} Batch query multiple accounts\\n`;\n output += ` ${chalk.yellow('get-token-account-balance')} Get token account balance\\n`;\n output += ` ${chalk.yellow('get-token-supply')} Get total token supply\\n`;\n output += ` ${chalk.yellow('get-block-commitment')} Get block commitment data\\n\\n`;\n\n // Network Operations\n output += chalk.bold.blue('🌐 Network Operations:\\n');\n output += ` ${chalk.blue('get-latest-blockhash')} Get the latest blockhash\\n`;\n output += ` ${chalk.blue('get-block')} Get block by slot\\n`;\n output += ` ${chalk.blue('get-transaction')} Get transaction details\\n`;\n output += ` ${chalk.blue('send-transaction')} Send a signed transaction\\n`;\n output += ` ${chalk.blue('simulate-transaction')} Simulate transaction execution\\n`;\n output += ` ${chalk.blue('get-signatures-for-address')} Get address transaction history\\n`;\n output += ` ${chalk.blue('request-airdrop')} Request lamports airdrop\\n`;\n output += ` ${chalk.blue('get-cluster-nodes')} Get cluster node info\\n\\n`;\n\n // Testing & Development (Cheatcodes)\n output += chalk.bold.magenta('🔧 Testing & Development:\\n');\n output += ` ${chalk.magenta('time-travel')} Time travel to epoch/slot\\n`;\n output += ` ${chalk.magenta('pause-clock')} Pause network clock\\n`;\n output += ` ${chalk.magenta('resume-clock')} Resume network clock\\n`;\n output += ` ${chalk.magenta('set-account')} Modify account data\\n`;\n output += ` ${chalk.magenta('set-token-account')} Update token account\\n`;\n output += ` ${chalk.magenta('reset-account')} Reset account state\\n`;\n output += ` ${chalk.magenta('reset-network')} Reset entire network\\n`;\n output += ` ${chalk.magenta('set-program-authority')} Set program authority\\n\\n`;\n\n // Additional Commands\n output += chalk.bold.gray('📋 Additional Commands:\\n');\n output += chalk.gray(' get-blocks, get-block-time, is-blockhash-valid,\\n');\n output += chalk.gray(' get-fee-for-message, get-signature-statuses,\\n');\n output += chalk.gray(' get-recent-prioritization-fees, and more...\\n\\n');\n\n // Footer\n output += chalk.gray('💡 Tips:\\n');\n output += chalk.gray(' Use ') + chalk.cyan('surfman --help') + chalk.gray(' to see all 38 commands grouped by module\\n');\n output += chalk.gray(' Use ') + chalk.cyan('surfman <command> --help') + chalk.gray(' for detailed command options\\n');\n output += chalk.gray('📖 Documentation: ') + chalk.cyan('https://github.com/your-repo/surfman\\n');\n\n return output;\n },\n});\n\n// Cheatcodes\nprogram.addCommand(createTimeTravelCommand());\nprogram.addCommand(createSetAccountCommand());\nprogram.addCommand(createSetProgramAuthorityCommand());\nprogram.addCommand(createPauseClockCommand());\nprogram.addCommand(createResumeClockCommand());\nprogram.addCommand(createGetLocalSignaturesCommand());\nprogram.addCommand(createSetTokenAccountCommand());\nprogram.addCommand(createResetAccountCommand());\nprogram.addCommand(createResetNetworkCommand());\n\n// Network\nprogram.addCommand(createGetLatestBlockhashCommand());\nprogram.addCommand(createGetBlockCommand());\nprogram.addCommand(createGetTransactionCommand());\nprogram.addCommand(createSendTransactionCommand());\nprogram.addCommand(createGetClusterNodesCommand());\nprogram.addCommand(createRequestAirdropCommand());\nprogram.addCommand(createGetBlocksCommand());\nprogram.addCommand(createGetSignaturesForAddressCommand());\nprogram.addCommand(createIsBlockhashValidCommand());\nprogram.addCommand(createGetFeeForMessageCommand());\nprogram.addCommand(createGetRecentPrioritizationFeesCommand());\nprogram.addCommand(createGetBlockTimeCommand());\nprogram.addCommand(createGetBlocksWithLimitCommand());\nprogram.addCommand(createGetFirstAvailableBlockCommand());\nprogram.addCommand(createMinimumLedgerSlotCommand());\nprogram.addCommand(createGetSignatureStatusesCommand());\nprogram.addCommand(createSimulateTransactionCommand());\nprogram.addCommand(createGetRecentPerformanceSamplesCommand());\n\n// Accounts\nprogram.addCommand(createGetAccountInfoCommand());\nprogram.addCommand(createGetMultipleAccountsCommand());\nprogram.addCommand(createGetBlockCommitmentCommand());\nprogram.addCommand(createGetTokenAccountBalanceCommand());\nprogram.addCommand(createGetTokenSupplyCommand());\n\n// Scan\nprogram.addCommand(createGetProgramAccountsCommand());\nprogram.addCommand(createGetLargestAccountsCommand());\nprogram.addCommand(createGetSupplyCommand());\nprogram.addCommand(createGetTokenLargestAccountsCommand());\nprogram.addCommand(createGetTokenAccountsByOwnerCommand());\nprogram.addCommand(createGetTokenAccountsByDelegateCommand());\n\nprogram.parse();\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createTimeTravelCommand(): Command {\n const command = new Command('time-travel')\n .description('Time travel to a specific epoch, slot, or timestamp')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--epoch <number>', 'Absolute epoch number')\n .option('--slot <number>', 'Absolute slot number')\n .option('--timestamp <number>', 'Absolute timestamp (microseconds)')\n .option('--relative <time>', 'Relative time (e.g., +1d, +1w, +12h, +30m)')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n let config: any = {};\n\n if (options.epoch) {\n config.absoluteEpoch = parseInt(options.epoch);\n } else if (options.slot) {\n config.absoluteSlot = parseInt(options.slot);\n } else if (options.timestamp) {\n config.absoluteTimestamp = parseInt(options.timestamp);\n } else if (options.relative) {\n const timeStr = options.relative;\n let secondsToAdd = 0;\n\n if (timeStr.endsWith('d')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 24 * 60 * 60;\n } else if (timeStr.endsWith('w')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 7 * 24 * 60 * 60;\n } else if (timeStr.endsWith('h')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 60 * 60;\n } else if (timeStr.endsWith('m')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1)) * 60;\n } else if (timeStr.endsWith('s')) {\n secondsToAdd = parseInt(timeStr.slice(0, -1));\n } else {\n throw new Error('Invalid time format. Use: +1d, +1w, +1h, +30m, +60s');\n }\n\n const currentTimestamp = Date.now();\n config.absoluteTimestamp = currentTimestamp + secondsToAdd * 1000;\n } else {\n const oneWeekInMilliseconds = 7 * 24 * 60 * 60 * 1000;\n config.absoluteTimestamp = Date.now() + oneWeekInMilliseconds;\n logger.info('No time specified, defaulting to +1 week');\n }\n\n const result = await client.cheatcodes.timeTravel(config);\n\n logger.success('Time travel successful!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to time travel: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import chalk from 'chalk';\n\nexport const logger = {\n info: (message: string) => console.log(chalk.blue('ℹ'), message),\n success: (message: string) => console.log(chalk.green('✓'), message),\n error: (message: string) => console.error(chalk.red('✗'), message),\n warn: (message: string) => console.warn(chalk.yellow('⚠'), message),\n log: (message: string) => console.log(message),\n};\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetAccountCommand(): Command {\n const command = new Command('set-account')\n .description('Modify account data, lamports, owner, etc.')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--data <hex>', 'Account data (hex string)')\n .option('--lamports <amount>', 'Account lamports')\n .option('--owner <address>', 'Account owner')\n .option('--executable', 'Mark account as executable')\n .option('--rent-epoch <epoch>', 'Rent epoch')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const update: any = {};\n\n if (options.data) {\n update.data = options.data;\n }\n if (options.lamports) {\n update.lamports = parseInt(options.lamports);\n }\n if (options.owner) {\n update.owner = options.owner;\n }\n if (options.executable) {\n update.executable = true;\n }\n if (options.rentEpoch) {\n update.rentEpoch = parseInt(options.rentEpoch);\n }\n\n if (Object.keys(update).length === 0) {\n logger.error('No update fields specified. Use --data, --lamports, --owner, etc.');\n process.exit(1);\n }\n\n await client.cheatcodes.setAccount(options.pubkey, update);\n\n logger.success(`Account ${options.pubkey} updated successfully!`);\n logger.log('Updated fields:');\n Object.entries(update).forEach(([key, value]) => {\n logger.log(` ${key}: ${value}`);\n });\n } catch (error) {\n logger.error(`Failed to set account: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetProgramAuthorityCommand(): Command {\n const command = new Command('set-program-authority')\n .description('Set or remove program upgrade authority')\n .requiredOption('--program-id <address>', 'Program ID')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--new-authority <address>', 'New authority address')\n .option('--remove-authority', 'Remove authority (make program immutable)')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n let newAuthority: string | null;\n\n if (options.removeAuthority) {\n newAuthority = null;\n logger.info('Removing program authority (making immutable)');\n } else if (options.newAuthority) {\n newAuthority = options.newAuthority;\n logger.info(`Setting new authority to: ${newAuthority}`);\n } else {\n logger.error('Must specify either --new-authority or --remove-authority');\n process.exit(1);\n }\n\n await client.cheatcodes.setProgramAuthority(\n options.programId,\n newAuthority\n );\n\n logger.success(`Program authority updated successfully!`);\n logger.log(` Program ID: ${options.programId}`);\n logger.log(` New Authority: ${newAuthority ?? 'null (removed)'}`);\n } catch (error) {\n logger.error(\n `Failed to set program authority: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createPauseClockCommand(): Command {\n const command = new Command('pause-clock')\n .description('Pause the Surfnet clock (freeze time progression)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const result = await client.cheatcodes.pauseClock();\n\n logger.success('Clock paused successfully!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to pause clock: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResumeClockCommand(): Command {\n const command = new Command('resume-clock')\n .description('Resume the Surfnet clock (restart time progression)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const result = await client.cheatcodes.resumeClock();\n\n logger.success('Clock resumed successfully!');\n logger.log(` Absolute Slot: ${result.absoluteSlot}`);\n logger.log(` Epoch: ${result.epoch}`);\n logger.log(` Slot Index: ${result.slotIndex}`);\n logger.log(` Slots in Epoch: ${result.slotsInEpoch}`);\n if (result.blockHeight) {\n logger.log(` Block Height: ${result.blockHeight}`);\n }\n } catch (error) {\n logger.error(`Failed to resume clock: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLocalSignaturesCommand(): Command {\n const command = new Command('get-local-signatures')\n .description('Get recent local transaction signatures')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of signatures to return', '50')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const limit = parseInt(options.limit);\n\n const signatures = await client.cheatcodes.getLocalSignatures(limit);\n\n logger.success(`Retrieved ${signatures.length} signature(s):`);\n signatures.forEach((sig, index) => {\n logger.log(`\\n${index + 1}. Signature: ${sig.signature}`);\n logger.log(` Slot: ${sig.slot}`);\n logger.log(` Error: ${sig.err ? JSON.stringify(sig.err) : 'None'}`);\n if (sig.logs && sig.logs.length > 0) {\n logger.log(` Logs: ${sig.logs.length} line(s)`);\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signatures: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSetTokenAccountCommand(): Command {\n const command = new Command('set-token-account')\n .description('Set or update token account properties')\n .requiredOption('--owner <address>', 'Token account owner address')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--amount <number>', 'Token amount')\n .option('--delegate <address>', 'Delegate address (use \"none\" to clear)')\n .option('--state <state>', 'Account state (initialized, frozen, etc.)')\n .option('--delegated-amount <number>', 'Delegated amount')\n .option(\n '--close-authority <address>',\n 'Close authority address (use \"none\" to clear)'\n )\n .option('--token-program <address>', 'Token program address')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const update: any = {};\n\n if (options.amount) {\n update.amount = parseInt(options.amount);\n }\n if (options.delegate) {\n if (options.delegate.toLowerCase() === 'none') {\n update.delegate = { NoAccount: true };\n } else {\n update.delegate = { Account: options.delegate };\n }\n }\n if (options.state) {\n update.state = options.state;\n }\n if (options.delegatedAmount) {\n update.delegatedAmount = parseInt(options.delegatedAmount);\n }\n if (options.closeAuthority) {\n if (options.closeAuthority.toLowerCase() === 'none') {\n update.closeAuthority = { NoAccount: true };\n } else {\n update.closeAuthority = { Account: options.closeAuthority };\n }\n }\n\n if (Object.keys(update).length === 0) {\n logger.error('No update fields specified');\n process.exit(1);\n }\n\n await client.cheatcodes.setTokenAccount(\n options.owner,\n options.mint,\n update,\n options.tokenProgram\n );\n\n logger.success('Token account updated successfully!');\n logger.log(` Owner: ${options.owner}`);\n logger.log(` Mint: ${options.mint}`);\n logger.log('Updated fields:');\n Object.entries(update).forEach(([key, value]) => {\n logger.log(` ${key}: ${JSON.stringify(value)}`);\n });\n } catch (error) {\n logger.error(\n `Failed to set token account: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResetAccountCommand(): Command {\n const command = new Command('reset-account')\n .description('Reset an account to its initial state')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option(\n '--include-owned',\n 'Also reset accounts owned by this account',\n false\n )\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.includeOwned\n ? { includeOwnedAccounts: true }\n : undefined;\n\n await client.cheatcodes.resetAccount(options.pubkey, config);\n\n logger.success(`Account ${options.pubkey} reset successfully!`);\n if (options.includeOwned) {\n logger.log(' Owned accounts were also reset');\n }\n } catch (error) {\n logger.error(`Failed to reset account: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createResetNetworkCommand(): Command {\n const command = new Command('reset-network')\n .description('Reset the entire Surfnet network to initial state')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--confirm', 'Confirm network reset (required)', false)\n .action(async (options) => {\n try {\n if (!options.confirm) {\n logger.error(\n 'Network reset requires confirmation. Use --confirm flag.'\n );\n logger.warn(\n 'Warning: This will reset ALL accounts and state in the network!'\n );\n process.exit(1);\n }\n\n const client = new Surfman(options.rpc);\n\n logger.warn('Resetting network...');\n await client.cheatcodes.resetNetwork();\n\n logger.success('Network reset successfully!');\n logger.log('All accounts and state have been cleared.');\n } catch (error) {\n logger.error(`Failed to reset network: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLatestBlockhashCommand(): Command {\n const command = new Command('get-latest-blockhash')\n .description('Get the latest blockhash')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const result = await client.network.getLatestBlockhash(config);\n\n logger.success('Latest blockhash retrieved:');\n logger.log(` Blockhash: ${result.blockhash}`);\n logger.log(` Last Valid Block Height: ${result.lastValidBlockHeight}`);\n } catch (error) {\n logger.error(\n `Failed to get latest blockhash: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockCommand(): Command {\n const command = new Command('get-block')\n .description('Get block information by slot')\n .requiredOption('--slot <number>', 'Slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Encoding type', 'json')\n .option('--rewards', 'Include rewards', false)\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const config = {\n encoding: options.encoding,\n rewards: options.rewards,\n };\n\n const block = await client.network.getBlock(slot, config);\n\n if (!block) {\n logger.warn(`No block found at slot ${slot}`);\n return;\n }\n\n logger.success(`Block at slot ${slot}:`);\n logger.log(` Blockhash: ${block.blockhash}`);\n logger.log(` Previous Blockhash: ${block.previousBlockhash}`);\n logger.log(` Parent Slot: ${block.parentSlot}`);\n if (block.blockTime) {\n logger.log(\n ` Block Time: ${new Date(block.blockTime * 1000).toISOString()}`\n );\n }\n if (block.blockHeight !== null && block.blockHeight !== undefined) {\n logger.log(` Block Height: ${block.blockHeight}`);\n }\n if (block.transactions) {\n logger.log(` Transactions: ${block.transactions.length}`);\n }\n } catch (error) {\n logger.error(`Failed to get block: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTransactionCommand(): Command {\n const command = new Command('get-transaction')\n .description('Get transaction details by signature')\n .requiredOption('--signature <sig>', 'Transaction signature')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Encoding type', 'json')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = {\n encoding: options.encoding,\n };\n\n const tx = await client.network.getTransaction(\n options.signature,\n config\n );\n\n if (!tx) {\n logger.warn(`Transaction not found: ${options.signature}`);\n return;\n }\n\n logger.success(`Transaction ${options.signature}:`);\n logger.log(` Slot: ${tx.slot}`);\n if (tx.blockTime) {\n logger.log(\n ` Block Time: ${new Date(tx.blockTime * 1000).toISOString()}`\n );\n }\n if (tx.meta) {\n logger.log(` Status: ${tx.meta.err ? 'Failed' : 'Success'}`);\n if (tx.meta.err) {\n logger.log(` Error: ${JSON.stringify(tx.meta.err)}`);\n }\n }\n } catch (error) {\n logger.error(\n `Failed to get transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSendTransactionCommand(): Command {\n const command = new Command('send-transaction')\n .description('Send a signed transaction')\n .requiredOption('--transaction <data>', 'Base64 encoded transaction')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--skip-preflight', 'Skip preflight checks', false)\n .option('--encoding <type>', 'Encoding type', 'base64')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = {\n skipPreflight: options.skipPreflight,\n encoding: options.encoding,\n };\n\n const signature = await client.network.sendTransaction(\n options.transaction,\n config\n );\n\n logger.success(`Transaction sent successfully!`);\n logger.log(` Signature: ${signature}`);\n } catch (error) {\n logger.error(\n `Failed to send transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetClusterNodesCommand(): Command {\n const command = new Command('get-cluster-nodes')\n .description('Get information about cluster nodes')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const nodes = await client.network.getClusterNodes();\n\n logger.success(`Found ${nodes.length} cluster node(s):`);\n nodes.forEach((node, index) => {\n logger.log(`\\n${index + 1}. ${node.pubkey}`);\n if (node.gossip) logger.log(` Gossip: ${node.gossip}`);\n if (node.tpu) logger.log(` TPU: ${node.tpu}`);\n if (node.rpc) logger.log(` RPC: ${node.rpc}`);\n if (node.version) logger.log(` Version: ${node.version}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get cluster nodes: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createRequestAirdropCommand(): Command {\n const command = new Command('request-airdrop')\n .description('Request an airdrop of lamports')\n .requiredOption('--pubkey <address>', 'Public key to airdrop to')\n .requiredOption('--lamports <amount>', 'Amount in lamports')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const lamports = parseInt(options.lamports);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const signature = await client.network.requestAirdrop(\n options.pubkey,\n lamports,\n config\n );\n\n logger.success(`Airdrop requested successfully!`);\n logger.log(` Signature: ${signature}`);\n logger.log(` Amount: ${lamports} lamports`);\n logger.log(` Recipient: ${options.pubkey}`);\n } catch (error) {\n logger.error(\n `Failed to request airdrop: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlocksCommand(): Command {\n const command = new Command('get-blocks')\n .description('Get list of confirmed blocks between two slots')\n .requiredOption('--start-slot <number>', 'Start slot (inclusive)')\n .option('--end-slot <number>', 'End slot (exclusive)')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const startSlot = parseInt(options.startSlot);\n const endSlot = options.endSlot ? parseInt(options.endSlot) : undefined;\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const blocks = await client.network.getBlocks(startSlot, endSlot, config);\n\n logger.success(`Found ${blocks.length} confirmed block(s):`);\n if (blocks.length > 0) {\n logger.log(` First: ${blocks[0]}`);\n logger.log(` Last: ${blocks[blocks.length - 1]}`);\n if (blocks.length <= 20) {\n logger.log(` All slots: ${blocks.join(', ')}`);\n } else {\n logger.log(` (showing first and last only, total: ${blocks.length})`);\n }\n }\n } catch (error) {\n logger.error(`Failed to get blocks: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSignaturesForAddressCommand(): Command {\n const command = new Command('get-signatures-for-address')\n .description('Get confirmed signatures for transactions involving an address')\n .requiredOption('--address <pubkey>', 'Account address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of signatures', '10')\n .option('--before <signature>', 'Start searching backwards from this signature')\n .option('--until <signature>', 'Search until this signature')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n limit: parseInt(options.limit),\n };\n\n if (options.before) config.before = options.before;\n if (options.until) config.until = options.until;\n\n const signatures = await client.network.getSignaturesForAddress(\n options.address,\n config\n );\n\n logger.success(`Found ${signatures.length} signature(s):`);\n signatures.forEach((sig, index) => {\n logger.log(`\\n${index + 1}. ${sig.signature}`);\n logger.log(` Slot: ${sig.slot}`);\n logger.log(` Status: ${sig.err ? 'Failed' : 'Success'}`);\n if (sig.blockTime) {\n logger.log(\n ` Time: ${new Date(sig.blockTime * 1000).toISOString()}`\n );\n }\n if (sig.memo) {\n logger.log(` Memo: ${sig.memo}`);\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signatures: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createIsBlockhashValidCommand(): Command {\n const command = new Command('is-blockhash-valid')\n .description('Check if a blockhash is still valid')\n .requiredOption('--blockhash <hash>', 'Blockhash to check')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const isValid = await client.network.isBlockhashValid(\n options.blockhash,\n config\n );\n\n if (isValid) {\n logger.success(`Blockhash ${options.blockhash} is VALID`);\n } else {\n logger.warn(`Blockhash ${options.blockhash} is EXPIRED`);\n }\n } catch (error) {\n logger.error(\n `Failed to check blockhash: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetFeeForMessageCommand(): Command {\n const command = new Command('get-fee-for-message')\n .description('Get the fee required for a message')\n .requiredOption('--message <data>', 'Base64 encoded message')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const fee = await client.network.getFeeForMessage(\n options.message,\n config\n );\n\n if (fee !== null) {\n logger.success(`Transaction fee: ${fee} lamports`);\n logger.log(` In SOL: ${fee / 1_000_000_000} SOL`);\n } else {\n logger.warn('Could not determine fee (blockhash may be expired)');\n }\n } catch (error) {\n logger.error(`Failed to get fee: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetRecentPrioritizationFeesCommand(): Command {\n const command = new Command('get-recent-prioritization-fees')\n .description('Get recent prioritization fees')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--addresses <addresses...>', 'Account addresses to filter by')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const fees = await client.network.getRecentPrioritizationFees(\n options.addresses\n );\n\n logger.success(`Retrieved ${fees.length} fee sample(s):`);\n \n if (fees.length > 0) {\n const avgFee =\n fees.reduce((sum, f) => sum + f.prioritizationFee, 0) / fees.length;\n const maxFee = Math.max(...fees.map((f) => f.prioritizationFee));\n const minFee = Math.min(...fees.map((f) => f.prioritizationFee));\n\n logger.log(`\\nSummary:`);\n logger.log(` Average Fee: ${avgFee.toFixed(2)} micro-lamports`);\n logger.log(` Max Fee: ${maxFee} micro-lamports`);\n logger.log(` Min Fee: ${minFee} micro-lamports`);\n\n logger.log(`\\nRecent samples (newest first):`);\n fees.slice(0, 10).forEach((fee, index) => {\n logger.log(\n ` ${index + 1}. Slot ${fee.slot}: ${fee.prioritizationFee} micro-lamports`\n );\n });\n }\n } catch (error) {\n logger.error(\n `Failed to get prioritization fees: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockTimeCommand(): Command {\n const command = new Command('get-block-time')\n .description('Get estimated production time of a block')\n .requiredOption('--slot <number>', 'Slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const blockTime = await client.network.getBlockTime(slot);\n\n if (blockTime !== null) {\n const date = new Date(blockTime * 1000);\n logger.success(`Block time for slot ${slot}:`);\n logger.log(` Unix Timestamp: ${blockTime}`);\n logger.log(` Date: ${date.toISOString()}`);\n logger.log(` Local: ${date.toLocaleString()}`);\n } else {\n logger.warn(`No block time available for slot ${slot}`);\n }\n } catch (error) {\n logger.error(`Failed to get block time: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlocksWithLimitCommand(): Command {\n const command = new Command('get-blocks-with-limit')\n .description('Get confirmed blocks starting at a slot with a limit')\n .requiredOption('--start-slot <number>', 'Start slot (inclusive)')\n .requiredOption('--limit <number>', 'Maximum number of blocks')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const startSlot = parseInt(options.startSlot);\n const limit = parseInt(options.limit);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const blocks = await client.network.getBlocksWithLimit(\n startSlot,\n limit,\n config\n );\n\n logger.success(`Found ${blocks.length} confirmed block(s):`);\n if (blocks.length > 0) {\n logger.log(` First: ${blocks[0]}`);\n logger.log(` Last: ${blocks[blocks.length - 1]}`);\n if (blocks.length <= 20) {\n logger.log(` All slots: ${blocks.join(', ')}`);\n } else {\n logger.log(` (showing first and last only, total: ${blocks.length})`);\n }\n }\n } catch (error) {\n logger.error(`Failed to get blocks: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetFirstAvailableBlockCommand(): Command {\n const command = new Command('get-first-available-block')\n .description('Get the slot of the lowest confirmed block')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const slot = await client.network.getFirstAvailableBlock();\n\n logger.success(`First available block:`);\n logger.log(` Slot: ${slot}`);\n } catch (error) {\n logger.error(\n `Failed to get first available block: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createMinimumLedgerSlotCommand(): Command {\n const command = new Command('minimum-ledger-slot')\n .description('Get the minimum slot that the node has information about')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const slot = await client.network.minimumLedgerSlot();\n\n logger.success(`Minimum ledger slot:`);\n logger.log(` Slot: ${slot}`);\n } catch (error) {\n logger.error(\n `Failed to get minimum ledger slot: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSignatureStatusesCommand(): Command {\n const command = new Command('get-signature-statuses')\n .description('Get the statuses of a list of signatures')\n .requiredOption('--signatures <sigs...>', 'Transaction signatures')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--search-history', 'Search transaction history', false)\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.searchHistory\n ? { searchTransactionHistory: true }\n : undefined;\n\n const statuses = await client.network.getSignatureStatuses(\n options.signatures,\n config\n );\n\n logger.success(`Retrieved ${statuses.length} signature status(es):`);\n statuses.forEach((status, index) => {\n const sig = options.signatures[index];\n logger.log(`\\n${index + 1}. ${sig}`);\n \n if (status) {\n logger.log(` Slot: ${status.slot}`);\n logger.log(` Confirmations: ${status.confirmations ?? 'max'}`);\n logger.log(` Status: ${status.err ? 'Failed' : 'Success'}`);\n if (status.confirmationStatus) {\n logger.log(` Confirmation: ${status.confirmationStatus}`);\n }\n if (status.err) {\n logger.log(` Error: ${JSON.stringify(status.err)}`);\n }\n } else {\n logger.log(' Status: Not found');\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get signature statuses: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createSimulateTransactionCommand(): Command {\n const command = new Command('simulate-transaction')\n .description('Simulate a transaction without committing it')\n .requiredOption('--transaction <data>', 'Base64 encoded transaction')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--sig-verify', 'Enable signature verification', true)\n .option('--commitment <level>', 'Commitment level')\n .option('--encoding <type>', 'Encoding type', 'base64')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n sigVerify: options.sigVerify,\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const result = await client.network.simulateTransaction(\n options.transaction,\n config\n );\n\n if (result.err) {\n logger.error('Transaction simulation failed:');\n logger.log(JSON.stringify(result.err, null, 2));\n } else {\n logger.success('Transaction simulation successful!');\n }\n\n if (result.logs && result.logs.length > 0) {\n logger.log('\\nLogs:');\n result.logs.forEach((log) => logger.log(` ${log}`));\n }\n\n if (result.unitsConsumed) {\n logger.log(`\\nCompute units consumed: ${result.unitsConsumed}`);\n }\n\n if (result.accounts) {\n logger.log(`\\nAccounts modified: ${result.accounts.length}`);\n }\n\n if (result.returnData) {\n logger.log(`\\nReturn data: ${JSON.stringify(result.returnData)}`);\n }\n } catch (error) {\n logger.error(\n `Failed to simulate transaction: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetRecentPerformanceSamplesCommand(): Command {\n const command = new Command('get-recent-performance-samples')\n .description('Get recent performance samples')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--limit <number>', 'Maximum number of samples', '10')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const limit = parseInt(options.limit);\n\n const samples = await client.network.getRecentPerformanceSamples(limit);\n\n logger.success(`Retrieved ${samples.length} performance sample(s):`);\n samples.forEach((sample, index) => {\n logger.log(`\\n${index + 1}. Slot ${sample.slot}`);\n logger.log(` Transactions: ${sample.numTransactions}`);\n logger.log(` Slots: ${sample.numSlots}`);\n logger.log(` Sample Period: ${sample.samplePeriodSecs}s`);\n if (sample.numNonVoteTransactions !== undefined) {\n logger.log(\n ` Non-vote Transactions: ${sample.numNonVoteTransactions}`\n );\n }\n const tps = (\n sample.numTransactions / sample.samplePeriodSecs\n ).toFixed(2);\n logger.log(` TPS: ${tps}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get performance samples: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetAccountInfoCommand(): Command {\n const command = new Command('get-account-info')\n .description('Get detailed information about an account')\n .requiredOption('--pubkey <address>', 'Account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const account = await client.accounts.getAccountInfo(\n options.pubkey,\n config\n );\n\n if (!account) {\n logger.warn(`Account not found: ${options.pubkey}`);\n return;\n }\n\n logger.success(`Account Info for ${options.pubkey}:`);\n logger.log(` Lamports: ${account.lamports}`);\n logger.log(` Owner: ${account.owner}`);\n logger.log(` Executable: ${account.executable}`);\n logger.log(` Rent Epoch: ${account.rentEpoch}`);\n if (account.space !== undefined) {\n logger.log(` Space: ${account.space} bytes`);\n }\n if (account.data) {\n logger.log(` Data: ${JSON.stringify(account.data).substring(0, 100)}...`);\n }\n } catch (error) {\n logger.error(\n `Failed to get account info: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetMultipleAccountsCommand(): Command {\n const command = new Command('get-multiple-accounts')\n .description('Get information for multiple accounts')\n .requiredOption('--pubkeys <addresses...>', 'Account public keys')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n };\n\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const accounts = await client.accounts.getMultipleAccounts(\n options.pubkeys,\n config\n );\n\n logger.success(`Retrieved ${accounts.length} account(s):`);\n accounts.forEach((account, index) => {\n const pubkey = options.pubkeys[index];\n logger.log(`\\n${index + 1}. ${pubkey}`);\n \n if (account) {\n logger.log(` Lamports: ${account.lamports}`);\n logger.log(` Owner: ${account.owner}`);\n logger.log(` Executable: ${account.executable}`);\n } else {\n logger.log(' Status: Account not found');\n }\n });\n } catch (error) {\n logger.error(\n `Failed to get accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetBlockCommitmentCommand(): Command {\n const command = new Command('get-block-commitment')\n .description('Get commitment information for a block')\n .requiredOption('--slot <number>', 'Block slot number')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n const slot = parseInt(options.slot);\n\n const commitment = await client.accounts.getBlockCommitment(slot);\n\n logger.success(`Block commitment for slot ${slot}:`);\n logger.log(` Total Stake: ${commitment.totalStake}`);\n if (commitment.commitment) {\n const nonZeroLevels = commitment.commitment\n .map((count, level) => ({ level, count }))\n .filter((item) => item.count > 0);\n \n if (nonZeroLevels.length > 0) {\n logger.log(` Commitment levels:`);\n nonZeroLevels.forEach(({ level, count }) => {\n logger.log(` Level ${level}: ${count} votes`);\n });\n } else {\n logger.log(` No commitment votes recorded`);\n }\n } else {\n logger.log(` No commitment data available`);\n }\n } catch (error) {\n logger.error(\n `Failed to get block commitment: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountBalanceCommand(): Command {\n const command = new Command('get-token-account-balance')\n .description('Get token balance of a token account')\n .requiredOption('--pubkey <address>', 'Token account public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const balance = await client.accounts.getTokenAccountBalance(\n options.pubkey,\n config\n );\n\n if (!balance) {\n logger.warn(`No token balance found for ${options.pubkey}`);\n return;\n }\n\n logger.success(`Token account balance for ${options.pubkey}:`);\n logger.log(` Amount: ${balance.amount}`);\n logger.log(` Decimals: ${balance.decimals}`);\n logger.log(` UI Amount: ${balance.uiAmount ?? 'N/A'}`);\n logger.log(` UI Amount String: ${balance.uiAmountString}`);\n } catch (error) {\n logger.error(\n `Failed to get token balance: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenSupplyCommand(): Command {\n const command = new Command('get-token-supply')\n .description('Get total supply of a token')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const supply = await client.accounts.getTokenSupply(\n options.mint,\n config\n );\n\n logger.success(`Token supply for mint ${options.mint}:`);\n logger.log(` Total Supply: ${supply.amount}`);\n logger.log(` Decimals: ${supply.decimals}`);\n logger.log(` UI Amount: ${supply.uiAmount ?? 'N/A'}`);\n logger.log(` UI Amount String: ${supply.uiAmountString}`);\n } catch (error) {\n logger.error(\n `Failed to get token supply: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetProgramAccountsCommand(): Command {\n const command = new Command('get-program-accounts')\n .description('Get all accounts owned by a program')\n .requiredOption('--program-id <address>', 'Program public key')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--encoding <type>', 'Data encoding', 'base64')\n .option('--with-context', 'Include context in response', false)\n .option('--data-size <number>', 'Filter by data size')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n encoding: options.encoding,\n withContext: options.withContext,\n };\n\n if (options.dataSize) {\n config.filters = [{ dataSize: parseInt(options.dataSize) }];\n }\n\n const accounts = await client.scan.getProgramAccounts(\n options.programId,\n config\n );\n\n logger.success(`Found ${accounts.length} account(s) owned by ${options.programId}:`);\n \n if (accounts.length > 0) {\n accounts.slice(0, 10).forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n\n if (accounts.length > 10) {\n logger.log(`\\n... and ${accounts.length - 10} more accounts`);\n }\n }\n } catch (error) {\n logger.error(\n `Failed to get program accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetLargestAccountsCommand(): Command {\n const command = new Command('get-largest-accounts')\n .description('Get the 20 largest accounts by lamport balance')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--filter <type>', 'Filter type (circulating/nonCirculating)')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {};\n if (options.filter) {\n config.filter = options.filter;\n }\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const accounts = await client.scan.getLargestAccounts(\n Object.keys(config).length > 0 ? config : undefined\n );\n\n logger.success(`Top ${accounts.length} largest accounts:`);\n accounts.forEach((acc, index) => {\n const sol = (acc.lamports / 1e9).toFixed(4);\n logger.log(`${index + 1}. ${acc.address}`);\n logger.log(` Balance: ${acc.lamports} lamports (${sol} SOL)\\n`);\n });\n } catch (error) {\n logger.error(\n `Failed to get largest accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetSupplyCommand(): Command {\n const command = new Command('get-supply')\n .description('Get current supply information')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--exclude-accounts', 'Exclude non-circulating accounts list', false)\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config: any = {\n excludeNonCirculatingAccountsList: options.excludeAccounts,\n };\n if (options.commitment) {\n config.commitment = options.commitment;\n }\n\n const supply = await client.scan.getSupply(config);\n\n const totalSOL = (supply.total / 1e9).toFixed(2);\n const circulatingSOL = (supply.circulating / 1e9).toFixed(2);\n const nonCirculatingSOL = (supply.nonCirculating / 1e9).toFixed(2);\n\n logger.success('Network Supply:');\n logger.log(` Total: ${supply.total} lamports (${totalSOL} SOL)`);\n logger.log(` Circulating: ${supply.circulating} lamports (${circulatingSOL} SOL)`);\n logger.log(` Non-Circulating: ${supply.nonCirculating} lamports (${nonCirculatingSOL} SOL)`);\n \n if (!options.excludeAccounts && supply.nonCirculatingAccounts.length > 0) {\n logger.log(`\\n Non-Circulating Accounts: ${supply.nonCirculatingAccounts.length}`);\n }\n } catch (error) {\n logger.error(`Failed to get supply: ${(error as Error).message}`);\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenLargestAccountsCommand(): Command {\n const command = new Command('get-token-largest-accounts')\n .description('Get largest holders of a specific token')\n .requiredOption('--mint <address>', 'Token mint address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--commitment <level>', 'Commitment level')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n const config = options.commitment\n ? { commitment: options.commitment }\n : undefined;\n\n const accounts = await client.scan.getTokenLargestAccounts(\n options.mint,\n config\n );\n\n logger.success(`Top ${accounts.length} holders of token ${options.mint}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.address}`);\n logger.log(` Amount: ${acc.amount} (${acc.uiAmountString})`);\n logger.log(` Decimals: ${acc.decimals}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get token largest accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountsByOwnerCommand(): Command {\n const command = new Command('get-token-accounts-by-owner')\n .description('Get all token accounts owned by an address')\n .requiredOption('--owner <address>', 'Owner wallet address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--mint <address>', 'Filter by token mint')\n .option('--program-id <address>', 'Filter by program ID')\n .option('--encoding <type>', 'Data encoding', 'jsonParsed')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n if (!options.mint && !options.programId) {\n logger.error('Must specify either --mint or --program-id filter');\n process.exit(1);\n }\n\n const filter = options.mint\n ? { mint: options.mint }\n : { programId: options.programId };\n\n const config = {\n encoding: options.encoding,\n };\n\n const accounts = await client.scan.getTokenAccountsByOwner(\n options.owner,\n filter,\n config\n );\n\n logger.success(`Found ${accounts.length} token account(s) for ${options.owner}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get token accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n","import { Command } from 'commander';\nimport { Surfman } from 'surfman-sdk';\nimport { logger } from '../../utils/logger';\n\nexport function createGetTokenAccountsByDelegateCommand(): Command {\n const command = new Command('get-token-accounts-by-delegate')\n .description('Get token accounts delegated to an address')\n .requiredOption('--delegate <address>', 'Delegate address')\n .option('--rpc <url>', 'RPC URL', 'http://localhost:8899')\n .option('--mint <address>', 'Filter by token mint')\n .option('--program-id <address>', 'Filter by program ID')\n .option('--encoding <type>', 'Data encoding', 'jsonParsed')\n .action(async (options) => {\n try {\n const client = new Surfman(options.rpc);\n\n if (!options.mint && !options.programId) {\n logger.error('Must specify either --mint or --program-id filter');\n process.exit(1);\n }\n\n const filter = options.mint\n ? { mint: options.mint }\n : { programId: options.programId };\n\n const config = {\n encoding: options.encoding,\n };\n\n const accounts = await client.scan.getTokenAccountsByDelegate(\n options.delegate,\n filter,\n config\n );\n\n logger.success(`Found ${accounts.length} delegated account(s) for ${options.delegate}:`);\n accounts.forEach((acc, index) => {\n logger.log(`\\n${index + 1}. ${acc.pubkey}`);\n logger.log(` Lamports: ${acc.account.lamports}`);\n logger.log(` Owner: ${acc.account.owner}`);\n });\n } catch (error) {\n logger.error(\n `Failed to get delegated accounts: ${(error as Error).message}`\n );\n process.exit(1);\n }\n });\n\n return command;\n}\n"],"mappings":"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","names":["import_commander","import_chalk","chalk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","import_commander","import_surfman_sdk","chalk"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "surfman",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "CLI tool for SurfPool RPC API interaction",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"surfman": "./dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
|
-
"dist"
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
12
13
|
],
|
|
13
14
|
"keywords": [
|
|
14
15
|
"surfpool",
|
|
@@ -34,9 +35,9 @@
|
|
|
34
35
|
"access": "public"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
38
|
+
"surfman-sdk": "^0.1.2",
|
|
37
39
|
"commander": "^12.0.0",
|
|
38
|
-
"chalk": "^5.3.0"
|
|
39
|
-
"surfman-sdk": "0.1.0"
|
|
40
|
+
"chalk": "^5.3.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/node": "^22.0.0",
|