shadowPaySDK 0.2.0.6__py3-none-any.whl → 0.2.0.9__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.
shadowPaySDK/__init__.py CHANGED
@@ -1,8 +1,7 @@
1
1
  import json
2
2
  from shadowPaySDK.interface.erc20 import ERC20Token
3
3
  from shadowPaySDK.interface.erc721 import ERC721Token
4
- from shadowPaySDK.interface.sol import SolTokens
5
- from shadowPaySDK.interface.sol import SOL
4
+ from shadowPaySDK.interface.sol import SOL as sol
6
5
  from shadowPaySDK.types.EVMcheque import Cheque
7
6
  from shadowPaySDK.types.SOLcheque import SOLCheque
8
7
  from shadowPaySDK.const import __ERC20_ABI__, __SHADOWPAY_ABI__ERC20__,__ALLOW_CHAINS__, __SHADOWPAY_CONTRACT_ADDRESS__ERC20__
@@ -1,4 +1,4 @@
1
1
  from .erc20 import ERC20Token as ERC20
2
2
  from .erc721 import ERC721Token as ERC721
3
- from .sol import SolTokens as SPL
4
- __all__ = ["ERC20", "ERC721", "SPL"]
3
+ from .sol import SOL as sol
4
+ __all__ = ["ERC20", "ERC721", "sol"]
@@ -1,17 +1,24 @@
1
1
  import asyncio
2
2
  from solana.rpc.async_api import AsyncClient, GetTokenAccountsByOwnerResp
3
+ from solana.transaction import Transaction
4
+ from solders.system_program import TransferParams as p
3
5
  import spl
4
6
  import spl.token
5
7
  import spl.token.constants
6
- from spl.token.instructions import get_associated_token_address, create_associated_token_account, transfer, close_account
8
+ from spl.token.instructions import get_associated_token_address, create_associated_token_account, transfer, close_account, TransferParams
7
9
  from spl.token.constants import TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID
8
- from solana.constants import *
9
10
  from solana.rpc.types import TxOpts, TokenAccountOpts
10
11
  from solana.rpc.types import TxOpts
11
12
  import solders
12
- from solders.pubkey import Pubkey
13
- from solders.keypair import Keypair
14
- from solders.signature import Signature
13
+ # from solders.pubkey import Pubkey
14
+ # from solders.keypair import Keypair
15
+ # from solders.signature import Signature
16
+ # from solders.transaction import Transaction
17
+ from spl.token.async_client import AsyncToken
18
+
19
+
20
+ from solana.rpc.commitment import Confirmed
21
+ from solana.rpc.async_api import AsyncClient
15
22
  import anchorpy
16
23
  from anchorpy import Provider, Wallet, Idl
17
24
  from typing import Optional, Union
@@ -20,44 +27,40 @@ import httpx
20
27
  import base64
21
28
  import re
22
29
 
23
- class SolTokens:
24
- def __init__(self, rpc_url: str = "https://api.mainnet-beta.solana.com"):
25
- self.rpc_url = rpc_url
26
- self.client = AsyncClient(rpc_url)
27
- self.PROGRAM_ID = TOKEN_PROGRAM_ID # Default to the SPL Token Program ID
28
- self.WRAPED_SOL_ID = spl.token.constants.WRAPPED_SOL_MINT
29
- def set_params(self, rpc_url: Optional[str] = None, PROGRAM_ID: Optional[str] = None):
30
- if rpc_url:
31
- self.rpc_url = rpc_url
32
- self.client = AsyncClient(rpc_url)
30
+
31
+ LAMPORTS_PER_SOL = 1_000_000_000 # 1 SOL = 1,000,000,000 lamports
33
32
 
34
33
  class SOL:
35
34
 
36
- def __init__(self, rpc_url = "https://api.mainnet-beta.solana.com", KEYPAIR: Optional[Union[str, Keypair]] = None):
35
+ def __init__(self, rpc_url = "https://api.mainnet-beta.solana.com", KEYPAIR: Optional[Union[str, solders.keypair.Keypair]] = None,TOKEN_MINT: Optional[str] = None):
37
36
  self.rpc_url = rpc_url
