py-near 1.1.30__tar.gz → 1.1.32__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.
Files changed (29) hide show
  1. {py_near-1.1.30 → py_near-1.1.32}/PKG-INFO +1 -1
  2. {py_near-1.1.30 → py_near-1.1.32}/pyproject.toml +2 -2
  3. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/account.py +12 -4
  4. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/providers.py +44 -8
  5. {py_near-1.1.30 → py_near-1.1.32}/LICENSE +0 -0
  6. {py_near-1.1.30 → py_near-1.1.32}/README.md +0 -0
  7. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/__init__.py +0 -0
  8. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/constants.py +0 -0
  9. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/__init__.py +0 -0
  10. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/core.py +0 -0
  11. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/ft/__init__.py +0 -0
  12. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/ft/async_client.py +0 -0
  13. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/ft/exceptions.py +0 -0
  14. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/ft/models.py +0 -0
  15. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/fts.py +0 -0
  16. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/keypom/__init__.py +0 -0
  17. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/keypom/async_client.py +0 -0
  18. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/keypom/exceptions.py +0 -0
  19. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/keypom/models.py +0 -0
  20. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/staking/__init__.py +0 -0
  21. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/staking/async_client.py +0 -0
  22. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/staking/exceptions.py +0 -0
  23. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/dapps/staking/models.py +0 -0
  24. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/exceptions/__init__.py +0 -0
  25. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/exceptions/exceptions.py +0 -0
  26. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/exceptions/provider.py +0 -0
  27. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/models.py +0 -0
  28. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/transactions.py +0 -0
  29. {py_near-1.1.30 → py_near-1.1.32}/src/py_near/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py-near
3
- Version: 1.1.30
3
+ Version: 1.1.32
4
4
  Summary: Pretty simple and fully asynchronous framework for working with NEAR blockchain
5
5
  Author: pvolnov
6
6
  Author-email: petr@herewallet.app
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "py-near"
3
- version = "1.1.30"
3
+ version = "1.1.32"
4
4
  description="Pretty simple and fully asynchronous framework for working with NEAR blockchain"
5
5
  authors = ["pvolnov <petr@herewallet.app>"]
6
6
  readme = "README.md"
@@ -22,7 +22,7 @@ base58 = "^2.1.1"
22
22
 
23
23
  [project]
24
24
  name = "py-near"
25
- version = "1.1.30"
25
+ version = "1.1.32"
26
26
  description = "Pretty simple and fully asynchronous framework for working with NEAR blockchaink"
27
27
  authors = [ {name = "pvolnov", email = "petr@herewallet.app"} ]
28
28
  requires-python = ">=3.7"
@@ -108,7 +108,7 @@ class Account(object):
108
108
  self._latest_block_hash_ts = utils.timestamp()
109
109
 
110
110
  async def sign_and_submit_tx(
111
- self, receiver_id, actions: List[Action], nowait=False
111
+ self, receiver_id, actions: List[Action], nowait=False, included=False
112
112
  ) -> Union[TransactionResult, str]:
113
113
  """
114
114
  Sign transaction and send it to blockchain
@@ -116,6 +116,7 @@ class Account(object):
116
116
  :param actions: list of actions
117
117
  :param nowait: if nowait is True, return transaction hash, else wait execution
118
118
  confirm and return TransactionResult
119
+ :param included: if included is True, return transaction hash, else wait execution
119
120
  :return: transaction hash or TransactionResult
120
121
  """
121
122
  if not self._signers:
@@ -149,7 +150,10 @@ class Account(object):
149
150
  )
150
151
 
151
152
  try:
152
- if nowait:
153
+ if included:
154
+ await self._provider.send_tx_included(serialized_tx)
155
+ return trx_hash
156
+ elif nowait:
153
157
  return await self._provider.send_tx(serialized_tx)
154
158
  return await self._provider.send_tx_and_wait(
155
159
  serialized_tx, trx_hash=trx_hash, receiver_id=receiver_id
@@ -211,17 +215,18 @@ class Account(object):
211
215
  return await self._provider.get_account(self.account_id)
212
216
 
213
217
  async def send_money(
214
- self, account_id: str, amount: int, nowait: bool = False
218
+ self, account_id: str, amount: int, nowait: bool = False, included=False
215
219
  ) -> TransactionResult:
216
220
  """
217
221
  Send money to account_id
218
222
  :param account_id: receiver account id
219
223
  :param amount: amount in yoctoNEAR
220
224
  :param nowait: if nowait is True, return transaction hash, else wait execution
225
+ :param included: if included is True, return transaction hash, else wait execution
221
226
  :return: transaction hash or TransactionResult
222
227
  """
223
228
  return await self.sign_and_submit_tx(
224
- account_id, [transactions.create_transfer_action(amount)], nowait
229
+ account_id, [transactions.create_transfer_action(amount)], nowait, included
225
230
  )
226
231
 
227
232
  async def function_call(
@@ -232,6 +237,7 @@ class Account(object):
232
237
  gas: int = constants.DEFAULT_ATTACHED_GAS,
233
238
  amount: int = 0,
234
239
  nowait: bool = False,
240
+ included=False
235
241
  ):
236
242
  """
237
243
  Call function on smart contract
@@ -241,6 +247,7 @@ class Account(object):
241
247
  :param gas: amount of attachment gas. Default is 200000000000000
242
248
  :param amount: amount of attachment NEAR, Default is 0
243
249
  :param nowait: if nowait is True, return transaction hash, else wait execution
250
+ :param included: if included is True, return transaction hash, else wait execution
244
251
  :return: transaction hash or TransactionResult
245
252
  """
246
253
  ser_args = json.dumps(args).encode("utf8")
@@ -252,6 +259,7 @@ class Account(object):
252
259
  )
