helius-python 0.1.0__py3-none-any.whl → 0.2.0__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.
helius/models.py CHANGED
@@ -96,6 +96,16 @@ class InflationRate(BaseModel):
96
96
  epoch: int
97
97
 
98
98
 
99
+ class InflationReward(BaseModel):
100
+ model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
101
+
102
+ epoch: int
103
+ effective_slot: int
104
+ amount: int
105
+ post_balance: int
106
+ commission: int | None
107
+
108
+
99
109
  class PerformanceSample(BaseModel):
100
110
  model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
101
111
 
@@ -14,6 +14,7 @@ from helius.models import (
14
14
  EpochSchedule,
15
15
  InflationGovernor,
16
16
  InflationRate,
17
+ InflationReward,
17
18
  LamportAccount,
18
19
  PerformanceSample,
19
20
  SignatureStatus,
@@ -27,9 +28,7 @@ from helius.models import (
27
28
  )
28
29
 
29
30
 
30
- class HeliusClient:
31
- # TODO: handle helius errors that do not show by HTTP response code
32
- # TODO: check all http methods and all guides and implement pagination and other non-implemented features
31
+ class SolanaRpcClient:
33
32
  def __init__(
34
33
  self,
35
34
  *,
@@ -67,7 +66,8 @@ class HeliusClient:
67
66
  return response.json()
68
67
 
69
68
  def get_account_info(
70
- self, *,
69
+ self,
70
+ *,
71
71
  public_key: str,
72
72
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
73
73
  encoding: (
@@ -104,7 +104,8 @@ class HeliusClient:
104
104
  return context, account_info
105
105
 
106
106
  def get_balance(
107
- self, *,
107
+ self,
108
+ *,
108
109
  public_key: str,
109
110
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
110
111
  min_context_slot: int | None = None,
@@ -122,7 +123,8 @@ class HeliusClient:
122
123
  return context, value
123
124
 
124
125
  def get_block(
125
- self, *,
126
+ self,
127
+ *,
126
128
  slot: int,
127
129
  commitment: Literal["finalized", "confirmed"] | None = None,
128
130
  encoding: Literal["jsonParsed", "base58", "base64", "base64+std"] | None = None,
@@ -147,7 +149,8 @@ class HeliusClient:
147
149
  return block
148
150
 
149
151
  def get_block_commitment(
150
- self, *,
152
+ self,
153
+ *,
151
154
  slot: int,
152
155
  ) -> BlockCommitment:
153
156
  request = RpcRequest(method="getBlockCommitment").add(slot).build()
@@ -156,7 +159,8 @@ class HeliusClient:
156
159
  return block_commitment
157
160
 
158
161
  def get_block_height(
159
- self, *,
162
+ self,
163
+ *,
160
164
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
161
165
  min_context_slot: int | None = None,
162
166
  ) -> int:
@@ -170,7 +174,8 @@ class HeliusClient:
170
174
  return response["result"]
171
175
 
172
176
  def get_block_production(
173
- self, *,
177
+ self,
178
+ *,
174
179
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
175
180
  first_slot: int | None = None,
176
181
  last_slot: int | None = None,
@@ -205,7 +210,8 @@ class HeliusClient:
205
210
  return context, value
206
211
 
207
212
  def get_blocks(
208
- self, *,
213
+ self,
214
+ *,
209
215
  start_slot: int,
210
216
  end_slot: int | None,
211
217
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
@@ -225,7 +231,8 @@ class HeliusClient:
225
231
  return response["result"]
226
232
 
227
233
  def get_blocks_with_limit(
228
- self, *,
234
+ self,
235
+ *,
229
236
  start_slot: int,
230
237
  limit: int,
231
238
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
@@ -253,7 +260,8 @@ class HeliusClient:
253
260
  return cluster_nodes
254
261
 
255
262
  def get_epoch_info(
256
- self, *,
263
+ self,
264
+ *,
257
265
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
258
266
  min_context_slot: int | None = None,
259
267
  ) -> EpochInfo:
@@ -274,7 +282,8 @@ class HeliusClient:
274
282
  return epoch_schedule
275
283
 
276
284
  def get_fee_for_message(
277
- self, *,
285
+ self,
286
+ *,
278
287
  message: str,
279
288
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
280
289
  min_context_slot: int | None = None,
@@ -321,7 +330,8 @@ class HeliusClient:
321
330
  return identity
322
331
 
323
332
  def get_inflation_governor(
324
- self, *,
333
+ self,
334
+ *,
325
335
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
326
336
  ) -> InflationGovernor:
327
337
  request = (
@@ -339,10 +349,30 @@ class HeliusClient:
339
349
  inflation_rate = InflationRate.model_validate(response["result"])
340
350
  return inflation_rate
341
351
 
342
- # TODO: getInflationReward
352
+ def get_inflation_reward(
353
+ self,
354
+ *,
355
+ addresses: list[str],
356
+ commitment: Literal["finalized", "confirmed"] | None = None,
357
+ epoch: int | None = None,
358
+ min_context_slot: int | None = None,
359
+ ) -> list[InflationReward | None]:
360
+ request = (
361
+ RpcRequest(method="getInflationReward")
362
+ .add(addresses)
363
+ .set("commitment", commitment)
364
+ .set("epoch", epoch)
365
+ .set("minContextSlot", min_context_slot)
366
+ .build()
367
+ )
368
+ response = self._send(request)
369
+ result = response["result"]
370
+ ta = TypeAdapter(list[InflationReward | None])
371
+ return ta.validate_python(result)
343
372
 
344
373
  def get_largest_accounts(
345
- self, *,
374
+ self,
375
+ *,
346
376
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
347
377
  filter: Literal["circulating", "nonCirculating"] | None = None,
348
378
  ) -> tuple[dict, list[LamportAccount]]:
@@ -360,7 +390,8 @@ class HeliusClient:
360
390
  return context, largest_accounts
361
391
 
362
392
  def get_latest_blockhash(
363
- self, *,
393
+ self,
394
+ *,
364
395
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
365
396
  min_context_slot: int | None = None,
366
397
  ) -> tuple[dict, str, int]:
@@ -378,7 +409,8 @@ class HeliusClient:
378
409
  return context, blockhash, last_valid_block_height
379
410
 
380
411
  def get_leader_schedule(
381
- self, *,
412
+ self,
413
+ *,
382
414
  slot: int | None = None,
383
415
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
384
416
  identity: str | None = None,
@@ -407,7 +439,8 @@ class HeliusClient:
407
439
  return result
408
440
 
409
441
  def get_minimum_balance_for_rent_exemption(
410
- self, *,
442
+ self,
443
+ *,
411
444
  data_length: int,
412
445
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
413
446
  ) -> int:
@@ -422,7 +455,8 @@ class HeliusClient:
422
455
  return result
423
456
 
424
457
  def get_multiple_accounts(
425
- self, *,
458
+ self,
459
+ *,
426
460
  pubkeys: list[str],
427
461
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
428
462
  encoding: (
@@ -466,7 +500,8 @@ class HeliusClient:
466
500
 
467
501
  @validate_call
468
502
  def get_program_accounts(
469
- self, *,
503
+ self,
504
+ *,
470
505
  program_id: str,
471
506
  commitment: Literal["confirmed", "finalized", "processed"] | None = None,
472
507
  min_context_slot: int | None = None,
@@ -507,7 +542,8 @@ class HeliusClient:
507
542
  return [(i["pubkey"], Account.model_validate(i["account"])) for i in result]
508
543
 
509
544
  def get_recent_performance_samples(
510
- self, *,
545
+ self,
546
+ *,
511
547
  limit: int | None = None,
512
548
  ) -> list[PerformanceSample]:
513
549
  request = RpcRequest(method="getRecentPerformanceSamples").add(limit).build()
@@ -516,7 +552,8 @@ class HeliusClient:
516
552
  return ta.validate_python(response["result"])
517
553
 
518
554
  def get_recent_prioritization_fees(
519
- self, *,
555
+ self,
556
+ *,
520
557
  locked_writable_accounts: list[str] | None = None,
521
558
  ) -> list[tuple[int, int]]:
522
559
  request = (
@@ -529,7 +566,8 @@ class HeliusClient:
529
566
 
530
567
  @validate_call
531
568
  def get_signatures_for_address(
532
- self, *,
569
+ self,
570
+ *,
533
571
  address: str,
534
572
  limit: Annotated[int, Field(ge=1, le=1000)] = 1000,
535
573
  before: str | None = None,
@@ -553,7 +591,8 @@ class HeliusClient:
553
591
  return transaction_signatures
554
592
 
555
593
  def get_signature_statuses(
556
- self, *,
594
+ self,
595
+ *,
557
596
  signatures: list[str],
558
597
  search_transaction_history: bool | None = None,
559
598
  ) -> tuple[dict, list[SignatureStatus | None]]:
@@ -572,7 +611,8 @@ class HeliusClient:
572
611
  return context, signature_statuses
573
612
 
574
613
  def get_slot(
575
- self, *,
614
+ self,
615
+ *,
576
616
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
577
617
  min_context_slot: int | None = None,
578
618
  ) -> int:
@@ -586,7 +626,8 @@ class HeliusClient:
586
626
  return response["result"]
587
627
 
588
628
  def get_slot_leader(
589
- self, *,
629
+ self,
630
+ *,
590
631
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
591
632
  min_context_slot: int | None = None,
592
633
  ) -> str:
@@ -601,7 +642,8 @@ class HeliusClient:
601
642
 
602
643
  @validate_call
603
644
  def get_slot_leaders(
604
- self, *,
645
+ self,
646
+ *,
605
647
  start_slot: int,
606
648
  limit: Annotated[int, Field(ge=1, le=5000)],
607
649
  ) -> list[str]:
@@ -610,7 +652,8 @@ class HeliusClient:
610
652
  return response["result"]
611
653
 
612
654
  def get_stake_minimum_delegation(
613
- self, *,
655
+ self,
656
+ *,
614
657
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
615
658
  ) -> tuple[dict, int]:
616
659
  request = (
@@ -624,7 +667,8 @@ class HeliusClient:
624
667
  return context, value
625
668
 
626
669
  def get_supply(
627
- self, *,
670
+ self,
671
+ *,
628
672
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
629
673
  exclude_non_circulating_accounts_list: bool | None = None,
630
674
  ) -> tuple[dict, Supply]:
@@ -645,7 +689,8 @@ class HeliusClient:
645
689
  # TODO: use getProgramAccountsV2 which supports pagination
646
690
 
647
691
  def get_token_account_balance(
648
- self, *,
692
+ self,
693
+ *,
649
694
  token_account: str,
650
695
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
651
696
  ) -> tuple[dict, TokenAccountBalance]:
@@ -661,7 +706,8 @@ class HeliusClient:
661
706
  return context, balance
662
707
 
663
708
  def get_token_accounts_by_delegate(
664
- self, *,
709
+ self,
710
+ *,
665
711
  delegate_pub_key: str,
666
712
  mint: str | None = None,
667
713
  program_id: str | None = None,
@@ -710,7 +756,8 @@ class HeliusClient:
710
756
  return context, token_accounts
711
757
 
712
758
  def get_token_accounts_by_owner(
713
- self, *,
759
+ self,
760
+ *,
714
761
  owner_pub_key: str,
715
762
  mint: str | None = None,
716
763
  program_id: str | None = None,
@@ -761,7 +808,8 @@ class HeliusClient:
761
808
  # TODO: use getTokenAccountsByOwnerV2 and do pagination
762
809
 
763
810
  def get_token_largest_accounts(
764
- self, *,
811
+ self,
812
+ *,
765
813
  mint: str,
766
814
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
767
815
  ) -> tuple[dict, list[TokenAccount]]:
@@ -778,7 +826,8 @@ class HeliusClient:
778
826
  return context, largest_accounts
779
827
 
780
828
  def get_token_supply(
781
- self, *,
829
+ self,
830
+ *,
782
831
  mint_address: str,
783
832
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
784
833
  ) -> tuple[dict, TokenSupply]:
@@ -794,7 +843,8 @@ class HeliusClient:
794
843
  return context, token_supply
795
844
 
796
845
  def get_transaction(
797
- self, *,
846
+ self,
847
+ *,
798
848
  transaction_signature: str,
799
849
  commitment: Literal["finalized", "confirmed"] | None = None,
800
850
  encoding: Literal["json", "jsonParsed", "base58", "base64"] | None = None,
@@ -813,7 +863,8 @@ class HeliusClient:
813
863
  return transaction
814
864
 
815
865
  def get_transaction_count(
816
- self, *,
866
+ self,
867
+ *,
817
868
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
818
869
  min_context_slot: int | None = None,
819
870
  ) -> int:
@@ -833,7 +884,8 @@ class HeliusClient:
833
884
  return result["solana-core"], result["feature-set"]
834
885
 
835
886
  def get_vote_accounts(
836
- self, *,
887
+ self,
888
+ *,
837
889
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
838
890
  vote_pubkey: str | None = None,
839
891
  keep_unstaked_delinquents: bool | None = None,
@@ -854,7 +906,8 @@ class HeliusClient:
854
906
  return current, delinquent
855
907
 
856
908
  def is_blockhash_valid(
857
- self, *,
909
+ self,
910
+ *,
858
911
  blockhash: str,
859
912
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
860
913
  min_context_slot: int | None = None,
@@ -871,8 +924,14 @@ class HeliusClient:
871
924
  value = response["result"]["value"]
872
925
  return context, value
873
926
 
927
+ def minimum_ledger_slot(self) -> int:
928
+ request = RpcRequest(method="minimumLedgerSlot").build()
929
+ response = self._send(request)
930
+ return response["result"]
931
+
874
932
  def request_airdrop(
875
- self, *,
933
+ self,
934
+ *,
876
935
  public_key: str,
877
936
  lamports: int,
878
937
  commitment: Literal["finalized", "confirmed", "processed"] | None = None,
@@ -890,8 +949,28 @@ class HeliusClient:
890
949
  response = self._send(request)
891
950
  return response["result"]
892
951
 
893
- def minimum_ledger_slot(self) -> int:
894
- request = RpcRequest(method="minimumLedgerSlot").build()
952
+ def send_transaction(
953
+ self,
954
+ *,
955
+ transaction: str,
956
+ encoding: Literal["base58", "base64"] | None = None,
957
+ skip_preflight: bool | None = None,
958
+ preflight_commitment: (
959
+ Literal["finalized", "confirmed", "processed"] | None
960
+ ) = None,
961
+ max_retries: int | None = None,
962
+ min_context_slot: int | None = None,
963
+ ) -> str:
964
+ request = (
965
+ RpcRequest(method="sendTransaction")
966
+ .add(transaction)
967
+ .set("encoding", encoding)
968
+ .set("skipPreflight", skip_preflight)
969
+ .set("preflightCommitment", preflight_commitment)
970
+ .set("maxRetries", max_retries)
971
+ .set("minContextSlot", min_context_slot)
972
+ .build()
973
+ )
895
974
  response = self._send(request)
896
975
  return response["result"]
897
976
 
@@ -0,0 +1,317 @@
1
+ Metadata-Version: 2.4
2
+ Name: helius-python
3
+ Version: 0.2.0
4
+ Summary: Typed Python client for the Helius API
5
+ Project-URL: Homepage, https://github.com/markosnarinian/helius-python
6
+ Project-URL: Issues, https://github.com/markosnarinian/helius-python/issues
7
+ Author-email: Markos Narinian <manarinian@gmail.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Programming Language :: Python :: 3
12
+ Requires-Python: >=3.10
13
+ Requires-Dist: httpx
14
+ Requires-Dist: pydantic
15
+ Requires-Dist: python-dotenv
16
+ Provides-Extra: dev
17
+ Requires-Dist: pytest; extra == 'dev'
18
+ Requires-Dist: respx; extra == 'dev'
19
+ Description-Content-Type: text/markdown
20
+
21
+ # helius-python
22
+
23
+ <p align="center">
24
+ <img width="562" height="118" alt="Helius-Horizontal-Logo" src="https://github.com/user-attachments/assets/d87ffd10-b168-4830-bbad-d2fef67368a5" /><svg width="562" height="118" viewBox="0 0 562 118" fill="none" xmlns="http://www.w3.org/2000/svg">
25
+ <g clip-path="url(#clip0_7532_34078)">
26
+ <path d="M74.6261 24.7253C69.9876 22.7665 64.8892 21.6871 59.531 21.6871C54.1727 21.6871 49.0743 22.7665 44.4358 24.7253L58.3013 0.709587C58.8412 -0.229856 60.2007 -0.229856 60.7406 0.709587L74.6161 24.7253H74.6261Z" fill="url(#paint0_linear_7532_34078)"/>
27
+ <path d="M40.7468 26.5242C31.6098 31.5812 24.742 40.2161 22.0128 50.54L11.7061 24.2856C11.3063 23.2762 12.156 22.2168 13.2257 22.3767L40.7468 26.5242Z" fill="url(#paint1_linear_7532_34078)"/>
28
+ <path d="M28.9906 84.4099L0.999611 75.7751C-0.0400563 75.4552 -0.33996 74.126 0.449787 73.3965L21.2431 54.1079C20.9032 56.1767 20.7233 58.3054 20.7233 60.4741C20.7233 69.5088 23.8123 77.8238 28.9906 84.4099Z" fill="url(#paint2_linear_7532_34078)"/>
29
+ <path d="M58.951 99.2611L34.4089 115.981C33.5091 116.591 32.2895 116.011 32.2096 114.922L30.0203 85.6492C37.018 93.8443 47.3747 99.0812 58.951 99.2511V99.2611Z" fill="url(#paint3_linear_7532_34078)"/>
30
+ <path d="M88.9513 85.7692L86.772 114.892C86.692 115.971 85.4724 116.561 84.5727 115.951L60.0806 99.2612C71.6269 99.1013 81.9536 93.9043 88.9513 85.7692Z" fill="url(#paint4_linear_7532_34078)"/>
31
+ <path d="M118.042 75.6851L90.1711 84.28C95.2895 77.7139 98.3385 69.4488 98.3385 60.4741C98.3385 58.2754 98.1486 56.1167 97.7987 54.0179L118.582 73.2965C119.382 74.0361 119.072 75.3653 118.042 75.6751V75.6851Z" fill="url(#paint5_linear_7532_34078)"/>
32
+ <path d="M107.355 24.3356L97.0588 50.5801C94.3396 40.2662 87.4918 31.6413 78.3848 26.5643L105.836 22.4268C106.906 22.2668 107.755 23.3262 107.355 24.3356Z" fill="url(#paint6_linear_7532_34078)"/>
33
+ <path d="M59.5307 107.636C53.8026 107.636 49.1641 112.273 49.1641 118H69.9074C69.9074 112.273 65.2689 107.636 59.5407 107.636H59.5307Z" fill="url(#paint7_linear_7532_34078)"/>
34
+ <path d="M97.4388 90.6563C93.8699 95.1336 94.5997 101.66 99.0782 105.228L112.004 89.0172C107.526 85.4494 100.998 86.1789 97.4288 90.6563H97.4388Z" fill="url(#paint8_linear_7532_34078)"/>
35
+ <path d="M105.936 50.57C107.206 56.1567 112.774 59.6446 118.352 58.3653L113.733 38.1473C108.145 39.4166 104.656 44.9833 105.936 50.56V50.57Z" fill="url(#paint9_linear_7532_34078)"/>
36
+ <path d="M80.4942 18.8588C85.6525 21.3473 91.8505 19.1786 94.3397 14.0116L75.6557 5.01697C73.1665 10.1739 75.3358 16.3702 80.5042 18.8588H80.4942Z" fill="url(#paint10_linear_7532_34078)"/>
37
+ <path d="M38.0978 18.8588C43.2561 16.3702 45.4254 10.1739 42.9362 5.01697L24.2522 14.0116C26.7414 19.1686 32.9394 21.3373 38.0978 18.8488V18.8588Z" fill="url(#paint11_linear_7532_34078)"/>
38
+ <path d="M13.3958 50.57C14.6654 44.9833 11.1765 39.4266 5.58826 38.1573L0.979736 58.3754C6.56795 59.6446 12.1262 56.1567 13.3958 50.57Z" fill="url(#paint12_linear_7532_34078)"/>
39
+ <path d="M8.49731 89.0172L21.4332 105.228C25.9117 101.66 26.6415 95.1336 23.0726 90.6563C19.5038 86.1789 12.9759 85.4494 8.49731 89.0172Z" fill="url(#paint13_linear_7532_34078)"/>
40
+ <path d="M177.773 30.1321V59.8145H212.612V31.8511H228.487V98.4116H212.612V73.9661H177.773V98.4116H161.898V34.4195L177.773 30.1321Z" fill="#E84125"/>
41
+ <path d="M257.227 84.25H305.792L301.503 98.4016H241.363V31.8411H305.802L301.513 45.9927H257.237V58.0855H298.504V72.2371H257.237V84.25H257.227Z" fill="#E84125"/>
42
+ <path d="M331.274 31.8411V84.25H378.119L373.83 98.4016H315.399V31.8411H331.274Z" fill="#E84125"/>
43
+ <path d="M400.861 31.8411V98.4016H384.987V31.8411H400.861Z" fill="#E84125"/>
44
+ <path d="M467.44 31.8411H483.315V71.9872C483.315 91.3757 467.44 99.8607 446.937 99.8607C426.433 99.8607 411.668 90.7661 411.668 71.9872V34.4195L427.543 30.1321V71.9872C427.543 81.7614 434.061 85.4593 447.706 85.4593C461.352 85.4593 467.44 81.5116 467.44 71.9872V31.8411Z" fill="#E84125"/>
45
+ <path d="M491.382 52.0891C491.382 41.8851 499.45 31.8411 515.235 31.8411H560.54L556.252 45.9927H515.405C510.516 45.9927 508.107 49.0808 508.107 52.0791C508.107 55.0773 510.596 58.0855 515.405 58.0855H538.397C553.922 58.0855 561.99 68.1195 561.99 78.3335C561.99 88.5474 554.352 98.4016 538.397 98.4016H491.382L495.671 84.25H538.227C543.036 84.25 545.525 81.4217 545.525 78.3335C545.525 75.2453 543.126 72.1571 538.227 72.1571H515.235C499.19 72.1571 491.382 62.1231 491.382 52.0891Z" fill="#E84125"/>
46
+ </g>
47
+ <defs>
48
+ <linearGradient id="paint0_linear_7532_34078" x1="41.8666" y1="12.3627" x2="74.6261" y2="12.3627" gradientUnits="userSpaceOnUse">
49
+ <stop stop-color="#E35930"/>
50
+ <stop offset="1" stop-color="#E84125"/>
51
+ </linearGradient>
52
+ <linearGradient id="paint1_linear_7532_34078" x1="9.61681" y1="36.4484" x2="40.7468" y2="36.4484" gradientUnits="userSpaceOnUse">
53
+ <stop stop-color="#E35930"/>
54
+ <stop offset="1" stop-color="#E84125"/>
55
+ </linearGradient>
56
+ <linearGradient id="paint2_linear_7532_34078" x1="-0.919775" y1="69.2589" x2="28.9906" y2="69.2589" gradientUnits="userSpaceOnUse">
57
+ <stop stop-color="#E35930"/>
58
+ <stop offset="1" stop-color="#E84125"/>
59
+ </linearGradient>
60
+ <linearGradient id="paint3_linear_7532_34078" x1="29.4704" y1="100.94" x2="58.951" y2="100.94" gradientUnits="userSpaceOnUse">
61
+ <stop stop-color="#E35930"/>
62
+ <stop offset="1" stop-color="#E84125"/>
63
+ </linearGradient>
64
+ <linearGradient id="paint4_linear_7532_34078" x1="59.0809" y1="100.98" x2="88.9513" y2="100.98" gradientUnits="userSpaceOnUse">
65
+ <stop stop-color="#E35930"/>
66
+ <stop offset="1" stop-color="#E84125"/>
67
+ </linearGradient>
68
+ <linearGradient id="paint5_linear_7532_34078" x1="88.3417" y1="69.149" x2="119.032" y2="69.149" gradientUnits="userSpaceOnUse">
69
+ <stop stop-color="#E35930"/>
70
+ <stop offset="1" stop-color="#E84125"/>
71
+ </linearGradient>
72
+ <linearGradient id="paint6_linear_7532_34078" x1="75.9256" y1="36.4884" x2="107.455" y2="36.4884" gradientUnits="userSpaceOnUse">
73
+ <stop stop-color="#E35930"/>
74
+ <stop offset="1" stop-color="#E84125"/>
75
+ </linearGradient>
76
+ <linearGradient id="paint7_linear_7532_34078" x1="64.1037" y1="108.682" x2="56.3294" y2="122.151" gradientUnits="userSpaceOnUse">
77
+ <stop stop-color="#E35930"/>
78
+ <stop offset="1" stop-color="#E84125"/>
79
+ </linearGradient>
80
+ <linearGradient id="paint8_linear_7532_34078" x1="101.127" y1="87.5512" x2="106.808" y2="102.028" gradientUnits="userSpaceOnUse">
81
+ <stop stop-color="#E35930"/>
82
+ <stop offset="1" stop-color="#E84125"/>
83
+ </linearGradient>
84
+ <linearGradient id="paint9_linear_7532_34078" x1="105.915" y1="45.8351" x2="120.779" y2="50.4203" gradientUnits="userSpaceOnUse">
85
+ <stop stop-color="#E35930"/>
86
+ <stop offset="1" stop-color="#E84125"/>
87
+ </linearGradient>
88
+ <linearGradient id="paint10_linear_7532_34078" x1="76.8142" y1="15.9367" x2="89.6635" y2="7.17242" gradientUnits="userSpaceOnUse">
89
+ <stop stop-color="#E35930"/>
90
+ <stop offset="1" stop-color="#E84125"/>
91
+ </linearGradient>
92
+ <linearGradient id="paint11_linear_7532_34078" x1="33.7238" y1="19.9762" x2="34.884" y2="4.46876" gradientUnits="userSpaceOnUse">
93
+ <stop stop-color="#E35930"/>
94
+ <stop offset="1" stop-color="#E84125"/>
95
+ </linearGradient>
96
+ <linearGradient id="paint12_linear_7532_34078" x1="11.6598" y1="54.776" x2="0.258708" y2="44.1971" gradientUnits="userSpaceOnUse">
97
+ <stop stop-color="#E35930"/>
98
+ <stop offset="1" stop-color="#E84125"/>
99
+ </linearGradient>
100
+ <linearGradient id="paint13_linear_7532_34078" x1="25.3906" y1="94.7132" x2="10.0098" y2="97.0344" gradientUnits="userSpaceOnUse">
101
+ <stop stop-color="#E35930"/>
102
+ <stop offset="1" stop-color="#E84125"/>
103
+ </linearGradient>
104
+ <clipPath id="clip0_7532_34078">
105
+ <rect width="562" height="118" fill="white"/>
106
+ </clipPath>
107
+ </defs>
108
+ </svg>
109
+ </p>
110
+
111
+ <p align="center">
112
+ <a href="https://pypi.org/project/helius-python/"><img src="https://img.shields.io/pypi/v/helius-python.svg" alt="PyPI version"></a>
113
+ <a href="https://pypi.org/project/helius-python/"><img src="https://img.shields.io/pypi/pyversions/helius-python.svg" alt="Python versions"></a>
114
+ <a href="https://github.com/markosnarinian/helius-python/blob/main/LICENSE"><img src="https://img.shields.io/github/license/markosnarinian/helius-python.svg" alt="License"></a>
115
+ <a href="https://github.com/markosnarinian/helius-python/actions/workflows/python-package.yml"><img src="https://github.com/markosnarinian/helius-python/actions/workflows/python-package.yml/badge.svg" alt="CI"></a>
116
+ <a href="https://pypistats.org/packages/helius-python"><img src="https://img.shields.io/pypi/dm/helius-python.svg" alt="Downloads"></a>
117
+ <a href="https://github.com/markosnarinian/helius-python/commits/main"><img src="https://img.shields.io/github/last-commit/markosnarinian/helius-python.svg" alt="Last commit"></a>
118
+ </p>
119
+
120
+ **A complete, typed Python client for [Helius](https://helius.dev) — the Solana developer platform.**
121
+
122
+ ## Coverage
123
+
124
+ The goal of this library is **support every function, method, endpoint,
125
+ and feature that Helius exposes.** If Helius ships it, this client
126
+ wraps it.
127
+
128
+ - ✅ **The full Solana JSON-RPC surface** proxied by Helius —
129
+ `getAccountInfo`, `getBalance`, `getBlock`, `getTransaction`,
130
+ `getProgramAccounts`, `getTokenAccountsByOwner`,
131
+ `getSignaturesForAddress`, and every other standard RPC method.
132
+ **(supported today)**
133
+ - 🚧 **All Helius-specific RPC extensions** — enhanced transactions, DAS
134
+ (Digital Asset Standard) methods, priority fee estimation, and the
135
+ rest of the Helius-only RPC namespace. **(in progress)**
136
+ - 🚧 **Every Helius REST endpoint** — Enhanced Transactions API,
137
+ Webhooks API, Mint API, token metadata, address lookups, and beyond.
138
+ **(in progress)**
139
+ - 🚧 **Platform features** — streaming, websockets, and any new
140
+ capability Helius adds to its API. **(in progress)**
141
+
142
+ > **Current status:** only the standard Solana JSON-RPC surface is
143
+ > implemented today. Support for Helius RPC extensions, REST endpoints,
144
+ > and platform features is actively being worked on.
145
+
146
+ ## Goals
147
+
148
+ 1. **Completeness** — 1:1 coverage of the entire Helius API surface.
149
+ 2. **Type safety** — fully typed responses.
150
+ 3. **Pythonic ergonomics** — `get_account_info(...)` instead of
151
+ `getAccountInfo(...)`, context managers.
152
+ 4. **Zero magic** — thin, predictable wrappers that map directly to the
153
+ documented Helius API.
154
+
155
+ ## Authentication
156
+
157
+ Pass your Helius API key explicitly:
158
+
159
+ ```python
160
+ from helius.solana_rpc import SolanaRpcClient
161
+
162
+ client = SolanaRpcClient(api_key="YOUR_HELIUS_API_KEY")
163
+ ```
164
+
165
+ or set `HELIUS_API_KEY` as an environment variable:
166
+
167
+ ```bash
168
+ export HELIUS_API_KEY=your_helius_api_key
169
+ ```
170
+
171
+ You can also set it in a `.env` file at the project root and let the
172
+ client pick it up automatically:
173
+
174
+ ```env
175
+ HELIUS_API_KEY=your_helius_api_key
176
+ ```
177
+
178
+ ```python
179
+ from helius.solana_rpc import SolanaRpcClient
180
+
181
+ client = SolanaRpcClient() # reads HELIUS_API_KEY from the environment or .env
182
+ ```
183
+
184
+ ## Usage
185
+
186
+ ### As a context manager (recommended)
187
+
188
+ ```python
189
+ from helius.solana_rpc import SolanaRpcClient
190
+
191
+ with SolanaRpcClient(api_key="YOUR_HELIUS_API_KEY") as client:
192
+ _ctx, balance = client.get_balance("So11111111111111111111111111111111111111112")
193
+ _ctx, supply = client.get_supply()
194
+ nodes = client.get_cluster_nodes()
195
+ block = client.get_block(slot=250_000_000)
196
+ tx = client.get_transaction("5j7s...signature...")
197
+ ```
198
+
199
+ `SolanaRpcClient` implements the context-manager protocol via `__enter__` /
200
+ `__exit__`, so the underlying `httpx.Client` is closed cleanly when the
201
+ `with` block exits.
202
+
203
+ ### With an explicit `close()` call
204
+
205
+ If a `with` block doesn't fit your code structure (e.g. the client lives
206
+ on a long-lived object), call `close()` yourself when you're done:
207
+
208
+ ```python
209
+ from helius.solana_rpc import SolanaRpcClient
210
+
211
+ client = SolanaRpcClient(api_key="YOUR_HELIUS_API_KEY")
212
+ try:
213
+ _ctx, balance = client.get_balance("So11111111111111111111111111111111111111112")
214
+ _ctx, supply = client.get_supply()
215
+ finally:
216
+ client.close()
217
+ ```
218
+
219
+ Client classes also implement `__del__` as a safety net — if you forget
220
+ to `close()` or use `with`, the underlying HTTP client is still closed
221
+ when the instance is garbage-collected. Prefer `with` or `close()`
222
+ regardless.
223
+
224
+ > 🚧 **Exception & error handling is a work in progress.** Today,
225
+ > transport errors surface as raw `httpx` exceptions and Helius/Solana
226
+ > RPC errors are not yet wrapped in typed exception classes. A
227
+ > consistent error hierarchy is being worked on.
228
+
229
+ ### Defaults
230
+
231
+ | Argument | Default | Notes |
232
+ | ---------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------ |
233
+ | `base_url` | `"https://mainnet.helius-rpc.com"` | Override to point at devnet, staging, or a custom Helius endpoint. |
234
+ | `api_key` | `None` → falls back to `HELIUS_API_KEY` from the environment, then `.env` | If none is provided, the constructor raises `ValueError`. |
235
+
236
+ Per-method RPC parameters (`commitment`, `encoding`, `min_context_slot`,
237
+ etc.) are left unset by default — the Helius/Solana server defaults
238
+ apply unless you pass them explicitly.
239
+
240
+ ### Reference
241
+
242
+ For parameters, semantics, and return shapes, see the official Helius docs:
243
+ [RPC guide](https://www.helius.dev/docs/rpc) and
244
+ [API reference](https://www.helius.dev/docs/api-reference).
245
+
246
+ If you hit a bug, a missing parameter, or surprising behavior, please
247
+ [open an issue](https://github.com/markosnarinian/helius-python/issues).
248
+
249
+ ### Supported methods
250
+
251
+ The method names map 1:1 to the Solana JSON-RPC spec, just converted to
252
+ `snake_case`. If you know the RPC method name, you know the Python function.
253
+
254
+ ## Status
255
+
256
+ Actively expanding toward full coverage of the Helius API. See
257
+ [`src/helius/solana_rpc.py`](src/helius/solana_rpc.py) for the current list of
258
+ implemented methods; missing endpoints are tracked as issues and added
259
+ continuously.
260
+
261
+ | Solana JSON-RPC method | Python method | Helius docs |
262
+ | ----------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
263
+ | `getAccountInfo` | `get_account_info(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getaccountinfo), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getaccountinfo) |
264
+ | `getBalance` | `get_balance(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getbalance), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getbalance) |
265
+ | `getBlock` | `get_block(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblock), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblock) |
266
+ | `getBlockCommitment` | `get_block_commitment(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockcommitment), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) |
267
+ | `getBlockHeight` | `get_block_height(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockheight), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblockheight) |
268
+ | `getBlockProduction` | `get_block_production(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockproduction), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) |
269
+ | `getBlocks` | `get_blocks(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblocks), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblocks) |
270
+ | `getBlocksWithLimit` | `get_blocks_with_limit(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockswithlimit), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblockswithlimit) |
271
+ | `getBlockTime` | `get_block_time(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblocktime), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getblocktime) |
272
+ | `getClusterNodes` | `get_cluster_nodes()` | [guide](https://www.helius.dev/docs/rpc/guides/getclusternodes), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getclusternodes) |
273
+ | `getEpochInfo` | `get_epoch_info(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getepochinfo), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getepochinfo) |
274
+ | `getEpochSchedule` | `get_epoch_schedule()` | [guide](https://www.helius.dev/docs/rpc/guides/getepochschedule), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getepochschedule) |
275
+ | `getFeeForMessage` | `get_fee_for_message(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getfeeformessage), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getfeeformessage) |
276
+ | `getFirstAvailableBlock` | `get_first_available_block()` | [guide](https://www.helius.dev/docs/rpc/guides/getfirstavailableblock), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getfirstavailableblock) |
277
+ | `getGenesisHash` | `get_genesis_hash()` | [guide](https://www.helius.dev/docs/rpc/guides/getgenesishash), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getgenesishash) |
278
+ | `getHealth` | `get_health()` | [guide](https://www.helius.dev/docs/rpc/guides/gethealth), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gethealth) |
279
+ | `getHighestSnapshotSlot` | `get_highest_snapshot_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/gethighestsnapshotslot), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gethighestsnapshotslot) |
280
+ | `getIdentity` | `get_identity()` | [guide](https://www.helius.dev/docs/rpc/guides/getidentity), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getidentity) |
281
+ | `getInflationGovernor` | `get_inflation_governor(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getinflationgovernor), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getinflationgovernor) |
282
+ | `getInflationRate` | `get_inflation_rate()` | [guide](https://www.helius.dev/docs/rpc/guides/getinflationrate), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getinflationrate) |
283
+ | `getInflationReward` | `get_inflation_reward(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getinflationreward), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getinflationreward) |
284
+ | `getLargestAccounts` | `get_largest_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getlargestaccounts), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getlargestaccounts) |
285
+ | `getLatestBlockhash` | `get_latest_blockhash(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getlatestblockhash), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getlatestblockhash) |
286
+ | `getLeaderSchedule` | `client.get_leader_schedule(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getleaderschedule), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) |
287
+ | `getMaxRetransmitSlot` | `client.get_max_retransmit_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/getmaxretransmitslot), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getmaxretransmitslot) |
288
+ | `getMaxShredInsertSlot` | `get_max_shred_insert_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/getmaxshredinsertslot), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getmaxshredinsertslot) |
289
+ | `getMinimumBalanceForRentExemption` | `get_minimum_balance_for_rent_exemption(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getminimumbalanceforrentexemption), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getminimumbalanceforrentexemption) |
290
+ | `getMultipleAccounts` | `get_multiple_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getmultipleaccounts), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getmultipleaccounts) |
291
+ | `getProgramAccounts` | `get_program_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getprogramaccounts), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getprogramaccounts) |
292
+ | `getRecentPerformanceSamples` | `get_recent_performance_samples(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getrecentperformancesamples), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getrecentperformancesamples) |
293
+ | `getRecentPrioritizationFees` | `get_recent_prioritization_fees(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getrecentprioritizationfees), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getrecentprioritizationfees) |
294
+ | `getSignaturesForAddress` | `get_signatures_for_address(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsignaturesforaddress), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturesforaddress) |
295
+ | `getSignatureStatuses` | `get_signature_statuses(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsignaturestatuses), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturestatuses) |
296
+ | `getSlot` | `get_slot(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslot), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getslot) |
297
+ | `getSlotLeader` | `get_slot_leader(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslotleader), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getslotleader) |
298
+ | `getSlotLeaders` | `get_slot_leaders(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslotleaders), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getslotleaders) |
299
+ | `getStakeMinimumDelegation` | `get_stake_minimum_delegation(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getstakeminimumdelegation), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getstakeminimumdelegation) |
300
+ | `getSupply` | `get_supply(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsupply), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getsupply) |
301
+ | `getTokenAccountBalance` | `get_token_account_balance(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountbalance), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountbalance) |
302
+ | `getTokenAccountsByDelegate` | `get_token_accounts_by_delegate(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountsbydelegate), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountsbydelegate) |
303
+ | `getTokenAccountsByOwner` | `get_token_accounts_by_owner(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountsbyowner), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountsbyowner) |
304
+ | `getTokenLargestAccounts` | `get_token_largest_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenlargestaccounts), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettokenlargestaccounts) |
305
+ | `getTokenSupply` | `get_token_supply(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokensupply), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettokensupply) |
306
+ | `getTransaction` | `get_transaction(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettransaction), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettransaction) |
307
+ | `getTransactionCount` | `get_transaction_count(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettransactioncount), [reference](https://www.helius.dev/docs/api-reference/rpc/http/gettransactioncount) |
308
+ | `getVersion` | `get_version()` | [guide](https://www.helius.dev/docs/rpc/guides/getversion), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getversion) |
309
+ | `getVoteAccounts` | `get_vote_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getvoteaccounts), [reference](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) |
310
+ | `isBlockhashValid` | `is_blockhash_valid(...)` | [guide](https://www.helius.dev/docs/rpc/guides/isblockhashvalid), [reference](https://www.helius.dev/docs/api-reference/rpc/http/isblockhashvalid) |
311
+ | `minimumLedgerSlot` | `minimum_ledger_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/minimumledgerslot), [reference](https://www.helius.dev/docs/api-reference/rpc/http/minimumledgerslot) |
312
+ | `requestAirdrop` | `request_airdrop(...)` | [guide](https://www.helius.dev/docs/rpc/guides/requestairdrop), [reference](https://www.helius.dev/docs/api-reference/rpc/http/requestairdrop) |
313
+ | `sendTransaction` | `send_transaction(...)` | [guide](https://www.helius.dev/docs/rpc/guides/sendtransaction), [reference](https://www.helius.dev/docs/api-reference/rpc/http/sendtransaction) |
314
+
315
+ ## License
316
+
317
+ [MIT](LICENSE)
@@ -0,0 +1,7 @@
1
+ helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ helius/models.py,sha256=O_T8WQB_C4AFXCs6CU2ges5CUxoOPahUkf9Z6S_AEnQ,5312
3
+ helius/solana_rpc.py,sha256=yzxQqsx7UIJ295m366Oh6ZDdUwhXsrkJ99emAEEE9JM,34952
4
+ helius_python-0.2.0.dist-info/METADATA,sha256=wxBqRq8eDo6a6DGYr3daRBgCB7dul4dfoVUS4YwoP_8,28985
5
+ helius_python-0.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
6
+ helius_python-0.2.0.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
7
+ helius_python-0.2.0.dist-info/RECORD,,
@@ -1,363 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: helius-python
3
- Version: 0.1.0
4
- Summary: Typed Python client for the Helius API
5
- Project-URL: Homepage, https://github.com/markosnarinian/helius-python
6
- Project-URL: Issues, https://github.com/markosnarinian/helius-python/issues
7
- Author-email: Markos Narinian <manarinian@gmail.com>
8
- License-Expression: MIT
9
- License-File: LICENSE
10
- Classifier: Operating System :: OS Independent
11
- Classifier: Programming Language :: Python :: 3
12
- Requires-Python: >=3.10
13
- Requires-Dist: httpx
14
- Requires-Dist: pydantic
15
- Requires-Dist: python-dotenv
16
- Provides-Extra: dev
17
- Requires-Dist: pytest; extra == 'dev'
18
- Requires-Dist: respx; extra == 'dev'
19
- Description-Content-Type: text/markdown
20
-
21
- # helius-python
22
-
23
- <p align="center">
24
- <img width="562" height="118" alt="Helius-Horizontal-Logo" src="https://github.com/user-attachments/assets/d87ffd10-b168-4830-bbad-d2fef67368a5" /><svg width="562" height="118" viewBox="0 0 562 118" fill="none" xmlns="http://www.w3.org/2000/svg">
25
- <g clip-path="url(#clip0_7532_34078)">
26
- <path d="M74.6261 24.7253C69.9876 22.7665 64.8892 21.6871 59.531 21.6871C54.1727 21.6871 49.0743 22.7665 44.4358 24.7253L58.3013 0.709587C58.8412 -0.229856 60.2007 -0.229856 60.7406 0.709587L74.6161 24.7253H74.6261Z" fill="url(#paint0_linear_7532_34078)"/>
27
- <path d="M40.7468 26.5242C31.6098 31.5812 24.742 40.2161 22.0128 50.54L11.7061 24.2856C11.3063 23.2762 12.156 22.2168 13.2257 22.3767L40.7468 26.5242Z" fill="url(#paint1_linear_7532_34078)"/>
28
- <path d="M28.9906 84.4099L0.999611 75.7751C-0.0400563 75.4552 -0.33996 74.126 0.449787 73.3965L21.2431 54.1079C20.9032 56.1767 20.7233 58.3054 20.7233 60.4741C20.7233 69.5088 23.8123 77.8238 28.9906 84.4099Z" fill="url(#paint2_linear_7532_34078)"/>
29
- <path d="M58.951 99.2611L34.4089 115.981C33.5091 116.591 32.2895 116.011 32.2096 114.922L30.0203 85.6492C37.018 93.8443 47.3747 99.0812 58.951 99.2511V99.2611Z" fill="url(#paint3_linear_7532_34078)"/>
30
- <path d="M88.9513 85.7692L86.772 114.892C86.692 115.971 85.4724 116.561 84.5727 115.951L60.0806 99.2612C71.6269 99.1013 81.9536 93.9043 88.9513 85.7692Z" fill="url(#paint4_linear_7532_34078)"/>
31
- <path d="M118.042 75.6851L90.1711 84.28C95.2895 77.7139 98.3385 69.4488 98.3385 60.4741C98.3385 58.2754 98.1486 56.1167 97.7987 54.0179L118.582 73.2965C119.382 74.0361 119.072 75.3653 118.042 75.6751V75.6851Z" fill="url(#paint5_linear_7532_34078)"/>
32
- <path d="M107.355 24.3356L97.0588 50.5801C94.3396 40.2662 87.4918 31.6413 78.3848 26.5643L105.836 22.4268C106.906 22.2668 107.755 23.3262 107.355 24.3356Z" fill="url(#paint6_linear_7532_34078)"/>
33
- <path d="M59.5307 107.636C53.8026 107.636 49.1641 112.273 49.1641 118H69.9074C69.9074 112.273 65.2689 107.636 59.5407 107.636H59.5307Z" fill="url(#paint7_linear_7532_34078)"/>
34
- <path d="M97.4388 90.6563C93.8699 95.1336 94.5997 101.66 99.0782 105.228L112.004 89.0172C107.526 85.4494 100.998 86.1789 97.4288 90.6563H97.4388Z" fill="url(#paint8_linear_7532_34078)"/>
35
- <path d="M105.936 50.57C107.206 56.1567 112.774 59.6446 118.352 58.3653L113.733 38.1473C108.145 39.4166 104.656 44.9833 105.936 50.56V50.57Z" fill="url(#paint9_linear_7532_34078)"/>
36
- <path d="M80.4942 18.8588C85.6525 21.3473 91.8505 19.1786 94.3397 14.0116L75.6557 5.01697C73.1665 10.1739 75.3358 16.3702 80.5042 18.8588H80.4942Z" fill="url(#paint10_linear_7532_34078)"/>
37
- <path d="M38.0978 18.8588C43.2561 16.3702 45.4254 10.1739 42.9362 5.01697L24.2522 14.0116C26.7414 19.1686 32.9394 21.3373 38.0978 18.8488V18.8588Z" fill="url(#paint11_linear_7532_34078)"/>
38
- <path d="M13.3958 50.57C14.6654 44.9833 11.1765 39.4266 5.58826 38.1573L0.979736 58.3754C6.56795 59.6446 12.1262 56.1567 13.3958 50.57Z" fill="url(#paint12_linear_7532_34078)"/>
39
- <path d="M8.49731 89.0172L21.4332 105.228C25.9117 101.66 26.6415 95.1336 23.0726 90.6563C19.5038 86.1789 12.9759 85.4494 8.49731 89.0172Z" fill="url(#paint13_linear_7532_34078)"/>
40
- <path d="M177.773 30.1321V59.8145H212.612V31.8511H228.487V98.4116H212.612V73.9661H177.773V98.4116H161.898V34.4195L177.773 30.1321Z" fill="#E84125"/>
41
- <path d="M257.227 84.25H305.792L301.503 98.4016H241.363V31.8411H305.802L301.513 45.9927H257.237V58.0855H298.504V72.2371H257.237V84.25H257.227Z" fill="#E84125"/>
42
- <path d="M331.274 31.8411V84.25H378.119L373.83 98.4016H315.399V31.8411H331.274Z" fill="#E84125"/>
43
- <path d="M400.861 31.8411V98.4016H384.987V31.8411H400.861Z" fill="#E84125"/>
44
- <path d="M467.44 31.8411H483.315V71.9872C483.315 91.3757 467.44 99.8607 446.937 99.8607C426.433 99.8607 411.668 90.7661 411.668 71.9872V34.4195L427.543 30.1321V71.9872C427.543 81.7614 434.061 85.4593 447.706 85.4593C461.352 85.4593 467.44 81.5116 467.44 71.9872V31.8411Z" fill="#E84125"/>
45
- <path d="M491.382 52.0891C491.382 41.8851 499.45 31.8411 515.235 31.8411H560.54L556.252 45.9927H515.405C510.516 45.9927 508.107 49.0808 508.107 52.0791C508.107 55.0773 510.596 58.0855 515.405 58.0855H538.397C553.922 58.0855 561.99 68.1195 561.99 78.3335C561.99 88.5474 554.352 98.4016 538.397 98.4016H491.382L495.671 84.25H538.227C543.036 84.25 545.525 81.4217 545.525 78.3335C545.525 75.2453 543.126 72.1571 538.227 72.1571H515.235C499.19 72.1571 491.382 62.1231 491.382 52.0891Z" fill="#E84125"/>
46
- </g>
47
- <defs>
48
- <linearGradient id="paint0_linear_7532_34078" x1="41.8666" y1="12.3627" x2="74.6261" y2="12.3627" gradientUnits="userSpaceOnUse">
49
- <stop stop-color="#E35930"/>
50
- <stop offset="1" stop-color="#E84125"/>
51
- </linearGradient>
52
- <linearGradient id="paint1_linear_7532_34078" x1="9.61681" y1="36.4484" x2="40.7468" y2="36.4484" gradientUnits="userSpaceOnUse">
53
- <stop stop-color="#E35930"/>
54
- <stop offset="1" stop-color="#E84125"/>
55
- </linearGradient>
56
- <linearGradient id="paint2_linear_7532_34078" x1="-0.919775" y1="69.2589" x2="28.9906" y2="69.2589" gradientUnits="userSpaceOnUse">
57
- <stop stop-color="#E35930"/>
58
- <stop offset="1" stop-color="#E84125"/>
59
- </linearGradient>
60
- <linearGradient id="paint3_linear_7532_34078" x1="29.4704" y1="100.94" x2="58.951" y2="100.94" gradientUnits="userSpaceOnUse">
61
- <stop stop-color="#E35930"/>
62
- <stop offset="1" stop-color="#E84125"/>
63
- </linearGradient>
64
- <linearGradient id="paint4_linear_7532_34078" x1="59.0809" y1="100.98" x2="88.9513" y2="100.98" gradientUnits="userSpaceOnUse">
65
- <stop stop-color="#E35930"/>
66
- <stop offset="1" stop-color="#E84125"/>
67
- </linearGradient>
68
- <linearGradient id="paint5_linear_7532_34078" x1="88.3417" y1="69.149" x2="119.032" y2="69.149" gradientUnits="userSpaceOnUse">
69
- <stop stop-color="#E35930"/>
70
- <stop offset="1" stop-color="#E84125"/>
71
- </linearGradient>
72
- <linearGradient id="paint6_linear_7532_34078" x1="75.9256" y1="36.4884" x2="107.455" y2="36.4884" gradientUnits="userSpaceOnUse">
73
- <stop stop-color="#E35930"/>
74
- <stop offset="1" stop-color="#E84125"/>
75
- </linearGradient>
76
- <linearGradient id="paint7_linear_7532_34078" x1="64.1037" y1="108.682" x2="56.3294" y2="122.151" gradientUnits="userSpaceOnUse">
77
- <stop stop-color="#E35930"/>
78
- <stop offset="1" stop-color="#E84125"/>
79
- </linearGradient>
80
- <linearGradient id="paint8_linear_7532_34078" x1="101.127" y1="87.5512" x2="106.808" y2="102.028" gradientUnits="userSpaceOnUse">
81
- <stop stop-color="#E35930"/>
82
- <stop offset="1" stop-color="#E84125"/>
83
- </linearGradient>
84
- <linearGradient id="paint9_linear_7532_34078" x1="105.915" y1="45.8351" x2="120.779" y2="50.4203" gradientUnits="userSpaceOnUse">
85
- <stop stop-color="#E35930"/>
86
- <stop offset="1" stop-color="#E84125"/>
87
- </linearGradient>
88
- <linearGradient id="paint10_linear_7532_34078" x1="76.8142" y1="15.9367" x2="89.6635" y2="7.17242" gradientUnits="userSpaceOnUse">
89
- <stop stop-color="#E35930"/>
90
- <stop offset="1" stop-color="#E84125"/>
91
- </linearGradient>
92
- <linearGradient id="paint11_linear_7532_34078" x1="33.7238" y1="19.9762" x2="34.884" y2="4.46876" gradientUnits="userSpaceOnUse">
93
- <stop stop-color="#E35930"/>
94
- <stop offset="1" stop-color="#E84125"/>
95
- </linearGradient>
96
- <linearGradient id="paint12_linear_7532_34078" x1="11.6598" y1="54.776" x2="0.258708" y2="44.1971" gradientUnits="userSpaceOnUse">
97
- <stop stop-color="#E35930"/>
98
- <stop offset="1" stop-color="#E84125"/>
99
- </linearGradient>
100
- <linearGradient id="paint13_linear_7532_34078" x1="25.3906" y1="94.7132" x2="10.0098" y2="97.0344" gradientUnits="userSpaceOnUse">
101
- <stop stop-color="#E35930"/>
102
- <stop offset="1" stop-color="#E84125"/>
103
- </linearGradient>
104
- <clipPath id="clip0_7532_34078">
105
- <rect width="562" height="118" fill="white"/>
106
- </clipPath>
107
- </defs>
108
- </svg>
109
- </p>
110
-
111
- <p align="center">
112
- <a href="https://pypi.org/project/helius-python/"><img src="https://img.shields.io/pypi/v/helius-python.svg" alt="PyPI version"></a>
113
- <a href="https://pypi.org/project/helius-python/"><img src="https://img.shields.io/pypi/pyversions/helius-python.svg" alt="Python versions"></a>
114
- <a href="https://github.com/markosnarinian/helius-python/blob/main/LICENSE"><img src="https://img.shields.io/github/license/markosnarinian/helius-python.svg" alt="License"></a>
115
- <a href="https://github.com/markosnarinian/helius-python/actions/workflows/python-package.yml"><img src="https://github.com/markosnarinian/helius-python/actions/workflows/python-package.yml/badge.svg" alt="CI"></a>
116
- <a href="https://pypistats.org/packages/helius-python"><img src="https://img.shields.io/pypi/dm/helius-python.svg" alt="Downloads"></a>
117
- <a href="https://github.com/markosnarinian/helius-python/commits/main"><img src="https://img.shields.io/github/last-commit/markosnarinian/helius-python.svg" alt="Last commit"></a>
118
- </p>
119
-
120
- **A complete, typed Python client for [Helius](https://helius.dev) — the Solana developer platform.**
121
- <br />
122
-
123
- ## TL;DR
124
- ```bash
125
- pip install helius-python
126
- ```
127
-
128
- ```python
129
- # export HELIUS_API_KEY=your_key (or put it in .env)
130
-
131
- from helius.client import HeliusClient
132
-
133
- with HeliusClient() as helius:
134
- _ctx, lamports = helius.get_balance("7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU")
135
- print(f"{lamports / 1_000_000_000:.4f} SOL")
136
-
137
- for sig in helius.get_signatures_for_address(
138
- "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", limit=5
139
- ):
140
- print(sig.slot, "ERR" if sig.err else "OK ", sig.signature)
141
- ```
142
-
143
- `HELIUS_API_KEY` is read from the environment (or `.env`), the
144
- client is a context manager, and every return value is fully typed.
145
-
146
- ## Why this over `solana-py` / `solders`?
147
-
148
- `solders` is for building and signing transactions. `solana-py` is a generic Solana RPC client. Use them for that.
149
-
150
- This library is for talking to **Helius** specifically — typed `pydantic` responses, snake_case, and (eventually) the Helius-only endpoints (DAS, Enhanced Transactions, Webhooks, priority fees) the others don't cover. Plays nicely alongside `solders`: sign with `solders`, read with `helius-python`.
151
-
152
- ## Example: wallet tracker
153
-
154
- See [`examples/wallet_tracker.py`](examples/wallet_tracker.py) for a
155
- runnable script that takes a wallet address and prints:
156
-
157
- - SOL balance
158
- - All non-empty SPL token accounts (mint, balance, account)
159
- - The last N transactions (timestamp, slot, success/error, signature)
160
-
161
- ```bash
162
- export HELIUS_API_KEY=your_helius_api_key
163
- python examples/wallet_tracker.py 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU --limit 20
164
- ```
165
-
166
- It uses `get_balance`, `get_token_accounts_by_owner` (with
167
- `encoding="jsonParsed"`), and `get_signatures_for_address` — pure
168
- stdlib plus this library, no `solana-py` or `solders` needed.
169
-
170
- ## Coverage
171
-
172
- The goal of this library is **support every function, method, endpoint,
173
- and feature that Helius exposes.** If Helius ships it, this client
174
- wraps it.
175
-
176
- - ✅ **The full Solana JSON-RPC surface** proxied by Helius —
177
- `getAccountInfo`, `getBalance`, `getBlock`, `getTransaction`,
178
- `getProgramAccounts`, `getTokenAccountsByOwner`,
179
- `getSignaturesForAddress`, and every other standard RPC method.
180
- **(supported today)**
181
- - 🚧 **All Helius-specific RPC extensions** — enhanced transactions, DAS
182
- (Digital Asset Standard) methods, priority fee estimation, and the
183
- rest of the Helius-only RPC namespace. **(in progress)**
184
- - 🚧 **Every Helius REST endpoint** — Enhanced Transactions API,
185
- Webhooks API, Mint API, token metadata, address lookups, and beyond.
186
- **(in progress)**
187
- - 🚧 **Platform features** — streaming, websockets, and any new
188
- capability Helius adds to its API. **(in progress)**
189
-
190
- > **Current status:** only the standard Solana JSON-RPC surface is
191
- > implemented today. Support for Helius RPC extensions, REST endpoints,
192
- > and platform features is actively being worked on.
193
-
194
- ## Goals
195
-
196
- 1. **Completeness** — 1:1 coverage of the entire Helius API surface.
197
- 2. **Type safety** — fully typed responses.
198
- 3. **Pythonic ergonomics** — `get_account_info(...)` instead of
199
- `getAccountInfo(...)`, context managers.
200
- 4. **Zero magic** — thin, predictable wrappers that map directly to the
201
- documented Helius API.
202
-
203
- ## Authentication
204
-
205
- Pass your Helius API key explicitly:
206
-
207
- ```python
208
- from helius.client import HeliusClient
209
-
210
- client = HeliusClient(api_key="YOUR_HELIUS_API_KEY")
211
- ```
212
-
213
- or set `HELIUS_API_KEY` as an environment variable:
214
-
215
- ```bash
216
- export HELIUS_API_KEY=your_helius_api_key
217
- ```
218
-
219
- You can also set it in a `.env` file at the project root and let the
220
- client pick it up automatically:
221
-
222
- ```env
223
- HELIUS_API_KEY=your_helius_api_key
224
- ```
225
-
226
- ```python
227
- from helius.client import HeliusClient
228
-
229
- client = HeliusClient() # reads HELIUS_API_KEY from the environment or .env
230
- ```
231
-
232
- ## Usage
233
-
234
- ### As a context manager (recommended)
235
-
236
- ```python
237
- from helius.client import HeliusClient
238
-
239
- with HeliusClient(api_key="YOUR_HELIUS_API_KEY") as client:
240
- _ctx, balance = client.get_balance("So11111111111111111111111111111111111111112")
241
- _ctx, supply = client.get_supply()
242
- nodes = client.get_cluster_nodes()
243
- block = client.get_block(slot=250_000_000)
244
- tx = client.get_transaction("5j7s...signature...")
245
- ```
246
-
247
- `HeliusClient` implements the context-manager protocol via `__enter__` /
248
- `__exit__`, so the underlying `httpx.Client` is closed cleanly when the
249
- `with` block exits.
250
-
251
- ### With an explicit `close()` call
252
-
253
- If a `with` block doesn't fit your code structure (e.g. the client lives
254
- on a long-lived object), call `close()` yourself when you're done:
255
-
256
- ```python
257
- from helius.client import HeliusClient
258
-
259
- client = HeliusClient(api_key="YOUR_HELIUS_API_KEY")
260
- try:
261
- _ctx, balance = client.get_balance("So11111111111111111111111111111111111111112")
262
- _ctx, supply = client.get_supply()
263
- finally:
264
- client.close()
265
- ```
266
-
267
- Client classes also implement `__del__` as a safety net — if you forget
268
- to `close()` or use `with`, the underlying HTTP client is still closed
269
- when the instance is garbage-collected. Prefer `with` or `close()`
270
- regardless.
271
-
272
- > 🚧 **Exception & error handling is a work in progress.** Today,
273
- > transport errors surface as raw `httpx` exceptions and Helius/Solana
274
- > RPC errors are not yet wrapped in typed exception classes. A
275
- > consistent error hierarchy is being worked on.
276
-
277
- ### Defaults
278
-
279
- | Argument | Default | Notes |
280
- | ---------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------ |
281
- | `base_url` | `"https://mainnet.helius-rpc.com"` | Override to point at devnet, staging, or a custom Helius endpoint. |
282
- | `api_key` | `None` → falls back to `HELIUS_API_KEY` from the environment, then `.env` | If none is provided, the constructor raises `ValueError`. |
283
-
284
- Per-method RPC parameters (`commitment`, `encoding`, `min_context_slot`,
285
- etc.) are left unset by default — the Helius/Solana server defaults
286
- apply unless you pass them explicitly.
287
-
288
- ### Reference
289
-
290
- For parameters, semantics, and return shapes, see the official Helius docs:
291
- [RPC guide](https://www.helius.dev/docs/rpc) and
292
- [API reference](https://www.helius.dev/docs/api-reference).
293
-
294
- If you hit a bug, a missing parameter, or surprising behavior, please
295
- [open an issue](https://github.com/markosnarinian/helius-python/issues).
296
-
297
- ### Supported methods
298
-
299
- The method names map 1:1 to the Solana JSON-RPC spec, just converted to
300
- `snake_case`. If you know the RPC method name, you know the Python function.
301
-
302
- ## Status
303
-
304
- Actively expanding toward full coverage of the Helius API. See
305
- [`src/helius/client.py`](src/helius/client.py) for the current list of
306
- implemented methods; missing endpoints are tracked as issues and added
307
- continuously.
308
-
309
- | Solana JSON-RPC method | Python method | Helius docs |
310
- | ----------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
311
- | `getAccountInfo` | `client.get_account_info(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getaccountinfo) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getaccountinfo) |
312
- | `getBalance` | `client.get_balance(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getbalance) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getbalance) |
313
- | `getBlock` | `client.get_block(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblock) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblock) |
314
- | `getBlockCommitment` | `client.get_block_commitment(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockcommitment) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) |
315
- | `getBlockHeight` | `client.get_block_height(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockheight) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblockheight) |
316
- | `getBlockProduction` | `client.get_block_production(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockproduction) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) |
317
- | `getBlocks` | `client.get_blocks(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblocks) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblocks) |
318
- | `getBlocksWithLimit` | `client.get_blocks_with_limit(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblockswithlimit) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblockswithlimit) |
319
- | `getBlockTime` | `client.get_block_time(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getblocktime) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getblocktime) |
320
- | `getClusterNodes` | `client.get_cluster_nodes()` | [guide](https://www.helius.dev/docs/rpc/guides/getclusternodes) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getclusternodes) |
321
- | `getEpochInfo` | `client.get_epoch_info(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getepochinfo) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getepochinfo) |
322
- | `getEpochSchedule` | `client.get_epoch_schedule()` | [guide](https://www.helius.dev/docs/rpc/guides/getepochschedule) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getepochschedule) |
323
- | `getFeeForMessage` | `client.get_fee_for_message(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getfeeformessage) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getfeeformessage) |
324
- | `getFirstAvailableBlock` | `client.get_first_available_block()` | [guide](https://www.helius.dev/docs/rpc/guides/getfirstavailableblock) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getfirstavailableblock) |
325
- | `getGenesisHash` | `client.get_genesis_hash()` | [guide](https://www.helius.dev/docs/rpc/guides/getgenesishash) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getgenesishash) |
326
- | `getHealth` | `client.get_health()` | [guide](https://www.helius.dev/docs/rpc/guides/gethealth) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gethealth) |
327
- | `getHighestSnapshotSlot` | `client.get_highest_snapshot_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/gethighestsnapshotslot) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gethighestsnapshotslot) |
328
- | `getIdentity` | `client.get_identity()` | [guide](https://www.helius.dev/docs/rpc/guides/getidentity) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getidentity) |
329
- | `getInflationGovernor` | `client.get_inflation_governor(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getinflationgovernor) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getinflationgovernor) |
330
- | `getInflationRate` | `client.get_inflation_rate()` | [guide](https://www.helius.dev/docs/rpc/guides/getinflationrate) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getinflationrate) |
331
- | `getLargestAccounts` | `client.get_largest_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getlargestaccounts) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getlargestaccounts) |
332
- | `getLatestBlockhash` | `client.get_latest_blockhash(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getlatestblockhash) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getlatestblockhash) |
333
- | `getLeaderSchedule` | `client.get_leader_schedule(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getleaderschedule) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) |
334
- | `getMaxRetransmitSlot` | `client.get_max_retransmit_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/getmaxretransmitslot) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getmaxretransmitslot) |
335
- | `getMaxShredInsertSlot` | `client.get_max_shred_insert_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/getmaxshredinsertslot) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getmaxshredinsertslot) |
336
- | `getMinimumBalanceForRentExemption` | `client.get_minimum_balance_for_rent_exemption(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getminimumbalanceforrentexemption) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getminimumbalanceforrentexemption) |
337
- | `getMultipleAccounts` | `client.get_multiple_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getmultipleaccounts) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getmultipleaccounts) |
338
- | `getProgramAccounts` | `client.get_program_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getprogramaccounts) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getprogramaccounts) |
339
- | `getRecentPerformanceSamples` | `client.get_recent_performance_samples(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getrecentperformancesamples) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getrecentperformancesamples) |
340
- | `getRecentPrioritizationFees` | `client.get_recent_prioritization_fees(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getrecentprioritizationfees) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getrecentprioritizationfees) |
341
- | `getSignaturesForAddress` | `client.get_signatures_for_address(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsignaturesforaddress) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturesforaddress) |
342
- | `getSignatureStatuses` | `client.get_signature_statuses(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsignaturestatuses) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getsignaturestatuses) |
343
- | `getSlot` | `client.get_slot(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslot) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getslot) |
344
- | `getSlotLeader` | `client.get_slot_leader(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslotleader) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getslotleader) |
345
- | `getSlotLeaders` | `client.get_slot_leaders(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getslotleaders) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getslotleaders) |
346
- | `getStakeMinimumDelegation` | `client.get_stake_minimum_delegation(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getstakeminimumdelegation) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getstakeminimumdelegation) |
347
- | `getSupply` | `client.get_supply(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getsupply) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getsupply) |
348
- | `getTokenAccountBalance` | `client.get_token_account_balance(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountbalance) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountbalance) |
349
- | `getTokenAccountsByDelegate` | `client.get_token_accounts_by_delegate(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountsbydelegate) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountsbydelegate) |
350
- | `getTokenAccountsByOwner` | `client.get_token_accounts_by_owner(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenaccountsbyowner) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettokenaccountsbyowner) |
351
- | `getTokenLargestAccounts` | `client.get_token_largest_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokenlargestaccounts) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettokenlargestaccounts) |
352
- | `getTokenSupply` | `client.get_token_supply(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettokensupply) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettokensupply) |
353
- | `getTransaction` | `client.get_transaction(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettransaction) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettransaction) |
354
- | `getTransactionCount` | `client.get_transaction_count(...)` | [guide](https://www.helius.dev/docs/rpc/guides/gettransactioncount) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/gettransactioncount) |
355
- | `getVersion` | `client.get_version()` | [guide](https://www.helius.dev/docs/rpc/guides/getversion) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getversion) |
356
- | `getVoteAccounts` | `client.get_vote_accounts(...)` | [guide](https://www.helius.dev/docs/rpc/guides/getvoteaccounts) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) |
357
- | `isBlockhashValid` | `client.is_blockhash_valid(...)` | [guide](https://www.helius.dev/docs/rpc/guides/isblockhashvalid) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/isblockhashvalid) |
358
- | `minimumLedgerSlot` | `client.minimum_ledger_slot()` | [guide](https://www.helius.dev/docs/rpc/guides/minimumledgerslot) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/minimumledgerslot) |
359
- | `requestAirdrop` | `client.request_airdrop(...)` | [guide](https://www.helius.dev/docs/rpc/guides/requestairdrop) · [ref](https://www.helius.dev/docs/api-reference/rpc/http/requestairdrop) |
360
-
361
- ## License
362
-
363
- [MIT](LICENSE)
@@ -1,7 +0,0 @@
1
- helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- helius/client.py,sha256=lR87MBJSZB4qPD3uk8YS3-M85q0amb309A4YMZJ6cVA,33300
3
- helius/models.py,sha256=X6aLhpAIvVccgCIJE_h2TO0RRdBI26EmaGNylT11Y3A,5082
4
- helius_python-0.1.0.dist-info/METADATA,sha256=beiaPKtBACBP-VZ_Fqomi06LDzkePGQsgydik4lOj2A,30295
5
- helius_python-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
6
- helius_python-0.1.0.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
7
- helius_python-0.1.0.dist-info/RECORD,,