38
37
  self.client = AsyncClient(rpc_url)
39
38
  self.KEYPAIR = None
40
-
39
+ self.PROGRAM_ID = TOKEN_PROGRAM_ID # Default to the SPL Token Program ID
40
+ self.TOKEN_MINT = TOKEN_MINT
41
+ self.WRAPED_SOL_ID = spl.token.constants.WRAPPED_SOL_MINT
41
42
  if KEYPAIR:
42
43
  self.set_keypair(KEYPAIR)
43
44
 
44
- def set_keypair(self, KEYPAIR: Union[str, Keypair]):
45
+ def set_keypair(self, KEYPAIR: Union[str, solders.keypair.Keypair]):
45
46
  if isinstance(KEYPAIR, str):
46
47
  try:
47
- self.KEYPAIR = Keypair.from_base58_string(KEYPAIR)
48
+ self.KEYPAIR = solders.keypair.Keypair.from_base58_string(KEYPAIR)
48
49
  except Exception as e:
49
50
  raise ValueError(f"Invalid Keypair string: {e}")
50
- elif isinstance(KEYPAIR, Keypair):
51
+ elif isinstance(KEYPAIR, solders.keypair.Keypair):
51
52
  self.KEYPAIR = KEYPAIR
52
53
  else:
53
54
  raise ValueError("KEYPAIR must be a Keypair instance or a base58 encoded string.")
54
55
 
55
- def set_params(self, rpc_url: Optional[str] = None, KEYPAIR: Optional[Union[str, Keypair]] = None):
56
+ def set_params(self, rpc_url: Optional[str] = None, KEYPAIR: Optional[Union[str, solders.keypair.Keypair]] = None,TOKEN_MINT: Optional[str] = None):
56
57
  if rpc_url:
57
58
  self.rpc_url = rpc_url
58
59
  self.client = AsyncClient(rpc_url)
59
60
  if KEYPAIR:
60
61
  self.set_keypair(KEYPAIR)
62
+ if TOKEN_MINT:
63
+ self.TOKEN_MINT = TOKEN_MINT
61
64
 
62
65
  def get_pubkey(self, returnString: Optional[bool] = None):
63
66
 
@@ -72,7 +75,7 @@ class SOL:
72
75
  raise ValueError("Keypair not set")
73
76
 
74
77
  def gen_wallet(self):
75
- return Keypair()
78
+ return solders.keypair.Keypair()
76
79
  async def get_balance(self):
77
80
  resp = await self.client.get_balance(self.get_pubkey())
78
81
  lamports = resp.value
@@ -107,9 +110,9 @@ class SOL:
107
110
  ui_amount = parsed["tokenAmount"]["uiAmount"]
108
111
  token_data[mint] = {"amount": ui_amount}
109
112
 
110
- filtered = {mint: data for mint, data in token_data.items() if data["amount"] > 0.001}
113
+
111
114
 
112
- return filtered
115
+ return token_data
113
116
  async def is_connected(self):
114
117
  return await self.client.is_connected()
115
118
 
@@ -117,14 +120,14 @@ class SOL:
117
120
  await self.client.close()
118
121
 
119
122
  async def fetch_metadata_raw(self,mint_address: str):
120
- METADATA_PROGRAM_ID = Pubkey.from_string("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s")
121
- mint = Pubkey.from_string(mint_address)
123
+ METADATA_PROGRAM_ID = solders.pubkey.Pubkey.from_string("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s")
124
+ mint = solders.pubkey.Pubkey.from_string(mint_address)
122
125
  seeds = [
123
126
  b"metadata",
124
127
  bytes(METADATA_PROGRAM_ID),
125
128
  bytes(mint),
126
129
  ]
127
- pda, _ = Pubkey.find_program_address(seeds, METADATA_PROGRAM_ID)
130
+ pda, _ = solders.pubkey.Pubkey.find_program_address(seeds, METADATA_PROGRAM_ID)
128
131
 
129
132
  payload = {
130
133
  "jsonrpc": "2.0",
@@ -137,7 +140,7 @@ class SOL:
137
140
  }
138
141
 
