abstract-solana 0.0.0.1__tar.gz → 0.0.0.2__tar.gz
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.
Potentially problematic release.
This version of abstract-solana might be problematic. Click here for more details.
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/PKG-INFO +1 -1
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/setup.py +1 -1
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/pubkey_utils.py +9 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/PKG-INFO +1 -1
- abstract_solana-0.0.0.2/test/test_abstract_solana.py +44 -0
- abstract_solana-0.0.0.1/test/test_abstract_solana.py +0 -111
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/README.md +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/setup.cfg +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/__init__.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/account_key_utils.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/genesis_functions.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/index_utils.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/log_message_functions.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/price_utils.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/signature_data_parse.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/utils.py +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/SOURCES.txt +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/dependency_links.txt +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/requires.txt +0 -0
- {abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/top_level.txt +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from solders.pubkey import Pubkey
|
|
2
2
|
from solders.signature import Signature
|
|
3
|
+
PUMP_FUN_PROGRAM = get_pubkey("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P")
|
|
4
|
+
|
|
3
5
|
def get_pubString(obj):
|
|
4
6
|
return Pubkey.from_string(str(obj))
|
|
5
7
|
|
|
@@ -57,3 +59,10 @@ def get_sigkey(obj):
|
|
|
57
59
|
if is_sigkey(sigKey):
|
|
58
60
|
return sigKey
|
|
59
61
|
return obj
|
|
62
|
+
|
|
63
|
+
def derive_associated_bonding_curve(mint,programId=None):
|
|
64
|
+
return get_associated_token_address(derive_bonding_curve(mint,programId)[0], get_pubkey(mint))
|
|
65
|
+
|
|
66
|
+
def derive_bonding_curve(mint,programId=None):
|
|
67
|
+
programId = programId or PUMP_FUN_PROGRAM
|
|
68
|
+
return Pubkey.find_program_address(["bonding-curve".encode(), bytes(get_pubkey(mint))],programId)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from abstract_solana import *
|
|
2
|
+
from spl.token.instructions import create_associated_token_account, get_associated_token_address
|
|
3
|
+
from solders_rpc import *
|
|
4
|
+
PUMP_FUN_PROGRAM = get_pubkey("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P")
|
|
5
|
+
|
|
6
|
+
PUMP_FUN_ASSOC_TOKEN_ACC_PROG = get_pubkey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL")
|
|
7
|
+
from abstract_solcatcher import *
|
|
8
|
+
def get_solcatcher_api(endpoint,*args,**kwargs):
|
|
9
|
+
return get_async_response(get_solcatcher_endpoint,endpoint=endpoint,*args,**kwargs)
|
|
10
|
+
def get_balance_info(balanceInfo, programId, authority):
|
|
11
|
+
return next((bal for bal in balanceInfo if programId == bal.get("programId") and authority == bal.get("owner")), {})
|
|
12
|
+
def get_balance_from_instruction(transfer_instruction, txnData):
|
|
13
|
+
preBalance = txnData["meta"].get("preTokenBalances", [])
|
|
14
|
+
postBalance = txnData["meta"].get("postTokenBalances", [])
|
|
15
|
+
|
|
16
|
+
# Update transfer_instruction with source, destination, and authority
|
|
17
|
+
accounts = transfer_instruction.get("accounts", [])
|
|
18
|
+
transfer_instruction.update({
|
|
19
|
+
key: accounts[i] for i, key in enumerate(["source", "destination", "authority"])
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
preBalanceInfo = get_balance_info(preBalance, transfer_instruction['programId'], transfer_instruction['authority'])
|
|
23
|
+
postBalanceInfo = get_balance_info(postBalance, transfer_instruction['programId'], transfer_instruction['authority'])
|
|
24
|
+
|
|
25
|
+
amount = preBalanceInfo.get('uiTokenAmount', {}).get('amount', 0) - postBalanceInfo.get('uiTokenAmount', {}).get('amount', 0)
|
|
26
|
+
transfer_instruction['amount'] = amount
|
|
27
|
+
|
|
28
|
+
return transfer_instruction
|
|
29
|
+
def get_transfer_info(transfer_instructions, txnData):
|
|
30
|
+
for transfer_instruction in transfer_instructions:
|
|
31
|
+
updated_instruction = get_balance_from_instruction(transfer_instruction, txnData)
|
|
32
|
+
transfer_instruction.update(updated_instruction)
|
|
33
|
+
return transfer_instructions
|
|
34
|
+
|
|
35
|
+
def get_transfer_instructions(txnData,programId=None):
|
|
36
|
+
programId = programId or PUMP_FUN_ASSOC_TOKEN_ACC_PROG
|
|
37
|
+
return get_transfer_info(find_in_catalog('transfer',txnData,programId=programId),txnData)
|
|
38
|
+
|
|
39
|
+
mint = "911eA3wRZ85ZiSTpmCH1hksPGLGgzyVpfMXtJ4zSzVJ5"
|
|
40
|
+
bondingCurve = str(derive_bonding_curve(mint))
|
|
41
|
+
#input(getsignaturesforaddress(str(derive_bonding_curve(mint)[0])))
|
|
42
|
+
input(get_solcatcher_api("getGenesisSignature",account=str(derive_bonding_curve(mint)[0])))
|
|
43
|
+
parsed_txn = get_solcatcher_api("getParsedTransaction",signature="2pQRuCawe8it1X4bvKZnmSZZfcLUXd3q1ki8z1kMBCKm52eU2obQxGSkpRR1tX88nquy5iNiycebit3BFsQaDPcx")
|
|
44
|
+
input(get_transfer_instructions(parsed_txn,programId=PUMP_FUN_ASSOC_TOKEN_ACC_PROG))
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
from abstract_solana import *
|
|
2
|
-
from spl.token.instructions import create_associated_token_account, get_associated_token_address
|
|
3
|
-
from solders_rpc import *
|
|
4
|
-
PUMP_FUN_PROGRAM = get_pubkey("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P")
|
|
5
|
-
|
|
6
|
-
PUMP_FUN_ASSOC_TOKEN_ACC_PROG = get_pubkey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL")
|
|
7
|
-
from abstract_solcatcher import *
|
|
8
|
-
def get_solcatcher_api(endpoint,*args,**kwargs):
|
|
9
|
-
return get_async_response(get_solcatcher_endpoint,endpoint=endpoint,*args,**kwargs)
|
|
10
|
-
def derive_associated_bonding_curve(mint):
|
|
11
|
-
return get_associated_token_address(derive_bonding_curve(mint)[0], get_pubkey(mint))
|
|
12
|
-
def derive_bonding_curve(mint):
|
|
13
|
-
return Pubkey.find_program_address(["bonding-curve".encode(), bytes(get_pubkey(mint))],PUMP_FUN_PROGRAM)
|
|
14
|
-
|
|
15
|
-
def get_balance_info(balanceInfo, programId, authority):
|
|
16
|
-
return next((bal for bal in balanceInfo if programId == bal.get("programId") and authority == bal.get("owner")), {})
|
|
17
|
-
def get_balance_from_instruction(transfer_instruction, txnData):
|
|
18
|
-
preBalance = txnData["meta"].get("preTokenBalances", [])
|
|
19
|
-
postBalance = txnData["meta"].get("postTokenBalances", [])
|
|
20
|
-
|
|
21
|
-
# Update transfer_instruction with source, destination, and authority
|
|
22
|
-
accounts = transfer_instruction.get("accounts", [])
|
|
23
|
-
transfer_instruction.update({
|
|
24
|
-
key: accounts[i] for i, key in enumerate(["source", "destination", "authority"])
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
preBalanceInfo = get_balance_info(preBalance, transfer_instruction['programId'], transfer_instruction['authority'])
|
|
28
|
-
postBalanceInfo = get_balance_info(postBalance, transfer_instruction['programId'], transfer_instruction['authority'])
|
|
29
|
-
|
|
30
|
-
amount = preBalanceInfo.get('uiTokenAmount', {}).get('amount', 0) - postBalanceInfo.get('uiTokenAmount', {}).get('amount', 0)
|
|
31
|
-
transfer_instruction['amount'] = amount
|
|
32
|
-
|
|
33
|
-
return transfer_instruction
|
|
34
|
-
def get_transfer_info(transfer_instructions, txnData):
|
|
35
|
-
for transfer_instruction in transfer_instructions:
|
|
36
|
-
updated_instruction = get_balance_from_instruction(transfer_instruction, txnData)
|
|
37
|
-
transfer_instruction.update(updated_instruction)
|
|
38
|
-
|
|
39
|
-
return transfer_instructions
|
|
40
|
-
async def async_getSignaturesForAddress(account: Pubkey,
|
|
41
|
-
before: Optional[Signature] = None,
|
|
42
|
-
until: Optional[Signature] = None,
|
|
43
|
-
limit: Optional[int] = None,
|
|
44
|
-
commitment: Optional[Commitment] = None,
|
|
45
|
-
errorProof=False):
|
|
46
|
-
"""Returns confirmed signatures for transactions involving an address.
|
|
47
|
-
|
|
48
|
-
Signatures are returned backwards in time from the provided signature or
|
|
49
|
-
most recent confirmed block.
|
|
50
|
-
|
|
51
|
-
Args:
|
|
52
|
-
account: Account to be queried.
|
|
53
|
-
before: (optional) Start searching backwards from this transaction signature.
|
|
54
|
-
If not provided the search starts from the top of the highest max confirmed block.
|
|
55
|
-
until: (optional) Search until this transaction signature, if found before limit reached.
|
|
56
|
-
limit: (optional) Maximum transaction signatures to return (between 1 and 1,000, default: 1,000).
|
|
57
|
-
commitment: (optional) Bank state to query. It can be either "finalized", "confirmed" or "processed".
|
|
58
|
-
|
|
59
|
-
Example:
|
|
60
|
-
>>> solana_client = Client("http://localhost:8899")
|
|
61
|
-
>>> from solders.pubkey import Pubkey
|
|
62
|
-
>>> pubkey = Pubkey.from_string("Vote111111111111111111111111111111111111111")
|
|
63
|
-
>>> solana_client.get_signatures_for_address(pubkey, limit=1).value[0].signature # doctest: +SKIP
|
|
64
|
-
Signature(
|
|
65
|
-
1111111111111111111111111111111111111111111111111111111111111111,
|
|
66
|
-
)
|
|
67
|
-
"""
|
|
68
|
-
account=get_pubkey(account)
|
|
69
|
-
before=get_sigkey(before)
|
|
70
|
-
until=until
|
|
71
|
-
limit=limit or 1000
|
|
72
|
-
commitment=commitment
|
|
73
|
-
response = json.loads(str(Client().get_signatures_for_address(account=account,before=before,until=until,limit=limit,commitment=commitment)))
|
|
74
|
-
signatureArray= await makeLimitedCall(response.get('method'),response.get('params'))
|
|
75
|
-
if errorProof:
|
|
76
|
-
signatureArray = [signatureData for signatureData in signatureArray if signatureData.get('err') == None]
|
|
77
|
-
return signatureArray
|
|
78
|
-
def getsignaturesforaddress(account,before=None,until=None,limit=None,commitment=None,errorProof=None):
|
|
79
|
-
return get_async_response(async_getSignaturesForAddress,account=account,before=before,until=until,limit=limit,commitment=commitment,errorProof=errorProof)
|
|
80
|
-
|
|
81
|
-
def get_transfer_instructions(txnData,programId=None):
|
|
82
|
-
programId = programId or PUMP_FUN_ASSOC_TOKEN_ACC_PROG
|
|
83
|
-
return get_transfer_info(find_in_catalog('transfer',txnData,programId=programId),txnData)
|
|
84
|
-
async def async_getGenesisSignature(account,before=None,limit=1000,commitment=None):
|
|
85
|
-
method = "getGenesisSignature"
|
|
86
|
-
limit=1000
|
|
87
|
-
|
|
88
|
-
genesisSignature=None
|
|
89
|
-
if genesisSignature == None:
|
|
90
|
-
before = before or None
|
|
91
|
-
genesisSignature = None # This will store the last seen valid signature
|
|
92
|
-
while True:
|
|
93
|
-
signatureArray = await getsignaturesforaddress(account=account,before=before,limit=limit,commitment=commitment)
|
|
94
|
-
signatureArrayInfo = return_oldest_last_and_original_length_from_signature_array(signatureArray)
|
|
95
|
-
genesisSignature = signatureArrayInfo.get("oldestValid") or genesisSignature
|
|
96
|
-
|
|
97
|
-
if before == signatureArrayInfo.get("oldest") or signatureArrayInfo.get("length") < limit:
|
|
98
|
-
#insert_Db(method.lower(), str(account), (str(account), str(genesisSignature)))
|
|
99
|
-
return genesisSignature
|
|
100
|
-
before = signatureArrayInfo.get("oldest")
|
|
101
|
-
return genesisSignature
|
|
102
|
-
|
|
103
|
-
def getgenesissignature(account,before=None,limit=None,commitment=None):
|
|
104
|
-
return get_async_response(async_getGenesisSignature,account=account,before=before,limit=limit,commitment=commitment)
|
|
105
|
-
|
|
106
|
-
mint = "911eA3wRZ85ZiSTpmCH1hksPGLGgzyVpfMXtJ4zSzVJ5"
|
|
107
|
-
bondingCurve = str(derive_bonding_curve(mint))
|
|
108
|
-
#input(getsignaturesforaddress(str(derive_bonding_curve(mint)[0])))
|
|
109
|
-
input(getgenesissignature(str(derive_bonding_curve(mint)[0])))
|
|
110
|
-
parsed_txn = get_solcatcher_api("getParsedTransaction",signature="2pQRuCawe8it1X4bvKZnmSZZfcLUXd3q1ki8z1kMBCKm52eU2obQxGSkpRR1tX88nquy5iNiycebit3BFsQaDPcx")
|
|
111
|
-
input(get_transfer_instructions(parsed_txn,programId=PUMP_FUN_ASSOC_TOKEN_ACC_PROG))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/account_key_utils.py
RENAMED
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/genesis_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/log_message_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana/signature_data_parse.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/requires.txt
RENAMED
|
File without changes
|
{abstract_solana-0.0.0.1 → abstract_solana-0.0.0.2}/src/abstract_solana.egg-info/top_level.txt
RENAMED
|
File without changes
|