253
260
  ],
254
261
  nowait,
262
+ included
255
263
  )
256
264
 
257
265
  async def create_account(
@@ -44,7 +44,11 @@ PROVIDER_CODE_TO_EXCEPTION = {
44
44
 
45
45
 
46
46
  class JsonProvider(object):
47
- def __init__(self, rpc_addr):
47
+ def __init__(self, rpc_addr, allow_broadcast=True):
48
+ """
49
+ :param rpc_addr: str or list of str
50
+ :param allow_broadcast: bool - submit signed transaction to all RPCs
51
+ """
48
52
  if isinstance(rpc_addr, tuple):
49
53
  self._rpc_addresses = ["http://{}:{}".format(*rpc_addr)]
50
54
  elif isinstance(rpc_addr, list):
@@ -53,6 +57,7 @@ class JsonProvider(object):
53
57
  self._rpc_addresses = [rpc_addr]
54
58
  self._available_rpcs = self._rpc_addresses.copy()
55
59
  self._last_rpc_addr_check = 0
60
+ self.allow_broadcast = allow_broadcast
56
61
 
57
62
  async def check_available_rpcs(self):
58
63
  if (
@@ -109,10 +114,12 @@ class JsonProvider(object):
109
114
  logger.error(f"Remove rpc: {e}")
110
115
  self._available_rpcs = available_rpcs
111
116
 
112
- async def call_rpc_request(self, method, params, timeout=TIMEOUT_WAIT_RPC):
117
+ async def call_rpc_request(
118
+ self, method, params, timeout=TIMEOUT_WAIT_RPC, broadcast=False
119
+ ):
113
120
  await self.check_available_rpcs()
114
121
  j = {"method": method, "params": params, "id": "dontcare", "jsonrpc": "2.0"}
115
-
122
+ res = {}
116
123
  for rpc_addr in self._available_rpcs:
117
124
  try:
118
125
  async with aiohttp.ClientSession() as session:
@@ -120,10 +127,14 @@ class JsonProvider(object):
120
127
  rpc_addr,
121
128
  json=j,
122
129
  timeout=timeout,
123
- headers={"Referer": "https://tgapp.herewallet.app/"}, # NEAR RPC requires Referer header
130
+ headers={
131
+ "Referer": "https://tgapp.herewallet.app/"
132
+ }, # NEAR RPC requires Referer header
124
133
  )
125
134
  r.raise_for_status()
126
- return json.loads(await r.text())
135
+ res = json.loads(await r.text())
136
+ if not broadcast:
137
+ return res
127
138
  except (
128
139
  RPCTimeoutError,
129
140
  ClientResponseError,
@@ -133,6 +144,7 @@ class JsonProvider(object):
133
144
  ) as e:
134
145
  logger.error(f"Rpc error: {e}")
135
146
  continue
147
+ return res
136
148
 
137
149
  @staticmethod
138
150
  def get_error_from_response(content: dict):
@@ -156,8 +168,10 @@ class JsonProvider(object):
156
168
  break
157
169
  return error
158
170
 
159
- async def json_rpc(self, method, params, timeout=TIMEOUT_WAIT_RPC):
160
- content = await self.call_rpc_request(method, params, timeout)
171
+ async def json_rpc(self, method, params, timeout=TIMEOUT_WAIT_RPC, broadcast=False):
172
+ content = await self.call_rpc_request(
173
+ method, params, timeout, broadcast=broadcast
174
+ )
161
175
  if not content:
162
176
  raise RpcEmptyResponse("RPC returned empty response")
163
177
 
@@ -173,7 +187,28 @@ class JsonProvider(object):
173
187
  :param timeout: rpc request timeout
174
188
  :return:
175
189
  """
176
- return await self.json_rpc("broadcast_tx_async", [signed_tx], timeout=timeout)
190
+ return await self.json_rpc(
191
+ "broadcast_tx_async",
192
+ [signed_tx],
193
+ timeout=timeout,
194
+ broadcast=self.allow_broadcast,
195
+ )
196
+
197
+ async def send_tx_included(
198
+ self, signed_tx: str, timeout: int = constants.TIMEOUT_WAIT_RPC
199
+ ):
200
+ """
201
+ Send a signed transaction to the network and return the hash of the transaction
202
+ :param signed_tx: base64 encoded signed transaction, str.
203
+ :param timeout: rpc request timeout
204
+ :return:
205
+ """
206
+ return await self.json_rpc(
207
+ "send_tx",
208
+ {"signed_tx_base64": signed_tx, "wait_until": "INCLUDED_FINAL"},
209
+ timeout=timeout,
210
+ broadcast=self.allow_broadcast,
211
+ )
177
212
 
178
213
  async def wait_for_trx(self, trx_hash, receiver_id) -> TransactionResult:
179
214
  for _ in range(6):
@@ -207,6 +242,7 @@ class JsonProvider(object):
207
242
  "broadcast_tx_commit",
208
243
  [signed_tx],
209
244
  timeout=timeout,
245
+ broadcast=self.allow_broadcast,
210
246
  )
211
247
  return TransactionResult(**res)
212
248
  except RPCTimeoutError:
File without changes
File without changes
File without changes
File without changes