139
142
  async with httpx.AsyncClient() as client:
140
- r = await client.post("https://api.mainnet-beta.solana.com", json=payload)
143
+ r = await client.post(self.rpc_url, json=payload)
141
144
  data = r.json()
142
145
 
143
146
  if not data["result"]["value"]:
@@ -151,12 +154,55 @@ class SOL:
151
154
  return {
152
155
  "mint": mint_address,
153
156
  "name": name,
157
+
158
+
154
159
  }
160
+ async def transfer_token(self, to: str, amount: float):
161
+
162
+ if not self.TOKEN_MINT:
163
+ raise ValueError("not set TOKEN_MINT.")
164
+ if not self.KEYPAIR:
165
+ raise ValueError("not set KEYPAIR.")
166
+
167
+ sender_pubkey = self.get_pubkey()
168
+ receiver_pubkey = solders.pubkey.Pubkey.from_string(to)
169
+ token_pubkey = solders.pubkey.Pubkey.from_string(self.TOKEN_MINT)
170
+
171
+ token = AsyncToken(self.client, token_pubkey, TOKEN_PROGRAM_ID, self.KEYPAIR)
172
+ sender_ata = get_associated_token_address(sender_pubkey, token_pubkey)
173
+ receiver_ata = get_associated_token_address(receiver_pubkey, token_pubkey)
174
+
175
+ tx = Transaction()
176
+
177
+ res = await self.client.get_account_info(receiver_ata)
178
+ if res.value is None:
179
+ tx.add(
180
+ create_associated_token_account(
181
+ payer=sender_pubkey,
182
+ owner=receiver_pubkey,
183
+ mint=token_pubkey
184
+ )
185
+ )
186
+
187
+ decimals = (await token.get_mint_info()).decimals
188
+ real_amount = int(amount * (10 ** decimals))
189
+ params = TransferParams(
190
+ program_id=TOKEN_PROGRAM_ID,
191
+ source=sender_ata,
192
+ dest=receiver_ata,
193
+ owner=sender_pubkey,
194
+ amount=real_amount
195
+ )
196
+
197
+ tx.add(transfer(params))
198
+
199
+ resp = await self.client.send_transaction(tx, self.KEYPAIR, opts=TxOpts(skip_preflight=True, preflight_commitment=Confirmed))
200
+ return resp.value
155
201
 
156
202
 
157
203
 
158
204
 
159
205
 
160
206
  if __name__ == "__main__":
161
- newKeypair = Keypair()
207
+ newKeypair = solders.keypair.Keypair()
162
208
  print("New Keypair:", newKeypair)
@@ -1,10 +1,9 @@
1
1
 
2
2
  import anchorpy
3
3
  from anchorpy import Idl, Provider, Wallet
4
+ import solders
4
5
  from shadowPaySDK.interface.sol import SOL
5
- from solders.keypair import Keypair
6
- import solana.constants as constants
7
- import solana.constants as sol_constants
6
+ import solders
8
7
  import spl.token.constants as spl_constants
9
8
 
10
9
 
@@ -17,7 +16,7 @@ class SOLCheque:
17
16
  self.WRAPED_SOL = spl_constants.WRAPPED_SOL_MINT # wrapped SOL token mint address
18
17
  # self.idl = Idl.from_json(sol_interface.Idl) # Load the IDL for the program
19
18
  def get(self, keypair = None):
20
- pubkey = SOL.get_pubkey(KEYPAIR=Keypair.from_base58_string(self.keystore))
19
+ pubkey = SOL.get_pubkey(KEYPAIR=solders.keypair.Keypair.from_base58_string(self.keystore))
21
20
 
22
21
  return pubkey
23
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shadowPaySDK
3
- Version: 0.2.0.6
3
+ Version: 0.2.0.9
4
4
  Summary: ShadowPay SDK for ERC20/ERC721 and P2P smart contract interaction
5
5
  Author: dazarius_
6
6
  Author-email: your@email.com
