helius-python 0.3.4__py3-none-any.whl → 0.4.1__py3-none-any.whl

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.
@@ -9,7 +9,7 @@ from pydantic.alias_generators import to_camel
9
9
  from typing_extensions import TypedDict
10
10
  from websockets.sync.client import connect
11
11
 
12
- from helius.rpc import JsonRpcRequest
12
+ from helius.utils import JsonRpcRequest
13
13
 
14
14
 
15
15
  class Notification(BaseModel):
@@ -5,7 +5,6 @@ import httpx
5
5
  from dotenv import dotenv_values
6
6
  from pydantic import Field, TypeAdapter, validate_call
7
7
 
8
- from helius.rpc import JsonRpcRequest
9
8
  from helius.solana_rpc.models import (
10
9
  Account,
11
10
  Block,
@@ -33,6 +32,7 @@ from helius.solana_rpc.models import (
33
32
  TransferFilters,
34
33
  VotingAccount,
35
34
  )
35
+ from helius.utils import JsonRpcRequest
36
36
 
37
37
 
38
38
  # TODO: Use Pydantic typed dict where useful
@@ -4,8 +4,6 @@ from pydantic import AliasGenerator, BaseModel, ConfigDict
4
4
  from pydantic.alias_generators import to_camel
5
5
  from typing_extensions import TypedDict
6
6
 
7
- # TODO: Improve camelCase <-> snake_case
8
-
9
7
 
10
8
  class Account(BaseModel):
11
9
  model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
@@ -0,0 +1,3 @@
1
+ from helius.utils.json_rpc_request import JsonRpcRequest
2
+
3
+ __all__ = ["JsonRpcRequest"]
File without changes
@@ -0,0 +1,722 @@
1
+ from os import environ
2
+ from typing import Literal
3
+
4
+ import httpx
5
+ from dotenv import dotenv_values
6
+ from pydantic import AliasChoices, AliasGenerator, BaseModel, ConfigDict, Field
7
+ from pydantic.alias_generators import to_camel
8
+
9
+ TransactionType = Literal[
10
+ "ANY",
11
+ "ACCEPT_ESCROW_ARTIST",
12
+ "ACCEPT_ESCROW_USER",
13
+ "ACCEPT_PROPOSAL",
14
+ "ACCEPT_REQUEST_ARTIST",
15
+ "ACTIVATE_PROPOSAL",
16
+ "ACTIVATE_TRANSACTION",
17
+ "ACTIVATE_VAULT",
18
+ "ADD_AUTHORITY",
19
+ "ADD_BALANCE_LIQUIDITY",
20
+ "ADD_BATCH_TRANSACTION",
21
+ "ADD_IMBALANCE_LIQUIDITY",
22
+ "ADD_INSTRUCTION",
23
+ "ADD_ITEM",
24
+ "ADD_LIQUIDITY",
25
+ "ADD_LIQUIDITY_BY_STRATEGY",
26
+ "ADD_LIQUIDITY_BY_STRATEGY_ONE_SIDE",
27
+ "ADD_LIQUIDITY_BY_WEIGHT",
28
+ "ADD_LIQUIDITY_ONE_SIDE",
29
+ "ADD_LIQUIDITY_ONE_SIDE_PRECISE",
30
+ "ADD_MEMBER",
31
+ "ADD_MEMBER_AND_CHANGE_THRESHOLD",
32
+ "ADD_METADATA",
33
+ "ADD_PAYMENT_MINT_PAYMENT_METHOD",
34
+ "ADD_RARITIES_TO_BANK",
35
+ "ADD_REWARDS",
36
+ "ADD_SPENDING_LIMIT",
37
+ "ADD_TO_POOL",
38
+ "ADD_TO_WHITELIST",
39
+ "ADD_TOKEN_TO_VAULT",
40
+ "ADD_TRAIT_CONFLICTS",
41
+ "ADMIN_SYNC_LIQUIDITY",
42
+ "APPROVE",
43
+ "APPROVE_PROPOSAL",
44
+ "APPROVE_TRANSACTION",
45
+ "ATTACH_METADATA",
46
+ "AUCTION_HOUSE_CREATE",
47
+ "AUCTION_MANAGER_CLAIM_BID",
48
+ "AUTHORIZE_FUNDER",
49
+ "BACKFILL_TOTAL_BLOCKS",
50
+ "BEGIN_TRAIT_UPDATE",
51
+ "BEGIN_VARIANT_UPDATE",
52
+ "BOOTSTRAP_LIQUIDITY",
53
+ "BORROW_CNFT_PERPETUAL",
54
+ "BORROW_FOX",
55
+ "BORROW_OBLIGATION_LIQUIDITY",
56
+ "BORROW_PERPETUAL",
57
+ "BORROW_SOL_FOR_NFT",
58
+ "BORROW_STAKED_BANX_PERPETUAL",
59
+ "BOT_CLAIM_SALE",
60
+ "BOT_DELIST",
61
+ "BOT_LIQUIDATE",
62
+ "BOT_LIQUIDATE_SELL",
63
+ "BOT_UNFREEZE",
64
+ "BOUND_HADO_MARKET_TO_FRAKT_MARKET",
65
+ "BURN",
66
+ "BURN_NFT",
67
+ "BURN_PAYMENT",
68
+ "BURN_PAYMENT_TREE",
69
+ "BUY_ITEM",
70
+ "BUY_LOAN",
71
+ "BUY_SUBSCRIPTION",
72
+ "BUY_TICKETS",
73
+ "CANCEL",
74
+ "CANCEL_ALL_AND_PLACE_ORDERS",
75
+ "CANCEL_ALL_ORDERS",
76
+ "CANCEL_ESCROW",
77
+ "CANCEL_LOAN_REQUEST",
78
+ "CANCEL_MULTIPLE_ORDERS",
79
+ "CANCEL_OFFER",
80
+ "CANCEL_ORDER",
81
+ "CANCEL_ORDER_BY_CLIENT_ORDER_ID",
82
+ "CANCEL_PROPOSAL",
83
+ "CANCEL_REWARD",
84
+ "CANCEL_SWAP",
85
+ "CANCEL_TRANSACTION",
86
+ "CANCEL_UP_TO",
87
+ "CANCEL_UPDATE",
88
+ "CANDY_MACHINE_ROUTE",
89
+ "CANDY_MACHINE_UNWRAP",
90
+ "CANDY_MACHINE_UPDATE",
91
+ "CANDY_MACHINE_WRAP",
92
+ "CHANGE_BLOCK_BUILDER",
93
+ "CHANGE_COMIC_STATE",
94
+ "CHANGE_FEE_RECIPIENT",
95
+ "CHANGE_MARKET_STATUS",
96
+ "CHANGE_SEAT_STATUS",
97
+ "CHANGE_THRESHOLD",
98
+ "CHANGE_TIP_RECEIVER",
99
+ "CLAIM_AUTHORITY",
100
+ "CLAIM_CNFT_PERPETUAL_LOAN",
101
+ "CLAIM_FEE",
102
+ "CLAIM_NFT",
103
+ "CLAIM_NFT_BY_LENDER_CNFT",
104
+ "CLAIM_NFT_BY_LENDER_PNFT",
105
+ "CLAIM_PERPETUAL_LOAN",
106
+ "CLAIM_REWARD",
107
+ "CLAIM_REWARDS",
108
+ "CLAIM_SALE",
109
+ "CLAIM_TIPS",
110
+ "CLEAN",
111
+ "CLOSE_ACCOUNT",
112
+ "CLOSE_BATCH_ACCOUNTS",
113
+ "CLOSE_BUNDLED_POSITION",
114
+ "CLOSE_CLAIM_STATUS",
115
+ "CLOSE_CONFIG",
116
+ "CLOSE_CONFIG_TRANSACTION_ACCOUNTS",
117
+ "CLOSE_ESCROW_ACCOUNT",
118
+ "CLOSE_ITEM",
119
+ "CLOSE_MARKET",
120
+ "CLOSE_OPEN_ORDERS_ACCOUNT",
121
+ "CLOSE_OPEN_ORDERS_INDEXER",
122
+ "CLOSE_ORDER",
123
+ "CLOSE_POOL",
124
+ "CLOSE_POSITION",
125
+ "CLOSE_PRESET_PARAMETER",
126
+ "CLOSE_TIP_DISTRIBUTION_ACCOUNT",
127
+ "CLOSE_VAULT_BATCH_TRANSACTION_ACCOUNT",
128
+ "CLOSE_VAULT_TRANSACTION_ACCOUNTS",
129
+ "COLLECT_FEES",
130
+ "COLLECT_REWARD",
131
+ "COMPRESS_NFT",
132
+ "COMPRESSED_NFT_BURN",
133
+ "COMPRESSED_NFT_CANCEL_REDEEM",
134
+ "COMPRESSED_NFT_DELEGATE",
135
+ "COMPRESSED_NFT_MINT",
136
+ "COMPRESSED_NFT_REDEEM",
137
+ "COMPRESSED_NFT_SET_VERIFY_COLLECTION",
138
+ "COMPRESSED_NFT_TRANSFER",
139
+ "COMPRESSED_NFT_UNVERIFY_COLLECTION",
140
+ "COMPRESSED_NFT_UNVERIFY_CREATOR",
141
+ "COMPRESSED_NFT_UPDATE_METADATA",
142
+ "COMPRESSED_NFT_VERIFY_COLLECTION",
143
+ "COMPRESSED_NFT_VERIFY_CREATOR",
144
+ "CONSUME_EVENTS",
145
+ "CONSUME_GIVEN_EVENTS",
146
+ "COPY_CLUSTER_INFO",
147
+ "COPY_GOSSIP_CONTACT_INFO",
148
+ "COPY_TIP_DISTRIBUTION_ACCOUNT",
149
+ "COPY_VOTE_ACCOUNT",
150
+ "CRANK",
151
+ "CRANK_EVENT_QUEUE",
152
+ "CREATE",
153
+ "CREATE_AMM",
154
+ "CREATE_APPRAISAL",
155
+ "CREATE_AVATAR",
156
+ "CREATE_AVATAR_CLASS",
157
+ "CREATE_BATCH",
158
+ "CREATE_BET",
159
+ "CREATE_BOND_AND_SELL_TO_OFFERS",
160
+ "CREATE_BOND_AND_SELL_TO_OFFERS_CNFT",
161
+ "CREATE_BOND_AND_SELL_TO_OFFERS_FOR_TEST",
162
+ "CREATE_BOND_OFFER_STANDARD",
163
+ "CREATE_COLLECTION",
164
+ "CREATE_CONFIG",
165
+ "CREATE_CONFIG_TRANSACTION",
166
+ "CREATE_ESCROW",
167
+ "CREATE_LOCK_ESCROW",
168
+ "CREATE_MARKET",
169
+ "CREATE_MASTER_EDITION",
170
+ "CREATE_MERKLE_TREE",
171
+ "CREATE_MINT_METADATA",
172
+ "CREATE_MULTISIG",
173
+ "CREATE_OPEN_ORDERS_ACCOUNT",
174
+ "CREATE_OPEN_ORDERS_INDEXER",
175
+ "CREATE_ORDER",
176
+ "CREATE_PAYMENT_METHOD",
177
+ "CREATE_PERPETUAL_BOND_OFFER",
178
+ "CREATE_POOL",
179
+ "CREATE_PROPOSAL",
180
+ "CREATE_RAFFLE",
181
+ "CREATE_STATS",
182
+ "CREATE_STORE",
183
+ "CREATE_TOKEN_POOL",
184
+ "CREATE_TRAIT",
185
+ "CREATE_TRANSACTION",
186
+ "CREATE_UNCHECKED",
187
+ "CREATE_VAULT_TRANSACTION",
188
+ "DEAUTHORIZE_FUNDER",
189
+ "DECOMPRESS_NFT",
190
+ "DECREASE_LIQUIDITY",
191
+ "DELEGATE_MERKLE_TREE",
192
+ "DELETE_COLLECTION",
193
+ "DELETE_POSITION_BUNDLE",
194
+ "DELETE_REFERRER_STATE_AND_SHORT_URL",
195
+ "DELETE_TOKEN_BADGE",
196
+ "DELIST_ITEM",
197
+ "DELIST_NFT",
198
+ "DEPOSIT",
199
+ "DEPOSIT_FRACTIONAL_POOL",
200
+ "DEPOSIT_GEM",
201
+ "DEPOSIT_OBLIGATION_COLLATERAL",
202
+ "DEPOSIT_RESERVE_LIQUIDITY",
203
+ "DEPOSIT_RESERVE_LIQUIDITY_AND_OBLIGATION_COLLATERAL",
204
+ "DEPOSIT_SOL_TO_FLASH_LOAN_POOL",
205
+ "DEPOSIT_TO_BOND_OFFER_STANDARD",
206
+ "DEPOSIT_TO_FARM_VAULT",
207
+ "DEPOSIT_TO_REWARDS_VAULT",
208
+ "DISTRIBUTE_COMPRESSION_REWARDS",
209
+ "EDIT_ORDER",
210
+ "EDIT_ORDER_PEGGED",
211
+ "EMPTY_PAYMENT_ACCOUNT",
212
+ "ENABLE_OR_DISABLE_POOL",
213
+ "EQUIP_TRAIT",
214
+ "EQUIP_TRAIT_AUTHORITY",
215
+ "EVICT_SEAT",
216
+ "EXECUTE_BATCH_TRANSACTION",
217
+ "EXECUTE_CONFIG_TRANSACTION",
218
+ "EXECUTE_INSTRUCTION",
219
+ "EXECUTE_LOAN",
220
+ "EXECUTE_MORTGAGE",
221
+ "EXECUTE_TRANSACTION",
222
+ "EXECUTE_VAULT_TRANSACTION",
223
+ "EXIT_VALIDATE_AND_SELL_TO_BOND_OFFERS_V2",
224
+ "EXPIRE",
225
+ "EXTEND_LOAN",
226
+ "EXTENSION_EXECUTE",
227
+ "FILL_ORDER",
228
+ "FINALIZE_PROGRAM_INSTRUCTION",
229
+ "FINISH_HADO_MARKET",
230
+ "FIX_POOL",
231
+ "FLASH_BORROW_RESERVE_LIQUIDITY",
232
+ "FLASH_REPAY_RESERVE_LIQUIDITY",
233
+ "FORCE_CANCEL_ORDERS",
234
+ "FORECLOSE_LOAN",
235
+ "FRACTIONALIZE",
236
+ "FREEZE",
237
+ "FUND_REWARD",
238
+ "FUSE",
239
+ "GET_POOL_INFO",
240
+ "GO_TO_A_BIN",
241
+ "HARVEST_REWARD",
242
+ "IDL_MISSING_TYPES",
243
+ "INCREASE_LIQUIDITY",
244
+ "INCREASE_ORACLE_LENGTH",
245
+ "INIT_AUCTION_MANAGER_V2",
246
+ "INIT_BANK",
247
+ "INIT_CLUSTER_HISTORY_ACCOUNT",
248
+ "INIT_CONFIG",
249
+ "INIT_CONFIG_EXTENSION",
250
+ "INIT_CUSTOMIZABLE_PERMISSIONLESS_CONSTANT_PRODUCT_POOL",
251
+ "INIT_FARM",
252
+ "INIT_FARMER",
253
+ "INIT_FARMS_FOR_RESERVE",
254
+ "INIT_FEE_TIER",
255
+ "INIT_LENDING_MARKET",
256
+ "INIT_OBLIGATION",
257
+ "INIT_OBLIGATION_FARMS_FOR_RESERVE",
258
+ "INIT_PERMISSIONED_POOL",
259
+ "INIT_PERMISSIONLESS_CONSTANT_PRODUCT_POOL_WITH_CONFIG",
260
+ "INIT_PERMISSIONLESS_CONSTANT_PRODUCT_POOL_WITH_CONFIG_2",
261
+ "INIT_PERMISSIONLESS_POOL",
262
+ "INIT_PERMISSIONLESS_POOL_WITH_FEE_TIER",
263
+ "INIT_POOL",
264
+ "INIT_POOL_V2",
265
+ "INIT_POSITION_BUNDLE",
266
+ "INIT_POSITION_BUNDLE_WITH_METADATA",
267
+ "INIT_REFERRER_STATE_AND_SHORT_URL",
268
+ "INIT_REFERRER_TOKEN_STATE",
269
+ "INIT_RENT",
270
+ "INIT_RESERVE",
271
+ "INIT_REWARD",
272
+ "INIT_REWARD_V2",
273
+ "INIT_STAKE",
274
+ "INIT_SWAP",
275
+ "INIT_TICK_ARRAY",
276
+ "INIT_TIP_DISTRIBUTION_ACCOUNT",
277
+ "INIT_TOKEN_BADGE",
278
+ "INIT_USER_METADATA",
279
+ "INIT_VALIDATOR_HISTORY_ACCOUNT",
280
+ "INIT_VAULT",
281
+ "INITIALIZE",
282
+ "INITIALIZE_ACCOUNT",
283
+ "INITIALIZE_BIN_ARRAY",
284
+ "INITIALIZE_BIN_ARRAY_BITMAP_EXTENSION",
285
+ "INITIALIZE_CUSTOMIZABLE_PERMISSIONLESS_LB_PAIR",
286
+ "INITIALIZE_FARM",
287
+ "INITIALIZE_FARM_DELEGATED",
288
+ "INITIALIZE_FLASH_LOAN_POOL",
289
+ "INITIALIZE_GLOBAL_CONFIG",
290
+ "INITIALIZE_HADO_MARKET",
291
+ "INITIALIZE_LB_PAIR",
292
+ "INITIALIZE_MARKET",
293
+ "INITIALIZE_PERMISSION_LB_PAIR",
294
+ "INITIALIZE_POSITION",
295
+ "INITIALIZE_POSITION_BY_OPERATOR",
296
+ "INITIALIZE_POSITION_PDA",
297
+ "INITIALIZE_PRESET_PARAMETER",
298
+ "INITIALIZE_REWARD",
299
+ "INITIALIZE_USER",
300
+ "INSTANT_REFINANCE_PERPETUAL_LOAN",
301
+ "KICK_ITEM",
302
+ "LEND_FOR_NFT",
303
+ "LIMIT_ORDER",
304
+ "LIQUIDATE",
305
+ "LIQUIDATE_BOND_ON_AUCTION_CNFT",
306
+ "LIQUIDATE_BOND_ON_AUCTION_PNFT",
307
+ "LIQUIDATE_OBLIGATION_AND_REDEEM_RESERVE_COLLATERAL",
308
+ "LIST_ITEM",
309
+ "LIST_NFT",
310
+ "LOAN",
311
+ "LOAN_FOX",
312
+ "LOCK",
313
+ "LOCK_REWARD",
314
+ "LOG",
315
+ "MAKE_PERPETUAL_MARKET",
316
+ "MAP_BANX_TO_POINTS",
317
+ "MERGE_CONDITIONAL_TOKENS",
318
+ "MERGE_STAKE",
319
+ "MIGRATE_BIN_ARRAY",
320
+ "MIGRATE_POSITION",
321
+ "MIGRATE_TO_PNFT",
322
+ "MINT_TO",
323
+ "NAME_SUCCESSOR",
324
+ "NFT_AUCTION_CANCELLED",
325
+ "NFT_AUCTION_CREATED",
326
+ "NFT_AUCTION_UPDATED",
327
+ "NFT_BID",
328
+ "NFT_BID_CANCELLED",
329
+ "NFT_CANCEL_LISTING",
330
+ "NFT_GLOBAL_BID",
331
+ "NFT_GLOBAL_BID_CANCELLED",
332
+ "NFT_LISTING",
333
+ "NFT_MINT",
334
+ "NFT_MINT_REJECTED",
335
+ "NFT_PARTICIPATION_REWARD",
336
+ "NFT_RENT_ACTIVATE",
337
+ "NFT_RENT_CANCEL_LISTING",
338
+ "NFT_RENT_END",
339
+ "NFT_RENT_LISTING",
340
+ "NFT_RENT_UPDATE_LISTING",
341
+ "NFT_SALE",
342
+ "OFFER_LOAN",
343
+ "OPEN_BUNDLED_POSITION",
344
+ "OPEN_POSITION",
345
+ "OPEN_POSITION_WITH_METADATA",
346
+ "OVERRIDE_CURVE_PARAM",
347
+ "PARTNER_CLAIM_FEE",
348
+ "PATCH_BROKEN_USER_STAKES",
349
+ "PAUSE",
350
+ "PAYOUT",
351
+ "PLACE_AND_TAKE_PERP_ORDER",
352
+ "PLACE_BET",
353
+ "PLACE_MULTIPLE_POST_ONLY_ORDERS",
354
+ "PLACE_ORDER",
355
+ "PLACE_ORDER_PEGGED",
356
+ "PLACE_ORDERS",
357
+ "PLACE_SOL_BET",
358
+ "PLACE_TAKE_ORDER",
359
+ "PLATFORM_FEE",
360
+ "POOL_CANCEL_PROPOSAL",
361
+ "POST_MULTI_PYTH",
362
+ "POST_PYTH",
363
+ "PROGRAM_CONFIG_INIT",
364
+ "PROGRAM_CONFIG_SET_AUTH",
365
+ "PROGRAM_CONFIG_SET_CREATION_FEE",
366
+ "PROGRAM_CONFIG_SET_TREASURY",
367
+ "PROPOSE_LOAN",
368
+ "PRUNE_ORDERS",
369
+ "REALLOC_CLUSTER_HISTORY_ACCOUNT",
370
+ "REALLOC_VALIDATOR_HISTORY_ACCOUNT",
371
+ "REBORROW_SOL_FOR_NFT",
372
+ "RECORD_RARITY_POINTS",
373
+ "REDEEM_CONDITIONAL_TOKENS",
374
+ "REDEEM_FEES",
375
+ "REDEEM_RESERVE_COLLATERAL",
376
+ "REDUCE_ORDER",
377
+ "REFILL",
378
+ "REFINANCE_FBOND_BY_LENDER",
379
+ "REFINANCE_PERPETUAL_LOAN",
380
+ "REFINANCE_TO_BOND_OFFERS_V2",
381
+ "REFINANCE_TO_BOND_OFFERS_V2_CNFT",
382
+ "REFRESH_FARM",
383
+ "REFRESH_FARMER",
384
+ "REFRESH_OBLIGATION",
385
+ "REFRESH_OBLIGATION_FARMS_FOR_RESERVE",
386
+ "REFRESH_RESERVE",
387
+ "REFRESH_RESERVES_BATCH",
388
+ "REFRESH_USER_STATE",
389
+ "REJECT_PROPOSAL",
390
+ "REJECT_SWAP",
391
+ "REJECT_TRANSACTION",
392
+ "REMOVE_ALL_LIQUIDITY",
393
+ "REMOVE_BALANCE_LIQUIDITY",
394
+ "REMOVE_BOND_OFFER_V2",
395
+ "REMOVE_FROM_POOL",
396
+ "REMOVE_FROM_WHITELIST",
397
+ "REMOVE_LIQUIDITY",
398
+ "REMOVE_LIQUIDITY_BY_RANGE",
399
+ "REMOVE_LIQUIDITY_SINGLE_SIDE",
400
+ "REMOVE_MEMBER",
401
+ "REMOVE_MEMBER_AND_CHANGE_THRESHOLD",
402
+ "REMOVE_PERPETUAL_OFFER",
403
+ "REMOVE_SPENDING_LIMIT",
404
+ "REMOVE_TRAIT",
405
+ "REMOVE_TRAIT_AUTHORITY",
406
+ "REPAY",
407
+ "REPAY_CNFT_PERPETUAL_LOAN",
408
+ "REPAY_COMPRESSED",
409
+ "REPAY_FBOND_TO_TRADE_TRANSACTIONS",
410
+ "REPAY_FBOND_TO_TRADE_TRANSACTIONS_CNFT",
411
+ "REPAY_FLASH_LOAN",
412
+ "REPAY_LOAN",
413
+ "REPAY_OBLIGATION_LIQUIDITY",
414
+ "REPAY_PARTIAL_PERPETUAL_LOAN",
415
+ "REPAY_PERPETUAL_LOAN",
416
+ "REPAY_STAKED_BANX",
417
+ "REPAY_STAKED_BANX_PERPETUAL_LOAN",
418
+ "REQUEST_ELEVATION_GROUP",
419
+ "REQUEST_LOAN",
420
+ "REQUEST_PNFT_MIGRATION",
421
+ "REQUEST_SEAT",
422
+ "REQUEST_SEAT_AUTHORIZED",
423
+ "RESCIND_LOAN",
424
+ "REVOKE",
425
+ "REWARD_USER_ONCE",
426
+ "SELL_LOAN",
427
+ "SELL_NFT",
428
+ "SELL_STAKED_BANX_TO_OFFERS",
429
+ "SET_ACTIVATION_POINT",
430
+ "SET_AUTHORITY",
431
+ "SET_BANK_FLAGS",
432
+ "SET_COLLECT_PROTOCOL_FEES_AUTHORITY",
433
+ "SET_CONFIG_AUTH",
434
+ "SET_CONFIG_EXTENSION_AUTHORITY",
435
+ "SET_DEFAULT_FEE_RATE",
436
+ "SET_DEFAULT_PROTOCOL_FEE_RATE",
437
+ "SET_DELEGATE",
438
+ "SET_FEE_AUTHORITY",
439
+ "SET_FEE_RATE",
440
+ "SET_MARKET_EXPIRED",
441
+ "SET_NEW_ADMIN",
442
+ "SET_NEW_ORACLE_AUTHORITY",
443
+ "SET_NEW_TIP_DISTRIBUTION_PROGRAM",
444
+ "SET_PARAMS",
445
+ "SET_POOL_FEES",
446
+ "SET_PRE_ACTIVATION_DURATION",
447
+ "SET_PRE_ACTIVATION_SWAP_ADDRESS",
448
+ "SET_PROTOCOL_FEE_RATE",
449
+ "SET_RENT_COLLECTOR",
450
+ "SET_REWARD_AUTHORITY",
451
+ "SET_REWARD_AUTHORITY_BY_SUPER_AUTHORITY",
452
+ "SET_REWARD_EMISSIONS",
453
+ "SET_REWARD_EMISSIONS_SUPER_AUTHORITY",
454
+ "SET_REWARD_EMISSIONS_V2",
455
+ "SET_STAKE_DELEGATED",
456
+ "SET_TIME_LOCK",
457
+ "SET_TOKEN_BADGE_AUTHORITY",
458
+ "SET_VAULT_LOCK",
459
+ "SET_WHITELISTED_VAULT",
460
+ "SETTLE_CONDITIONAL_VAULT",
461
+ "SETTLE_FUNDS",
462
+ "SETTLE_FUNDS_EXPIRED",
463
+ "SETTLE_PNL",
464
+ "SOCIALIZE_LOSS",
465
+ "SPLIT_STAKE",
466
+ "STAKE",
467
+ "STAKE_BANX",
468
+ "STAKE_SOL",
469
+ "STAKE_TOKEN",
470
+ "START_PNFT_MIGRATION",
471
+ "STUB_ID_BUILD",
472
+ "STUB_ORACLE_CLOSE",
473
+ "STUB_ORACLE_CREATE",
474
+ "STUB_ORACLE_SET",
475
+ "SWAP",
476
+ "SWAP_EXACT_OUT",
477
+ "SWAP_WITH_PRICE_IMPACT",
478
+ "SWEEP_FEES",
479
+ "SWITCH_FOX",
480
+ "SWITCH_FOX_REQUEST",
481
+ "SYNC_LIQUIDITY",
482
+ "TAKE_COMPRESSED_LOAN",
483
+ "TAKE_FLASH_LOAN",
484
+ "TAKE_LOAN",
485
+ "TAKE_MORTGAGE",
486
+ "TERMINATE_PERPETUAL_LOAN",
487
+ "THAW",
488
+ "TOGGLE_PAIR_STATUS",
489
+ "TOKEN_MINT",
490
+ "TOPUP",
491
+ "TRANSFER",
492
+ "TRANSFER_OWNERSHIP",
493
+ "TRANSFER_PAYMENT",
494
+ "TRANSFER_PAYMENT_TREE",
495
+ "TRANSFER_RECIPIENT",
496
+ "UNFREEZE",
497
+ "UNKNOWN",
498
+ "UNLABELED",
499
+ "UNPAUSE",
500
+ "UNSTAKE",
501
+ "UNSTAKE_BANX",
502
+ "UNSTAKE_SOL",
503
+ "UNSTAKE_TOKEN",
504
+ "UNSUB_OR_HARVEST_WEEKS",
505
+ "UNSUB_OR_HARVEST_WEEKS_ENHANCED",
506
+ "UPDATE",
507
+ "UPDATE_ACTIVATION_POINT",
508
+ "UPDATE_BANK_MANAGER",
509
+ "UPDATE_BOND_OFFER_STANDARD",
510
+ "UPDATE_CLASS_VARIANT_AUTHORITY",
511
+ "UPDATE_CLASS_VARIANT_METADATA",
512
+ "UPDATE_COLLECTION",
513
+ "UPDATE_COLLECTION_OR_CREATOR",
514
+ "UPDATE_CONFIG",
515
+ "UPDATE_EXTERNAL_PRICE_ACCOUNT",
516
+ "UPDATE_FARM",
517
+ "UPDATE_FARM_ADMIN",
518
+ "UPDATE_FARM_CONFIG",
519
+ "UPDATE_FEE_PARAMETERS",
520
+ "UPDATE_FEES_AND_REWARDS",
521
+ "UPDATE_FLOOR",
522
+ "UPDATE_GLOBAL_CONFIG",
523
+ "UPDATE_GLOBAL_CONFIG_ADMIN",
524
+ "UPDATE_HADO_MARKET_FEE",
525
+ "UPDATE_INTEREST_PERPETUAL_MARKET",
526
+ "UPDATE_ITEM",
527
+ "UPDATE_LENDING_MARKET",
528
+ "UPDATE_LENDING_MARKET_OWNER",
529
+ "UPDATE_OFFER",
530
+ "UPDATE_ORDER",
531
+ "UPDATE_PERPETUAL_MARKET",
532
+ "UPDATE_PERPETUAL_OFFER",
533
+ "UPDATE_POOL",
534
+ "UPDATE_POOL_COLLECTIONS",
535
+ "UPDATE_POOL_MORTGAGE",
536
+ "UPDATE_POOL_STATUS",
537
+ "UPDATE_POOL_WHITELIST",
538
+ "UPDATE_POSITION_OPERATOR",
539
+ "UPDATE_PRICING_V2",
540
+ "UPDATE_PRIMARY_SALE_METADATA",
541
+ "UPDATE_RAFFLE",
542
+ "UPDATE_RECORD_AUTHORITY_DATA",
543
+ "UPDATE_RESERVE_CONFIG",
544
+ "UPDATE_REWARD_DURATION",
545
+ "UPDATE_REWARD_FUNDER",
546
+ "UPDATE_STAKE_HISTORY",
547
+ "UPDATE_STAKING_SETTINGS",
548
+ "UPDATE_STATS",
549
+ "UPDATE_TRAIT_VARIANT",
550
+ "UPDATE_TRAIT_VARIANT_AUTHORITY",
551
+ "UPDATE_TRAIT_VARIANT_METADATA",
552
+ "UPDATE_USABLE_AMOUNT",
553
+ "UPDATE_VARIANT",
554
+ "UPDATE_VAULT_OWNER",
555
+ "UPGRADE_FOX",
556
+ "UPGRADE_FOX_REQUEST",
557
+ "UPGRADE_PROGRAM_INSTRUCTION",
558
+ "UPLOAD_MERKLE_ROOT",
559
+ "USE_SPENDING_LIMIT",
560
+ "VALIDATE_SAFETY_DEPOSIT_BOX_V2",
561
+ "VERIFY_PAYMENT_MINT",
562
+ "VERIFY_PAYMENT_MINT_TEST",
563
+ "VOTE",
564
+ "WHITELIST_CREATOR",
565
+ "WITHDRAW",
566
+ "WITHDRAW_FROM_BOND_OFFER_STANDARD",
567
+ "WITHDRAW_FROM_FARM_VAULT",
568
+ "WITHDRAW_GEM",
569
+ "WITHDRAW_INELIGIBLE_REWARD",
570
+ "WITHDRAW_LIQUIDITY",
571
+ "WITHDRAW_OBLIGATION_COLLATERAL",
572
+ "WITHDRAW_OBLIGATION_COLLATERAL_AND_REDEEM_RESERVE_COLLATERAL",
573
+ "WITHDRAW_PROTOCOL_FEE",
574
+ "WITHDRAW_PROTOCOL_FEES",
575
+ "WITHDRAW_REFERRER_FEES",
576
+ "WITHDRAW_REWARD",
577
+ "WITHDRAW_REWARDS_FROM_VAULT",
578
+ "WITHDRAW_SLASHED_AMOUNT",
579
+ "WITHDRAW_SOL_FROM_FLASH_LOAN_POOL",
580
+ "WITHDRAW_TREASURY",
581
+ "WITHDRAW_UNSTAKED_DEPOSITS",
582
+ ]
583
+
584
+ WebhookType = Literal[
585
+ "enhanced",
586
+ "raw",
587
+ "discord",
588
+ "enhancedDevnet",
589
+ "rawDevnet",
590
+ "discordDevnet",
591
+ ]
592
+
593
+
594
+ class Webhook(BaseModel):
595
+ model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
596
+
597
+ webhook_id: str = Field(validation_alias=AliasChoices("webhookID", "webhookId"))
598
+ wallet: str
599
+ webhook_url: str = Field(validation_alias=AliasChoices("webhookURL", "webhookUrl"))
600
+ transaction_types: list[TransactionType]
601
+ account_addresses: list[str]
602
+ webhook_type: WebhookType
603
+ auth_header: str
604
+ active: bool
605
+
606
+
607
+ class WebhooksApiClient:
608
+ def __init__(
609
+ self,
610
+ *,
611
+ base_url: str = "https://mainnet.helius-rpc.com/v0/webhooks",
612
+ api_key: str | None = None,
613
+ headers: dict[str, str] | None = None,
614
+ proxy: str | None = None,
615
+ ) -> None:
616
+ base_url = base_url
617
+ api_key = (
618
+ api_key
619
+ or environ.get("HELIUS_API_KEY")
620
+ or dotenv_values().get("HELIUS_API_KEY")
621
+ or None
622
+ )
623
+ if not api_key:
624
+ raise ValueError("No API key provided.")
625
+ self._client = httpx.Client(
626
+ base_url=base_url, params={"api-key": api_key}, headers=headers, proxy=proxy
627
+ )
628
+
629
+ def __enter__(self):
630
+ return self
631
+
632
+ def __exit__(self, exc_type, exc_value, traceback):
633
+ self.close()
634
+
635
+ def __del__(self):
636
+ self.close()
637
+
638
+ def close(self) -> None:
639
+ self._client.close()
640
+
641
+ def _send(self, url: str, method: str, json: dict | None = None) -> dict:
642
+ kwargs: dict = {
643
+ "method": method,
644
+ "url": url,
645
+ }
646
+ if json is not None:
647
+ kwargs.update({"json": json})
648
+ response = self._client.request(**kwargs)
649
+ response.raise_for_status()
650
+ return response.json()
651
+
652
+ def _get(self, url: str) -> dict:
653
+ response = self._client.get(url)
654
+ response.raise_for_status()
655
+ return response.json()
656
+
657
+ def create_webhook(
658
+ self,
659
+ *,
660
+ webhook_url: str,
661
+ transaction_types: list[TransactionType],
662
+ account_addresses: list[str],
663
+ webhook_type: WebhookType,
664
+ auth_header: str,
665
+ encoding: str,
666
+ txn_status: str,
667
+ ) -> Webhook:
668
+ request = {
669
+ "webhookURL": webhook_url,
670
+ "transactionTypes": transaction_types,
671
+ "accountAddresses": account_addresses,
672
+ "webhookType": webhook_type,
673
+ "authHeader": auth_header,
674
+ "encoding": encoding,
675
+ "txnStatus": txn_status,
676
+ }
677
+ response = self._send("/", "POST", request)
678
+ webhook = Webhook.model_validate(response)
679
+ return webhook
680
+
681
+ def get_webhook(self, webhook_id: str) -> Webhook:
682
+ response = self._get(f"/{webhook_id}")
683
+ webhook = Webhook.model_validate(response)
684
+ return webhook
685
+
686
+ def get_all_webhooks(self) -> list[Webhook]:
687
+ response = self._get("/")
688
+ return [Webhook.model_validate(webhook) for webhook in response]
689
+
690
+ def update_webhook(
691
+ self,
692
+ webhook_id: str,
693
+ *,
694
+ webhook_url: str,
695
+ transaction_types: list[TransactionType],
696
+ account_addresses: list[str],
697
+ webhook_type: WebhookType,
698
+ auth_header: str,
699
+ encoding: str,
700
+ txn_status: str,
701
+ ) -> Webhook:
702
+ request = {
703
+ "webhookURL": webhook_url,
704
+ "transactionTypes": transaction_types,
705
+ "accountAddresses": account_addresses,
706
+ "webhookType": webhook_type,
707
+ "authHeader": auth_header,
708
+ "encoding": encoding,
709
+ "txnStatus": txn_status,
710
+ }
711
+ response = self._send(f"/{webhook_id}", "PUT", request)
712
+ webhook = Webhook.model_validate(response)
713
+ return webhook
714
+
715
+ def toggle_webhook(self, webhook_id: str, *, active: bool) -> Webhook:
716
+ response = self._send(f"/{webhook_id}", "PATCH", {"active": active})
717
+ webhook = Webhook.model_validate(response)
718
+ return webhook
719
+
720
+ def delete_webhook(self, webhook_id: str) -> dict:
721
+ response = self._send(f"/{webhook_id}", method="DELETE")
722
+ return response["message"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helius-python
3
- Version: 0.3.4
3
+ Version: 0.4.1
4
4
  Summary: Typed Python client for the Helius API
5
5
  Project-URL: Homepage, https://github.com/markosnarinian/helius-python
6
6
  Project-URL: Issues, https://github.com/markosnarinian/helius-python/issues
@@ -135,9 +135,10 @@ wraps it.
135
135
  - 🚧 **All Helius-specific RPC extensions** — enhanced transactions, DAS
136
136
  (Digital Asset Standard) methods, priority fee estimation, and the
137
137
  rest of the Helius-only RPC namespace. **(in progress)**
138
- - 🚧 **Every Helius REST endpoint** — Enhanced Transactions API,
139
- Webhooks API, Mint API, token metadata, address lookups, and beyond.
140
- **(in progress)**
138
+ - **Webhooks API** — create, fetch, update, enable/disable, and delete
139
+ Helius webhooks. **(supported today)**
140
+ - 🚧 **Remaining Helius REST endpoints** — Enhanced Transactions API,
141
+ Mint API, token metadata, address lookups, and beyond. **(in progress)**
141
142
  - 🚧 **Platform features** — streaming, websockets, and any new
142
143
  capability Helius adds to its API. The full WebSocket subscription
143
144
  surface (`accountSubscribe`, `transactionSubscribe`, `logsSubscribe`,
@@ -145,10 +146,10 @@ wraps it.
145
146
  platform features are **in progress**.
146
147
 
147
148
  **Current status:** the standard Solana JSON-RPC surface, the
148
- WebSocket subscription surface, and the Admin (account management)
149
- usage endpoint are implemented today. Support for Helius RPC
150
- extensions and the remaining REST endpoints is actively being worked
151
- on.
149
+ WebSocket subscription surface, the Webhooks API, and the Admin
150
+ (account management) usage endpoint are implemented today. Support for
151
+ Helius RPC extensions and the remaining REST endpoints is actively
152
+ being worked on.
152
153
 
153
154
  ## Goals
154
155
 
@@ -266,9 +267,9 @@ The method names map 1:1 to the Solana JSON-RPC spec, just converted to
266
267
  ## Status
267
268
 
268
269
  Actively expanding toward full coverage of the Helius API. See
269
- [`src/helius/solana_rpc.py`](src/helius/solana_rpc.py) for the current list of
270
- implemented methods; missing endpoints are tracked as issues and added
271
- continuously.
270
+ [`src/helius/solana_rpc/client.py`](src/helius/solana_rpc/client.py) for the
271
+ current Solana JSON-RPC implementation; supported surfaces are listed below,
272
+ and missing endpoints are tracked as issues and added continuously.
272
273
 
273
274
  | Solana JSON-RPC method | Python method | Helius docs |
274
275
  | ----------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
@@ -372,6 +373,44 @@ them; both yield a `(context, notification, subscription)` tuple where
372
373
  | `vote_subscribe()` | `vote_unsubscribe(...)` | `VoteNotification` | [reference](https://www.helius.dev/docs/api-reference/rpc/websocket/votesubscribe) |
373
374
  | `transaction_subscribe(...)` | `transaction_unsubscribe(...)` | `TransactionNotification` | [reference](https://www.helius.dev/docs/api-reference/rpc/websocket/slotunsubscribe) |
374
375
 
376
+ ## Webhooks API
377
+
378
+ `WebhooksApiClient` wraps the Helius Webhooks REST API. It can create,
379
+ fetch, list, update, enable/disable, and delete webhook subscriptions,
380
+ returning typed `Webhook` models where the endpoint returns a webhook.
381
+
382
+ ```python
383
+ from helius.webhooks.webhooks import WebhooksApiClient
384
+
385
+ with WebhooksApiClient(api_key="YOUR_HELIUS_API_KEY") as webhooks:
386
+ webhook = webhooks.create_webhook(
387
+ webhook_url="https://example.com/helius-webhook",
388
+ transaction_types=["TRANSFER"],
389
+ account_addresses=["So11111111111111111111111111111111111111112"],
390
+ webhook_type="enhanced",
391
+ auth_header="Bearer your-shared-secret",
392
+ encoding="jsonParsed",
393
+ txn_status="all",
394
+ )
395
+
396
+ webhooks.toggle_webhook(webhook.webhook_id, active=False)
397
+ ```
398
+
399
+ Like the other clients, it supports the context-manager protocol and a
400
+ manual `close()`. The constructor defaults to
401
+ `https://mainnet.helius-rpc.com/v0/webhooks` and reads `HELIUS_API_KEY`
402
+ from the environment or `.env` when `api_key` is omitted; optional
403
+ `headers` and `proxy` arguments are also accepted.
404
+
405
+ | REST operation | Python method | Helius docs |
406
+ | -------------- | -------------------------- | ------------------------------------------------------------------------------------------------- |
407
+ | Create webhook | `create_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/create-webhook) |
408
+ | Get webhook | `get_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/get-webhook) |
409
+ | List webhooks | `get_all_webhooks()` | [reference](https://www.helius.dev/docs/api-reference/webhooks/get-all-webhooks) |
410
+ | Update webhook | `update_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/update-webhook) |
411
+ | Toggle webhook | `toggle_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/toggle-webhook) |
412
+ | Delete webhook | `delete_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/delete-webhook) |
413
+
375
414
  ## Admin API
376
415
 
377
416
  `AccountManagementClient` wraps the Helius admin API. Today it exposes
@@ -392,6 +431,19 @@ client defaults to `https://admin-api.helius.xyz` and, like the others,
392
431
  supports the context-manager protocol, a manual `close()`, and reads
393
432
  `HELIUS_API_KEY` from the environment or `.env`.
394
433
 
434
+ ## AI
435
+ AI was used to assist in the development of this project, which was started beacause I needed a Helius client written in Python myself for another project. It has eliminated the need to perform repetitive tasks, such as writing functions that are similar to those written by hand before them. It has also been useful in drafting and updating the documentation (exclusively README.md at the time of writing), writing tests and examples.
436
+ That said, AI-generated code is reviewed in full, line-by-line by human(s) against the Helius API specifications.
437
+
438
+ To roughly describe my approach to using AI in this project, I generally write the code by hand, which makes it easy to structure the code well and maintain an intuitive understanding of how the code works. Then, when I got to the part where I had to implement 100+ similar Python functions, I turned to AI to write the massive part of the codebase, while I reviewed the result at the same time.
439
+
440
+ To sum up:
441
+ - I generally structure** and write a good part of what I'm programming by hand, including boilerplate.
442
+ - I find it best to prompt agents to implement very limited functionality within narrow scope, performing something closer to pair-programming.
443
+ - Even though at least half the LoC in this project are hand-typed, I find that AI is incredibly capable, can be enjoyable to use, but most importantly, using AI allows me to focus my time and energy on what matters.
444
+
445
+ By the way, this README section is completely brain-made and hand-typed.
446
+
395
447
  ## License
396
448
 
397
449
  [MIT](LICENSE)
@@ -0,0 +1,15 @@
1
+ helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ helius/admin/__init__.py,sha256=HboRJXZNzuDAc6r3kj2QZtEcu2U3EWJHv81dYDJGjaA,262
3
+ helius/admin/admin.py,sha256=dcmOgeu10Q43QZC8K-a25vp2JNAb4hs5gu3YWaovV4Y,2541
4
+ helius/laserstream/websockets.py,sha256=cndqxXO9_I4aSjAeSkz3Q3u80jrFR0JMfXw09vzbgvQ,12448
5
+ helius/solana_rpc/__init__.py,sha256=Mfhb6ibrCqAX6AchtL3ViBlpCi9RKP8uhT9e_S5_Wb0,1006
6
+ helius/solana_rpc/client.py,sha256=sKYNpOwCKaayM7WwqePyFegD2e0sq_4eYhk3Ty0iaI0,37505
7
+ helius/solana_rpc/models.py,sha256=_o9B9VBgNBkYGGeglEgWxkffwS1thym2KfAfPekm590,7682
8
+ helius/utils/__init__.py,sha256=szG5WTfKl1dfqsZb2efmeZr5zJBKlEBgNCWYGCo7VbU,87
9
+ helius/utils/json_rpc_request.py,sha256=hm7WkPo0CnwMnuHE4qR-d93wGArZRPRm-B3uueykL3E,1479
10
+ helius/webhooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ helius/webhooks/webhooks.py,sha256=IXCF7sDS6QpcY5r03WTmXNpOqoltii3pSHPita0f83o,19803
12
+ helius_python-0.4.1.dist-info/METADATA,sha256=39qONjOC8ghgnP5YyJngDLnNhi6g_6hl7tVfrQEAphs,38927
13
+ helius_python-0.4.1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
14
+ helius_python-0.4.1.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
15
+ helius_python-0.4.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.29.0
2
+ Generator: hatchling 1.30.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
helius/rpc/__init__.py DELETED
@@ -1,3 +0,0 @@
1
- from helius.rpc.json_rpc_request import JsonRpcRequest
2
-
3
- __all__ = ["JsonRpcRequest"]
@@ -1,13 +0,0 @@
1
- helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- helius/admin/__init__.py,sha256=HboRJXZNzuDAc6r3kj2QZtEcu2U3EWJHv81dYDJGjaA,262
3
- helius/admin/admin.py,sha256=dcmOgeu10Q43QZC8K-a25vp2JNAb4hs5gu3YWaovV4Y,2541
4
- helius/laserstream/websockets.py,sha256=MX_3stOzo6EyYJVSlE_zHFNesZkQIfAv2R1e5qdr9b0,12446
5
- helius/rpc/__init__.py,sha256=ciwM1KfBNyZwCeqOmlWTcSrUD03cbrzgeeEZsn9msi0,85
6
- helius/rpc/json_rpc_request.py,sha256=hm7WkPo0CnwMnuHE4qR-d93wGArZRPRm-B3uueykL3E,1479
7
- helius/solana_rpc/__init__.py,sha256=Mfhb6ibrCqAX6AchtL3ViBlpCi9RKP8uhT9e_S5_Wb0,1006
8
- helius/solana_rpc/client.py,sha256=dNB5rrOPF1O-wwxmDe3dfjLNSTxB_TT8RUNw-g0XRIQ,37503
9
- helius/solana_rpc/models.py,sha256=tQmuWi1frDxvQeBSG2ald6Ze2KsaUQQOry45L41MbnQ,7724
10
- helius_python-0.3.4.dist-info/METADATA,sha256=eeKtD-9kGMQiIGYa52T7T5IQZR3mP09C5O86GHXWOfM,34957
11
- helius_python-0.3.4.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
12
- helius_python-0.3.4.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
13
- helius_python-0.3.4.dist-info/RECORD,,
File without changes