-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsplclient.py
132 lines (108 loc) · 4.26 KB
/
splclient.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from httpcore import ConnectError
from solana.blockhash import Blockhash
from solana.keypair import Keypair
from solana.rpc.types import TxOpts
from spl.token.constants import TOKEN_PROGRAM_ID
from spl.token.async_client import AsyncToken
from solana.rpc.async_api import AsyncClient
from consts import NETWORK_URL
from stor import Stor
class SplClient:
def __init__(self) -> None:
self.apiclient = None
self.feepayer = None
self.feepayerkp = None
self.owner = None
self.mint_auth = None
self.fraction_digits = 9
self.program_id = TOKEN_PROGRAM_ID
self.freeze_auth = None
self.skip_confirm = False
self.inr_token = None
self.tok = None
async def init(self, feepayer, feepayerkeypath, freezeauth, owner):
try:
self.apiclient = AsyncClient(NETWORK_URL)
connected = await self.apiclient.is_connected()
if connected:
self.set_feepayer(feepayer, feepayerkeypath)
self.set_freezeauth(freezeauth)
self.set_owner(owner)
return True
except ConnectError as err:
raise err
async def close(self):
await self.apiclient.close()
async def get_blockhash(self):
try:
bh = await self.apiclient.get_recent_blockhash()
return Blockhash(bh['result']['value']['blockhash'])
except ConnectError as err:
raise err
except BaseException as err:
raise err
async def request_funds(self):
try:
airdrop = await self.apiclient.request_airdrop(self.feepayer, 336168000)
await self.apiclient.confirm_transaction(airdrop['result'])
except ConnectError as err:
raise err
except BaseException as err:
raise err
async def create_mint_auth(self, keys, mustsigncount):
if len(keys) < mustsigncount:
raise Exception("Error: Verify tha arguments passed")
else:
try:
blockhash = await self.get_blockhash()
options = TxOpts(False, False)
self.tok = AsyncToken(self.apiclient, self.owner, TOKEN_PROGRAM_ID, self.feepayerkp)
self.mint_auth = await self.tok.create_multisig(mustsigncount, keys, options, blockhash)
return self.mint_auth
except ConnectError as err:
raise err
except BaseException as err:
raise err
def get_mint_auth(self):
return self.mint_auth
def set_feepayer(self, pubkeyfeepayer, feepayerpath):
try:
pubkey, buff = Stor.get_secret(pubkeyfeepayer, feepayerpath)
kppayer = Keypair.from_secret_key(buff)
self.feepayer = pubkeyfeepayer
self.feepayerkp = kppayer
except ConnectError as err:
raise err
except BaseException as err:
raise err
def set_freezeauth(self, pubkeyfreezeauth):
try:
self.freeze_auth = pubkeyfreezeauth
except ConnectError as err:
raise err
except BaseException as err:
raise err
def set_owner(self, pubkeyowner):
try:
self.owner = pubkeyowner
except ConnectError as err:
raise err
except BaseException as err:
raise err
async def create_inr_token(self):
try:
blockhash = await self.get_blockhash()
self.inr_token = await self.tok.create_mint(self.apiclient,
self.feepayerkp,
self.mint_auth,
self.fraction_digits,
self.program_id,
self.freeze_auth,
self.skip_confirm,
blockhash)
acc_pubkey = await self.inr_token.create_account(self.inr_token.pubkey)
return self.inr_token.pubkey, acc_pubkey
except ConnectError as err:
raise err
except BaseException as err:
raise err