@@ -1,17 +1,17 @@
1
- shadowPaySDK/__init__.py,sha256=lV_L5SuQMPAt5XDkeZScJqLo43gtP-pNbsuErOSNOVw,727
1
+ shadowPaySDK/__init__.py,sha256=CMwAuP_6hJN-WueU-XlTNta9Oyd28sFo8OojdgD_pxA,681
2
2
  shadowPaySDK/api.py,sha256=cv5Z171cOh-Idi-lMA4AORzeGDPPrk8BCQ9e5V9MAaM,1461
3
3
  shadowPaySDK/const.py,sha256=T7TJPKFLqCtxwpUYO1AOryGMr65G-vVuotxfL8gWcME,9898
4
- shadowPaySDK/interface/__init__.py,sha256=QceU3dWteSgwvMnR3JDVdmS8OgdRPjvl9JzRs7IsA74,152
4
+ shadowPaySDK/interface/__init__.py,sha256=ggSZCV22udnzXm_Wv_3x6VN3hNIAEiwgwHZc2Jwc688,146
5
5
  shadowPaySDK/interface/erc20.py,sha256=TIsek7ykuYsLMj5no-uastA5gYsIbk-F_Dq-5XPk_6w,4298
6
6
  shadowPaySDK/interface/erc721.py,sha256=4AlWfDjrvl85wFocnN93j-oM54kTsLLwv9SdtcLj4eM,3094
7
- shadowPaySDK/interface/sol.py,sha256=xgJZsg4xE-_dRctGUW_mHuGj_o_0OlKNp4Gr7IXvTEc,5586
7
+ shadowPaySDK/interface/sol.py,sha256=IKzG9b-XwMgCCH2GdmbVrNXvhwTJ0iUqlziFlQBQmKc,7322
8
8
  shadowPaySDK/types/EVMcheque.py,sha256=QjWuIKztb7MqnzFT82L6kWcxDgAkBxpSMrZ2a2Voa34,13676
9
- shadowPaySDK/types/SOLcheque.py,sha256=gmivsCK4hm_6pzQ9whPGuQ_f7qfcUfiJfQgb5ZsJYDo,884
9
+ shadowPaySDK/types/SOLcheque.py,sha256=S6LnKxiWDj1KGRgFFAaHy03c7mxv4msaR-2cfVIhD2Y,818
10
10
  shadowPaySDK/types/__init__.py,sha256=sG6pNZfKGvENXqsnv6MrQtKrJ898fAXkMvAZY1k1-Qg,97
11
11
  shadowPaySDK/utils/__init__.py,sha256=aja3iYO4rT-ptMM-pzw0GRFTziBdXdcEi-4kE84zH64,61
12
12
  shadowPaySDK/utils/utils.py,sha256=g4bGvLDdjhNGsAj1eaZnNWFNaiN-cVhhM-5PrnG5aIQ,720
13
- shadowpaysdk-0.2.0.6.dist-info/licenses/LICENSE,sha256=EG13vNmyBfkG3oKj40oOYfUGLKko8OouU6PfO6MlAk4,1066
14
- shadowpaysdk-0.2.0.6.dist-info/METADATA,sha256=8wEskwIkgX06ppdMN2eOifUcgaVG0bhwbiT3VCqwZbM,839
15
- shadowpaysdk-0.2.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- shadowpaysdk-0.2.0.6.dist-info/top_level.txt,sha256=RSJc73GEf31NMdZp9KovEduzfhm10eQ2t5GTZ44aN1U,13
17
- shadowpaysdk-0.2.0.6.dist-info/RECORD,,
13
+ shadowpaysdk-0.2.0.9.dist-info/licenses/LICENSE,sha256=EG13vNmyBfkG3oKj40oOYfUGLKko8OouU6PfO6MlAk4,1066
14
+ shadowpaysdk-0.2.0.9.dist-info/METADATA,sha256=OMBbMZ95ekjJNO8_7JyW5VQtNBUWgN-szVIWs7PjnOw,839
15
+ shadowpaysdk-0.2.0.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
+ shadowpaysdk-0.2.0.9.dist-info/top_level.txt,sha256=RSJc73GEf31NMdZp9KovEduzfhm10eQ2t5GTZ44aN1U,13
17
+ shadowpaysdk-0.2.0.9.dist-info/RECORD,,