From 8e63e6e0f92bf76006bd251583979b620f6fc293 Mon Sep 17 00:00:00 2001 From: Phuc Ta <30641530+vinhphuctadang@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:18:01 +0700 Subject: [PATCH 01/23] feat: add MsgPrivilegedExecuteContract, MsgInstantiateContract composer (#247) * feat: add MsgPrivilegedExecuteContract, MsgInstantiateContract composer * chore: update command * chore: add misisng typehints --- pyinjective/composer.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pyinjective/composer.py b/pyinjective/composer.py index 41140aea..000efcf6 100644 --- a/pyinjective/composer.py +++ b/pyinjective/composer.py @@ -900,6 +900,24 @@ def MsgVote( return cosmos_gov_tx_pb.MsgVote( proposal_id=proposal_id, voter=voter, option=option ) + + def MsgPrivilegedExecuteContract(self, sender: str, contract: str, msg: str, **kwargs) -> injective_exchange_tx_pb.MsgPrivilegedExecuteContract: + return injective_exchange_tx_pb.MsgPrivilegedExecuteContract( + sender=sender, + contract_address=contract, + data=msg, + funds=kwargs.get('funds') # funds is a string of Coin strings, comma separated, e.g 100000inj,20000000000usdt + ) + + def MsgInstantiateContract(self, sender: str, admin: str, code_id: int, label: str, message: bytes, **kwargs) -> wasm_tx_pb.MsgInstantiateContract: + return wasm_tx_pb.MsgInstantiateContract( + sender=sender, + admin=admin, + code_id=code_id, + label=label, + msg=message, + funds=kwargs.get('funds'), # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. The coins in the list must be sorted in alphabetical order by denoms. + ) # data field format: [request-msg-header][raw-byte-msg-response] # you need to figure out this magic prefix number to trim request-msg-header off the data From 86982916f5a887a20d1c5b230b6871355f197a0e Mon Sep 17 00:00:00 2001 From: abel Date: Mon, 18 Sep 2023 23:55:17 -0300 Subject: [PATCH 02/23] (feat) Added Poetry to the proyect and the pyproject.toml configuration file. Added pre-commit. Added the use of Flake8 through Flakeheaven. --- .github/workflows/release.yml | 2 +- .gitignore | 2 + .pre-commit-config.yaml | 19 + LICENSE.md | 2 +- NOTICE.md | 2 +- README.md | 3 +- compatibility-tests/README.md | 2 +- compatibility-tests/tests.py | 17 +- compatibility-tests/unit_tests.py | 15 +- examples/SendToInjective.py | 22 +- examples/chain_client/0_LocalOrderHash.py | 19 +- .../13_MsgIncreasePositionMargin.py | 2 +- examples/chain_client/15_MsgWithdraw.py | 2 +- .../chain_client/16_MsgSubaccountTransfer.py | 2 +- .../chain_client/17_MsgBatchUpdateOrders.py | 4 +- examples/chain_client/18_MsgBid.py | 3 +- examples/chain_client/19_MsgGrant.py | 20 +- examples/chain_client/1_MsgSend.py | 2 +- examples/chain_client/20_MsgExec.py | 6 +- examples/chain_client/21_MsgRevoke.py | 11 +- examples/chain_client/22_MsgSendToEth.py | 4 +- .../chain_client/23_MsgRelayPriceFeedPrice.py | 4 +- examples/chain_client/24_MsgRewardsOptOut.py | 4 +- examples/chain_client/25_MsgDelegate.py | 4 +- .../26_MsgWithdrawDelegatorReward.py | 4 +- examples/chain_client/27_Grants.py | 3 +- examples/chain_client/28_BankBalances.py | 3 +- examples/chain_client/29_BankBalance.py | 3 +- examples/chain_client/2_MsgDeposit.py | 2 +- examples/chain_client/30_ExternalTransfer.py | 2 +- .../31_MsgCreateBinaryOptionsLimitOrder.py | 3 +- .../32_MsgCreateBinaryOptionsMarketOrder.py | 2 +- .../33_MsgCancelBinaryOptionsOrder.py | 2 +- .../34_MsgAdminUpdateBinaryOptionsMarket.py | 2 +- .../35_MsgInstantBinaryOptionsMarketLaunch.py | 6 +- .../chain_client/36_MsgRelayProviderPrices.py | 2 +- examples/chain_client/37_GetTx.py | 3 +- .../chain_client/38_StreamEventOrderFail.py | 5 +- examples/chain_client/39_Account.py | 1 - .../chain_client/3_MsgCreateSpotLimitOrder.py | 2 +- .../chain_client/40_MsgExecuteContract.py | 9 +- .../chain_client/41_MsgCreateInsuranceFund.py | 5 +- examples/chain_client/42_MsgUnderwrite.py | 5 +- .../chain_client/43_MsgRequestRedemption.py | 7 +- .../4_MsgCreateSpotMarketOrder.py | 2 +- examples/chain_client/5_MsgCancelSpotOrder.py | 2 +- .../6_MsgCreateDerivativeLimitOrder.py | 2 +- .../7_MsgCreateDerivativeMarketOrder.py | 2 +- .../8_MsgCancelDerivativeOrder.py | 2 +- .../accounts_rpc/1_StreamSubaccountBalance.py | 1 - .../accounts_rpc/2_SubaccountBalance.py | 1 - .../accounts_rpc/3_SubaccountsList.py | 1 - .../accounts_rpc/4_SubaccountBalancesList.py | 1 - .../accounts_rpc/5_SubaccountHistory.py | 1 - .../accounts_rpc/6_SubaccountOrderSummary.py | 7 +- .../accounts_rpc/7_OrderStates.py | 15 +- .../accounts_rpc/8_Portfolio.py | 1 - .../exchange_client/accounts_rpc/9_Rewards.py | 1 - .../exchange_client/auctions_rpc/1_Auction.py | 1 - .../auctions_rpc/2_Auctions.py | 1 - .../auctions_rpc/3_StreamBids.py | 1 - .../10_StreamHistoricalOrders.py | 3 - .../derivative_exchange_rpc/11_Trades.py | 1 - .../12_StreamTrades.py | 1 - .../13_SubaccountOrdersList.py | 1 - .../14_SubaccountTradesList.py | 1 - .../15_FundingPayments.py | 7 +- .../17_FundingRates.py | 7 +- .../derivative_exchange_rpc/18_Orderbooks.py | 1 - .../19_Binary_Options_Markets.py | 1 - .../derivative_exchange_rpc/1_Market.py | 1 - .../20_Binary_Options_Market.py | 1 - .../21_Historical_Orders.py | 1 - .../22_OrderbooksV2.py | 1 - .../derivative_exchange_rpc/2_Markets.py | 1 - .../derivative_exchange_rpc/3_StreamMarket.py | 1 - .../derivative_exchange_rpc/4_Orderbook.py | 1 - .../5_StreamOrderbooks.py | 1 - .../6_StreamOrderbookUpdate.py | 3 +- .../derivative_exchange_rpc/7_Positions.py | 3 +- .../9_StreamPositions.py | 1 - .../explorer_rpc/10_GetIBCTransfers.py | 5 +- .../explorer_rpc/1_GetTxByHash.py | 1 - .../explorer_rpc/2_AccountTxs.py | 1 - .../exchange_client/explorer_rpc/3_Blocks.py | 1 - .../exchange_client/explorer_rpc/4_Block.py | 1 - .../explorer_rpc/5_TxsRequest.py | 1 - .../explorer_rpc/6_StreamTxs.py | 1 - .../explorer_rpc/7_StreamBlocks.py | 1 - .../explorer_rpc/8_GetPeggyDeposits.py | 1 - .../explorer_rpc/9_GetPeggyWithdrawals.py | 1 - .../insurance_rpc/1_InsuranceFunds.py | 1 - .../insurance_rpc/2_Redemptions.py | 1 - examples/exchange_client/meta_rpc/1_Ping.py | 1 - .../exchange_client/meta_rpc/2_Version.py | 1 - examples/exchange_client/meta_rpc/3_Info.py | 1 - .../meta_rpc/4_StreamKeepAlive.py | 1 - .../oracle_rpc/1_StreamPrices.py | 1 - .../exchange_client/oracle_rpc/2_Price.py | 1 - .../oracle_rpc/3_OracleList.py | 1 - .../portfolio_rpc/1_AccountPortfolio.py | 1 - .../portfolio_rpc/2_StreamAccountPortfolio.py | 1 - .../spot_exchange_rpc/10_StreamTrades.py | 1 - .../11_SubaccountOrdersList.py | 1 - .../12_SubaccountTradesList.py | 1 - .../spot_exchange_rpc/13_StreamOrderbooks.py | 1 - .../spot_exchange_rpc/14_Orderbooks.py | 1 - .../spot_exchange_rpc/15_HistoricalOrders.py | 1 - .../spot_exchange_rpc/1_Market.py | 1 - .../spot_exchange_rpc/2_Markets.py | 1 - .../spot_exchange_rpc/3_StreamMarkets.py | 1 - .../spot_exchange_rpc/4_Orderbook.py | 1 - .../spot_exchange_rpc/6_Trades.py | 1 - .../7_StreamOrderbookSnapshot.py | 1 - .../8_StreamOrderbookUpdate.py | 5 +- .../9_StreamHistoricalOrders.py | 2 - poetry.lock | 2183 +++++++++++++++++ pyinjective/Peggo_ABI.json | 2 +- pyinjective/__init__.py | 6 +- pyinjective/async_client.py | 8 +- pyinjective/composer.py | 346 +-- pyinjective/constant.py | 3 +- pyinjective/core/gas_limit_estimator.py | 2 +- pyinjective/core/market.py | 12 +- pyinjective/core/network.py | 18 +- pyinjective/core/token.py | 1 + pyinjective/denoms_devnet.ini | 1 - pyinjective/denoms_testnet.ini | 1 - pyinjective/orderhash.py | 32 +- pyinjective/sendtocosmos.py | 21 +- pyinjective/transaction.py | 5 +- pyinjective/utils/fetch_metadata.py | 7 +- pyinjective/utils/metadata_validation.py | 12 +- pyinjective/wallet.py | 11 +- pyproject.toml | 64 + tests/core/test_gas_limit_estimator.py | 6 +- tests/core/test_market.py | 58 +- tests/core/test_token.py | 3 +- tests/model_fixtures/markets_fixtures.py | 1 + tests/rpc_fixtures/configurable_servicers.py | 2 - tests/rpc_fixtures/markets_fixtures.py | 8 +- tests/test_async_client.py | 35 +- tests/test_composer.py | 89 +- tests/test_wallet.py | 5 +- 144 files changed, 2806 insertions(+), 504 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dfa03d4e..00e9bacc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,4 +24,4 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} run: | python setup.py sdist bdist_wheel - twine upload --skip-existing dist/* \ No newline at end of file + twine upload --skip-existing dist/* diff --git a/.gitignore b/.gitignore index 39bf0a94..0afa586b 100644 --- a/.gitignore +++ b/.gitignore @@ -143,3 +143,5 @@ cython_debug/ .chain_cookie .exchange_cookie + +.flakeheaven_cache diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..9ed384fe --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +exclude: '^pyinjective/proto/.*' +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml +- repo: https://github.com/flakeheaven/flakeheaven + rev: 3.3.0 + hooks: + - id: flakeheaven + name: flakeheaven + description: '`flakeheaven` is a `flake8` wrapper.' + entry: flakeheaven lint + language: python + types_or: [ python, jupyter, markdown, rst, yaml ] + require_serial: true + minimum_pre_commit_version: 2.9.0 diff --git a/LICENSE.md b/LICENSE.md index 84301b20..34a77c27 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -200,4 +200,4 @@ Copyright © 2021 - 2022 Injective Labs Inc. (https://injectivelabs.org/) distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/NOTICE.md b/NOTICE.md index f8c4b84b..a8a99b61 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -5,4 +5,4 @@ Copyright © 2021 - 2022 Injective Labs Inc. (https://injectivelabs.org/) Originally released by Injective Labs Inc. under:
Apache License
Version 2.0, January 2004
-http://www.apache.org/licenses/ +http://www.apache.org/licenses/ diff --git a/README.md b/README.md index 381d3401..6186d70f 100644 --- a/README.md +++ b/README.md @@ -252,5 +252,4 @@ Copyright © 2021 - 2022 Injective Labs Inc. (https://injectivelabs.org/) Originally released by Injective Labs Inc. under:
Apache License
Version 2.0, January 2004
-http://www.apache.org/licenses/ - +http://www.apache.org/licenses/ diff --git a/compatibility-tests/README.md b/compatibility-tests/README.md index 25abb93e..b9177a06 100644 --- a/compatibility-tests/README.md +++ b/compatibility-tests/README.md @@ -38,6 +38,6 @@ API users must also install the typing_extensions library with the below command ```bash pip3 install typing_extensions -``` +``` The Python 3.7 stdlib has an older version of typing.py so the above change in the code will fix the compatibility issue by importing Literal from typing_extensions diff --git a/compatibility-tests/tests.py b/compatibility-tests/tests.py index aba3b682..7dd084f6 100644 --- a/compatibility-tests/tests.py +++ b/compatibility-tests/tests.py @@ -1,9 +1,6 @@ import asyncio import aiohttp -import logging -import json import base64 -import hashlib import json import ecdsa import sha3 @@ -11,10 +8,8 @@ from typing import Any, Dict, List from injective.chain_client._wallet import ( - generate_wallet, privkey_to_address, privkey_to_pubkey, - pubkey_to_address, seed_to_privkey, DEFAULT_BECH32_HRP, ) @@ -25,6 +20,7 @@ MIN_GAS_PRICE = 500000000 + class Transaction: def __init__( @@ -130,6 +126,7 @@ def _get_sign_message(self) -> Dict[str, Any]: "msgs": self._msgs, } + async def main() -> None: sender_pk = seed_to_privkey( "physical page glare junk return scale subject river token door mirror title" @@ -143,7 +140,9 @@ async def main() -> None: accounts_rpc = accounts_rpc_grpc.InjectiveAccountsRPCStub(channel) account_addr = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" - subacc = await accounts_rpc.SubaccountsList(accounts_rpc_pb.SubaccountsListRequest(account_address = account_addr)) + subacc = await accounts_rpc.SubaccountsList( + accounts_rpc_pb.SubaccountsListRequest(account_address=account_addr) + ) for sub in subacc.subaccounts: print("Primary subaccount:", sub) break @@ -162,7 +161,7 @@ async def main() -> None: denom="inj", ) tx.add_exchange_msg_deposit( - subaccount= sub, + subaccount=sub, amount=10000000000000000, denom="inj", ) @@ -172,6 +171,7 @@ async def main() -> None: print("Signed Tx:", tx_json) print("Sent Tx:", await post_tx(tx_json)) + async def get_account_num_seq(address: str) -> (int, int): async with aiohttp.ClientSession() as session: async with session.request( @@ -186,6 +186,7 @@ async def get_account_num_seq(address: str) -> (int, int): acc = resp['account']['base_account'] return acc['account_number'], acc['sequence'] + async def post_tx(tx_json: str): async with aiohttp.ClientSession() as session: async with session.request( @@ -204,4 +205,4 @@ async def post_tx(tx_json: str): return resp['txhash'] if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/compatibility-tests/unit_tests.py b/compatibility-tests/unit_tests.py index 31314aea..825fc421 100644 --- a/compatibility-tests/unit_tests.py +++ b/compatibility-tests/unit_tests.py @@ -8,10 +8,8 @@ from typing import Any, Dict, List from injective.chain_client._wallet import ( - generate_wallet, privkey_to_address, privkey_to_pubkey, - pubkey_to_address, seed_to_privkey, DEFAULT_BECH32_HRP, ) @@ -22,6 +20,7 @@ MIN_GAS_PRICE = 500000000 + class Transaction: def __init__( @@ -50,7 +49,6 @@ def __init__( self._sync_mode = sync_mode self._msgs: List[dict] = [] - def add_cosmos_bank_msg_send(self, recipient: str, amount: int, denom: str = "inj") -> None: msg = { "type": "cosmos-sdk/MsgSend", @@ -141,6 +139,7 @@ async def get_account_num_seq(address: str) -> (int, int): acc = resp['account']['base_account'] return acc['account_number'], acc['sequence'] + async def post_tx(tx_json: str): async with aiohttp.ClientSession() as session: async with session.request( @@ -158,6 +157,7 @@ async def post_tx(tx_json: str): return resp['txhash'] + @pytest.fixture async def msg_send(): sender_pk = seed_to_privkey( @@ -172,7 +172,9 @@ async def msg_send(): accounts_rpc = accounts_rpc_grpc.InjectiveAccountsRPCStub(channel) account_addr = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" - subacc = await accounts_rpc.SubaccountsList(accounts_rpc_pb.SubaccountsListRequest(account_address = account_addr)) + subacc = await accounts_rpc.SubaccountsList( + accounts_rpc_pb.SubaccountsListRequest(account_address=account_addr) + ) for sub in subacc.subaccounts: print("Primary subaccount:", sub) break @@ -191,7 +193,7 @@ async def msg_send(): denom="inj", ) tx.add_exchange_msg_deposit( - subaccount= sub, + subaccount=sub, amount=10000000000000000, denom="inj", ) @@ -204,6 +206,7 @@ async def msg_send(): return len(tx_result) + @pytest.mark.asyncio async def test_msg_send(msg_send): - assert msg_send == 64 \ No newline at end of file + assert msg_send == 64 diff --git a/examples/SendToInjective.py b/examples/SendToInjective.py index 5d0d1072..7b0856db 100644 --- a/examples/SendToInjective.py +++ b/examples/SendToInjective.py @@ -1,8 +1,6 @@ import json -import requests import asyncio -import logging from pyinjective.core.network import Network from pyinjective.sendtocosmos import Peggo @@ -10,6 +8,7 @@ import importlib.resources as pkg_resources import pyinjective + async def main() -> None: # select network: testnet, mainnet network = Network.testnet() @@ -25,13 +24,26 @@ async def main() -> None: receiver = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" amount = 1 - data = '{"@type": "/injective.exchange.v1beta1.MsgDeposit","sender": "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku","subaccountId": "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000","amount": {"denom": "inj","amount": "1000000000000000000"}}' + data = ('{"@type": "/injective.exchange.v1beta1.MsgDeposit",' + '"sender": "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku",' + '"subaccountId": "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000",' + '"amount": {"denom": "inj","amount": "1000000000000000000"}}' + ) import_peggo = pkg_resources.read_text(pyinjective, 'Peggo_ABI.json') peggo_abi = json.loads(import_peggo) - peggo_composer.sendToInjective(ethereum_endpoint=ethereum_endpoint, private_key=private_key, token_contract=token_contract, - receiver=receiver, amount=amount, maxFeePerGas=maxFeePerGas_Gwei, maxPriorityFeePerGas=maxPriorityFeePerGas_Gwei, data=data, peggo_abi=peggo_abi) + peggo_composer.sendToInjective( + ethereum_endpoint=ethereum_endpoint, + private_key=private_key, + token_contract=token_contract, + receiver=receiver, + amount=amount, + maxFeePerGas=maxFeePerGas_Gwei, + maxPriorityFeePerGas=maxPriorityFeePerGas_Gwei, + data=data, + peggo_abi=peggo_abi + ) if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/0_LocalOrderHash.py b/examples/chain_client/0_LocalOrderHash.py index 0e20049b..c66513af 100644 --- a/examples/chain_client/0_LocalOrderHash.py +++ b/examples/chain_client/0_LocalOrderHash.py @@ -1,12 +1,12 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.composer import Composer from pyinjective.transaction import Transaction from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey from pyinjective.orderhash import OrderHashManager + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -20,14 +20,14 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) subaccount_id_2 = address.get_subaccount_id(index=1) order_hash_manager = OrderHashManager( address=address, network=network, - subaccount_indexes=[0,1,2,7] + subaccount_indexes=[0, 1, 2, 7] ) # prepare trade info @@ -91,7 +91,9 @@ async def main() -> None: ) # compute order hashes - order_hashes = order_hash_manager.compute_order_hashes(spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=0) + order_hashes = order_hash_manager.compute_order_hashes( + spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=0 + ) print("computed spot order hashes", order_hashes.spot) print("computed derivative order hashes", order_hashes.derivative) @@ -123,9 +125,10 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) - # compute order hashes - order_hashes = order_hash_manager.compute_order_hashes(spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=0) + order_hashes = order_hash_manager.compute_order_hashes( + spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=0 + ) print("computed spot order hashes", order_hashes.spot) print("computed derivative order hashes", order_hashes.derivative) @@ -213,7 +216,9 @@ async def main() -> None: ) # compute order hashes - order_hashes = order_hash_manager.compute_order_hashes(spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=1) + order_hashes = order_hash_manager.compute_order_hashes( + spot_orders=spot_orders, derivative_orders=derivative_orders, subaccount_index=1 + ) print("computed spot order hashes", order_hashes.spot) print("computed derivative order hashes", order_hashes.derivative) diff --git a/examples/chain_client/13_MsgIncreasePositionMargin.py b/examples/chain_client/13_MsgIncreasePositionMargin.py index d5e1d7cd..ad154bc5 100644 --- a/examples/chain_client/13_MsgIncreasePositionMargin.py +++ b/examples/chain_client/13_MsgIncreasePositionMargin.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/15_MsgWithdraw.py b/examples/chain_client/15_MsgWithdraw.py index fb585719..74faebe6 100644 --- a/examples/chain_client/15_MsgWithdraw.py +++ b/examples/chain_client/15_MsgWithdraw.py @@ -33,7 +33,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare tx msg diff --git a/examples/chain_client/16_MsgSubaccountTransfer.py b/examples/chain_client/16_MsgSubaccountTransfer.py index e3dbde9b..50c92ae6 100644 --- a/examples/chain_client/16_MsgSubaccountTransfer.py +++ b/examples/chain_client/16_MsgSubaccountTransfer.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) dest_subaccount_id = address.get_subaccount_id(index=1) diff --git a/examples/chain_client/17_MsgBatchUpdateOrders.py b/examples/chain_client/17_MsgBatchUpdateOrders.py index 853b85ee..e92420a3 100644 --- a/examples/chain_client/17_MsgBatchUpdateOrders.py +++ b/examples/chain_client/17_MsgBatchUpdateOrders.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info @@ -136,7 +136,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/18_MsgBid.py b/examples/chain_client/18_MsgBid.py index 001fde7c..4f475a87 100644 --- a/examples/chain_client/18_MsgBid.py +++ b/examples/chain_client/18_MsgBid.py @@ -5,6 +5,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -18,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg msg = composer.MsgBid( diff --git a/examples/chain_client/19_MsgGrant.py b/examples/chain_client/19_MsgGrant.py index 17a8ffee..23ed9c3f 100644 --- a/examples/chain_client/19_MsgGrant.py +++ b/examples/chain_client/19_MsgGrant.py @@ -19,21 +19,21 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) - subaccount_id = address.get_subaccount_id(index=0) - market_ids = ["0x0511ddc4e6586f3bfe1acb2dd905f8b8a82c97e1edaef654b12ca7e6031ca0fa"] + await client.get_account(address.to_acc_bech32()) + # subaccount_id = address.get_subaccount_id(index=0) + # market_ids = ["0x0511ddc4e6586f3bfe1acb2dd905f8b8a82c97e1edaef654b12ca7e6031ca0fa"] # prepare tx msg - #GENERIC AUTHZ + # GENERIC AUTHZ msg = composer.MsgGrantGeneric( - granter = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", - grantee = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", - msg_type = "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder", - expire_in=31536000 # 1 year + granter="inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", + grantee="inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", + msg_type="/injective.exchange.v1beta1.MsgCreateSpotLimitOrder", + expire_in=31536000 # 1 year ) - #TYPED AUTHZ + # TYPED AUTHZ # msg = composer.MsgGrantTyped( # granter = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", # grantee = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", @@ -63,7 +63,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/1_MsgSend.py b/examples/chain_client/1_MsgSend.py index f4894b4d..30cfd327 100644 --- a/examples/chain_client/1_MsgSend.py +++ b/examples/chain_client/1_MsgSend.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg msg = composer.MsgSend( diff --git a/examples/chain_client/20_MsgExec.py b/examples/chain_client/20_MsgExec.py index e0f6854e..7c47ce04 100644 --- a/examples/chain_client/20_MsgExec.py +++ b/examples/chain_client/20_MsgExec.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -62,7 +62,7 @@ async def main() -> None: return sim_res_msg = composer.MsgResponses(sim_res, simulation=True) - data=sim_res_msg[0] + data = sim_res_msg[0] unpacked_msg_res = composer.UnpackMsgExecResponse( msg_type=msg0.__class__.__name__, data=data @@ -72,7 +72,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/21_MsgRevoke.py b/examples/chain_client/21_MsgRevoke.py index 51b23f8b..2269a852 100644 --- a/examples/chain_client/21_MsgRevoke.py +++ b/examples/chain_client/21_MsgRevoke.py @@ -19,14 +19,13 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) - subaccount_id = address.get_subaccount_id(index=0) + await client.get_account(address.to_acc_bech32()) # prepare tx msg msg = composer.MsgRevoke( - granter = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", - grantee = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", - msg_type = "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder" + granter="inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", + grantee="inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", + msg_type="/injective.exchange.v1beta1.MsgCreateSpotLimitOrder" ) # build sim tx @@ -49,7 +48,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/22_MsgSendToEth.py b/examples/chain_client/22_MsgSendToEth.py index aed1442f..38d3e001 100644 --- a/examples/chain_client/22_MsgSendToEth.py +++ b/examples/chain_client/22_MsgSendToEth.py @@ -6,6 +6,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -19,8 +20,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) - subaccount_id = address.get_subaccount_id(index=0) + await client.get_account(address.to_acc_bech32()) # prepare msg asset = "injective-protocol" diff --git a/examples/chain_client/23_MsgRelayPriceFeedPrice.py b/examples/chain_client/23_MsgRelayPriceFeedPrice.py index d0a96996..5edcc3e6 100644 --- a/examples/chain_client/23_MsgRelayPriceFeedPrice.py +++ b/examples/chain_client/23_MsgRelayPriceFeedPrice.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) price = 100 price_to_send = [str(int(price * 10 ** 18))] @@ -54,7 +54,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/24_MsgRewardsOptOut.py b/examples/chain_client/24_MsgRewardsOptOut.py index ef876c35..153ec9e0 100644 --- a/examples/chain_client/24_MsgRewardsOptOut.py +++ b/examples/chain_client/24_MsgRewardsOptOut.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg msg = composer.MsgRewardsOptOut( @@ -46,7 +46,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/25_MsgDelegate.py b/examples/chain_client/25_MsgDelegate.py index 7df4eb17..cbf2111f 100644 --- a/examples/chain_client/25_MsgDelegate.py +++ b/examples/chain_client/25_MsgDelegate.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg validator_address = "injvaloper1ultw9r29l8nxy5u6thcgusjn95vsy2caw722q5" @@ -51,7 +51,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/26_MsgWithdrawDelegatorReward.py b/examples/chain_client/26_MsgWithdrawDelegatorReward.py index 2ee30e32..500d6380 100644 --- a/examples/chain_client/26_MsgWithdrawDelegatorReward.py +++ b/examples/chain_client/26_MsgWithdrawDelegatorReward.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg validator_address = "injvaloper1ultw9r29l8nxy5u6thcgusjn95vsy2caw722q5" @@ -49,7 +49,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/27_Grants.py b/examples/chain_client/27_Grants.py index e94ce9b8..8a63c6d1 100644 --- a/examples/chain_client/27_Grants.py +++ b/examples/chain_client/27_Grants.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -15,4 +14,4 @@ async def main() -> None: print(authorizations) if __name__ == '__main__': - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/28_BankBalances.py b/examples/chain_client/28_BankBalances.py index 5a52939f..ba9864ac 100644 --- a/examples/chain_client/28_BankBalances.py +++ b/examples/chain_client/28_BankBalances.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -13,4 +12,4 @@ async def main() -> None: print(all_bank_balances) if __name__ == '__main__': - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/29_BankBalance.py b/examples/chain_client/29_BankBalance.py index d5d2d533..e9a3907e 100644 --- a/examples/chain_client/29_BankBalance.py +++ b/examples/chain_client/29_BankBalance.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -14,4 +13,4 @@ async def main() -> None: print(bank_balance) if __name__ == '__main__': - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/2_MsgDeposit.py b/examples/chain_client/2_MsgDeposit.py index 1484b1ed..2131cf22 100644 --- a/examples/chain_client/2_MsgDeposit.py +++ b/examples/chain_client/2_MsgDeposit.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare tx msg diff --git a/examples/chain_client/30_ExternalTransfer.py b/examples/chain_client/30_ExternalTransfer.py index a973e4b2..b974afb7 100644 --- a/examples/chain_client/30_ExternalTransfer.py +++ b/examples/chain_client/30_ExternalTransfer.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) dest_subaccount_id = "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000" diff --git a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py index 25652212..b866a022 100644 --- a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py +++ b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py @@ -6,6 +6,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -19,7 +20,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py index 8bd5ae77..f7b54644 100644 --- a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py +++ b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py index f3e534b7..b83c2a3c 100644 --- a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py +++ b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py index 073529ae..e66707b8 100644 --- a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py +++ b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare trade info market_id = "0xfafec40a7b93331c1fc89c23f66d11fbb48f38dfdd78f7f4fc4031fad90f6896" diff --git a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py index 35c30c39..305cafdd 100644 --- a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py +++ b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg msg = composer.MsgInstantBinaryOptionsMarketLaunch( @@ -32,8 +32,8 @@ async def main() -> None: quote_denom="peggy0xdAC17F958D2ee523a2206206994597C13D831ec7", quote_decimals=6, oracle_scale_factor=6, - maker_fee_rate=0.0005, # 0.05% - taker_fee_rate=0.0010, # 0.10% + maker_fee_rate=0.0005, # 0.05% + taker_fee_rate=0.0010, # 0.10% expiration_timestamp=1680730982, settlement_timestamp=1690730982, min_price_tick_size=0.01, diff --git a/examples/chain_client/36_MsgRelayProviderPrices.py b/examples/chain_client/36_MsgRelayProviderPrices.py index 23c9ac94..7ca40a85 100644 --- a/examples/chain_client/36_MsgRelayProviderPrices.py +++ b/examples/chain_client/36_MsgRelayProviderPrices.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) provider = "ufc" symbols = ["KHABIB-TKO-05/30/2023", "KHABIB-TKO-05/26/2023"] diff --git a/examples/chain_client/37_GetTx.py b/examples/chain_client/37_GetTx.py index 77d13eb9..2ee14f19 100644 --- a/examples/chain_client/37_GetTx.py +++ b/examples/chain_client/37_GetTx.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -13,4 +12,4 @@ async def main() -> None: print(tx_logs) if __name__ == '__main__': - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/38_StreamEventOrderFail.py b/examples/chain_client/38_StreamEventOrderFail.py index e453fd12..5840cb4e 100644 --- a/examples/chain_client/38_StreamEventOrderFail.py +++ b/examples/chain_client/38_StreamEventOrderFail.py @@ -1,5 +1,4 @@ import asyncio -import logging import json import websockets import base64 @@ -9,7 +8,9 @@ async def main() -> None: network = Network.mainnet() - event_filter = "tm.event='Tx' AND message.sender='inj1rwv4zn3jptsqs7l8lpa3uvzhs57y8duemete9e' AND message.action='/injective.exchange.v1beta1.MsgBatchUpdateOrders' AND injective.exchange.v1beta1.EventOrderFail.flags EXISTS" + event_filter = ("tm.event='Tx' AND message.sender='inj1rwv4zn3jptsqs7l8lpa3uvzhs57y8duemete9e' " + "AND message.action='/injective.exchange.v1beta1.MsgBatchUpdateOrders' " + "AND injective.exchange.v1beta1.EventOrderFail.flags EXISTS") query = json.dumps({ "jsonrpc": "2.0", "method": "subscribe", diff --git a/examples/chain_client/39_Account.py b/examples/chain_client/39_Account.py index 4089a5dd..c7b76e2a 100644 --- a/examples/chain_client/39_Account.py +++ b/examples/chain_client/39_Account.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/chain_client/3_MsgCreateSpotLimitOrder.py b/examples/chain_client/3_MsgCreateSpotLimitOrder.py index 34466874..ba63d77b 100644 --- a/examples/chain_client/3_MsgCreateSpotLimitOrder.py +++ b/examples/chain_client/3_MsgCreateSpotLimitOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/40_MsgExecuteContract.py b/examples/chain_client/40_MsgExecuteContract.py index cde8c480..dbcedd5b 100644 --- a/examples/chain_client/40_MsgExecuteContract.py +++ b/examples/chain_client/40_MsgExecuteContract.py @@ -20,12 +20,15 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg # NOTE: COIN MUST BE SORTED IN ALPHABETICAL ORDER BY DENOMS funds = [ - composer.Coin(amount=69, denom='factory/inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6/inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9'), + composer.Coin( + amount=69, + denom='factory/inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6/inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9' + ), composer.Coin(amount=420, denom='peggy0x44C21afAaF20c270EBbF5914Cfc3b5022173FEB7'), composer.Coin(amount=1, denom='peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5'), ] @@ -74,4 +77,4 @@ async def main() -> None: print("gas fee: {} INJ".format(gas_fee)) if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/41_MsgCreateInsuranceFund.py b/examples/chain_client/41_MsgCreateInsuranceFund.py index 89007e23..f4d95666 100644 --- a/examples/chain_client/41_MsgCreateInsuranceFund.py +++ b/examples/chain_client/41_MsgCreateInsuranceFund.py @@ -5,6 +5,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -19,7 +20,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) msg = composer.MsgCreateInsuranceFund( sender=address.to_acc_bech32(), @@ -70,4 +71,4 @@ async def main() -> None: print("gas fee: {} INJ".format(gas_fee)) if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/42_MsgUnderwrite.py b/examples/chain_client/42_MsgUnderwrite.py index 7c143e51..dd9a4dcf 100644 --- a/examples/chain_client/42_MsgUnderwrite.py +++ b/examples/chain_client/42_MsgUnderwrite.py @@ -5,6 +5,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -19,7 +20,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) msg = composer.MsgUnderwrite( sender=address.to_acc_bech32(), @@ -66,4 +67,4 @@ async def main() -> None: print("gas fee: {} INJ".format(gas_fee)) if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/43_MsgRequestRedemption.py b/examples/chain_client/43_MsgRequestRedemption.py index a32add66..6b813426 100644 --- a/examples/chain_client/43_MsgRequestRedemption.py +++ b/examples/chain_client/43_MsgRequestRedemption.py @@ -5,6 +5,7 @@ from pyinjective.core.network import Network from pyinjective.wallet import PrivateKey + async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() @@ -19,13 +20,13 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) msg = composer.MsgRequestRedemption( sender=address.to_acc_bech32(), market_id="0x141e3c92ed55107067ceb60ee412b86256cedef67b1227d6367b4cdf30c55a74", share_denom="share15", - amount=100 # raw chain value + amount=100 # raw chain value ) # build sim tx @@ -66,4 +67,4 @@ async def main() -> None: print("gas fee: {} INJ".format(gas_fee)) if __name__ == "__main__": - asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file + asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/4_MsgCreateSpotMarketOrder.py b/examples/chain_client/4_MsgCreateSpotMarketOrder.py index 3185cafa..86ff022d 100644 --- a/examples/chain_client/4_MsgCreateSpotMarketOrder.py +++ b/examples/chain_client/4_MsgCreateSpotMarketOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/5_MsgCancelSpotOrder.py b/examples/chain_client/5_MsgCancelSpotOrder.py index 93030ecd..60e1ced7 100644 --- a/examples/chain_client/5_MsgCancelSpotOrder.py +++ b/examples/chain_client/5_MsgCancelSpotOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py index add38833..41c27bda 100644 --- a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py +++ b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py index f1e71b1c..586c0210 100644 --- a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py +++ b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/chain_client/8_MsgCancelDerivativeOrder.py b/examples/chain_client/8_MsgCancelDerivativeOrder.py index 1ea9001c..a88c212a 100644 --- a/examples/chain_client/8_MsgCancelDerivativeOrder.py +++ b/examples/chain_client/8_MsgCancelDerivativeOrder.py @@ -19,7 +19,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) subaccount_id = address.get_subaccount_id(index=0) # prepare trade info diff --git a/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py b/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py index 25c6163c..33973715 100644 --- a/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py +++ b/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py b/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py index 13a5bfba..d9a5f424 100644 --- a/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py +++ b/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/3_SubaccountsList.py b/examples/exchange_client/accounts_rpc/3_SubaccountsList.py index 390200e1..835f20e5 100644 --- a/examples/exchange_client/accounts_rpc/3_SubaccountsList.py +++ b/examples/exchange_client/accounts_rpc/3_SubaccountsList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py b/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py index 1bb746b5..0cbe952c 100644 --- a/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py +++ b/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py b/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py index fa871b7f..2aa8ea4e 100644 --- a/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py +++ b/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py b/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py index 606e75a3..a6db421f 100644 --- a/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py +++ b/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -13,9 +12,9 @@ async def main() -> None: market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" subacc_order_summary = await client.get_subaccount_order_summary( subaccount_id=subaccount, - # order_direction=order_direction, - # market_id=market_id - ) + order_direction=order_direction, + market_id=market_id + ) print(subacc_order_summary) if __name__ == '__main__': diff --git a/examples/exchange_client/accounts_rpc/7_OrderStates.py b/examples/exchange_client/accounts_rpc/7_OrderStates.py index 1c4117e8..1da25533 100644 --- a/examples/exchange_client/accounts_rpc/7_OrderStates.py +++ b/examples/exchange_client/accounts_rpc/7_OrderStates.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -8,9 +7,17 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) - spot_order_hashes = ["0xce0d9b701f77cd6ddfda5dd3a4fe7b2d53ba83e5d6c054fb2e9e886200b7b7bb", "0x2e2245b5431638d76c6e0cc6268970418a1b1b7df60a8e94b8cf37eae6105542"] - derivative_order_hashes = ["0x82113f3998999bdc3892feaab2c4e53ba06c5fe887a2d5f9763397240f24da50", "0xbb1f036001378cecb5fff1cc69303919985b5bf058c32f37d5aaf9b804c07a06"] - orders = await client.get_order_states(spot_order_hashes=spot_order_hashes, derivative_order_hashes=derivative_order_hashes) + spot_order_hashes = [ + "0xce0d9b701f77cd6ddfda5dd3a4fe7b2d53ba83e5d6c054fb2e9e886200b7b7bb", + "0x2e2245b5431638d76c6e0cc6268970418a1b1b7df60a8e94b8cf37eae6105542" + ] + derivative_order_hashes = [ + "0x82113f3998999bdc3892feaab2c4e53ba06c5fe887a2d5f9763397240f24da50", + "0xbb1f036001378cecb5fff1cc69303919985b5bf058c32f37d5aaf9b804c07a06" + ] + orders = await client.get_order_states( + spot_order_hashes=spot_order_hashes, derivative_order_hashes=derivative_order_hashes + ) print(orders) if __name__ == '__main__': diff --git a/examples/exchange_client/accounts_rpc/8_Portfolio.py b/examples/exchange_client/accounts_rpc/8_Portfolio.py index 04e709bc..c074c2a9 100644 --- a/examples/exchange_client/accounts_rpc/8_Portfolio.py +++ b/examples/exchange_client/accounts_rpc/8_Portfolio.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/accounts_rpc/9_Rewards.py b/examples/exchange_client/accounts_rpc/9_Rewards.py index 687f3a1a..f96f0882 100644 --- a/examples/exchange_client/accounts_rpc/9_Rewards.py +++ b/examples/exchange_client/accounts_rpc/9_Rewards.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/auctions_rpc/1_Auction.py b/examples/exchange_client/auctions_rpc/1_Auction.py index 02307e00..8a813b51 100644 --- a/examples/exchange_client/auctions_rpc/1_Auction.py +++ b/examples/exchange_client/auctions_rpc/1_Auction.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/auctions_rpc/2_Auctions.py b/examples/exchange_client/auctions_rpc/2_Auctions.py index 5f161f5d..1bc0f8dc 100644 --- a/examples/exchange_client/auctions_rpc/2_Auctions.py +++ b/examples/exchange_client/auctions_rpc/2_Auctions.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/auctions_rpc/3_StreamBids.py b/examples/exchange_client/auctions_rpc/3_StreamBids.py index 3119670d..4540fa09 100644 --- a/examples/exchange_client/auctions_rpc/3_StreamBids.py +++ b/examples/exchange_client/auctions_rpc/3_StreamBids.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py b/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py index 429862d1..2b962102 100644 --- a/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py +++ b/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -10,8 +9,6 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" - order_side = "sell" - subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" orders = await client.stream_historical_derivative_orders( market_id=market_id ) diff --git a/examples/exchange_client/derivative_exchange_rpc/11_Trades.py b/examples/exchange_client/derivative_exchange_rpc/11_Trades.py index f822babb..72dee870 100644 --- a/examples/exchange_client/derivative_exchange_rpc/11_Trades.py +++ b/examples/exchange_client/derivative_exchange_rpc/11_Trades.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py b/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py index 03136700..0eb0d259 100644 --- a/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py +++ b/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py b/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py index 62609850..c12425e5 100644 --- a/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py +++ b/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py b/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py index d6b0bf81..f89eb7fa 100644 --- a/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py +++ b/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py b/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py index 4ff983c5..8cc637a0 100644 --- a/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py +++ b/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -11,9 +10,9 @@ async def main() -> None: client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" - skip=0 - limit=3 - end_time=1676426400125 + skip = 0 + limit = 3 + end_time = 1676426400125 funding = await client.get_funding_payments( market_id=market_id, subaccount_id=subaccount_id, diff --git a/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py b/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py index 47a14794..c00a35b9 100644 --- a/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py +++ b/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -10,9 +9,9 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" - skip=0 - limit=3 - end_time=1675717201465 + skip = 0 + limit = 3 + end_time = 1675717201465 funding_rates = await client.get_funding_rates( market_id=market_id, skip=skip, diff --git a/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py b/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py index d3583aff..2709814e 100644 --- a/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py +++ b/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py b/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py index 233dce5f..773b363c 100644 --- a/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py +++ b/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/1_Market.py b/examples/exchange_client/derivative_exchange_rpc/1_Market.py index 520f55c8..52a75e98 100644 --- a/examples/exchange_client/derivative_exchange_rpc/1_Market.py +++ b/examples/exchange_client/derivative_exchange_rpc/1_Market.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py b/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py index 7cbf0924..2f448439 100644 --- a/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py +++ b/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py b/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py index ea864397..8bca13c8 100644 --- a/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py +++ b/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py b/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py index 2a21d145..43ed58f3 100644 --- a/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py +++ b/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/2_Markets.py b/examples/exchange_client/derivative_exchange_rpc/2_Markets.py index 275d372f..ed0850fb 100644 --- a/examples/exchange_client/derivative_exchange_rpc/2_Markets.py +++ b/examples/exchange_client/derivative_exchange_rpc/2_Markets.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py b/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py index d3b15a71..4f9a8a32 100644 --- a/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py +++ b/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py b/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py index 9020a949..aaf92213 100644 --- a/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py +++ b/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py b/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py index 8a5a88f6..f1da521f 100644 --- a/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py +++ b/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py b/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py index 4dd446db..e3375223 100644 --- a/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py +++ b/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py @@ -1,6 +1,5 @@ import asyncio -import logging -from decimal import * +from decimal import Decimal from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/derivative_exchange_rpc/7_Positions.py b/examples/exchange_client/derivative_exchange_rpc/7_Positions.py index 50500c14..fcd5814e 100644 --- a/examples/exchange_client/derivative_exchange_rpc/7_Positions.py +++ b/examples/exchange_client/derivative_exchange_rpc/7_Positions.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -20,7 +19,7 @@ async def main() -> None: limit = 4 positions = await client.get_derivative_positions( market_ids=market_ids, - # subaccount_id=subaccount_id, + ubaccount_id=subaccount_id, direction=direction, subaccount_total_positions=subaccount_total_positions, skip=skip, diff --git a/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py b/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py index 425363ff..05b5a484 100644 --- a/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py +++ b/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py b/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py index 68daf8d9..33114f4f 100644 --- a/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py +++ b/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -24,8 +23,8 @@ async def main() -> None: src_port=src_port, destination_channel=destination_channel, dest_port=dest_port, - # limit=limit, - # skip=skip + limit=limit, + skip=skip ) print(ibc_transfers) diff --git a/examples/exchange_client/explorer_rpc/1_GetTxByHash.py b/examples/exchange_client/explorer_rpc/1_GetTxByHash.py index 7fd480f8..84096641 100644 --- a/examples/exchange_client/explorer_rpc/1_GetTxByHash.py +++ b/examples/exchange_client/explorer_rpc/1_GetTxByHash.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.composer import Composer diff --git a/examples/exchange_client/explorer_rpc/2_AccountTxs.py b/examples/exchange_client/explorer_rpc/2_AccountTxs.py index 2fc3958b..ca4957a2 100644 --- a/examples/exchange_client/explorer_rpc/2_AccountTxs.py +++ b/examples/exchange_client/explorer_rpc/2_AccountTxs.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.composer import Composer diff --git a/examples/exchange_client/explorer_rpc/3_Blocks.py b/examples/exchange_client/explorer_rpc/3_Blocks.py index 23d30dba..072403d1 100644 --- a/examples/exchange_client/explorer_rpc/3_Blocks.py +++ b/examples/exchange_client/explorer_rpc/3_Blocks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/4_Block.py b/examples/exchange_client/explorer_rpc/4_Block.py index 92b17b12..433a4071 100644 --- a/examples/exchange_client/explorer_rpc/4_Block.py +++ b/examples/exchange_client/explorer_rpc/4_Block.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/5_TxsRequest.py b/examples/exchange_client/explorer_rpc/5_TxsRequest.py index 434b0779..57803f50 100644 --- a/examples/exchange_client/explorer_rpc/5_TxsRequest.py +++ b/examples/exchange_client/explorer_rpc/5_TxsRequest.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/6_StreamTxs.py b/examples/exchange_client/explorer_rpc/6_StreamTxs.py index 6c173091..1d3b9597 100644 --- a/examples/exchange_client/explorer_rpc/6_StreamTxs.py +++ b/examples/exchange_client/explorer_rpc/6_StreamTxs.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/7_StreamBlocks.py b/examples/exchange_client/explorer_rpc/7_StreamBlocks.py index 96b83935..e167db2a 100644 --- a/examples/exchange_client/explorer_rpc/7_StreamBlocks.py +++ b/examples/exchange_client/explorer_rpc/7_StreamBlocks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py b/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py index 97a8ab10..7c18dd38 100644 --- a/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py +++ b/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py b/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py index 12264475..67859c62 100644 --- a/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py +++ b/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py b/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py index 487e64df..32a52818 100644 --- a/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py +++ b/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/insurance_rpc/2_Redemptions.py b/examples/exchange_client/insurance_rpc/2_Redemptions.py index 8db3238b..5b5c0399 100644 --- a/examples/exchange_client/insurance_rpc/2_Redemptions.py +++ b/examples/exchange_client/insurance_rpc/2_Redemptions.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/meta_rpc/1_Ping.py b/examples/exchange_client/meta_rpc/1_Ping.py index dc505a7a..f342297e 100644 --- a/examples/exchange_client/meta_rpc/1_Ping.py +++ b/examples/exchange_client/meta_rpc/1_Ping.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/meta_rpc/2_Version.py b/examples/exchange_client/meta_rpc/2_Version.py index 48cb0b4c..0493c67c 100644 --- a/examples/exchange_client/meta_rpc/2_Version.py +++ b/examples/exchange_client/meta_rpc/2_Version.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/meta_rpc/3_Info.py b/examples/exchange_client/meta_rpc/3_Info.py index 9c3c2693..33d45d41 100644 --- a/examples/exchange_client/meta_rpc/3_Info.py +++ b/examples/exchange_client/meta_rpc/3_Info.py @@ -1,5 +1,4 @@ import asyncio -import logging import time from pyinjective.async_client import AsyncClient diff --git a/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py b/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py index 5d3c531b..2c5686a5 100644 --- a/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py +++ b/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/oracle_rpc/1_StreamPrices.py b/examples/exchange_client/oracle_rpc/1_StreamPrices.py index 788f02f2..360c02ee 100644 --- a/examples/exchange_client/oracle_rpc/1_StreamPrices.py +++ b/examples/exchange_client/oracle_rpc/1_StreamPrices.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/oracle_rpc/2_Price.py b/examples/exchange_client/oracle_rpc/2_Price.py index 094d82d7..48b4c703 100644 --- a/examples/exchange_client/oracle_rpc/2_Price.py +++ b/examples/exchange_client/oracle_rpc/2_Price.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/oracle_rpc/3_OracleList.py b/examples/exchange_client/oracle_rpc/3_OracleList.py index 94cbd70b..69fa1789 100644 --- a/examples/exchange_client/oracle_rpc/3_OracleList.py +++ b/examples/exchange_client/oracle_rpc/3_OracleList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py b/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py index 707f602a..396adce4 100644 --- a/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py +++ b/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py b/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py index 33c064f8..7b06037c 100644 --- a/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py +++ b/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py b/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py index 8f488d9b..053b2e61 100644 --- a/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py +++ b/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py b/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py index 40a198db..abd20bef 100644 --- a/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py +++ b/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py b/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py index 9c6fbd5b..ae71af7f 100644 --- a/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py +++ b/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py b/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py index 5592878b..18b6f70f 100644 --- a/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py +++ b/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py b/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py index 82f59a69..34b898e2 100644 --- a/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py +++ b/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py b/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py index a2ff4cec..aa63f432 100644 --- a/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py +++ b/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/1_Market.py b/examples/exchange_client/spot_exchange_rpc/1_Market.py index e96f8d57..95152295 100644 --- a/examples/exchange_client/spot_exchange_rpc/1_Market.py +++ b/examples/exchange_client/spot_exchange_rpc/1_Market.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/2_Markets.py b/examples/exchange_client/spot_exchange_rpc/2_Markets.py index 36f90f86..926f8290 100644 --- a/examples/exchange_client/spot_exchange_rpc/2_Markets.py +++ b/examples/exchange_client/spot_exchange_rpc/2_Markets.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py b/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py index d5e37a55..25ea9b15 100644 --- a/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py +++ b/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py b/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py index 60822926..03112299 100644 --- a/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py +++ b/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/6_Trades.py b/examples/exchange_client/spot_exchange_rpc/6_Trades.py index 4745296f..d8acaf66 100644 --- a/examples/exchange_client/spot_exchange_rpc/6_Trades.py +++ b/examples/exchange_client/spot_exchange_rpc/6_Trades.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py b/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py index e46a8ca8..e522cf22 100644 --- a/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py +++ b/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network diff --git a/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py b/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py index bd5fc5fc..e24cd79f 100644 --- a/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py +++ b/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py @@ -1,6 +1,5 @@ import asyncio -import logging -from decimal import * +from decimal import Decimal from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -61,7 +60,7 @@ async def main() -> None: async for update in stream: first_update = update.orderbook_level_updates break - + # load the snapshot once we are already receiving updates, so we don't miss any await load_orderbook_snapshot(async_client=async_client, orderbook=orderbook) diff --git a/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py b/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py index 96d0898c..75a12a3e 100644 --- a/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py +++ b/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py @@ -1,5 +1,4 @@ import asyncio -import logging from pyinjective.async_client import AsyncClient from pyinjective.core.network import Network @@ -10,7 +9,6 @@ async def main() -> None: client = AsyncClient(network) market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" order_side = "buy" - subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" orders = await client.stream_historical_spot_orders( market_id=market_id, order_side=order_side diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..b912f60a --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2183 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "aiocron" +version = "1.8" +description = "Crontabs for asyncio" +optional = false +python-versions = "*" +files = [ + {file = "aiocron-1.8-py3-none-any.whl", hash = "sha256:b6313214c311b62aa2220e872b94139b648631b3103d062ef29e5d3230ddce6d"}, + {file = "aiocron-1.8.tar.gz", hash = "sha256:48546513faf2eb7901e65a64eba7b653c80106ed00ed9ca3419c3d10b6555a01"}, +] + +[package.dependencies] +croniter = "*" +tzlocal = "*" + +[package.extras] +test = ["coverage"] + +[[package]] +name = "aiohttp" +version = "3.8.5" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, + {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, + {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, + {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, + {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, + {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, + {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, + {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, + {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, + {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, + {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "asn1crypto" +version = "1.5.1" +description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +optional = false +python-versions = "*" +files = [ + {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, + {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, +] + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "asyncio" +version = "3.4.3" +description = "reference implementation of PEP 3156" +optional = false +python-versions = "*" +files = [ + {file = "asyncio-3.4.3-cp33-none-win32.whl", hash = "sha256:b62c9157d36187eca799c378e572c969f0da87cd5fc42ca372d92cdb06e7e1de"}, + {file = "asyncio-3.4.3-cp33-none-win_amd64.whl", hash = "sha256:c46a87b48213d7464f22d9a497b9eef8c1928b68320a2fa94240f969f6fec08c"}, + {file = "asyncio-3.4.3-py3-none-any.whl", hash = "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d"}, + {file = "asyncio-3.4.3.tar.gz", hash = "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41"}, +] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "base58" +version = "2.1.1" +description = "Base58 and Base58Check implementation." +optional = false +python-versions = ">=3.5" +files = [ + {file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"}, + {file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"}, +] + +[package.extras] +tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", "pytest-cov", "pytest-flake8"] + +[[package]] +name = "bech32" +version = "1.2.0" +description = "Reference implementation for Bech32 and segwit addresses." +optional = false +python-versions = ">=3.5" +files = [ + {file = "bech32-1.2.0-py3-none-any.whl", hash = "sha256:990dc8e5a5e4feabbdf55207b5315fdd9b73db40be294a19b3752cde9e79d981"}, + {file = "bech32-1.2.0.tar.gz", hash = "sha256:7d6db8214603bd7871fcfa6c0826ef68b85b0abd90fa21c285a9c5e21d2bd899"}, +] + +[[package]] +name = "bip32" +version = "3.4" +description = "Minimalistic implementation of the BIP32 key derivation scheme" +optional = false +python-versions = "*" +files = [ + {file = "bip32-3.4-py3-none-any.whl", hash = "sha256:c18099c25cabc087d081142d040eacb6fdf09f2c61fde3247e1f61313d1c0d26"}, + {file = "bip32-3.4.tar.gz", hash = "sha256:09213225d99ede936c39a4f5a520549d8ecc49ebe3fa15608a17ea4aa9f61a10"}, +] + +[package.dependencies] +base58 = ">=2.0,<3.0" +coincurve = ">=15.0,<19" + +[[package]] +name = "bitarray" +version = "2.8.1" +description = "efficient arrays of booleans -- C extension" +optional = false +python-versions = "*" +files = [ + {file = "bitarray-2.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e"}, + {file = "bitarray-2.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399"}, + {file = "bitarray-2.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b"}, + {file = "bitarray-2.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499"}, + {file = "bitarray-2.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869"}, + {file = "bitarray-2.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21"}, + {file = "bitarray-2.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347"}, + {file = "bitarray-2.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e"}, + {file = "bitarray-2.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942"}, + {file = "bitarray-2.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5"}, + {file = "bitarray-2.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b"}, + {file = "bitarray-2.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c"}, + {file = "bitarray-2.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7"}, + {file = "bitarray-2.8.1-cp310-cp310-win32.whl", hash = "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6"}, + {file = "bitarray-2.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084"}, + {file = "bitarray-2.8.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f"}, + {file = "bitarray-2.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd"}, + {file = "bitarray-2.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055"}, + {file = "bitarray-2.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e"}, + {file = "bitarray-2.8.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752"}, + {file = "bitarray-2.8.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e"}, + {file = "bitarray-2.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf"}, + {file = "bitarray-2.8.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2"}, + {file = "bitarray-2.8.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7"}, + {file = "bitarray-2.8.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792"}, + {file = "bitarray-2.8.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc"}, + {file = "bitarray-2.8.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127"}, + {file = "bitarray-2.8.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82"}, + {file = "bitarray-2.8.1-cp311-cp311-win32.whl", hash = "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a"}, + {file = "bitarray-2.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a"}, + {file = "bitarray-2.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78"}, + {file = "bitarray-2.8.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b"}, + {file = "bitarray-2.8.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f"}, + {file = "bitarray-2.8.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3"}, + {file = "bitarray-2.8.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620"}, + {file = "bitarray-2.8.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e"}, + {file = "bitarray-2.8.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19"}, + {file = "bitarray-2.8.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1"}, + {file = "bitarray-2.8.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec"}, + {file = "bitarray-2.8.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376"}, + {file = "bitarray-2.8.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608"}, + {file = "bitarray-2.8.1-cp36-cp36m-win32.whl", hash = "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3"}, + {file = "bitarray-2.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08"}, + {file = "bitarray-2.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e"}, + {file = "bitarray-2.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e"}, + {file = "bitarray-2.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5"}, + {file = "bitarray-2.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305"}, + {file = "bitarray-2.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e"}, + {file = "bitarray-2.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6"}, + {file = "bitarray-2.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f"}, + {file = "bitarray-2.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d"}, + {file = "bitarray-2.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75"}, + {file = "bitarray-2.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae"}, + {file = "bitarray-2.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd"}, + {file = "bitarray-2.8.1-cp37-cp37m-win32.whl", hash = "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c"}, + {file = "bitarray-2.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939"}, + {file = "bitarray-2.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324"}, + {file = "bitarray-2.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6"}, + {file = "bitarray-2.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0"}, + {file = "bitarray-2.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484"}, + {file = "bitarray-2.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051"}, + {file = "bitarray-2.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346"}, + {file = "bitarray-2.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816"}, + {file = "bitarray-2.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e"}, + {file = "bitarray-2.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767"}, + {file = "bitarray-2.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035"}, + {file = "bitarray-2.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180"}, + {file = "bitarray-2.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3"}, + {file = "bitarray-2.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52"}, + {file = "bitarray-2.8.1-cp38-cp38-win32.whl", hash = "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b"}, + {file = "bitarray-2.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c"}, + {file = "bitarray-2.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2"}, + {file = "bitarray-2.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165"}, + {file = "bitarray-2.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664"}, + {file = "bitarray-2.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107"}, + {file = "bitarray-2.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98"}, + {file = "bitarray-2.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d"}, + {file = "bitarray-2.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac"}, + {file = "bitarray-2.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794"}, + {file = "bitarray-2.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204"}, + {file = "bitarray-2.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7"}, + {file = "bitarray-2.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117"}, + {file = "bitarray-2.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992"}, + {file = "bitarray-2.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884"}, + {file = "bitarray-2.8.1-cp39-cp39-win32.whl", hash = "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d"}, + {file = "bitarray-2.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b"}, + {file = "bitarray-2.8.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3"}, + {file = "bitarray-2.8.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc"}, + {file = "bitarray-2.8.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482"}, + {file = "bitarray-2.8.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667"}, + {file = "bitarray-2.8.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46"}, + {file = "bitarray-2.8.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6"}, + {file = "bitarray-2.8.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a"}, + {file = "bitarray-2.8.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf"}, + {file = "bitarray-2.8.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5"}, + {file = "bitarray-2.8.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa"}, + {file = "bitarray-2.8.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082"}, + {file = "bitarray-2.8.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886"}, + {file = "bitarray-2.8.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3"}, + {file = "bitarray-2.8.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e"}, + {file = "bitarray-2.8.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5"}, + {file = "bitarray-2.8.1.tar.gz", hash = "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + +[[package]] +name = "coincurve" +version = "18.0.0" +description = "Cross-platform Python CFFI bindings for libsecp256k1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coincurve-18.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b1a42eba91b9e4f833309e94bc6a270b1700cb4567d4809ef91f00968b57925"}, + {file = "coincurve-18.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:116bf1b60a6e72e23c6b153d7c79f0e565d82973d917a3cecf655ffb29263163"}, + {file = "coincurve-18.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d53e2a268142924c24e9b786b3e6c3603fae54bb8211560036b0e9ce6a9f2dbc"}, + {file = "coincurve-18.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b31ab366fadff16ecfdde96ffc07e70fee83850f88bd1f985a8b4977a68bbfb"}, + {file = "coincurve-18.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e3c37cfadac6896668a130ea46296a3dfdeea0160fd66a51e377ad00795269"}, + {file = "coincurve-18.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f3e5f2a2d774050b3ea8bf2167f2d598fde58d7690779931516714d98b65d884"}, + {file = "coincurve-18.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83379dd70291480df2052554851bfd17444c003aef7c4bb02d96d73eec69fe28"}, + {file = "coincurve-18.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:33678f6b43edbeab6605584c725305f4f814239780c53eba0f8e4bc4a52b1d1a"}, + {file = "coincurve-18.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f40646d5f29ac9026f8cc1b368bc9ab68710fad055b64fbec020f9bbfc99b242"}, + {file = "coincurve-18.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:779da694dea1b1d09e16b00e079f6a1195290ce9568f39c95cddf35f1f49ec49"}, + {file = "coincurve-18.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7844f01904e32317a00696a27fd771860e53a2fa62e5c66eace9337d2742c9e6"}, + {file = "coincurve-18.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257c6171cd0301c119ef41360f0d0c2fb5cc288717b33d3bd5482a4c9ae04551"}, + {file = "coincurve-18.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8bcb9c40fd730cf377fa448f1304355d6497fb3d00b7b0a69a10dfcc14a6d28"}, + {file = "coincurve-18.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3abb7f65e2b5fb66a15e374faeaafe6700fdb83fb66d1873ddff91c395a3b74"}, + {file = "coincurve-18.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f44b9ba588b34795d1b4074f9a9fa372adef3fde58300bf32f40a69e8cd72a23"}, + {file = "coincurve-18.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:908467330cd3047c71105a08394c4f3e7dce76e4371b030ba8b0ef863013e3ca"}, + {file = "coincurve-18.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:599b1b3cf097cae920d97f31a5b8e8aff185ca8fa5d8a785b2edf7b199fb9731"}, + {file = "coincurve-18.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d2c20d108580bce5efedb980688031462168f4de2446de95898b48a249127a2"}, + {file = "coincurve-18.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba563f7f70c10323227d1890072172bd84df6f814c9a6b012033b214426b6cf"}, + {file = "coincurve-18.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:412a06b7d1b8229f25318f05e76310298da5ad55d73851eabac7ddfdcdc5bff4"}, + {file = "coincurve-18.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:286969b6f789bbd9d744d28350a3630c1cb3ee045263469a28892f70a4a6654a"}, + {file = "coincurve-18.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:14700463009c7d799a746929728223aa53ff1ece394ea408516d98d637434883"}, + {file = "coincurve-18.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7f1142252e870f091b2c2c21cc1fadfdd29af23d02e99f29add0f14d1ba94b4c"}, + {file = "coincurve-18.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cd11d2ca5b7e989c5ce1af217a2ad78c19c21afca786f198d1b1a408d6f408dc"}, + {file = "coincurve-18.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1bce17d7475cee9db2c2fa7af07eaab582732b378acf6dcaee417de1df2d8661"}, + {file = "coincurve-18.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab662b67454fea7f0a5ae855ba6ad9410bcaebe68b97f4dade7b5944dec3a11"}, + {file = "coincurve-18.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23b9ced9cce32dabb4bc15fa6449252fa51efddf0268481973e4c3772a5a68c6"}, + {file = "coincurve-18.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d05641cf31d68514c47cb54105d20acbae79fc3ee3942454eaaf411babb3f880"}, + {file = "coincurve-18.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a7b31efe56b3f6434828ad5f6ecde4a95747bb69b59032746482eebb8f3456a4"}, + {file = "coincurve-18.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d95103ed43df855121cd925869ae2589360a8d94fcd61b236958deacfb9a359"}, + {file = "coincurve-18.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:abeb4c1d78e1a81a3f1c99a406cd858669582ada2d976e876ef694f57dec95ca"}, + {file = "coincurve-18.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fceca9d6ecaa1e8f891675e4f4ff530d54e41c648fc6e8a816835ffa640fa899"}, + {file = "coincurve-18.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e009f06287507158f16c82cc313c0f3bfd0e9ec1e82d1a4d5fa1c5b6c0060f69"}, + {file = "coincurve-18.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a0c0c1e492ef08efe99d25a23d535e2bff667bbef43d71a6f8893ae811b3d81"}, + {file = "coincurve-18.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3caf58877bcf41eb4c1be7a2d54317f0b31541d99ba248dae28821b19c52a0db"}, + {file = "coincurve-18.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8964e680c622a2b5eea940abdf51c77c1bd3d4fde2a04cec2420bf91981b198a"}, + {file = "coincurve-18.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:73e464e0ace77c686fdc54590e5592905b6802f9fc20a0c023f0b1585669d6a3"}, + {file = "coincurve-18.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ba9eaddd50a2ce0d891af7cee11c2e048d1f0f44bf87db00a5c4b1eee7e3391b"}, + {file = "coincurve-18.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8290903d4629f27f9f3cdeec72ffa97536c5a6ed5ba7e3413b2707991c650fbe"}, + {file = "coincurve-18.0.0-py3-none-win32.whl", hash = "sha256:c60690bd7704d8563968d2dded33eb514875a52b5964f085409965ad041b2555"}, + {file = "coincurve-18.0.0-py3-none-win_amd64.whl", hash = "sha256:704d1abf2e78def33988368592233a8ec9b98bfc45dfa2ec9e898adfad46e5ad"}, + {file = "coincurve-18.0.0.tar.gz", hash = "sha256:c86626afe417a09d8e80e56780efcae3ae516203b23b5ade84813916e1c94fc1"}, +] + +[package.dependencies] +asn1crypto = "*" +cffi = ">=1.3.0" + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "croniter" +version = "1.4.1" +description = "croniter provides iteration for datetime object with cron like format" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "croniter-1.4.1-py2.py3-none-any.whl", hash = "sha256:9595da48af37ea06ec3a9f899738f1b2c1c13da3c38cea606ef7cd03ea421128"}, + {file = "croniter-1.4.1.tar.gz", hash = "sha256:1a6df60eacec3b7a0aa52a8f2ef251ae3dd2a7c7c8b9874e73e791636d55a361"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "cytoolz" +version = "0.12.2" +description = "Cython implementation of Toolz: High performance functional utilities" +optional = false +python-versions = ">=3.6" +files = [ + {file = "cytoolz-0.12.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871"}, + {file = "cytoolz-0.12.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b"}, + {file = "cytoolz-0.12.2-cp310-cp310-win32.whl", hash = "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597"}, + {file = "cytoolz-0.12.2-cp310-cp310-win_amd64.whl", hash = "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0"}, + {file = "cytoolz-0.12.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90"}, + {file = "cytoolz-0.12.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3"}, + {file = "cytoolz-0.12.2-cp311-cp311-win32.whl", hash = "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7"}, + {file = "cytoolz-0.12.2-cp311-cp311-win_amd64.whl", hash = "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed"}, + {file = "cytoolz-0.12.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829"}, + {file = "cytoolz-0.12.2-cp36-cp36m-win32.whl", hash = "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7"}, + {file = "cytoolz-0.12.2-cp36-cp36m-win_amd64.whl", hash = "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb"}, + {file = "cytoolz-0.12.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f"}, + {file = "cytoolz-0.12.2-cp37-cp37m-win32.whl", hash = "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c"}, + {file = "cytoolz-0.12.2-cp37-cp37m-win_amd64.whl", hash = "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc"}, + {file = "cytoolz-0.12.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6"}, + {file = "cytoolz-0.12.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934"}, + {file = "cytoolz-0.12.2-cp38-cp38-win32.whl", hash = "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31"}, + {file = "cytoolz-0.12.2-cp38-cp38-win_amd64.whl", hash = "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5"}, + {file = "cytoolz-0.12.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25"}, + {file = "cytoolz-0.12.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec"}, + {file = "cytoolz-0.12.2-cp39-cp39-win32.whl", hash = "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b"}, + {file = "cytoolz-0.12.2-cp39-cp39-win_amd64.whl", hash = "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729"}, + {file = "cytoolz-0.12.2.tar.gz", hash = "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66"}, +] + +[package.dependencies] +toolz = ">=0.8.0" + +[package.extras] +cython = ["cython"] + +[[package]] +name = "dataclassy" +version = "0.11.1" +description = "A fast and flexible reimplementation of data classes" +optional = false +python-versions = ">=3.6" +files = [ + {file = "dataclassy-0.11.1-py3-none-any.whl", hash = "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5"}, + {file = "dataclassy-0.11.1.tar.gz", hash = "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198"}, +] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "eip712" +version = "0.2.1" +description = "eip712: Message classes for typed structured data hashing and signing in Ethereum" +optional = false +python-versions = ">=3.8,<4" +files = [ + {file = "eip712-0.2.1-py3-none-any.whl", hash = "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269"}, + {file = "eip712-0.2.1.tar.gz", hash = "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad"}, +] + +[package.dependencies] +dataclassy = ">=0.8.2,<1" +eth-abi = ">=4.0.0,<5" +eth-account = ">=0.8.0,<0.9" +eth-hash = {version = "*", extras = ["pycryptodome"]} +eth-typing = ">=3.3.0,<4" +eth-utils = ">=2.1.0,<3" +hexbytes = ">=0.3.0,<1" + +[package.extras] +dev = ["IPython", "Sphinx (>=5.3.0,<6)", "black (>=23.1.0,<24)", "commitizen (>=2.42,<3)", "flake8 (>=6.0.0,<7)", "hypothesis (>=6.70.0,<7)", "ipdb", "isort (>=5.12.0,<6)", "mdformat (>=0.7.16,<0.8)", "mdformat-frontmatter (>=0.4.1,<0.5)", "mdformat-gfm (>=0.3.5,<0.4)", "mypy (>=1.1.1,<2)", "myst-parser (>=0.18.1,<0.19)", "pre-commit", "pytest (>=6.0,<8)", "pytest-cov", "pytest-watch", "pytest-xdist", "setuptools", "sphinx-rtd-theme (>=1.2.0,<2)", "sphinxcontrib-napoleon (>=0.7)", "twine", "types-setuptools", "wheel"] +doc = ["Sphinx (>=5.3.0,<6)", "myst-parser (>=0.18.1,<0.19)", "sphinx-rtd-theme (>=1.2.0,<2)", "sphinxcontrib-napoleon (>=0.7)"] +lint = ["black (>=23.1.0,<24)", "flake8 (>=6.0.0,<7)", "isort (>=5.12.0,<6)", "mdformat (>=0.7.16,<0.8)", "mdformat-frontmatter (>=0.4.1,<0.5)", "mdformat-gfm (>=0.3.5,<0.4)", "mypy (>=1.1.1,<2)", "types-setuptools"] +release = ["setuptools", "twine", "wheel"] +test = ["hypothesis (>=6.70.0,<7)", "pytest (>=6.0,<8)", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +optional = false +python-versions = ">=3.6" +files = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] + +[[package]] +name = "eth-abi" +version = "4.2.1" +description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding" +optional = false +python-versions = ">=3.7.2, <4" +files = [ + {file = "eth_abi-4.2.1-py3-none-any.whl", hash = "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae"}, + {file = "eth_abi-4.2.1.tar.gz", hash = "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0"}, +] + +[package.dependencies] +eth-typing = ">=3.0.0" +eth-utils = ">=2.0.0" +parsimonious = ">=0.9.0,<0.10.0" + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-hash[pycryptodome]", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "hypothesis (>=4.18.2,<5.0.0)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-pythonpath (>=0.7.1)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +test = ["eth-hash[pycryptodome]", "hypothesis (>=4.18.2,<5.0.0)", "pytest (>=7.0.0)", "pytest-pythonpath (>=0.7.1)", "pytest-xdist (>=2.4.0)"] +tools = ["hypothesis (>=4.18.2,<5.0.0)"] + +[[package]] +name = "eth-account" +version = "0.8.0" +description = "eth-account: Sign Ethereum transactions and messages with local private keys" +optional = false +python-versions = ">=3.6, <4" +files = [ + {file = "eth-account-0.8.0.tar.gz", hash = "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca"}, + {file = "eth_account-0.8.0-py3-none-any.whl", hash = "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b"}, +] + +[package.dependencies] +bitarray = ">=2.4.0,<3" +eth-abi = ">=3.0.1" +eth-keyfile = ">=0.6.0,<0.7.0" +eth-keys = ">=0.4.0,<0.5" +eth-rlp = ">=0.3.0,<1" +eth-utils = ">=2.0.0,<3" +hexbytes = ">=0.1.0,<1" +rlp = ">=1.0.0,<4" + +[package.extras] +dev = ["Sphinx (>=1.6.5,<5)", "black (>=22,<23)", "bumpversion (>=0.5.3,<1)", "coverage", "flake8 (==3.7.9)", "hypothesis (>=4.18.0,<5)", "ipython", "isort (>=4.2.15,<5)", "jinja2 (>=3.0.0,<3.1.0)", "mypy (==0.910)", "pydocstyle (>=5.0.0,<6)", "pytest (>=6.2.5,<7)", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=21,<22)", "tox (==3.25.0)", "twine", "wheel"] +doc = ["Sphinx (>=1.6.5,<5)", "jinja2 (>=3.0.0,<3.1.0)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=21,<22)"] +lint = ["black (>=22,<23)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.910)", "pydocstyle (>=5.0.0,<6)"] +test = ["coverage", "hypothesis (>=4.18.0,<5)", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (==3.25.0)"] + +[[package]] +name = "eth-hash" +version = "0.5.2" +description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "eth-hash-0.5.2.tar.gz", hash = "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e"}, + {file = "eth_hash-0.5.2-py3-none-any.whl", hash = "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0"}, +] + +[package.dependencies] +pycryptodome = {version = ">=3.6.6,<4", optional = true, markers = "extra == \"pycryptodome\""} + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +pycryptodome = ["pycryptodome (>=3.6.6,<4)"] +pysha3 = ["pysha3 (>=1.0.0,<2.0.0)", "safe-pysha3 (>=1.0.0)"] +test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-keyfile" +version = "0.6.1" +description = "A library for handling the encrypted keyfiles used to store ethereum private keys." +optional = false +python-versions = "*" +files = [ + {file = "eth-keyfile-0.6.1.tar.gz", hash = "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c"}, + {file = "eth_keyfile-0.6.1-py3-none-any.whl", hash = "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560"}, +] + +[package.dependencies] +eth-keys = ">=0.4.0,<0.5.0" +eth-utils = ">=2,<3" +pycryptodome = ">=3.6.6,<4" + +[package.extras] +dev = ["bumpversion (>=0.5.3,<1)", "eth-keys (>=0.4.0,<0.5.0)", "eth-utils (>=2,<3)", "flake8 (==4.0.1)", "idna (==2.7)", "pluggy (>=1.0.0,<2)", "pycryptodome (>=3.6.6,<4)", "pytest (>=6.2.5,<7)", "requests (>=2.20,<3)", "setuptools (>=38.6.0)", "tox (>=2.7.0)", "twine", "wheel"] +keyfile = ["eth-keys (>=0.4.0,<0.5.0)", "eth-utils (>=2,<3)", "pycryptodome (>=3.6.6,<4)"] +lint = ["flake8 (==4.0.1)"] +test = ["pytest (>=6.2.5,<7)"] + +[[package]] +name = "eth-keys" +version = "0.4.0" +description = "Common API for Ethereum key operations." +optional = false +python-versions = "*" +files = [ + {file = "eth-keys-0.4.0.tar.gz", hash = "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216"}, + {file = "eth_keys-0.4.0-py3-none-any.whl", hash = "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d"}, +] + +[package.dependencies] +eth-typing = ">=3.0.0,<4" +eth-utils = ">=2.0.0,<3.0.0" + +[package.extras] +coincurve = ["coincurve (>=7.0.0,<16.0.0)"] +dev = ["asn1tools (>=0.146.2,<0.147)", "bumpversion (==0.5.3)", "eth-hash[pycryptodome]", "eth-hash[pysha3]", "eth-typing (>=3.0.0,<4)", "eth-utils (>=2.0.0,<3.0.0)", "factory-boy (>=3.0.1,<3.1)", "flake8 (==3.0.4)", "hypothesis (>=5.10.3,<6.0.0)", "mypy (==0.782)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==6.2.5)", "tox (==3.20.0)", "twine"] +eth-keys = ["eth-typing (>=3.0.0,<4)", "eth-utils (>=2.0.0,<3.0.0)"] +lint = ["flake8 (==3.0.4)", "mypy (==0.782)"] +test = ["asn1tools (>=0.146.2,<0.147)", "eth-hash[pycryptodome]", "eth-hash[pysha3]", "factory-boy (>=3.0.1,<3.1)", "hypothesis (>=5.10.3,<6.0.0)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==6.2.5)"] + +[[package]] +name = "eth-rlp" +version = "0.3.0" +description = "eth-rlp: RLP definitions for common Ethereum objects in Python" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "eth-rlp-0.3.0.tar.gz", hash = "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6"}, + {file = "eth_rlp-0.3.0-py3-none-any.whl", hash = "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33"}, +] + +[package.dependencies] +eth-utils = ">=2.0.0,<3" +hexbytes = ">=0.1.0,<1" +rlp = ">=0.6.0,<4" + +[package.extras] +dev = ["Sphinx (>=1.6.5,<2)", "bumpversion (>=0.5.3,<1)", "eth-hash[pycryptodome]", "flake8 (==3.7.9)", "ipython", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=3.0.0,<4)", "pytest (>=6.2.5,<7)", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)", "tox (==3.14.6)", "twine", "wheel"] +doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)"] +lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=3.0.0,<4)"] +test = ["eth-hash[pycryptodome]", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (==3.14.6)"] + +[[package]] +name = "eth-typing" +version = "3.4.0" +description = "eth-typing: Common type annotations for ethereum python packages" +optional = false +python-versions = ">=3.7.2, <4" +files = [ + {file = "eth-typing-3.4.0.tar.gz", hash = "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f"}, + {file = "eth_typing-3.4.0-py3-none-any.whl", hash = "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5"}, +] + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-utils" +version = "2.2.1" +description = "eth-utils: Common utility functions for python code that interacts with Ethereum" +optional = false +python-versions = ">=3.7,<4" +files = [ + {file = "eth-utils-2.2.1.tar.gz", hash = "sha256:f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4"}, + {file = "eth_utils-2.2.1-py3-none-any.whl", hash = "sha256:60fc999c1b4ae011ab600b01a3eb5375156f3bc46e7cd1a83ca9e6e14bb9b13c"}, +] + +[package.dependencies] +cytoolz = {version = ">=0.10.1", markers = "implementation_name == \"cpython\""} +eth-hash = ">=0.3.1" +eth-typing = ">=3.0.0" +toolz = {version = ">0.8.2", markers = "implementation_name == \"pypy\""} + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-hash[pycryptodome]", "flake8 (==3.8.3)", "hypothesis (>=4.43.0)", "ipython", "isort (>=5.11.0)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "types-setuptools", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "types-setuptools"] +test = ["hypothesis (>=4.43.0)", "mypy (==0.971)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "types-setuptools"] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.12.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] + +[[package]] +name = "flake8" +version = "4.0.1" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.6" +files = [ + {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, + {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, +] + +[package.dependencies] +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.8.0,<2.9.0" +pyflakes = ">=2.4.0,<2.5.0" + +[[package]] +name = "flakeheaven" +version = "3.3.0" +description = "FlakeHeaven is a [Flake8](https://gitlab.com/pycqa/flake8) wrapper to make it cool." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "flakeheaven-3.3.0-py3-none-any.whl", hash = "sha256:ae246197a178845b30b63fc03023f7ba925cc84cc96314ec19807dafcd6b39a3"}, + {file = "flakeheaven-3.3.0.tar.gz", hash = "sha256:eb07860e028ff8dd56cce742c4766624a37a4ce397fd34300254ab623d13047b"}, +] + +[package.dependencies] +colorama = "*" +entrypoints = "*" +flake8 = ">=4.0.1,<5.0.0" +pygments = "*" +toml = "*" +urllib3 = "*" + +[package.extras] +docs = ["alabaster", "myst-parser (>=0.18.0,<0.19.0)", "pygments-github-lexers", "sphinx"] + +[[package]] +name = "frozenlist" +version = "1.4.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, +] + +[[package]] +name = "grpcio" +version = "1.58.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3e6bebf1dfdbeb22afd95650e4f019219fef3ab86d3fca8ebade52e4bc39389a"}, + {file = "grpcio-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cde11577d5b6fd73a00e6bfa3cf5f428f3f33c2d2878982369b5372bbc4acc60"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a2d67ff99e70e86b2be46c1017ae40b4840d09467d5455b2708de6d4c127e143"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ed979b273a81de36fc9c6716d9fb09dd3443efa18dcc8652501df11da9583e9"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:458899d2ebd55d5ca2350fd3826dfd8fcb11fe0f79828ae75e2b1e6051d50a29"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc7ffef430b80345729ff0a6825e9d96ac87efe39216e87ac58c6c4ef400de93"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b23d75e5173faa3d1296a7bedffb25afd2fddb607ef292dfc651490c7b53c3d"}, + {file = "grpcio-1.58.0-cp310-cp310-win32.whl", hash = "sha256:fad9295fe02455d4f158ad72c90ef8b4bcaadfdb5efb5795f7ab0786ad67dd58"}, + {file = "grpcio-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc325fed4d074367bebd465a20763586e5e1ed5b943e9d8bc7c162b1f44fd602"}, + {file = "grpcio-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:652978551af02373a5a313e07bfef368f406b5929cf2d50fa7e4027f913dbdb4"}, + {file = "grpcio-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:9f13a171281ebb4d7b1ba9f06574bce2455dcd3f2f6d1fbe0fd0d84615c74045"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8774219e21b05f750eef8adc416e9431cf31b98f6ce9def288e4cea1548cbd22"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09206106848462763f7f273ca93d2d2d4d26cab475089e0de830bb76be04e9e8"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62831d5e251dd7561d9d9e83a0b8655084b2a1f8ea91e4bd6b3cedfefd32c9d2"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:212f38c6a156862098f6bdc9a79bf850760a751d259d8f8f249fc6d645105855"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b12754af201bb993e6e2efd7812085ddaaef21d0a6f0ff128b97de1ef55aa4a"}, + {file = "grpcio-1.58.0-cp311-cp311-win32.whl", hash = "sha256:3886b4d56bd4afeac518dbc05933926198aa967a7d1d237a318e6fbc47141577"}, + {file = "grpcio-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:002f228d197fea12797a14e152447044e14fb4fdb2eb5d6cfa496f29ddbf79ef"}, + {file = "grpcio-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b5e8db0aff0a4819946215f156bd722b6f6c8320eb8419567ffc74850c9fd205"}, + {file = "grpcio-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:201e550b7e2ede113b63e718e7ece93cef5b0fbf3c45e8fe4541a5a4305acd15"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d79b660681eb9bc66cc7cbf78d1b1b9e335ee56f6ea1755d34a31108b80bd3c8"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8d4a76d2c7d8065aba829f8d0bc0055495c998dce1964ca5b302d02514fb3"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cba491c638c76d3dc6c191d9c75041ca5b8f5c6de4b8327ecdcab527f130bb4"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6801ff6652ecd2aae08ef994a3e49ff53de29e69e9cd0fd604a79ae4e545a95c"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:24edec346e69e672daf12b2c88e95c6f737f3792d08866101d8c5f34370c54fd"}, + {file = "grpcio-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e473a7abad9af48e3ab5f3b5d237d18208024d28ead65a459bd720401bd2f8f"}, + {file = "grpcio-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4891bbb4bba58acd1d620759b3be11245bfe715eb67a4864c8937b855b7ed7fa"}, + {file = "grpcio-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:e9f995a8a421405958ff30599b4d0eec244f28edc760de82f0412c71c61763d2"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2f85f87e2f087d9f632c085b37440a3169fda9cdde80cb84057c2fc292f8cbdf"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb6b92036ff312d5b4182fa72e8735d17aceca74d0d908a7f08e375456f03e07"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d81c2b2b24c32139dd2536972f1060678c6b9fbd106842a9fcdecf07b233eccd"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fbcecb6aedd5c1891db1d70efbfbdc126c986645b5dd616a045c07d6bd2dfa86"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92ae871a902cf19833328bd6498ec007b265aabf2fda845ab5bd10abcaf4c8c6"}, + {file = "grpcio-1.58.0-cp38-cp38-win32.whl", hash = "sha256:dc72e04620d49d3007771c0e0348deb23ca341c0245d610605dddb4ac65a37cb"}, + {file = "grpcio-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c1c5238c6072470c7f1614bf7c774ffde6b346a100521de9ce791d1e4453afe"}, + {file = "grpcio-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fe643af248442221db027da43ed43e53b73e11f40c9043738de9a2b4b6ca7697"}, + {file = "grpcio-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:128eb1f8e70676d05b1b0c8e6600320fc222b3f8c985a92224248b1367122188"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:039003a5e0ae7d41c86c768ef8b3ee2c558aa0a23cf04bf3c23567f37befa092"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f061722cad3f9aabb3fbb27f3484ec9d4667b7328d1a7800c3c691a98f16bb0"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0af11938acf8cd4cf815c46156bcde36fa5850518120920d52620cc3ec1830"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4cef77ad2fed42b1ba9143465856d7e737279854e444925d5ba45fc1f3ba727"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24765a627eb4d9288ace32d5104161c3654128fe27f2808ecd6e9b0cfa7fc8b9"}, + {file = "grpcio-1.58.0-cp39-cp39-win32.whl", hash = "sha256:f0241f7eb0d2303a545136c59bc565a35c4fc3b924ccbd69cb482f4828d6f31c"}, + {file = "grpcio-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:dcfba7befe3a55dab6fe1eb7fc9359dc0c7f7272b30a70ae0af5d5b063842f28"}, + {file = "grpcio-1.58.0.tar.gz", hash = "sha256:532410c51ccd851b706d1fbc00a87be0f5312bd6f8e5dbf89d4e99c7f79d7499"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.58.0)"] + +[[package]] +name = "grpcio-tools" +version = "1.58.0" +description = "Protobuf code generator for gRPC" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-tools-1.58.0.tar.gz", hash = "sha256:6f4d80ceb591e31ca4dceec747dbe56132e1392a0a9bb1c8fe001d1b5cac898a"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:60c874908f3b40f32f1bb0221f7b3ab65ecb53a4d0a9f0a394f031f1b292c177"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:1852e798f31e5437ca7b37abc910e028b34732fb19364862cedb87b1dab66fad"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:149fb48f53cb691a6328f68bed8e4036c730f7106b7f98e92c2c0403f0b9e93c"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba3d383e5ca93826038b70f326fce8e8d12dd9b2f64d363a3d612f7475f12dd2"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6997511e9d2979f7a2389479682dbb06823f21a904e8fb0a5c6baaf1b4b4a863"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8de0b701da479643f71fad71fe66885cddd89441ae16e2c724939b47742dc72e"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43cc23908b63fcaefe690b10f68a2d8652c994b5b36ab77d2271d9608c895320"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-win32.whl", hash = "sha256:2c2221123d010dc6231799e63a37f2f4786bf614ef65b23009c387cd20d8b193"}, + {file = "grpcio_tools-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:df2788736bdf58abe7b0e4d6b1ff806f7686c98c5ad900da312252e3322d91c4"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:b6ea5578712cdb29b0ff60bfc6405bf0e8d681b9c71d106dd1cda54fe7fe4e55"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:c29880f491581c83181c0a84a4d11402af2b13166a5266f64e246adf1da7aa66"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:32d51e933c3565414dd0835f930bb28a1cdeba435d9d2c87fa3cf8b1d284db3c"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ad9d77f25514584b1ddc981d70c9e50dfcfc388aa5ba943eee67520c5267ed9"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4882382631e6352819059278a5c878ce0b067008dd490911d16d5616e8a36d85"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d84091a189d848d94645b7c48b61734c12ec03b0d46e5fc0049343a26989ac5c"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:85ac28a9621e9b92a3fc416288c4ce45542db0b4c31b3e23031dd8e0a0ec5590"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-win32.whl", hash = "sha256:7371d8ea80234b29affec145e25569523f549520ed7e53b2aa92bed412cdecfd"}, + {file = "grpcio_tools-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:6997df6e7c5cf4d3ddc764240c1ff6a04b45d70ec28913b38fbc6396ef743e12"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ac65b8d6e3acaf88b815edf9af88ff844b6600ff3d2591c05ba4f655b45d5fb4"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:88e8191d0dd789bebf42533808728f5ce75d2c51e2a72bdf20abe5b5e3fbec42"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:a3dbece2a121761499a659b799979d4b738586d1065439053de553773eee11ca"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1086fe240c4c879b9721952b47d46996deb283c2d9355a8dc24a804811aacf70"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ae3dca059d5b358dd03fb63277428fa7d771605d4074a019138dd38d70719a"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f8904ac7fc3da2e874f00b3a986e8b7e004f499344a8e7eb213c26dfb025041"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aadbd8393ae332e49731adb31e741f2e689989150569b7acc939f5ea43124e2d"}, + {file = "grpcio_tools-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1cb6e24194786687d4f23c64de1f0ce553af51de22746911bc37340f85f9783e"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ec43909095c630df3e479e77469bdad367067431f4af602f6ccb978a3b78afd"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:4be49ed320b0ebcbc21d19ef555fbf229c1c452105522b728e1171ee2052078e"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:28eefebddec3d3adf19baca78f8b82a2287d358e1b1575ae018cdca8eacc6269"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8c696e9d78676cc3f583a92bbbf2c84e94e350f7ad22f150a52559f4599d1"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aeb5949e46558d21c51fd3ec3eeecc59c94dbca76c67c0a80d3da6b7437930c"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f7144aad9396d35fb1b80429600a970b559c2ad4d07020eeb180fe83cea2bee"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4ee26e9253a721fff355737649678535f76cf5d642aa3ac0cd937832559b90af"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-win32.whl", hash = "sha256:343f572312039059a8797d6e29a7fc62196e73131ab01755660a9d48202267c1"}, + {file = "grpcio_tools-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:cd7acfbb43b7338a78cf4a67528d05530d574d92b7c829d185b78dfc451d158f"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:46628247fbce86d18232eead24bd22ed0826c79f3fe2fc2fbdbde45971361049"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:51587842a54e025a3d0d37afcf4ef2b7ac1def9a5d17448665cb424b53d6c287"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:a062ae3072a2a39a3c057f4d68b57b021f1dd2956cd09aab39709f6af494e1de"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eec3c93a08df11c80ef1c29a616bcbb0d83dbc6ea41b48306fcacc720416dfa7"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b63f823ac991ff77104da614d2a2485a59d37d57830eb2e387a6e2a3edc7fa2b"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:579c11a9f198847ed48dbc4f211c67fe96a73320b87c81f01b044b72e24a7d77"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2fc1dd8049d417a5034d944c9df05cee76f855b3e431627ab4292e7c01c47"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-win32.whl", hash = "sha256:453023120114c35d3d9d6717ea0820e5d5c140f51f9d0b621de4397ff854471b"}, + {file = "grpcio_tools-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:b6c896f1df99c35cf062d4803c15663ff00a33ff09add28baa6e475cf6b5e258"}, +] + +[package.dependencies] +grpcio = ">=1.58.0" +protobuf = ">=4.21.6,<5.0dev" +setuptools = "*" + +[[package]] +name = "hdwallets" +version = "0.1.2" +description = "Python implementation of the BIP32 key derivation scheme" +optional = false +python-versions = ">=3.6" +files = [ + {file = "hdwallets-0.1.2-py3-none-any.whl", hash = "sha256:455b55b061f2b356a93e305b0c2263a6007d2ed45e48749975f09308499a2fdb"}, + {file = "hdwallets-0.1.2.tar.gz", hash = "sha256:c85d08b59c3fd3bc5b29398583d7d7dc46f95456f69ff15a3ab0353084ee7529"}, +] + +[package.dependencies] +ecdsa = ">=0.14.0" + +[[package]] +name = "hexbytes" +version = "0.3.1" +description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "hexbytes-0.3.1-py3-none-any.whl", hash = "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59"}, + {file = "hexbytes-0.3.1.tar.gz", hash = "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d"}, +] + +[package.extras] +dev = ["black (>=22)", "bumpversion (>=0.5.3)", "eth-utils (>=1.0.1,<3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "hypothesis (>=3.44.24,<=6.31.6)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=22)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=5.0.0)"] +test = ["eth-utils (>=1.0.1,<3)", "hypothesis (>=3.44.24,<=6.31.6)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "identify" +version = "2.5.29" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.29-py2.py3-none-any.whl", hash = "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b"}, + {file = "identify-2.5.29.tar.gz", hash = "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = "*" +files = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] + +[[package]] +name = "mnemonic" +version = "0.20" +description = "Implementation of Bitcoin BIP-0039" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mnemonic-0.20-py3-none-any.whl", hash = "sha256:acd2168872d0379e7a10873bb3e12bf6c91b35de758135c4fbd1015ef18fafc5"}, + {file = "mnemonic-0.20.tar.gz", hash = "sha256:7c6fb5639d779388027a77944680aee4870f0fcd09b1e42a5525ee2ce4c625f6"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "parsimonious" +version = "0.9.0" +description = "(Soon to be) the fastest pure-Python PEG parser I could muster" +optional = false +python-versions = "*" +files = [ + {file = "parsimonious-0.9.0.tar.gz", hash = "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1"}, +] + +[package.dependencies] +regex = ">=2022.3.15" + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "3.4.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pre_commit-3.4.0-py2.py3-none-any.whl", hash = "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945"}, + {file = "pre_commit-3.4.0.tar.gz", hash = "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "protobuf" +version = "4.24.3" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, + {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, + {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, + {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, + {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, + {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, + {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, + {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, + {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, + {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, + {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, +] + +[[package]] +name = "pycodestyle" +version = "2.8.0" +description = "Python style guide checker" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, + {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pycryptodome" +version = "3.19.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodome-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win32.whl", hash = "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f"}, + {file = "pycryptodome-3.19.0.tar.gz", hash = "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"}, +] + +[[package]] +name = "pyflakes" +version = "2.4.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, + {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, +] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.21.1" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-asyncio-0.21.1.tar.gz", hash = "sha256:40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d"}, + {file = "pytest_asyncio-0.21.1-py3-none-any.whl", hash = "sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] + +[[package]] +name = "pytest-grpc" +version = "0.8.0" +description = "pytest plugin for grpc" +optional = false +python-versions = "*" +files = [ + {file = "pytest-grpc-0.8.0.tar.gz", hash = "sha256:0bd2683ffd34199444d707c0ab01970b22e0afbba6cb1ddb6d578c85ebfe09bd"}, + {file = "pytest_grpc-0.8.0-py3-none-any.whl", hash = "sha256:5b062cf498e59995e84b3051da76f7bcff8cfe307927869f7bdc27ab967eee35"}, +] + +[package.dependencies] +pytest = ">=3.6.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "regex" +version = "2023.8.8" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.6" +files = [ + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-mock" +version = "1.11.0" +description = "Mock out responses from the requests package" +optional = false +python-versions = "*" +files = [ + {file = "requests-mock-1.11.0.tar.gz", hash = "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4"}, + {file = "requests_mock-1.11.0-py2.py3-none-any.whl", hash = "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15"}, +] + +[package.dependencies] +requests = ">=2.3,<3" +six = "*" + +[package.extras] +fixture = ["fixtures"] +test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] + +[[package]] +name = "rlp" +version = "3.0.0" +description = "A package for Recursive Length Prefix encoding and decoding" +optional = false +python-versions = "*" +files = [ + {file = "rlp-3.0.0-py2.py3-none-any.whl", hash = "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d"}, + {file = "rlp-3.0.0.tar.gz", hash = "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8"}, +] + +[package.dependencies] +eth-utils = ">=2.0.0,<3" + +[package.extras] +dev = ["Sphinx (>=1.6.5,<2)", "bumpversion (>=0.5.3,<1)", "flake8 (==3.4.1)", "hypothesis (==5.19.0)", "ipython", "pytest (>=6.2.5,<7)", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "setuptools (>=36.2.0)", "sphinx-rtd-theme (>=0.1.9)", "tox (>=2.9.1,<3)", "twine", "wheel"] +doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"] +lint = ["flake8 (==3.4.1)"] +rust-backend = ["rusty-rlp (>=0.2.1,<0.3)"] +test = ["hypothesis (==5.19.0)", "pytest (>=6.2.5,<7)", "tox (>=2.9.1,<3)"] + +[[package]] +name = "safe-pysha3" +version = "1.0.4" +description = "SHA-3 (Keccak) for Python 3.9 - 3.11" +optional = false +python-versions = "*" +files = [ + {file = "safe-pysha3-1.0.4.tar.gz", hash = "sha256:e429146b1edd198b2ca934a2046a65656c5d31b0ec894bbd6055127f4deaff17"}, +] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "tzlocal" +version = "5.0.1" +description = "tzinfo object for the local timezone" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tzlocal-5.0.1-py3-none-any.whl", hash = "sha256:f3596e180296aaf2dbd97d124fe76ae3a0e3d32b258447de7b939b3fd4be992f"}, + {file = "tzlocal-5.0.1.tar.gz", hash = "sha256:46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803"}, +] + +[package.dependencies] +tzdata = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] + +[[package]] +name = "urllib3" +version = "1.26.16" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.24.5" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, + {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "websockets" +version = "11.0.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, + {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, + {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, + {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, + {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, + {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, + {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, + {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, + {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, + {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, + {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, + {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, + {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, + {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "9e2771fd2f9563f53a6b71b48800853fb1285c2c17680b005049437b43c77723" diff --git a/pyinjective/Peggo_ABI.json b/pyinjective/Peggo_ABI.json index 0d05b147..cc60aa18 100644 --- a/pyinjective/Peggo_ABI.json +++ b/pyinjective/Peggo_ABI.json @@ -723,4 +723,4 @@ "stateMutability": "nonpayable", "type": "function" } -] \ No newline at end of file +] diff --git a/pyinjective/__init__.py b/pyinjective/__init__.py index 841ee3e8..f21608b4 100644 --- a/pyinjective/__init__.py +++ b/pyinjective/__init__.py @@ -1,3 +1,3 @@ -from .async_client import AsyncClient -from .transaction import Transaction -from .wallet import PrivateKey, PublicKey, Address +from .async_client import AsyncClient # noqa: F401 +from .transaction import Transaction # noqa: F401 +from .wallet import PrivateKey, PublicKey, Address # noqa: F401 diff --git a/pyinjective/async_client.py b/pyinjective/async_client.py index 3374f6c1..e1863f36 100644 --- a/pyinjective/async_client.py +++ b/pyinjective/async_client.py @@ -1010,10 +1010,10 @@ async def _initialize_tokens_and_markets(self): maintenance_margin_ratio=Decimal(market_info.maintenance_margin_ratio), quote_token=quote_token, maker_fee_rate=Decimal(market_info.maker_fee_rate), - taker_fee_rate = Decimal(market_info.taker_fee_rate), - service_provider_fee = Decimal(market_info.service_provider_fee), - min_price_tick_size = Decimal(market_info.min_price_tick_size), - min_quantity_tick_size = Decimal(market_info.min_quantity_tick_size), + taker_fee_rate=Decimal(market_info.taker_fee_rate), + service_provider_fee=Decimal(market_info.service_provider_fee), + min_price_tick_size=Decimal(market_info.min_price_tick_size), + min_quantity_tick_size=Decimal(market_info.min_quantity_tick_size), ) derivative_markets[market.id] = market diff --git a/pyinjective/composer.py b/pyinjective/composer.py index 000efcf6..34eeadd5 100644 --- a/pyinjective/composer.py +++ b/pyinjective/composer.py @@ -15,7 +15,9 @@ from .proto.cosmos.bank.v1beta1 import tx_pb2 as cosmos_bank_tx_pb from .proto.injective.exchange.v1beta1 import tx_pb2 as injective_exchange_tx_pb -from pyinjective.proto.injective.exchange.v1beta1 import exchange_pb2 as injective_dot_exchange_dot_v1beta1_dot_exchange__pb2 +from pyinjective.proto.injective.exchange.v1beta1 import ( + exchange_pb2 as injective_dot_exchange_dot_v1beta1_dot_exchange__pb2 +) from .proto.injective.auction.v1beta1 import tx_pb2 as injective_auction_tx_pb @@ -291,7 +293,8 @@ def MsgExecuteContract(self, sender: str, contract: str, msg: str, **kwargs): sender=sender, contract=contract, msg=bytes(msg, "utf-8"), - funds=kwargs.get('funds') # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. The coins in the list must be sorted in alphabetical order by denoms. + funds=kwargs.get('funds') # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. + # The coins in the list must be sorted in alphabetical order by denoms. ) def MsgDeposit(self, sender: str, subaccount_id: str, amount: float, denom: str): @@ -643,13 +646,14 @@ def MsgSubaccountTransfer( amount: int, denom: str, ): - peggy_denom, decimals = Denom.load_peggy_denom(self.network, denom) - be_amount = amount_to_backend(amount, decimals) + token = self.tokens[denom] + be_amount = token.chain_formatted_value(human_readable_value=Decimal(str(amount))) + return injective_exchange_tx_pb.MsgSubaccountTransfer( sender=sender, source_subaccount_id=source_subaccount_id, destination_subaccount_id=destination_subaccount_id, - amount=self.Coin(amount=be_amount, denom=peggy_denom), + amount=self.Coin(amount=int(be_amount), denom=token.denom), ) def MsgWithdraw(self, sender: str, subaccount_id: str, amount: float, denom: str): @@ -884,7 +888,7 @@ def MsgWithdrawDelegatorReward( def MsgWithdrawValidatorCommission( self, validator_address: str - ): + ): return cosmos_distribution_tx_pb.MsgWithdrawValidatorCommission( validator_address=validator_address @@ -900,23 +904,29 @@ def MsgVote( return cosmos_gov_tx_pb.MsgVote( proposal_id=proposal_id, voter=voter, option=option ) - - def MsgPrivilegedExecuteContract(self, sender: str, contract: str, msg: str, **kwargs) -> injective_exchange_tx_pb.MsgPrivilegedExecuteContract: + + def MsgPrivilegedExecuteContract( + self, sender: str, contract: str, msg: str, **kwargs + ) -> injective_exchange_tx_pb.MsgPrivilegedExecuteContract: return injective_exchange_tx_pb.MsgPrivilegedExecuteContract( sender=sender, contract_address=contract, data=msg, - funds=kwargs.get('funds') # funds is a string of Coin strings, comma separated, e.g 100000inj,20000000000usdt + funds=kwargs.get('funds') # funds is a string of Coin strings, comma separated, + # e.g. 100000inj,20000000000usdt ) - def MsgInstantiateContract(self, sender: str, admin: str, code_id: int, label: str, message: bytes, **kwargs) -> wasm_tx_pb.MsgInstantiateContract: + def MsgInstantiateContract( + self, sender: str, admin: str, code_id: int, label: str, message: bytes, **kwargs + ) -> wasm_tx_pb.MsgInstantiateContract: return wasm_tx_pb.MsgInstantiateContract( sender=sender, admin=admin, code_id=code_id, label=label, msg=message, - funds=kwargs.get('funds'), # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. The coins in the list must be sorted in alphabetical order by denoms. + funds=kwargs.get('funds'), # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. + # The coins in the list must be sorted in alphabetical order by denoms. ) # data field format: [request-msg-header][raw-byte-msg-response] @@ -928,34 +938,62 @@ def MsgResponses(response, simulation=False): if not simulation: data = bytes.fromhex(data) header_map = { - "/injective.exchange.v1beta1.MsgCreateSpotLimitOrderResponse": injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, - "/injective.exchange.v1beta1.MsgCreateSpotMarketOrderResponse": injective_exchange_tx_pb.MsgCreateSpotMarketOrderResponse, - "/injective.exchange.v1beta1.MsgCreateDerivativeLimitOrderResponse": injective_exchange_tx_pb.MsgCreateDerivativeLimitOrderResponse, - "/injective.exchange.v1beta1.MsgCreateDerivativeMarketOrderResponse": injective_exchange_tx_pb.MsgCreateDerivativeMarketOrderResponse, - "/injective.exchange.v1beta1.MsgCancelSpotOrderResponse": injective_exchange_tx_pb.MsgCancelSpotOrderResponse, - "/injective.exchange.v1beta1.MsgCancelDerivativeOrderResponse": injective_exchange_tx_pb.MsgCancelDerivativeOrderResponse, - "/injective.exchange.v1beta1.MsgBatchCancelSpotOrdersResponse": injective_exchange_tx_pb.MsgBatchCancelSpotOrdersResponse, - "/injective.exchange.v1beta1.MsgBatchCancelDerivativeOrdersResponse": injective_exchange_tx_pb.MsgBatchCancelDerivativeOrdersResponse, - "/injective.exchange.v1beta1.MsgBatchCreateSpotLimitOrdersResponse": injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrdersResponse, - "/injective.exchange.v1beta1.MsgBatchCreateDerivativeLimitOrdersResponse": injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrdersResponse, - "/injective.exchange.v1beta1.MsgBatchUpdateOrdersResponse": injective_exchange_tx_pb.MsgBatchUpdateOrdersResponse, - "/injective.exchange.v1beta1.MsgDepositResponse": injective_exchange_tx_pb.MsgDepositResponse, - "/injective.exchange.v1beta1.MsgWithdrawResponse": injective_exchange_tx_pb.MsgWithdrawResponse, - "/injective.exchange.v1beta1.MsgSubaccountTransferResponse": injective_exchange_tx_pb.MsgSubaccountTransferResponse, - "/injective.exchange.v1beta1.MsgLiquidatePositionResponse": injective_exchange_tx_pb.MsgLiquidatePositionResponse, - "/injective.exchange.v1beta1.MsgIncreasePositionMarginResponse": injective_exchange_tx_pb.MsgIncreasePositionMarginResponse, - "/injective.auction.v1beta1.MsgBidResponse": injective_auction_tx_pb.MsgBidResponse, - "/injective.exchange.v1beta1.MsgCreateBinaryOptionsLimitOrderResponse": injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrderResponse, - "/injective.exchange.v1beta1.MsgCreateBinaryOptionsMarketOrderResponse": injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrderResponse, - "/injective.exchange.v1beta1.MsgCancelBinaryOptionsOrderResponse": injective_exchange_tx_pb.MsgCancelBinaryOptionsOrderResponse, - "/injective.exchange.v1beta1.MsgAdminUpdateBinaryOptionsMarketResponse": injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarketResponse, - "/injective.exchange.v1beta1.MsgInstantBinaryOptionsMarketLaunchResponse": injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunchResponse, - "/cosmos.bank.v1beta1.MsgSendResponse": cosmos_bank_tx_pb.MsgSendResponse, - "/cosmos.authz.v1beta1.MsgGrantResponse": cosmos_authz_tx_pb.MsgGrantResponse, - "/cosmos.authz.v1beta1.MsgExecResponse": cosmos_authz_tx_pb.MsgExecResponse, - "/cosmos.authz.v1beta1.MsgRevokeResponse": cosmos_authz_tx_pb.MsgRevokeResponse, - "/injective.oracle.v1beta1.MsgRelayPriceFeedPriceResponse": injective_oracle_tx_pb.MsgRelayPriceFeedPriceResponse, - "/injective.oracle.v1beta1.MsgRelayProviderPricesResponse": injective_oracle_tx_pb.MsgRelayProviderPrices, + "/injective.exchange.v1beta1.MsgCreateSpotLimitOrderResponse": + injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, + "/injective.exchange.v1beta1.MsgCreateSpotMarketOrderResponse": + injective_exchange_tx_pb.MsgCreateSpotMarketOrderResponse, + "/injective.exchange.v1beta1.MsgCreateDerivativeLimitOrderResponse": + injective_exchange_tx_pb.MsgCreateDerivativeLimitOrderResponse, + "/injective.exchange.v1beta1.MsgCreateDerivativeMarketOrderResponse": + injective_exchange_tx_pb.MsgCreateDerivativeMarketOrderResponse, + "/injective.exchange.v1beta1.MsgCancelSpotOrderResponse": + injective_exchange_tx_pb.MsgCancelSpotOrderResponse, + "/injective.exchange.v1beta1.MsgCancelDerivativeOrderResponse": + injective_exchange_tx_pb.MsgCancelDerivativeOrderResponse, + "/injective.exchange.v1beta1.MsgBatchCancelSpotOrdersResponse": + injective_exchange_tx_pb.MsgBatchCancelSpotOrdersResponse, + "/injective.exchange.v1beta1.MsgBatchCancelDerivativeOrdersResponse": + injective_exchange_tx_pb.MsgBatchCancelDerivativeOrdersResponse, + "/injective.exchange.v1beta1.MsgBatchCreateSpotLimitOrdersResponse": + injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrdersResponse, + "/injective.exchange.v1beta1.MsgBatchCreateDerivativeLimitOrdersResponse": + injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrdersResponse, + "/injective.exchange.v1beta1.MsgBatchUpdateOrdersResponse": + injective_exchange_tx_pb.MsgBatchUpdateOrdersResponse, + "/injective.exchange.v1beta1.MsgDepositResponse": + injective_exchange_tx_pb.MsgDepositResponse, + "/injective.exchange.v1beta1.MsgWithdrawResponse": + injective_exchange_tx_pb.MsgWithdrawResponse, + "/injective.exchange.v1beta1.MsgSubaccountTransferResponse": + injective_exchange_tx_pb.MsgSubaccountTransferResponse, + "/injective.exchange.v1beta1.MsgLiquidatePositionResponse": + injective_exchange_tx_pb.MsgLiquidatePositionResponse, + "/injective.exchange.v1beta1.MsgIncreasePositionMarginResponse": + injective_exchange_tx_pb.MsgIncreasePositionMarginResponse, + "/injective.auction.v1beta1.MsgBidResponse": + injective_auction_tx_pb.MsgBidResponse, + "/injective.exchange.v1beta1.MsgCreateBinaryOptionsLimitOrderResponse": + injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrderResponse, + "/injective.exchange.v1beta1.MsgCreateBinaryOptionsMarketOrderResponse": + injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrderResponse, + "/injective.exchange.v1beta1.MsgCancelBinaryOptionsOrderResponse": + injective_exchange_tx_pb.MsgCancelBinaryOptionsOrderResponse, + "/injective.exchange.v1beta1.MsgAdminUpdateBinaryOptionsMarketResponse": + injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarketResponse, + "/injective.exchange.v1beta1.MsgInstantBinaryOptionsMarketLaunchResponse": + injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunchResponse, + "/cosmos.bank.v1beta1.MsgSendResponse": + cosmos_bank_tx_pb.MsgSendResponse, + "/cosmos.authz.v1beta1.MsgGrantResponse": + cosmos_authz_tx_pb.MsgGrantResponse, + "/cosmos.authz.v1beta1.MsgExecResponse": + cosmos_authz_tx_pb.MsgExecResponse, + "/cosmos.authz.v1beta1.MsgRevokeResponse": + cosmos_authz_tx_pb.MsgRevokeResponse, + "/injective.oracle.v1beta1.MsgRelayPriceFeedPriceResponse": + injective_oracle_tx_pb.MsgRelayPriceFeedPriceResponse, + "/injective.oracle.v1beta1.MsgRelayProviderPricesResponse": + injective_oracle_tx_pb.MsgRelayProviderPrices, } msgs = [] @@ -967,27 +1005,48 @@ def MsgResponses(response, simulation=False): @staticmethod def UnpackMsgExecResponse(msg_type, data): header_map = { - "MsgCreateSpotLimitOrder": injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, - "MsgCreateSpotMarketOrder": injective_exchange_tx_pb.MsgCreateSpotMarketOrderResponse, - "MsgCreateDerivativeLimitOrder": injective_exchange_tx_pb.MsgCreateDerivativeLimitOrderResponse, - "MsgCreateDerivativeMarketOrder": injective_exchange_tx_pb.MsgCreateDerivativeMarketOrderResponse, - "MsgCancelSpotOrder": injective_exchange_tx_pb.MsgCancelSpotOrderResponse, - "MsgCancelDerivativeOrder": injective_exchange_tx_pb.MsgCancelDerivativeOrderResponse, - "MsgBatchCancelSpotOrders": injective_exchange_tx_pb.MsgBatchCancelSpotOrdersResponse, - "MsgBatchCancelDerivativeOrders": injective_exchange_tx_pb.MsgBatchCancelDerivativeOrdersResponse, - "MsgBatchCreateSpotLimitOrders": injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrdersResponse, - "MsgBatchCreateDerivativeLimitOrders": injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrdersResponse, - "MsgBatchUpdateOrders": injective_exchange_tx_pb.MsgBatchUpdateOrdersResponse, - "MsgDeposit": injective_exchange_tx_pb.MsgDepositResponse, - "MsgWithdraw": injective_exchange_tx_pb.MsgWithdrawResponse, - "MsgSubaccountTransfer": injective_exchange_tx_pb.MsgSubaccountTransferResponse, - "MsgLiquidatePosition": injective_exchange_tx_pb.MsgLiquidatePositionResponse, - "MsgIncreasePositionMargin": injective_exchange_tx_pb.MsgIncreasePositionMarginResponse, - "MsgCreateBinaryOptionsLimitOrder": injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrderResponse, - "MsgCreateBinaryOptionsMarketOrder": injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrderResponse, - "MsgCancelBinaryOptionsOrder": injective_exchange_tx_pb.MsgCancelBinaryOptionsOrderResponse, - "MsgAdminUpdateBinaryOptionsMarket": injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarketResponse, - "MsgInstantBinaryOptionsMarketLaunch": injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunchResponse, + "MsgCreateSpotLimitOrder": + injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, + "MsgCreateSpotMarketOrder": + injective_exchange_tx_pb.MsgCreateSpotMarketOrderResponse, + "MsgCreateDerivativeLimitOrder": + injective_exchange_tx_pb.MsgCreateDerivativeLimitOrderResponse, + "MsgCreateDerivativeMarketOrder": + injective_exchange_tx_pb.MsgCreateDerivativeMarketOrderResponse, + "MsgCancelSpotOrder": + injective_exchange_tx_pb.MsgCancelSpotOrderResponse, + "MsgCancelDerivativeOrder": + injective_exchange_tx_pb.MsgCancelDerivativeOrderResponse, + "MsgBatchCancelSpotOrders": + injective_exchange_tx_pb.MsgBatchCancelSpotOrdersResponse, + "MsgBatchCancelDerivativeOrders": + injective_exchange_tx_pb.MsgBatchCancelDerivativeOrdersResponse, + "MsgBatchCreateSpotLimitOrders": + injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrdersResponse, + "MsgBatchCreateDerivativeLimitOrders": + injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrdersResponse, + "MsgBatchUpdateOrders": + injective_exchange_tx_pb.MsgBatchUpdateOrdersResponse, + "MsgDeposit": + injective_exchange_tx_pb.MsgDepositResponse, + "MsgWithdraw": + injective_exchange_tx_pb.MsgWithdrawResponse, + "MsgSubaccountTransfer": + injective_exchange_tx_pb.MsgSubaccountTransferResponse, + "MsgLiquidatePosition": + injective_exchange_tx_pb.MsgLiquidatePositionResponse, + "MsgIncreasePositionMargin": + injective_exchange_tx_pb.MsgIncreasePositionMarginResponse, + "MsgCreateBinaryOptionsLimitOrder": + injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrderResponse, + "MsgCreateBinaryOptionsMarketOrder": + injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrderResponse, + "MsgCancelBinaryOptionsOrder": + injective_exchange_tx_pb.MsgCancelBinaryOptionsOrderResponse, + "MsgAdminUpdateBinaryOptionsMarket": + injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarketResponse, + "MsgInstantBinaryOptionsMarketLaunch": + injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunchResponse, } responses = [header_map[msg_type].FromString(result) for result in data.results] @@ -998,34 +1057,62 @@ def UnpackTransactionMessages(transaction): meta_messages = json.loads(transaction.messages.decode()) header_map = { - "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder": injective_exchange_tx_pb.MsgCreateSpotLimitOrder, - "/injective.exchange.v1beta1.MsgCreateSpotMarketOrder": injective_exchange_tx_pb.MsgCreateSpotMarketOrder, - "/injective.exchange.v1beta1.MsgCreateDerivativeLimitOrder": injective_exchange_tx_pb.MsgCreateDerivativeLimitOrder, - "/injective.exchange.v1beta1.MsgCreateDerivativeMarketOrder": injective_exchange_tx_pb.MsgCreateDerivativeMarketOrder, - "/injective.exchange.v1beta1.MsgCancelSpotOrder": injective_exchange_tx_pb.MsgCancelSpotOrder, - "/injective.exchange.v1beta1.MsgCancelDerivativeOrder": injective_exchange_tx_pb.MsgCancelDerivativeOrder, - "/injective.exchange.v1beta1.MsgBatchCancelSpotOrders": injective_exchange_tx_pb.MsgBatchCancelSpotOrders, - "/injective.exchange.v1beta1.MsgBatchCancelDerivativeOrders": injective_exchange_tx_pb.MsgBatchCancelDerivativeOrders, - "/injective.exchange.v1beta1.MsgBatchCreateSpotLimitOrders": injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrders, - "/injective.exchange.v1beta1.MsgBatchCreateDerivativeLimitOrders": injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrders, - "/injective.exchange.v1beta1.MsgBatchUpdateOrders": injective_exchange_tx_pb.MsgBatchUpdateOrders, - "/injective.exchange.v1beta1.MsgDeposit": injective_exchange_tx_pb.MsgDeposit, - "/injective.exchange.v1beta1.MsgWithdraw": injective_exchange_tx_pb.MsgWithdraw, - "/injective.exchange.v1beta1.MsgSubaccountTransfer": injective_exchange_tx_pb.MsgSubaccountTransfer, - "/injective.exchange.v1beta1.MsgLiquidatePosition": injective_exchange_tx_pb.MsgLiquidatePosition, - "/injective.exchange.v1beta1.MsgIncreasePositionMargin": injective_exchange_tx_pb.MsgIncreasePositionMargin, - "/injective.auction.v1beta1.MsgBid": injective_auction_tx_pb.MsgBid, - "/injective.exchange.v1beta1.MsgCreateBinaryOptionsLimitOrder": injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrder, - "/injective.exchange.v1beta1.MsgCreateBinaryOptionsMarketOrder": injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrder, - "/injective.exchange.v1beta1.MsgCancelBinaryOptionsOrder": injective_exchange_tx_pb.MsgCancelBinaryOptionsOrder, - "/injective.exchange.v1beta1.MsgAdminUpdateBinaryOptionsMarket": injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarket, - "/injective.exchange.v1beta1.MsgInstantBinaryOptionsMarketLaunch": injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunch, - "/cosmos.bank.v1beta1.MsgSend": cosmos_bank_tx_pb.MsgSend, - "/cosmos.authz.v1beta1.MsgGrant": cosmos_authz_tx_pb.MsgGrant, - "/cosmos.authz.v1beta1.MsgExec": cosmos_authz_tx_pb.MsgExec, - "/cosmos.authz.v1beta1.MsgRevoke": cosmos_authz_tx_pb.MsgRevoke, - "/injective.oracle.v1beta1.MsgRelayPriceFeedPrice": injective_oracle_tx_pb.MsgRelayPriceFeedPrice, - "/injective.oracle.v1beta1.MsgRelayProviderPrices": injective_oracle_tx_pb.MsgRelayProviderPrices, + "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder": + injective_exchange_tx_pb.MsgCreateSpotLimitOrder, + "/injective.exchange.v1beta1.MsgCreateSpotMarketOrder": + injective_exchange_tx_pb.MsgCreateSpotMarketOrder, + "/injective.exchange.v1beta1.MsgCreateDerivativeLimitOrder": + injective_exchange_tx_pb.MsgCreateDerivativeLimitOrder, + "/injective.exchange.v1beta1.MsgCreateDerivativeMarketOrder": + injective_exchange_tx_pb.MsgCreateDerivativeMarketOrder, + "/injective.exchange.v1beta1.MsgCancelSpotOrder": + injective_exchange_tx_pb.MsgCancelSpotOrder, + "/injective.exchange.v1beta1.MsgCancelDerivativeOrder": + injective_exchange_tx_pb.MsgCancelDerivativeOrder, + "/injective.exchange.v1beta1.MsgBatchCancelSpotOrders": + injective_exchange_tx_pb.MsgBatchCancelSpotOrders, + "/injective.exchange.v1beta1.MsgBatchCancelDerivativeOrders": + injective_exchange_tx_pb.MsgBatchCancelDerivativeOrders, + "/injective.exchange.v1beta1.MsgBatchCreateSpotLimitOrders": + injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrders, + "/injective.exchange.v1beta1.MsgBatchCreateDerivativeLimitOrders": + injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrders, + "/injective.exchange.v1beta1.MsgBatchUpdateOrders": + injective_exchange_tx_pb.MsgBatchUpdateOrders, + "/injective.exchange.v1beta1.MsgDeposit": + injective_exchange_tx_pb.MsgDeposit, + "/injective.exchange.v1beta1.MsgWithdraw": + injective_exchange_tx_pb.MsgWithdraw, + "/injective.exchange.v1beta1.MsgSubaccountTransfer": + injective_exchange_tx_pb.MsgSubaccountTransfer, + "/injective.exchange.v1beta1.MsgLiquidatePosition": + injective_exchange_tx_pb.MsgLiquidatePosition, + "/injective.exchange.v1beta1.MsgIncreasePositionMargin": + injective_exchange_tx_pb.MsgIncreasePositionMargin, + "/injective.auction.v1beta1.MsgBid": + injective_auction_tx_pb.MsgBid, + "/injective.exchange.v1beta1.MsgCreateBinaryOptionsLimitOrder": + injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrder, + "/injective.exchange.v1beta1.MsgCreateBinaryOptionsMarketOrder": + injective_exchange_tx_pb.MsgCreateBinaryOptionsMarketOrder, + "/injective.exchange.v1beta1.MsgCancelBinaryOptionsOrder": + injective_exchange_tx_pb.MsgCancelBinaryOptionsOrder, + "/injective.exchange.v1beta1.MsgAdminUpdateBinaryOptionsMarket": + injective_exchange_tx_pb.MsgAdminUpdateBinaryOptionsMarket, + "/injective.exchange.v1beta1.MsgInstantBinaryOptionsMarketLaunch": + injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunch, + "/cosmos.bank.v1beta1.MsgSend": + cosmos_bank_tx_pb.MsgSend, + "/cosmos.authz.v1beta1.MsgGrant": + cosmos_authz_tx_pb.MsgGrant, + "/cosmos.authz.v1beta1.MsgExec": + cosmos_authz_tx_pb.MsgExec, + "/cosmos.authz.v1beta1.MsgRevoke": + cosmos_authz_tx_pb.MsgRevoke, + "/injective.oracle.v1beta1.MsgRelayPriceFeedPrice": + injective_oracle_tx_pb.MsgRelayPriceFeedPrice, + "/injective.oracle.v1beta1.MsgRelayProviderPrices": + injective_oracle_tx_pb.MsgRelayProviderPrices, } msgs = [] @@ -1117,86 +1204,3 @@ def _initialize_markets_and_tokens_from_files(self): self.spot_markets = spot_markets self.derivative_markets = derivative_markets self.binary_option_markets = dict() - - def _initialize_markets_and_tokens_from_files(self): - config: ConfigParser = constant.CONFIGS[self.network] - spot_markets = dict() - derivative_markets = dict() - tokens = dict() - - for section_name, configuration_section in config.items(): - if section_name.startswith("0x"): - description = configuration_section["description"] - - quote_token = Token( - name="", - symbol="", - denom="", - address="", - decimals=int(configuration_section["quote"]), - logo="", - updated=-1, - ) - - if "Spot" in description: - base_token = Token( - name="", - symbol="", - denom="", - address="", - decimals=int(configuration_section["base"]), - logo="", - updated=-1, - ) - - market = SpotMarket( - id=section_name, - status="", - ticker=description, - base_token=base_token, - quote_token=quote_token, - maker_fee_rate=None, - taker_fee_rate=None, - service_provider_fee=None, - min_price_tick_size=Decimal(str(configuration_section["min_price_tick_size"])), - min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])) - ) - spot_markets[market.id] = market - else: - market = DerivativeMarket( - id=section_name, - status="", - ticker=description, - oracle_base="", - oracle_quote="", - oracle_type="", - oracle_scale_factor=1, - initial_margin_ratio=None, - maintenance_margin_ratio=None, - quote_token=quote_token, - maker_fee_rate=None, - taker_fee_rate=None, - service_provider_fee=None, - min_price_tick_size=Decimal(str(configuration_section["min_price_tick_size"])), - min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])), - ) - - derivative_markets[market.id] = market - - elif section_name != "DEFAULT": - token = Token( - name=section_name, - symbol=section_name, - denom=configuration_section["peggy_denom"], - address="", - decimals=int(configuration_section["decimals"]), - logo="", - updated=-1, - ) - - tokens[token.symbol] = token - - self.tokens = tokens - self.spot_markets = spot_markets - self.derivative_markets = derivative_markets - self.binary_option_markets = dict() diff --git a/pyinjective/constant.py b/pyinjective/constant.py index 49aaef3d..5e04c269 100644 --- a/pyinjective/constant.py +++ b/pyinjective/constant.py @@ -1,6 +1,5 @@ import os from configparser import ConfigParser -from warnings import warn MAX_CLIENT_ID_LENGTH = 128 MAX_DATA_SIZE = 256 @@ -48,7 +47,7 @@ def load_market(cls, network, market_id): elif network == "testnet": config = testnet_config else: - config =mainnet_config + config = mainnet_config return cls( description=config[market_id]["description"], diff --git a/pyinjective/core/gas_limit_estimator.py b/pyinjective/core/gas_limit_estimator.py index d21c385b..8ec54acc 100644 --- a/pyinjective/core/gas_limit_estimator.py +++ b/pyinjective/core/gas_limit_estimator.py @@ -274,7 +274,7 @@ def __init__(self, message: any_pb2.Any): def applies_to(cls, message: any_pb2.Any) -> bool: message_type = cls.message_type(message=message) return "gov." in message_type and ( - message_type.endswith("MsgDeposit") or message_type.endswith("MsgSubmitProposal") + message_type.endswith("MsgDeposit") or message_type.endswith("MsgSubmitProposal") ) def gas_limit(self) -> int: diff --git a/pyinjective/core/market.py b/pyinjective/core/market.py index 9a42b88c..51a6605f 100644 --- a/pyinjective/core/market.py +++ b/pyinjective/core/market.py @@ -34,6 +34,7 @@ def price_to_chain_format(self, human_readable_value: Decimal) -> Decimal: return extended_chain_formatted_value + @dataclass(eq=True, frozen=True) class DerivativeMarket: id: str @@ -92,6 +93,7 @@ def calculate_margin_in_chain_format( return extended_chain_formatted_margin + @dataclass(eq=True, frozen=True) class BinaryOptionMarket: id: str @@ -113,7 +115,9 @@ class BinaryOptionMarket: def quantity_to_chain_format(self, human_readable_value: Decimal, special_denom: Optional[Denom] = None) -> Decimal: # Binary option markets do not have a base market to provide the number of decimals decimals = 0 if special_denom is None else special_denom.base - min_quantity_tick_size = self.min_quantity_tick_size if special_denom is None else special_denom.min_quantity_tick_size + min_quantity_tick_size = (self.min_quantity_tick_size + if special_denom is None + else special_denom.min_quantity_tick_size) chain_formatted_value = human_readable_value * Decimal(f"1e{decimals}") quantized_value = chain_formatted_value // min_quantity_tick_size * min_quantity_tick_size extended_chain_formatted_value = quantized_value * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}") @@ -138,7 +142,9 @@ def calculate_margin_in_chain_format( ) -> Decimal: quantity_decimals = 0 if special_denom is None else special_denom.base price_decimals = self.quote_token.decimals if special_denom is None else special_denom.quote - min_quantity_tick_size = self.min_quantity_tick_size if special_denom is None else special_denom.min_quantity_tick_size + min_quantity_tick_size = (self.min_quantity_tick_size + if special_denom is None + else special_denom.min_quantity_tick_size) price = human_readable_price if is_buy else 1 - human_readable_price chain_formatted_quantity = human_readable_quantity * Decimal(f"1e{quantity_decimals}") chain_formatted_price = price * Decimal(f"1e{price_decimals}") @@ -148,4 +154,4 @@ def calculate_margin_in_chain_format( quantized_margin = (margin // min_quantity_tick_size) * min_quantity_tick_size extended_chain_formatted_margin = quantized_margin * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}") - return extended_chain_formatted_margin \ No newline at end of file + return extended_chain_formatted_margin diff --git a/pyinjective/core/network.py b/pyinjective/core/network.py index 420d0152..6b70fca6 100644 --- a/pyinjective/core/network.py +++ b/pyinjective/core/network.py @@ -35,9 +35,9 @@ def __init__(self): self._exchange_cookie_initialization_lock = asyncio.Lock() async def chain_cookie(self, metadata_query_provider: Callable) -> str: - if self._chain_cookie == None: + if self._chain_cookie is None: async with self._chain_cookie_initialization_lock: - if self._chain_cookie == None: + if self._chain_cookie is None: await self._fetch_chain_cookie(metadata_query_provider=metadata_query_provider) cookie = self._chain_cookie self._check_chain_cookie_expiration() @@ -45,9 +45,9 @@ async def chain_cookie(self, metadata_query_provider: Callable) -> str: return cookie async def exchange_cookie(self, metadata_query_provider: Callable) -> str: - if self._exchange_cookie == None: + if self._exchange_cookie is None: async with self._exchange_cookie_initialization_lock: - if self._exchange_cookie == None: + if self._exchange_cookie is None: await self._fetch_exchange_cookie(metadata_query_provider=metadata_query_provider) cookie = self._exchange_cookie self._check_exchange_cookie_expiration() @@ -100,9 +100,9 @@ def __init__(self): self._exchange_cookie_initialization_lock = asyncio.Lock() async def chain_cookie(self, metadata_query_provider: Callable) -> str: - if self._chain_cookie == None: + if self._chain_cookie is None: async with self._chain_cookie_initialization_lock: - if self._chain_cookie == None: + if self._chain_cookie is None: await self._fetch_chain_cookie(metadata_query_provider=metadata_query_provider) cookie = self._chain_cookie self._check_chain_cookie_expiration() @@ -110,9 +110,9 @@ async def chain_cookie(self, metadata_query_provider: Callable) -> str: return cookie async def exchange_cookie(self, metadata_query_provider: Callable) -> str: - if self._exchange_cookie == None: + if self._exchange_cookie is None: async with self._exchange_cookie_initialization_lock: - if self._exchange_cookie == None: + if self._exchange_cookie is None: await self._fetch_exchange_cookie(metadata_query_provider=metadata_query_provider) cookie = self._exchange_cookie self._check_exchange_cookie_expiration() @@ -245,7 +245,7 @@ def testnet(cls, node="lb"): @classmethod def mainnet(cls, node="lb"): nodes = [ - "lb", # us, asia, prod + "lb", # us, asia, prod "lb_k8s", "sentry0", # ca, prod "sentry1", # ca, prod diff --git a/pyinjective/core/token.py b/pyinjective/core/token.py index c6af6c0d..f2a9bc79 100644 --- a/pyinjective/core/token.py +++ b/pyinjective/core/token.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from decimal import Decimal + @dataclass(eq=True, frozen=True) class Token: name: str diff --git a/pyinjective/denoms_devnet.ini b/pyinjective/denoms_devnet.ini index 4e4f2797..ab4ebf17 100644 --- a/pyinjective/denoms_devnet.ini +++ b/pyinjective/denoms_devnet.ini @@ -242,4 +242,3 @@ decimals = 6 [UST] peggy_denom = ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C decimals = 6 - diff --git a/pyinjective/denoms_testnet.ini b/pyinjective/denoms_testnet.ini index 2e24698f..92d3e534 100644 --- a/pyinjective/denoms_testnet.ini +++ b/pyinjective/denoms_testnet.ini @@ -195,4 +195,3 @@ decimals = 8 [FRCOIN] peggy_denom = factory/inj1d3jc5pr6nsf9twyzjh9w5nj7nn235ysllwtpq7/frcoin decimals = 6 - diff --git a/pyinjective/orderhash.py b/pyinjective/orderhash.py index b27551b1..17a31041 100644 --- a/pyinjective/orderhash.py +++ b/pyinjective/orderhash.py @@ -7,10 +7,10 @@ class OrderInfo(EIP712Type): - SubaccountId: "string" - FeeRecipient: "string" - Price: "string" - Quantity: "string" + SubaccountId: "string" # noqa: F821 + FeeRecipient: "string" # noqa: F821 + Price: "string" # noqa: F821 + Quantity: "string" # noqa: F821 class SpotOrder(EIP712Message): @@ -20,11 +20,11 @@ class SpotOrder(EIP712Message): _verifyingContract_ = "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" _salt_ = HexBytes("0x0000000000000000000000000000000000000000000000000000000000000000") - MarketId: "string" + MarketId: "string" # noqa: F821 OrderInfo: OrderInfo - Salt: "string" - OrderType: "string" - TriggerPrice: "string" + Salt: "string" # noqa: F821 + OrderType: "string" # noqa: F821 + TriggerPrice: "string" # noqa: F821 class DerivativeOrder(EIP712Message): @@ -34,17 +34,18 @@ class DerivativeOrder(EIP712Message): _verifyingContract_ = "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" _salt_ = HexBytes("0x0000000000000000000000000000000000000000000000000000000000000000") - MarketId: "string" + MarketId: "string" # noqa: F821 OrderInfo: OrderInfo - OrderType: "string" - Margin: "string" - TriggerPrice: "string" - Salt: "string" + OrderType: "string" # noqa: F821 + Margin: "string" # noqa: F821 + TriggerPrice: "string" # noqa: F821 + Salt: "string" # noqa: F821 # domain_separator = EIP712_domain.hash_struct() order_type_dict = {0: '\x00', 1: '\x01', 2: '\x02', 3: '\x03', 4: '\x04', 5: '\x05', 6: '\x06', 7: '\x07', 8: '\x08'} + class OrderHashResponse: def __init__( self, @@ -54,6 +55,7 @@ def __init__( self.spot = spot self.derivative = derivative + class OrderHashManager: def __init__( self, @@ -91,13 +93,16 @@ def compute_order_hashes(self, spot_orders, derivative_orders, subaccount_index) return order_hashes + def param_to_backend_go(param) -> int: go_param = Decimal(param) / pow(10, 18) return format(go_param, '.18f') + def parse_order_type(order): return order_type_dict[order.order_type] + def build_eip712_msg(order, nonce): if order.__class__.__name__ == 'SpotOrder': go_price = param_to_backend_go(order.order_info.price) @@ -136,6 +141,7 @@ def build_eip712_msg(order, nonce): Margin=go_margin ) + def hash_order(msg): signable_message = msg.signable_message hex_digest = hash_eip191_message(signable_message=signable_message).hex() diff --git a/pyinjective/sendtocosmos.py b/pyinjective/sendtocosmos.py index 102d1c6c..96341dcf 100644 --- a/pyinjective/sendtocosmos.py +++ b/pyinjective/sendtocosmos.py @@ -3,11 +3,24 @@ from .utils.logger import LoggerProvider from .wallet import Address + class Peggo: def __init__(self, network: str): self.network = network - def sendToInjective(self, ethereum_endpoint: str, private_key: str, token_contract: str, receiver: str, amount: int, - maxFeePerGas: int, maxPriorityFeePerGas: int, peggo_abi: str, data: str, decimals=18): + + def sendToInjective( + self, + ethereum_endpoint: str, + private_key: str, + token_contract: str, + receiver: str, + amount: int, + maxFeePerGas: int, + maxPriorityFeePerGas: int, + peggo_abi: str, + data: str, + decimals=18 + ): if self.network == 'testnet': peggy_proxy_address = "0xd2C6753F6B1783EF0a3857275e16e79D91b539a3" elif self.network == 'mainnet': @@ -63,6 +76,6 @@ def sendToInjective(self, ethereum_endpoint: str, private_key: str, token_contra LoggerProvider().logger_for_class(logging_class=self.__class__).info( f"Transferred {amount} {token_contract} from {sender_ethereum_address} to {receiver}") LoggerProvider().logger_for_class(logging_class=self.__class__).info( - "Transaction hash:".format(Web3.to_hex(tx_hash))) + "Transaction hash: {}".format(Web3.to_hex(tx_hash))) except Exception as e: - LoggerProvider().logger_for_class(logging_class=self.__class__).info("Transaction failed".format(e)) + LoggerProvider().logger_for_class(logging_class=self.__class__).info("Transaction failed {}".format(e)) diff --git a/pyinjective/transaction.py b/pyinjective/transaction.py index afe7bd24..5107fc55 100644 --- a/pyinjective/transaction.py +++ b/pyinjective/transaction.py @@ -9,10 +9,11 @@ from .exceptions import EmptyMsgError, UndefinedError, ValueTooLargeError from .wallet import PublicKey + class Transaction: def __init__( self, - msgs: Tuple[message.Message,...] = None, + msgs: Tuple[message.Message, ...] = None, account_num: int = None, sequence: int = None, chain_id: str = None, @@ -31,7 +32,7 @@ def __init__( self.timeout_height = timeout_height @staticmethod - def __convert_msgs(msgs: Tuple[message.Message,...]) -> List[any_pb2.Any]: + def __convert_msgs(msgs: Tuple[message.Message, ...]) -> List[any_pb2.Any]: any_msgs: List[any_pb2.Any] = [] for msg in msgs: any_msg = any_pb2.Any() diff --git a/pyinjective/utils/fetch_metadata.py b/pyinjective/utils/fetch_metadata.py index 68269b74..71d008a8 100644 --- a/pyinjective/utils/fetch_metadata.py +++ b/pyinjective/utils/fetch_metadata.py @@ -23,6 +23,7 @@ testnet_denom_output = '' mainnet_denom_output = '' + async def fetch_denom(network) -> str: denom_output = '' symbols = {} @@ -40,7 +41,8 @@ async def fetch_denom(network) -> str: symbols[market.quote_token_meta.symbol] = (market.base_denom, market.quote_token_meta.decimals) # format into ini entry - min_display_price_tick_size = float(market.min_price_tick_size) / pow(10, market.quote_token_meta.decimals - market.base_token_meta.decimals) + min_display_price_tick_size = (float(market.min_price_tick_size) + / pow(10, market.quote_token_meta.decimals - market.base_token_meta.decimals)) min_display_quantity_tick_size = float(market.min_quantity_tick_size) / pow(10, market.base_token_meta.decimals) config = metadata_template.format( market.market_id, @@ -51,7 +53,7 @@ async def fetch_denom(network) -> str: min_display_price_tick_size, market.min_quantity_tick_size, min_display_quantity_tick_size - ) + ) denom_output += config # fetch meta data for derivative markets @@ -85,6 +87,7 @@ async def fetch_denom(network) -> str: return denom_output + async def main() -> None: testnet = Network.testnet() data = await fetch_denom(testnet) diff --git a/pyinjective/utils/metadata_validation.py b/pyinjective/utils/metadata_validation.py index 366aa0aa..d779b7c4 100644 --- a/pyinjective/utils/metadata_validation.py +++ b/pyinjective/utils/metadata_validation.py @@ -90,17 +90,19 @@ def find_metadata_inconsistencies(network: Network) -> Tuple[List[Any]]: def print_metadata_mismatches(network: Network): - markets_with_diffs, markets_not_found, peggy_denoms_with_diffs, peggy_denoms_not_found = find_metadata_inconsistencies( - network=network) + (markets_with_diffs, + markets_not_found, + peggy_denoms_with_diffs, + peggy_denoms_not_found) = find_metadata_inconsistencies(network=network) for diff_pair in markets_with_diffs: print(f"{diff_pair[0]}\n{diff_pair[1]}") - print(f"\n\n") + print("\n\n") for missing_market in markets_not_found: print(f"{missing_market}") - print(f"\n\n") + print("\n\n") for diff_token in peggy_denoms_with_diffs: print(f"{diff_token[0]}\n{diff_token[1]}") - print(f"\n\n") + print("\n\n") for missing_peggy in peggy_denoms_not_found: print(f"{missing_peggy}") diff --git a/pyinjective/wallet.py b/pyinjective/wallet.py index c557dd8f..899f4932 100644 --- a/pyinjective/wallet.py +++ b/pyinjective/wallet.py @@ -102,6 +102,7 @@ def sign(self, msg: bytes) -> bytes: return self.signing_key.sign_deterministic(msg, hashfunc=sha3.keccak_256, sigencode=sigencode_string_canonize) + class PublicKey: """ Class for wrapping VerifyKey using for signature verification. Adding method to encode/decode @@ -276,9 +277,11 @@ async def async_init_num_seq(self, lcd_endpoint: str) -> "Address": self.sequence = int(acc['sequence']) return self - def init_num_seq(self, lcd_endpoint: str)-> "Address": - response = requests.get(f"{lcd_endpoint}/cosmos/auth/v1beta1/accounts/{self.to_acc_bech32()}", - headers={'Accept-Encoding': 'application/json'}) + def init_num_seq(self, lcd_endpoint: str) -> "Address": + response = requests.get( + url=f"{lcd_endpoint}/cosmos/auth/v1beta1/accounts/{self.to_acc_bech32()}", + headers={'Accept-Encoding': 'application/json'} + ) if response.status_code != 200: raise ValueError("HTTP response status", response.status_code) resp = json.loads(response.text) @@ -291,6 +294,6 @@ def get_sequence(self): current_seq = self.sequence self.sequence += 1 return current_seq - + def get_number(self): return self.number diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..a303f9fd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,64 @@ +[tool.poetry] +name = "injective-py" +version = "0.8.1" +description = "Injective Python SDK, with Exchange API Client" +authors = ["Injective Labs "] +license = "Apache Software License 2.0" +readme = "README.md" +packages = [ + { include = "pyinjective" }, +] +include = [ + { path = "pyinjective/proto/**/*.py" }, + { path = "*.ini" }, +] + +[tool.poetry.dependencies] +python = "^3.9" +aiocron = "*" +aiohttp = "*" +asyncio = "*" +bech32 = "*" +bip32 = "*" +coincurve = "*" +ecdsa = "*" +eip712 = "*" +grpcio = "*" +grpcio-tools = "*" +hdwallets = "*" +mnemonic = "*" +protobuf = "*" +requests = "*" +safe-pysha3 = "*" +urllib3 = "<2" +websockets = "*" + +[tool.poetry.group.test.dependencies] +pytest = "*" +pytest-asyncio = "*" +pytest-grpc = "*" +requests-mock = "*" + + +[tool.poetry.group.dev.dependencies] +pre-commit = "^3.4.0" +flakeheaven = "^3.3.0" + + +[tool.flakeheaven] +exclude = ["pyinjective/proto/*", ".idea/*"] +max_line_length = 120 + + +# list of plugins and rules for them +[tool.flakeheaven.plugins] +pycodestyle = ["+*", "-W503"] +pyflakes = ["+*"] + +[tool.flakeheaven.exceptions."tests/"] +pyflakes = ["-F811"] # disable a plugin + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/core/test_gas_limit_estimator.py b/tests/core/test_gas_limit_estimator.py index 9ccbc98b..13c679e5 100644 --- a/tests/core/test_gas_limit_estimator.py +++ b/tests/core/test_gas_limit_estimator.py @@ -7,7 +7,8 @@ from pyinjective.proto.cosmwasm.wasm.v1 import tx_pb2 as wasm_tx_pb from pyinjective.proto.injective.exchange.v1beta1 import tx_pb2 as injective_exchange_tx_pb -from tests.model_fixtures.markets_fixtures import usdt_token +from tests.model_fixtures.markets_fixtures import usdt_token # noqa: F401 + class TestGasLimitEstimator: @@ -491,7 +492,7 @@ def test_estimation_for_exec_message(self): + expected_inner_message_gas_limit + expected_exec_message_gas_limit == estimator.gas_limit()) - + def test_estimation_for_privileged_execute_contract_message(self): message = injective_exchange_tx_pb.MsgPrivilegedExecuteContract() estimator = GasLimitEstimator.for_message(message=message) @@ -500,7 +501,6 @@ def test_estimation_for_privileged_execute_contract_message(self): assert(expected_gas_limit == estimator.gas_limit()) - def test_estimation_for_execute_contract_message(self): composer = Composer(network="testnet") message = composer.MsgExecuteContract( diff --git a/tests/core/test_market.py b/tests/core/test_market.py index 1038c51b..cecaeb29 100644 --- a/tests/core/test_market.py +++ b/tests/core/test_market.py @@ -1,16 +1,15 @@ -import pytest from decimal import Decimal from pyinjective.constant import Denom from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket -from tests.model_fixtures.markets_fixtures import ( - first_match_bet_market, - inj_token, - usdt_token, - usdt_perp_token, - inj_usdt_spot_market, - btc_usdt_perp_market, +from tests.model_fixtures.markets_fixtures import ( # noqa: F401 + first_match_bet_market, # noqa: F401 + inj_token, # noqa: F401 + usdt_token, # noqa: F401 + usdt_perp_token, # noqa: F401 + inj_usdt_spot_market, # noqa: F401 + btc_usdt_perp_market, # noqa: F401 ) @@ -23,7 +22,7 @@ def test_convert_quantity_to_chain_format(self, inj_usdt_spot_market: SpotMarket expected_value = original_quantity * Decimal(f"1e{inj_usdt_spot_market.base_token.decimals}") quantized_value = ((expected_value // inj_usdt_spot_market.min_quantity_tick_size) * inj_usdt_spot_market.min_quantity_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -35,7 +34,7 @@ def test_convert_price_to_chain_format(self, inj_usdt_spot_market: SpotMarket): expected_value = original_quantity * Decimal(f"1e{price_decimals}") quantized_value = ((expected_value // inj_usdt_spot_market.min_price_tick_size) * inj_usdt_spot_market.min_price_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -48,7 +47,7 @@ def test_convert_quantity_to_chain_format(self, btc_usdt_perp_market: Derivative chain_value = btc_usdt_perp_market.quantity_to_chain_format(human_readable_value=original_quantity) quantized_value = ((original_quantity // btc_usdt_perp_market.min_quantity_tick_size) * btc_usdt_perp_market.min_quantity_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -60,7 +59,7 @@ def test_convert_price_to_chain_format(self, btc_usdt_perp_market: DerivativeMar expected_value = original_quantity * Decimal(f"1e{price_decimals}") quantized_value = ((expected_value // btc_usdt_perp_market.min_price_tick_size) * btc_usdt_perp_market.min_price_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -72,10 +71,11 @@ def test_convert_margin_to_chain_format(self, btc_usdt_perp_market: DerivativeMa expected_value = original_quantity * Decimal(f"1e{margin_decimals}") quantized_value = ((expected_value // btc_usdt_perp_market.min_quantity_tick_size) * btc_usdt_perp_market.min_quantity_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) + class TestBinaryOptionMarket: def test_convert_quantity_to_chain_format_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): @@ -95,7 +95,7 @@ def test_convert_quantity_to_chain_format_with_fixed_denom(self, first_match_bet chain_formatted_quantity = original_quantity * Decimal(f"1e{fixed_denom.base}") quantized_value = ((chain_formatted_quantity // Decimal(str(fixed_denom.min_quantity_tick_size))) * Decimal(str(fixed_denom.min_quantity_tick_size))) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -107,7 +107,7 @@ def test_convert_quantity_to_chain_format_without_fixed_denom(self, first_match_ ) quantized_value = ((original_quantity // first_match_bet_market.min_quantity_tick_size) * first_match_bet_market.min_quantity_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -129,7 +129,7 @@ def test_convert_price_to_chain_format_with_fixed_denom(self, first_match_bet_ma expected_value = original_quantity * Decimal(f"1e{price_decimals}") quantized_value = ((expected_value // Decimal(str(fixed_denom.min_price_tick_size))) * Decimal(str(fixed_denom.min_price_tick_size))) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -141,7 +141,7 @@ def test_convert_price_to_chain_format_without_fixed_denom(self, first_match_bet expected_value = original_quantity * Decimal(f"1e{price_decimals}") quantized_value = ((expected_value // first_match_bet_market.min_price_tick_size) * first_match_bet_market.min_price_tick_size) - quantized_chain_format_value = quantized_value * Decimal(f"1e18") + quantized_chain_format_value = quantized_value * Decimal("1e18") assert (quantized_chain_format_value == chain_value) @@ -168,9 +168,11 @@ def test_calculate_margin_for_buy_with_fixed_denom(self, first_match_bet_market: expected_quantity = original_quantity * Decimal(f"1e{quantity_decimals}") expected_price = original_price * Decimal(f"1e{price_decimals}") expected_margin = expected_quantity * expected_price - quantized_margin = ((expected_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) - * Decimal(str(fixed_denom.min_quantity_tick_size))) - quantized_chain_format_margin = quantized_margin * Decimal(f"1e18") + quantized_margin = ( + (expected_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) + * Decimal(str(fixed_denom.min_quantity_tick_size)) + ) + quantized_chain_format_margin = quantized_margin * Decimal("1e18") assert (quantized_chain_format_margin == chain_value) @@ -187,9 +189,11 @@ def test_calculate_margin_for_buy_without_fixed_denom(self, first_match_bet_mark price_decimals = first_match_bet_market.quote_token.decimals expected_price = original_price * Decimal(f"1e{price_decimals}") expected_margin = original_quantity * expected_price - quantized_margin = ((expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) - * Decimal(str(first_match_bet_market.min_quantity_tick_size))) - quantized_chain_format_margin = quantized_margin * Decimal(f"1e18") + quantized_margin = ( + (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) + * Decimal(str(first_match_bet_market.min_quantity_tick_size)) + ) + quantized_chain_format_margin = quantized_margin * Decimal("1e18") assert (quantized_chain_format_margin == chain_value) @@ -206,8 +210,10 @@ def test_calculate_margin_for_sell_without_fixed_denom(self, first_match_bet_mar price_decimals = first_match_bet_market.quote_token.decimals expected_price = (Decimal(1) - original_price) * Decimal(f"1e{price_decimals}") expected_margin = original_quantity * expected_price - quantized_margin = ((expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) - * Decimal(str(first_match_bet_market.min_quantity_tick_size))) - quantized_chain_format_margin = quantized_margin * Decimal(f"1e18") + quantized_margin = ( + (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) + * Decimal(str(first_match_bet_market.min_quantity_tick_size)) + ) + quantized_chain_format_margin = quantized_margin * Decimal("1e18") assert (quantized_chain_format_margin == chain_value) diff --git a/tests/core/test_token.py b/tests/core/test_token.py index 66cb6cd7..478bf906 100644 --- a/tests/core/test_token.py +++ b/tests/core/test_token.py @@ -1,7 +1,6 @@ -import pytest from decimal import Decimal -from tests.model_fixtures.markets_fixtures import inj_token +from tests.model_fixtures.markets_fixtures import inj_token # noqa: F401 class TestToken: diff --git a/tests/model_fixtures/markets_fixtures.py b/tests/model_fixtures/markets_fixtures.py index cca40680..305887a5 100644 --- a/tests/model_fixtures/markets_fixtures.py +++ b/tests/model_fixtures/markets_fixtures.py @@ -90,6 +90,7 @@ def btc_usdt_perp_market(usdt_perp_token): return market + @pytest.fixture def first_match_bet_market(usdt_token): market = BinaryOptionMarket( diff --git a/tests/rpc_fixtures/configurable_servicers.py b/tests/rpc_fixtures/configurable_servicers.py index 136491ce..c116b9a3 100644 --- a/tests/rpc_fixtures/configurable_servicers.py +++ b/tests/rpc_fixtures/configurable_servicers.py @@ -1,8 +1,6 @@ from collections import deque -import pytest from pyinjective.proto.exchange.injective_derivative_exchange_rpc_pb2_grpc import InjectiveDerivativeExchangeRPCServicer - from pyinjective.proto.exchange import ( injective_spot_exchange_rpc_pb2, injective_derivative_exchange_rpc_pb2, diff --git a/tests/rpc_fixtures/markets_fixtures.py b/tests/rpc_fixtures/markets_fixtures.py index b6a2d3a3..d29a87a5 100644 --- a/tests/rpc_fixtures/markets_fixtures.py +++ b/tests/rpc_fixtures/markets_fixtures.py @@ -16,6 +16,7 @@ def inj_token_meta(): return token + @pytest.fixture def ape_token_meta(): from pyinjective.proto.exchange.injective_spot_exchange_rpc_pb2 import TokenMeta @@ -31,6 +32,7 @@ def ape_token_meta(): return token + @pytest.fixture def usdt_token_meta(): from pyinjective.proto.exchange.injective_spot_exchange_rpc_pb2 import TokenMeta @@ -46,6 +48,7 @@ def usdt_token_meta(): return token + @pytest.fixture def usdt_token_meta_second_denom(): from pyinjective.proto.exchange.injective_spot_exchange_rpc_pb2 import TokenMeta @@ -99,6 +102,7 @@ def ape_usdt_spot_market_meta(ape_token_meta, usdt_token_meta_second_denom): return market + @pytest.fixture def inj_usdt_spot_market_meta(inj_token_meta, usdt_token_meta): from pyinjective.proto.exchange.injective_spot_exchange_rpc_pb2 import SpotMarketInfo @@ -120,6 +124,7 @@ def inj_usdt_spot_market_meta(inj_token_meta, usdt_token_meta): return market + @pytest.fixture def btc_usdt_perp_market_meta(usdt_perp_token_meta): from pyinjective.proto.exchange.injective_derivative_exchange_rpc_pb2 import ( @@ -164,6 +169,7 @@ def btc_usdt_perp_market_meta(usdt_perp_token_meta): return market + @pytest.fixture def first_match_bet_market_meta(inj_usdt_spot_market_meta): from pyinjective.proto.exchange.injective_derivative_exchange_rpc_pb2 import BinaryOptionsMarketInfo @@ -186,4 +192,4 @@ def first_match_bet_market_meta(inj_usdt_spot_market_meta): min_quantity_tick_size="1", ) - return market \ No newline at end of file + return market diff --git a/tests/test_async_client.py b/tests/test_async_client.py index 8cbab554..7b1e1cfc 100644 --- a/tests/test_async_client.py +++ b/tests/test_async_client.py @@ -8,19 +8,21 @@ injective_spot_exchange_rpc_pb2, injective_derivative_exchange_rpc_pb2, ) -from tests.rpc_fixtures.markets_fixtures import ( - inj_token_meta, - ape_token_meta, - usdt_token_meta, - usdt_token_meta_second_denom, - usdt_perp_token_meta, - inj_usdt_spot_market_meta, - ape_usdt_spot_market_meta, - btc_usdt_perp_market_meta, - first_match_bet_market_meta, +from tests.rpc_fixtures.markets_fixtures import ( # noqa: F401 + inj_token_meta, # noqa: F401 + ape_token_meta, # noqa: F401 + usdt_token_meta, # noqa: F401 + usdt_token_meta_second_denom, # noqa: F401 + usdt_perp_token_meta, # noqa: F401 + inj_usdt_spot_market_meta, # noqa: F401 + ape_usdt_spot_market_meta, # noqa: F401 + btc_usdt_perp_market_meta, # noqa: F401 + first_match_bet_market_meta, # noqa: F401 +) +from tests.rpc_fixtures.configurable_servicers import ( + ConfigurableInjectiveDerivativeExchangeRPCServicer, + ConfigurableInjectiveSpotExchangeRPCServicer, ) -from tests.rpc_fixtures.configurable_servicers import ConfigurableInjectiveDerivativeExchangeRPCServicer, \ - ConfigurableInjectiveSpotExchangeRPCServicer @pytest.fixture @@ -92,7 +94,8 @@ async def test_initialize_tokens_and_markets( derivative_servicer.binary_option_markets_queue.append( injective_derivative_exchange_rpc_pb2.BinaryOptionsMarketsResponse( markets=[first_match_bet_market_meta] - )) + ) + ) client = AsyncClient( network=Network.local(), @@ -127,4 +130,8 @@ async def test_initialize_tokens_and_markets( all_binary_option_markets = await client.all_binary_option_markets() assert (1 == len(all_binary_option_markets)) - assert (any((first_match_bet_market_meta.market_id == market.id for market in all_binary_option_markets.values()))) + assert ( + any( + (first_match_bet_market_meta.market_id == market.id for market in all_binary_option_markets.values()) + ) + ) diff --git a/tests/test_composer.py b/tests/test_composer.py index 449854ad..d5bdc449 100644 --- a/tests/test_composer.py +++ b/tests/test_composer.py @@ -6,13 +6,13 @@ from pyinjective.constant import Denom from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket from pyinjective.proto.injective.exchange.v1beta1 import exchange_pb2 -from tests.model_fixtures.markets_fixtures import ( - btc_usdt_perp_market, - first_match_bet_market, - inj_token, +from tests.model_fixtures.markets_fixtures import ( # noqa: F401 + btc_usdt_perp_market, # noqa: F401 + first_match_bet_market, # noqa: F401 + inj_token, # noqa: F401 inj_usdt_spot_market, - usdt_token, - usdt_perp_token + usdt_token, # noqa: F401 + usdt_perp_token # noqa: F401 ) @@ -42,15 +42,20 @@ def test_composer_initialization_from_ini_files(self): composer = Composer(network=Network.devnet().string()) inj_token = composer.tokens["INJ"] - inj_usdt_spot_market = next((market for market in composer.spot_markets.values() if market.ticker == "'Devnet Spot INJ/USDT'")) - inj_usdt_perp_market = next((market for market in composer.derivative_markets.values() if market.ticker == "'Devnet Derivative INJ/USDT PERP'")) + inj_usdt_spot_market = next( + (market for market in composer.spot_markets.values() + if market.ticker == "'Devnet Spot INJ/USDT'") + ) + inj_usdt_perp_market = next( + (market for market in composer.derivative_markets.values() + if market.ticker == "'Devnet Derivative INJ/USDT PERP'") + ) assert (18 == inj_token.decimals) assert (18 == inj_usdt_spot_market.base_token.decimals) assert (6 == inj_usdt_spot_market.quote_token.decimals) assert (6 == inj_usdt_perp_market.quote_token.decimals) - def test_buy_spot_order_creation(self, basic_composer: Composer, inj_usdt_spot_market: SpotMarket): fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" price = 6.869 @@ -68,11 +73,11 @@ def test_buy_spot_order_creation(self, basic_composer: Composer, inj_usdt_spot_m chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") expected_price = ((chain_format_price // inj_usdt_spot_market.min_price_tick_size) * inj_usdt_spot_market.min_price_tick_size - * Decimal(f"1e18")) + * Decimal("1e18")) chain_format_quantity = Decimal(str(quantity)) * Decimal(f"1e{inj_usdt_spot_market.base_token.decimals}") expected_quantity = ((chain_format_quantity // inj_usdt_spot_market.min_quantity_tick_size) * inj_usdt_spot_market.min_quantity_tick_size - * Decimal(f"1e18")) + * Decimal("1e18")) assert (order.market_id == inj_usdt_spot_market.id) assert (order.order_info.subaccount_id == "1") @@ -99,17 +104,23 @@ def test_buy_derivative_order_creation(self, basic_composer: Composer, btc_usdt_ price_decimals = btc_usdt_perp_market.quote_token.decimals chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") - expected_price = ((chain_format_price // btc_usdt_perp_market.min_price_tick_size) - * btc_usdt_perp_market.min_price_tick_size - * Decimal(f"1e18")) + expected_price = ( + (chain_format_price // btc_usdt_perp_market.min_price_tick_size) + * btc_usdt_perp_market.min_price_tick_size + * Decimal("1e18") + ) chain_format_quantity = Decimal(str(quantity)) - expected_quantity = ((chain_format_quantity // btc_usdt_perp_market.min_quantity_tick_size) - * btc_usdt_perp_market.min_quantity_tick_size - * Decimal(f"1e18")) + expected_quantity = ( + (chain_format_quantity // btc_usdt_perp_market.min_quantity_tick_size) + * btc_usdt_perp_market.min_quantity_tick_size + * Decimal("1e18") + ) chain_format_margin = (chain_format_quantity * chain_format_price) / Decimal(leverage) - expected_margin = ((chain_format_margin // btc_usdt_perp_market.min_quantity_tick_size) - * btc_usdt_perp_market.min_quantity_tick_size - * Decimal(f"1e18")) + expected_margin = ( + (chain_format_margin // btc_usdt_perp_market.min_quantity_tick_size) + * btc_usdt_perp_market.min_quantity_tick_size + * Decimal("1e18") + ) assert (order.market_id == btc_usdt_perp_market.id) assert (order.order_info.subaccount_id == "1") @@ -133,9 +144,11 @@ def test_increase_position_margin(self, basic_composer: Composer, btc_usdt_perp_ price_decimals = btc_usdt_perp_market.quote_token.decimals chain_format_margin = Decimal(str(amount)) * Decimal(f"1e{price_decimals}") - expected_margin = ((chain_format_margin // btc_usdt_perp_market.min_quantity_tick_size) - * btc_usdt_perp_market.min_quantity_tick_size - * Decimal(f"1e18")) + expected_margin = ( + (chain_format_margin // btc_usdt_perp_market.min_quantity_tick_size) + * btc_usdt_perp_market.min_quantity_tick_size + * Decimal("1e18") + ) assert (message.market_id == btc_usdt_perp_market.id) assert (message.sender == sender) @@ -171,18 +184,24 @@ def test_buy_binary_option_order_creation_with_fixed_denom( price_decimals = fixed_denom.quote chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") - expected_price = ((chain_format_price // Decimal(str(fixed_denom.min_price_tick_size))) - * Decimal(str(fixed_denom.min_price_tick_size)) - * Decimal(f"1e18")) + expected_price = ( + (chain_format_price // Decimal(str(fixed_denom.min_price_tick_size))) + * Decimal(str(fixed_denom.min_price_tick_size)) + * Decimal("1e18") + ) quantity_decimals = fixed_denom.base chain_format_quantity = Decimal(str(quantity)) * Decimal(f"1e{quantity_decimals}") - expected_quantity = ((chain_format_quantity // Decimal(str(fixed_denom.min_quantity_tick_size))) - * Decimal(str(fixed_denom.min_quantity_tick_size)) - * Decimal(f"1e18")) + expected_quantity = ( + (chain_format_quantity // Decimal(str(fixed_denom.min_quantity_tick_size))) + * Decimal(str(fixed_denom.min_quantity_tick_size)) + * Decimal("1e18") + ) chain_format_margin = chain_format_quantity * chain_format_price - expected_margin = ((chain_format_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) - * Decimal(str(fixed_denom.min_quantity_tick_size)) - * Decimal(f"1e18")) + expected_margin = ( + (chain_format_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) + * Decimal(str(fixed_denom.min_quantity_tick_size)) + * Decimal("1e18") + ) assert (order.market_id == first_match_bet_market.id) assert (order.order_info.subaccount_id == "1") @@ -215,15 +234,15 @@ def test_buy_binary_option_order_creation_without_fixed_denom( chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") expected_price = ((chain_format_price // first_match_bet_market.min_price_tick_size) * first_match_bet_market.min_price_tick_size - * Decimal(f"1e18")) + * Decimal("1e18")) chain_format_quantity = Decimal(str(quantity)) expected_quantity = ((chain_format_quantity // first_match_bet_market.min_quantity_tick_size) * first_match_bet_market.min_quantity_tick_size - * Decimal(f"1e18")) + * Decimal("1e18")) chain_format_margin = (chain_format_quantity * chain_format_price) expected_margin = ((chain_format_margin // first_match_bet_market.min_quantity_tick_size) * first_match_bet_market.min_quantity_tick_size - * Decimal(f"1e18")) + * Decimal("1e18")) assert (order.market_id == first_match_bet_market.id) assert (order.order_info.subaccount_id == "1") diff --git a/tests/test_wallet.py b/tests/test_wallet.py index 4e6132a6..65769509 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -9,7 +9,9 @@ def test_private_key_signature_generation(self): private_key = PrivateKey.from_mnemonic("test mnemonic never use other places") signature = private_key.sign(msg="test message".encode()) - expected_signature = b'\x8f\xae\xcb#z\x9a+\x12\x88\xea\xb5xZ"\x8f\x98y\xb8\x97\xa7F\xd5\xdd\x15s\x05;\x04\x1d\xbaY|rw\x8b\xbb\x19\xfc\x8e\x15\x8b\xf1\x18\x08\xba\xc7\x15\xed\xb0\xee\x95\x0e|Ch\x7f\xaf\x9cH\xc6\x9f\xbf\x14\xa5' + expected_signature = (b'\x8f\xae\xcb#z\x9a+\x12\x88\xea\xb5xZ"\x8f\x98y\xb8\x97\xa7F\xd5\xdd\x15s\x05;' + b'\x04\x1d\xbaY|rw\x8b\xbb\x19\xfc\x8e\x15\x8b\xf1\x18\x08\xba\xc7\x15\xed\xb0\xee\x95' + b'\x0e|Ch\x7f\xaf\x9cH\xc6\x9f\xbf\x14\xa5') assert (expected_signature == signature) @@ -26,4 +28,3 @@ def test_convert_public_key_to_address(self): expected_address = Address(hashed_value[12:]) assert (expected_address == address) - From 144fe3b26a8355dc06c1fa9198ce5831a3c22369 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 10:46:38 -0300 Subject: [PATCH 03/23] (feat) Added GitHub workflow to run pre-commit checks for pushes to master and dev --- .github/workflows/pre-commit.yml | 35 ++++++++++++++++++++++++++++++++ poetry.toml | 3 +++ 2 files changed, 38 insertions(+) create mode 100644 .github/workflows/pre-commit.yml create mode 100644 poetry.toml diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 00000000..c7cf58d8 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,35 @@ +name: pre-commit + +on: + pull_request: + push: + branches: [master, dev] + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v3 + - name: Install poetry + run: python -m pip install poetry + + - name: Configure poetry + run: python -m poetry config virtualenvs.in-project true + + - name: Cache the virtualenv + id: cache-venv + uses: actions/cache@v3 + with: + path: ./.venv + key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} + + - name: Install dependencies + if: steps.cache-venv.outputs.cache-hit != 'true' + run: python -m poetry install + + - name: Run pre-commit + run: pre-commit run --show-diff-on-failure --color=always --all-files + shell: bash diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 00000000..53b35d37 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,3 @@ +[virtualenvs] +create = true +in-project = true From 00b2d8e76d9e60820fa24b195c54bbd2ebeabb1a Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 10:53:21 -0300 Subject: [PATCH 04/23] (fix) Fix issue in pre-commit workflow --- .github/workflows/pre-commit.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index c7cf58d8..0a653c99 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -31,5 +31,7 @@ jobs: run: python -m poetry install - name: Run pre-commit - run: pre-commit run --show-diff-on-failure --color=always --all-files + run: | + python -m poetry shell + pre-commit run --show-diff-on-failure --color=always --all-files shell: bash From 494869e3d61c325f77b7be73723c37dabe2f50f4 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 10:58:44 -0300 Subject: [PATCH 05/23] (fix) Fix error un pre-commit workflow --- .github/workflows/pre-commit.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 0a653c99..213a609f 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -32,6 +32,5 @@ jobs: - name: Run pre-commit run: | - python -m poetry shell - pre-commit run --show-diff-on-failure --color=always --all-files + python -m poetry run pre-commit run --show-diff-on-failure --color=always --all-files shell: bash From 9b8421e798fa8a2a96fa630bc53f3826d78cbfa0 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 12:09:24 -0300 Subject: [PATCH 06/23] (fix) Update release GitHub workflow to use Poetry to publish the SDK package --- .github/workflows/pre-commit.yml | 4 ---- .github/workflows/release.yml | 29 +++++++++++------------------ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 213a609f..5a18ae2c 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -15,10 +15,6 @@ jobs: uses: actions/setup-python@v3 - name: Install poetry run: python -m pip install poetry - - - name: Configure poetry - run: python -m poetry config virtualenvs.in-project true - - name: Cache the virtualenv id: cache-venv uses: actions/cache@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 00e9bacc..18ca5bd3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,26 +2,19 @@ name: Publish Python 🐍 distribution 📦 to PyPI on: release: - types: [created] + types: [published] jobs: deploy: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@master - - name: Set up Python 3.7 - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - - name: Build and publish - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} - run: | - python setup.py sdist bdist_wheel - twine upload --skip-existing dist/* + - name: Checkout + uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v3 + - name: Install poetry + run: python -m pip install poetry + - run: poetry config pypi-token.pypi "${{ secrets.PYPI_API_KEY }}" + - name: Publish package + run: poetry publish --build From 71becbf5de598d2c515fe985a9baaf91b4f526a4 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 12:21:12 -0300 Subject: [PATCH 07/23] (feat) Removed file setup.py (not required now that we use Poetry) --- Makefile | 2 +- setup.py | 144 ------------------------------------------------------- 2 files changed, 1 insertion(+), 145 deletions(-) delete mode 100755 setup.py diff --git a/Makefile b/Makefile index 2485ee70..40b12f77 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,6 @@ copy-proto: done tests: - pytest -v + poetry run pytest -v .PHONY: all gen gen-client copy-proto tests diff --git a/setup.py b/setup.py deleted file mode 100755 index 14f0b836..00000000 --- a/setup.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Note: To use the 'upload' functionality of this file, you must: -# $ pipenv install twine --dev - -import io -import os -import sys -from shutil import rmtree - -from setuptools import setup, Command, find_packages - -NAME = "injective-py" -DESCRIPTION = "Injective Python SDK, with Exchange API client" -URL = "https://github.com/InjectiveLabs/sdk-python" -EMAIL = "achilleas@injectivelabs.com" -AUTHOR = "Injective Labs" -REQUIRES_PYTHON = ">=3.9" -VERSION = "0.8.5" - -REQUIRED = [ - "aiohttp", - "aiocron", - "asyncio", - "bech32", - "bip32", - "coincurve", - "ecdsa", - "eip712", - "grpcio", - "grpcio-tools", - "hdwallets", - "mnemonic", - "protobuf", - "requests", - "safe-pysha3", - "urllib3<2", - "web3>=6.0.0", - "websockets", -] - -DEV_REQUIRED = [ - "pytest", - "pytest-asyncio", - "pytest-grpc", - "request-mock", -] - -# The rest you shouldn't have to touch too much :) -# ------------------------------------------------ -# Except, perhaps the License and Trove Classifiers! -# If you do change the License, remember to change the Trove Classifier for that! - -here = os.path.abspath(os.path.dirname(__file__)) - -# Import the README and use it as the long-description. -# Note: this will only work if 'README.md' is present in your MANIFEST.in file! -try: - with io.open(os.path.join(here, "README.md"), encoding="utf-8") as f: - long_description = "\n" + f.read() -except FileNotFoundError: - long_description = DESCRIPTION - -# Load the package's __version__.py module as a dictionary. -about = {} -if not VERSION: - project_slug = NAME.lower().replace("-", "_").replace(" ", "_") - with open(os.path.join(here, project_slug, "__version__.py")) as f: - exec(f.read(), about) -else: - about["__version__"] = VERSION - - -class UploadCommand(Command): - """Support setup.py upload.""" - - description = "Build and publish the package." - user_options = [] - - @staticmethod - def status(s): - """Prints things in bold.""" - print("\033[1m{0}\033[0m".format(s)) - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - try: - self.status("Removing previous builds…") - rmtree(os.path.join(here, "dist")) - except OSError: - pass - - self.status("Building Source and Wheel (universal) distribution…") - os.system("{0} setup.py sdist bdist_wheel --universal".format(sys.executable)) - - self.status("Uploading the package to PyPI via Twine…") - os.system("twine upload dist/*") - - self.status("Pushing git tags…") - os.system("git tag v{0}".format(about["__version__"])) - os.system("git push --tags") - - sys.exit() - - -# Where the magic happens: -setup( - name=NAME, - packages=find_packages(), - include_package_data=True, - version=about["__version__"], - license="Apache Software License 2.0", - description=DESCRIPTION, - long_description=long_description, - long_description_content_type="text/markdown", - author=AUTHOR, - author_email=EMAIL, - python_requires=REQUIRES_PYTHON, - url=URL, - install_requires=REQUIRED, - extras_require={ - "dev": DEV_REQUIRED, - }, - classifiers=[ - # Trove classifiers - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - ], - # $ setup.py publish support. - cmdclass={ - "upload": UploadCommand, - }, -) From fa7377deec30c6863b5e88dd89414a3642f4a637 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 13:10:25 -0300 Subject: [PATCH 08/23] (feat) Added Isort to the project and configure it to run in pre-commit --- .pre-commit-config.yaml | 5 ++ compatibility-tests/tests.py | 18 ++-- compatibility-tests/unit_tests.py | 22 ++--- examples/SendToInjective.py | 3 +- examples/chain_client/0_LocalOrderHash.py | 4 +- .../13_MsgIncreasePositionMargin.py | 2 +- examples/chain_client/15_MsgWithdraw.py | 2 +- .../chain_client/16_MsgSubaccountTransfer.py | 2 +- .../chain_client/17_MsgBatchUpdateOrders.py | 2 +- examples/chain_client/18_MsgBid.py | 2 +- examples/chain_client/19_MsgGrant.py | 2 +- examples/chain_client/1_MsgSend.py | 2 +- examples/chain_client/20_MsgExec.py | 4 +- examples/chain_client/21_MsgRevoke.py | 2 +- examples/chain_client/22_MsgSendToEth.py | 3 +- .../chain_client/23_MsgRelayPriceFeedPrice.py | 2 +- examples/chain_client/24_MsgRewardsOptOut.py | 2 +- examples/chain_client/25_MsgDelegate.py | 2 +- .../26_MsgWithdrawDelegatorReward.py | 2 +- examples/chain_client/2_MsgDeposit.py | 2 +- examples/chain_client/30_ExternalTransfer.py | 2 +- .../31_MsgCreateBinaryOptionsLimitOrder.py | 2 +- .../32_MsgCreateBinaryOptionsMarketOrder.py | 2 +- .../33_MsgCancelBinaryOptionsOrder.py | 2 +- .../34_MsgAdminUpdateBinaryOptionsMarket.py | 2 +- .../35_MsgInstantBinaryOptionsMarketLaunch.py | 2 +- .../chain_client/36_MsgRelayProviderPrices.py | 2 +- .../chain_client/38_StreamEventOrderFail.py | 3 +- .../chain_client/3_MsgCreateSpotLimitOrder.py | 2 +- .../chain_client/40_MsgExecuteContract.py | 2 +- .../chain_client/41_MsgCreateInsuranceFund.py | 2 +- examples/chain_client/42_MsgUnderwrite.py | 2 +- .../chain_client/43_MsgRequestRedemption.py | 2 +- ...45_MessageBroadcasterWithGranteeAccount.py | 4 +- ...sterWithGranteeAccountWithoutSimulation.py | 4 +- ...8_WithdrawValidatorCommissionAndRewards.py | 9 +- .../4_MsgCreateSpotMarketOrder.py | 2 +- examples/chain_client/5_MsgCancelSpotOrder.py | 2 +- .../6_MsgCreateDerivativeLimitOrder.py | 2 +- .../7_MsgCreateDerivativeMarketOrder.py | 2 +- .../8_MsgCancelDerivativeOrder.py | 2 +- poetry.lock | 19 ++++- pyinjective/__init__.py | 2 +- pyinjective/async_client.py | 85 +++++++------------ pyinjective/composer.py | 45 ++++------ pyinjective/core/broadcaster.py | 6 +- pyinjective/orderhash.py | 2 +- pyinjective/transaction.py | 6 +- pyinjective/utils/metadata_validation.py | 2 +- pyinjective/wallet.py | 10 +-- pyproject.toml | 7 ++ tests/core/test_gas_limit_estimator.py | 1 - tests/core/test_market.py | 15 ++-- ...essage_based_transaction_fee_calculator.py | 4 +- tests/model_fixtures/markets_fixtures.py | 3 +- tests/rpc_fixtures/configurable_servicers.py | 5 +- tests/rpc_fixtures/markets_fixtures.py | 2 +- tests/test_async_client.py | 29 +++---- tests/test_composer.py | 19 ++--- tests/test_wallet.py | 2 +- 60 files changed, 189 insertions(+), 214 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ed384fe..e3b9b8e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,3 +17,8 @@ repos: types_or: [ python, jupyter, markdown, rst, yaml ] require_serial: true minimum_pre_commit_version: 2.9.0 +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + name: isort (python) diff --git a/compatibility-tests/tests.py b/compatibility-tests/tests.py index 7dd084f6..7e01fbcf 100644 --- a/compatibility-tests/tests.py +++ b/compatibility-tests/tests.py @@ -1,22 +1,16 @@ import asyncio -import aiohttp import base64 import json +from typing import Any, Dict, List + +import aiohttp import ecdsa -import sha3 import grpc - -from typing import Any, Dict, List -from injective.chain_client._wallet import ( - privkey_to_address, - privkey_to_pubkey, - seed_to_privkey, - DEFAULT_BECH32_HRP, -) -from injective.chain_client._typings import SyncMode import injective.exchange_api.injective_accounts_rpc_pb2 as accounts_rpc_pb import injective.exchange_api.injective_accounts_rpc_pb2_grpc as accounts_rpc_grpc - +import sha3 +from injective.chain_client._typings import SyncMode +from injective.chain_client._wallet import DEFAULT_BECH32_HRP, privkey_to_address, privkey_to_pubkey, seed_to_privkey MIN_GAS_PRICE = 500000000 diff --git a/compatibility-tests/unit_tests.py b/compatibility-tests/unit_tests.py index 825fc421..a2a4a7ae 100644 --- a/compatibility-tests/unit_tests.py +++ b/compatibility-tests/unit_tests.py @@ -1,22 +1,16 @@ -import pytest -import aiohttp -import json -import ecdsa -import sha3 -import grpc import base64 - +import json from typing import Any, Dict, List -from injective.chain_client._wallet import ( - privkey_to_address, - privkey_to_pubkey, - seed_to_privkey, - DEFAULT_BECH32_HRP, -) -from injective.chain_client._typings import SyncMode +import aiohttp +import ecdsa +import grpc import injective.exchange_api.injective_accounts_rpc_pb2 as accounts_rpc_pb import injective.exchange_api.injective_accounts_rpc_pb2_grpc as accounts_rpc_grpc +import pytest +import sha3 +from injective.chain_client._typings import SyncMode +from injective.chain_client._wallet import DEFAULT_BECH32_HRP, privkey_to_address, privkey_to_pubkey, seed_to_privkey MIN_GAS_PRICE = 500000000 diff --git a/examples/SendToInjective.py b/examples/SendToInjective.py index 1a10f7be..4563a145 100644 --- a/examples/SendToInjective.py +++ b/examples/SendToInjective.py @@ -1,6 +1,5 @@ -import json - import asyncio +import json from pyinjective.core.network import Network from pyinjective.sendtocosmos import Peggo diff --git a/examples/chain_client/0_LocalOrderHash.py b/examples/chain_client/0_LocalOrderHash.py index c66513af..1eef1af7 100644 --- a/examples/chain_client/0_LocalOrderHash.py +++ b/examples/chain_client/0_LocalOrderHash.py @@ -1,10 +1,10 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network -from pyinjective.wallet import PrivateKey from pyinjective.orderhash import OrderHashManager +from pyinjective.transaction import Transaction +from pyinjective.wallet import PrivateKey async def main() -> None: diff --git a/examples/chain_client/13_MsgIncreasePositionMargin.py b/examples/chain_client/13_MsgIncreasePositionMargin.py index ad154bc5..ddab6e91 100644 --- a/examples/chain_client/13_MsgIncreasePositionMargin.py +++ b/examples/chain_client/13_MsgIncreasePositionMargin.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/15_MsgWithdraw.py b/examples/chain_client/15_MsgWithdraw.py index 74faebe6..a8d987e9 100644 --- a/examples/chain_client/15_MsgWithdraw.py +++ b/examples/chain_client/15_MsgWithdraw.py @@ -15,8 +15,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/16_MsgSubaccountTransfer.py b/examples/chain_client/16_MsgSubaccountTransfer.py index 50c92ae6..d97d112e 100644 --- a/examples/chain_client/16_MsgSubaccountTransfer.py +++ b/examples/chain_client/16_MsgSubaccountTransfer.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/17_MsgBatchUpdateOrders.py b/examples/chain_client/17_MsgBatchUpdateOrders.py index e92420a3..1617e65b 100644 --- a/examples/chain_client/17_MsgBatchUpdateOrders.py +++ b/examples/chain_client/17_MsgBatchUpdateOrders.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/18_MsgBid.py b/examples/chain_client/18_MsgBid.py index 4f475a87..a0a0cc60 100644 --- a/examples/chain_client/18_MsgBid.py +++ b/examples/chain_client/18_MsgBid.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/19_MsgGrant.py b/examples/chain_client/19_MsgGrant.py index 23ed9c3f..2dc6a88b 100644 --- a/examples/chain_client/19_MsgGrant.py +++ b/examples/chain_client/19_MsgGrant.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/1_MsgSend.py b/examples/chain_client/1_MsgSend.py index 30cfd327..390349fc 100644 --- a/examples/chain_client/1_MsgSend.py +++ b/examples/chain_client/1_MsgSend.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/20_MsgExec.py b/examples/chain_client/20_MsgExec.py index 7c47ce04..52dae6f7 100644 --- a/examples/chain_client/20_MsgExec.py +++ b/examples/chain_client/20_MsgExec.py @@ -1,9 +1,9 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network -from pyinjective.wallet import PrivateKey, Address +from pyinjective.transaction import Transaction +from pyinjective.wallet import Address, PrivateKey async def main() -> None: diff --git a/examples/chain_client/21_MsgRevoke.py b/examples/chain_client/21_MsgRevoke.py index 2269a852..2e10e52b 100644 --- a/examples/chain_client/21_MsgRevoke.py +++ b/examples/chain_client/21_MsgRevoke.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/22_MsgSendToEth.py b/examples/chain_client/22_MsgSendToEth.py index 38d3e001..d4ee9e97 100644 --- a/examples/chain_client/22_MsgSendToEth.py +++ b/examples/chain_client/22_MsgSendToEth.py @@ -1,9 +1,10 @@ import asyncio + import requests from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/23_MsgRelayPriceFeedPrice.py b/examples/chain_client/23_MsgRelayPriceFeedPrice.py index 5edcc3e6..c7b742fd 100644 --- a/examples/chain_client/23_MsgRelayPriceFeedPrice.py +++ b/examples/chain_client/23_MsgRelayPriceFeedPrice.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/24_MsgRewardsOptOut.py b/examples/chain_client/24_MsgRewardsOptOut.py index 153ec9e0..55e02103 100644 --- a/examples/chain_client/24_MsgRewardsOptOut.py +++ b/examples/chain_client/24_MsgRewardsOptOut.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/25_MsgDelegate.py b/examples/chain_client/25_MsgDelegate.py index cbf2111f..6d432c4c 100644 --- a/examples/chain_client/25_MsgDelegate.py +++ b/examples/chain_client/25_MsgDelegate.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/26_MsgWithdrawDelegatorReward.py b/examples/chain_client/26_MsgWithdrawDelegatorReward.py index 500d6380..9eb8e636 100644 --- a/examples/chain_client/26_MsgWithdrawDelegatorReward.py +++ b/examples/chain_client/26_MsgWithdrawDelegatorReward.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/2_MsgDeposit.py b/examples/chain_client/2_MsgDeposit.py index 2131cf22..0d5c5754 100644 --- a/examples/chain_client/2_MsgDeposit.py +++ b/examples/chain_client/2_MsgDeposit.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/30_ExternalTransfer.py b/examples/chain_client/30_ExternalTransfer.py index b974afb7..7661e7f7 100644 --- a/examples/chain_client/30_ExternalTransfer.py +++ b/examples/chain_client/30_ExternalTransfer.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py index b866a022..8e94abf4 100644 --- a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py +++ b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py @@ -1,9 +1,9 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.constant import Denom from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py index f7b54644..dadbdb6c 100644 --- a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py +++ b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py index b83c2a3c..7a4a4cdf 100644 --- a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py +++ b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py index e66707b8..f155dcbb 100644 --- a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py +++ b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py index 305cafdd..91b59392 100644 --- a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py +++ b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/36_MsgRelayProviderPrices.py b/examples/chain_client/36_MsgRelayProviderPrices.py index 7ca40a85..374d6c50 100644 --- a/examples/chain_client/36_MsgRelayProviderPrices.py +++ b/examples/chain_client/36_MsgRelayProviderPrices.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/38_StreamEventOrderFail.py b/examples/chain_client/38_StreamEventOrderFail.py index 5840cb4e..dc767268 100644 --- a/examples/chain_client/38_StreamEventOrderFail.py +++ b/examples/chain_client/38_StreamEventOrderFail.py @@ -1,7 +1,8 @@ import asyncio +import base64 import json + import websockets -import base64 from pyinjective.core.network import Network diff --git a/examples/chain_client/3_MsgCreateSpotLimitOrder.py b/examples/chain_client/3_MsgCreateSpotLimitOrder.py index ba63d77b..ca48b45c 100644 --- a/examples/chain_client/3_MsgCreateSpotLimitOrder.py +++ b/examples/chain_client/3_MsgCreateSpotLimitOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/40_MsgExecuteContract.py b/examples/chain_client/40_MsgExecuteContract.py index dbcedd5b..387d152e 100644 --- a/examples/chain_client/40_MsgExecuteContract.py +++ b/examples/chain_client/40_MsgExecuteContract.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/41_MsgCreateInsuranceFund.py b/examples/chain_client/41_MsgCreateInsuranceFund.py index f4d95666..7afdee76 100644 --- a/examples/chain_client/41_MsgCreateInsuranceFund.py +++ b/examples/chain_client/41_MsgCreateInsuranceFund.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/42_MsgUnderwrite.py b/examples/chain_client/42_MsgUnderwrite.py index dd9a4dcf..11c4443c 100644 --- a/examples/chain_client/42_MsgUnderwrite.py +++ b/examples/chain_client/42_MsgUnderwrite.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/43_MsgRequestRedemption.py b/examples/chain_client/43_MsgRequestRedemption.py index 6b813426..801bedcd 100644 --- a/examples/chain_client/43_MsgRequestRedemption.py +++ b/examples/chain_client/43_MsgRequestRedemption.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py b/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py index dc017f3f..61b9ebd3 100644 --- a/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py +++ b/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py @@ -1,10 +1,10 @@ import asyncio -from pyinjective.composer import Composer as ProtoMsgComposer from pyinjective.async_client import AsyncClient +from pyinjective.composer import Composer as ProtoMsgComposer from pyinjective.core.broadcaster import MsgBroadcasterWithPk from pyinjective.core.network import Network -from pyinjective.wallet import PrivateKey, Address +from pyinjective.wallet import Address, PrivateKey async def main() -> None: diff --git a/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py b/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py index 4221d795..5539c112 100644 --- a/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py +++ b/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py @@ -1,10 +1,10 @@ import asyncio -from pyinjective.composer import Composer as ProtoMsgComposer from pyinjective.async_client import AsyncClient +from pyinjective.composer import Composer as ProtoMsgComposer from pyinjective.core.broadcaster import MsgBroadcasterWithPk from pyinjective.core.network import Network -from pyinjective.wallet import PrivateKey, Address +from pyinjective.wallet import Address, PrivateKey async def main() -> None: diff --git a/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py b/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py index 7d360790..1a05868f 100644 --- a/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py +++ b/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py @@ -1,11 +1,10 @@ import asyncio -import logging -from pyinjective.composer import Composer as ProtoMsgComposer from pyinjective.async_client import AsyncClient +from pyinjective.composer import Composer as ProtoMsgComposer +from pyinjective.core.network import Network from pyinjective.transaction import Transaction -from pyinjective.constant import Network from pyinjective.wallet import PrivateKey @@ -24,7 +23,7 @@ async def main() -> None: priv_key = PrivateKey.from_hex("f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3") pub_key = priv_key.to_public_key() address = pub_key.to_address() - account = await client.get_account(address.to_acc_bech32()) + await client.get_account(address.to_acc_bech32()) # prepare tx msg validator_address = "injvaloper1ultw9r29l8nxy5u6thcgusjn95vsy2caw722q5" @@ -58,7 +57,7 @@ async def main() -> None: # build tx gas_price = 500000000 - gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation + gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') fee = [composer.Coin( amount=gas_price * gas_limit, diff --git a/examples/chain_client/4_MsgCreateSpotMarketOrder.py b/examples/chain_client/4_MsgCreateSpotMarketOrder.py index 86ff022d..c93d1cf5 100644 --- a/examples/chain_client/4_MsgCreateSpotMarketOrder.py +++ b/examples/chain_client/4_MsgCreateSpotMarketOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/5_MsgCancelSpotOrder.py b/examples/chain_client/5_MsgCancelSpotOrder.py index 60e1ced7..ee6ca060 100644 --- a/examples/chain_client/5_MsgCancelSpotOrder.py +++ b/examples/chain_client/5_MsgCancelSpotOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py index 41c27bda..f5b8e28b 100644 --- a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py +++ b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py index 586c0210..dd8da09e 100644 --- a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py +++ b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/examples/chain_client/8_MsgCancelDerivativeOrder.py b/examples/chain_client/8_MsgCancelDerivativeOrder.py index a88c212a..61fd1d82 100644 --- a/examples/chain_client/8_MsgCancelDerivativeOrder.py +++ b/examples/chain_client/8_MsgCancelDerivativeOrder.py @@ -1,8 +1,8 @@ import asyncio from pyinjective.async_client import AsyncClient -from pyinjective.transaction import Transaction from pyinjective.core.network import Network +from pyinjective.transaction import Transaction from pyinjective.wallet import PrivateKey diff --git a/poetry.lock b/poetry.lock index b9746f4f..65d65b81 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1291,6 +1291,23 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + [[package]] name = "jsonschema" version = "4.19.0" @@ -2509,4 +2526,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "98d8cfebe3a2d74b2cfb1af64067aeac0d0500afac4324b0063f318da420e315" +content-hash = "9910d20ce606278058ffa00c27ab4b42abb06da9278623cc014c0b7076f13503" diff --git a/pyinjective/__init__.py b/pyinjective/__init__.py index f21608b4..aed35d7e 100644 --- a/pyinjective/__init__.py +++ b/pyinjective/__init__.py @@ -1,3 +1,3 @@ from .async_client import AsyncClient # noqa: F401 from .transaction import Transaction # noqa: F401 -from .wallet import PrivateKey, PublicKey, Address # noqa: F401 +from .wallet import Address, PrivateKey, PublicKey # noqa: F401 diff --git a/pyinjective/async_client.py b/pyinjective/async_client.py index e1863f36..1e90a4e6 100644 --- a/pyinjective/async_client.py +++ b/pyinjective/async_client.py @@ -1,68 +1,49 @@ import asyncio import time from copy import deepcopy +from decimal import Decimal +from typing import Coroutine, Dict, List, Optional, Tuple, Union -import grpc import aiocron -from decimal import Decimal -from typing import Dict, List, Optional, Tuple, Union, Coroutine +import grpc from pyinjective.composer import Composer from . import constant from .core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket +from .core.network import Network from .core.token import Token from .exceptions import NotFoundError - +from .proto.cosmos.auth.v1beta1 import query_pb2 as auth_query +from .proto.cosmos.auth.v1beta1 import query_pb2_grpc as auth_query_grpc +from .proto.cosmos.authz.v1beta1 import query_pb2 as authz_query +from .proto.cosmos.authz.v1beta1 import query_pb2_grpc as authz_query_grpc +from .proto.cosmos.bank.v1beta1 import query_pb2 as bank_query +from .proto.cosmos.bank.v1beta1 import query_pb2_grpc as bank_query_grpc from .proto.cosmos.base.abci.v1beta1 import abci_pb2 as abci_type - -from .proto.cosmos.base.tendermint.v1beta1 import ( - query_pb2_grpc as tendermint_query_grpc, - query_pb2 as tendermint_query, -) - -from .proto.cosmos.auth.v1beta1 import ( - query_pb2_grpc as auth_query_grpc, - query_pb2 as auth_query, -) -from .proto.cosmos.authz.v1beta1 import ( - query_pb2_grpc as authz_query_grpc, - query_pb2 as authz_query, -) -from .proto.cosmos.bank.v1beta1 import ( - query_pb2_grpc as bank_query_grpc, - query_pb2 as bank_query, -) -from .proto.cosmos.tx.v1beta1 import ( - service_pb2_grpc as tx_service_grpc, - service_pb2 as tx_service, -) -from .proto.exchange import ( - injective_accounts_rpc_pb2 as exchange_accounts_rpc_pb, - injective_accounts_rpc_pb2_grpc as exchange_accounts_rpc_grpc, - injective_oracle_rpc_pb2 as oracle_rpc_pb, - injective_oracle_rpc_pb2_grpc as oracle_rpc_grpc, - injective_insurance_rpc_pb2 as insurance_rpc_pb, - injective_insurance_rpc_pb2_grpc as insurance_rpc_grpc, - injective_spot_exchange_rpc_pb2 as spot_exchange_rpc_pb, - injective_spot_exchange_rpc_pb2_grpc as spot_exchange_rpc_grpc, - injective_derivative_exchange_rpc_pb2 as derivative_exchange_rpc_pb, - injective_derivative_exchange_rpc_pb2_grpc as derivative_exchange_rpc_grpc, - injective_meta_rpc_pb2 as exchange_meta_rpc_pb, - injective_meta_rpc_pb2_grpc as exchange_meta_rpc_grpc, - injective_explorer_rpc_pb2 as explorer_rpc_pb, - injective_explorer_rpc_pb2_grpc as explorer_rpc_grpc, - injective_auction_rpc_pb2 as auction_rpc_pb, - injective_auction_rpc_pb2_grpc as auction_rpc_grpc, - injective_portfolio_rpc_pb2 as portfolio_rpc_pb, - injective_portfolio_rpc_pb2_grpc as portfolio_rpc_grpc, -) - -from .proto.injective.types.v1beta1 import ( - account_pb2 -) - -from .core.network import Network +from .proto.cosmos.base.tendermint.v1beta1 import query_pb2 as tendermint_query +from .proto.cosmos.base.tendermint.v1beta1 import query_pb2_grpc as tendermint_query_grpc +from .proto.cosmos.tx.v1beta1 import service_pb2 as tx_service +from .proto.cosmos.tx.v1beta1 import service_pb2_grpc as tx_service_grpc +from .proto.exchange import injective_accounts_rpc_pb2 as exchange_accounts_rpc_pb +from .proto.exchange import injective_accounts_rpc_pb2_grpc as exchange_accounts_rpc_grpc +from .proto.exchange import injective_auction_rpc_pb2 as auction_rpc_pb +from .proto.exchange import injective_auction_rpc_pb2_grpc as auction_rpc_grpc +from .proto.exchange import injective_derivative_exchange_rpc_pb2 as derivative_exchange_rpc_pb +from .proto.exchange import injective_derivative_exchange_rpc_pb2_grpc as derivative_exchange_rpc_grpc +from .proto.exchange import injective_explorer_rpc_pb2 as explorer_rpc_pb +from .proto.exchange import injective_explorer_rpc_pb2_grpc as explorer_rpc_grpc +from .proto.exchange import injective_insurance_rpc_pb2 as insurance_rpc_pb +from .proto.exchange import injective_insurance_rpc_pb2_grpc as insurance_rpc_grpc +from .proto.exchange import injective_meta_rpc_pb2 as exchange_meta_rpc_pb +from .proto.exchange import injective_meta_rpc_pb2_grpc as exchange_meta_rpc_grpc +from .proto.exchange import injective_oracle_rpc_pb2 as oracle_rpc_pb +from .proto.exchange import injective_oracle_rpc_pb2_grpc as oracle_rpc_grpc +from .proto.exchange import injective_portfolio_rpc_pb2 as portfolio_rpc_pb +from .proto.exchange import injective_portfolio_rpc_pb2_grpc as portfolio_rpc_grpc +from .proto.exchange import injective_spot_exchange_rpc_pb2 as spot_exchange_rpc_pb +from .proto.exchange import injective_spot_exchange_rpc_pb2_grpc as spot_exchange_rpc_grpc +from .proto.injective.types.v1beta1 import account_pb2 from .utils.logger import LoggerProvider DEFAULT_TIMEOUTHEIGHT_SYNC_INTERVAL = 20 # seconds diff --git a/pyinjective/composer.py b/pyinjective/composer.py index 34eeadd5..29752b63 100644 --- a/pyinjective/composer.py +++ b/pyinjective/composer.py @@ -2,45 +2,32 @@ from configparser import ConfigParser from decimal import Decimal from time import time +from typing import Dict, List, Optional + +from google.protobuf import any_pb2, json_format, timestamp_pb2 -from google.protobuf import any_pb2, timestamp_pb2, json_format +from pyinjective import constant +from pyinjective.proto.cosmos.base.v1beta1 import coin_pb2 as cosmos_dot_base_dot_v1beta1_dot_coin__pb2 +from pyinjective.proto.injective.exchange.v1beta1 import ( + exchange_pb2 as injective_dot_exchange_dot_v1beta1_dot_exchange__pb2, +) +from .constant import ADDITIONAL_CHAIN_FORMAT_DECIMALS, INJ_DENOM from .core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket from .core.token import Token from .proto.cosmos.authz.v1beta1 import authz_pb2 as cosmos_authz_pb from .proto.cosmos.authz.v1beta1 import tx_pb2 as cosmos_authz_tx_pb - -from .proto.injective.exchange.v1beta1 import authz_pb2 as injective_authz_pb - from .proto.cosmos.bank.v1beta1 import tx_pb2 as cosmos_bank_tx_pb - -from .proto.injective.exchange.v1beta1 import tx_pb2 as injective_exchange_tx_pb -from pyinjective.proto.injective.exchange.v1beta1 import ( - exchange_pb2 as injective_dot_exchange_dot_v1beta1_dot_exchange__pb2 -) - -from .proto.injective.auction.v1beta1 import tx_pb2 as injective_auction_tx_pb - -from .proto.injective.peggy.v1 import msgs_pb2 as injective_peggy_tx_pb - -from .proto.injective.oracle.v1beta1 import tx_pb2 as injective_oracle_tx_pb - -from .proto.cosmos.staking.v1beta1 import tx_pb2 as cosmos_staking_tx_pb - from .proto.cosmos.distribution.v1beta1 import tx_pb2 as cosmos_distribution_tx_pb - from .proto.cosmos.gov.v1beta1 import tx_pb2 as cosmos_gov_tx_pb - -from .proto.injective.insurance.v1beta1 import tx_pb2 as injective_insurance_tx_pb - -from pyinjective.proto.cosmos.base.v1beta1 import coin_pb2 as cosmos_dot_base_dot_v1beta1_dot_coin__pb2 - +from .proto.cosmos.staking.v1beta1 import tx_pb2 as cosmos_staking_tx_pb from .proto.cosmwasm.wasm.v1 import tx_pb2 as wasm_tx_pb - -from .constant import ADDITIONAL_CHAIN_FORMAT_DECIMALS, INJ_DENOM -from typing import Dict, List, Optional - -from pyinjective import constant +from .proto.injective.auction.v1beta1 import tx_pb2 as injective_auction_tx_pb +from .proto.injective.exchange.v1beta1 import authz_pb2 as injective_authz_pb +from .proto.injective.exchange.v1beta1 import tx_pb2 as injective_exchange_tx_pb +from .proto.injective.insurance.v1beta1 import tx_pb2 as injective_insurance_tx_pb +from .proto.injective.oracle.v1beta1 import tx_pb2 as injective_oracle_tx_pb +from .proto.injective.peggy.v1 import msgs_pb2 as injective_peggy_tx_pb class Composer: diff --git a/pyinjective/core/broadcaster.py b/pyinjective/core/broadcaster.py index 7fb54278..2c6f6557 100644 --- a/pyinjective/core/broadcaster.py +++ b/pyinjective/core/broadcaster.py @@ -1,15 +1,15 @@ +import math from abc import ABC, abstractmethod from decimal import Decimal from typing import List, Optional -import math from google.protobuf import any_pb2 -from pyinjective import PrivateKey, Transaction, PublicKey +from pyinjective import PrivateKey, PublicKey, Transaction from pyinjective.async_client import AsyncClient from pyinjective.composer import Composer -from pyinjective.core.network import Network from pyinjective.core.gas_limit_estimator import GasLimitEstimator +from pyinjective.core.network import Network class BroadcasterAccountConfig(ABC): diff --git a/pyinjective/orderhash.py b/pyinjective/orderhash.py index 17a31041..9fc850e6 100644 --- a/pyinjective/orderhash.py +++ b/pyinjective/orderhash.py @@ -1,6 +1,6 @@ -import requests from decimal import Decimal +import requests from eip712.messages import EIP712Message, EIP712Type from eth_account.messages import _hash_eip191_message as hash_eip191_message from hexbytes import HexBytes diff --git a/pyinjective/transaction.py b/pyinjective/transaction.py index 5107fc55..58348771 100644 --- a/pyinjective/transaction.py +++ b/pyinjective/transaction.py @@ -1,12 +1,12 @@ from typing import List, Tuple from google.protobuf import any_pb2, message -from .proto.cosmos.base.v1beta1.coin_pb2 import Coin -from .proto.cosmos.tx.v1beta1 import tx_pb2 as cosmos_tx_type -from .proto.cosmos.tx.signing.v1beta1 import signing_pb2 as tx_sign from .constant import MAX_MEMO_CHARACTERS from .exceptions import EmptyMsgError, UndefinedError, ValueTooLargeError +from .proto.cosmos.base.v1beta1.coin_pb2 import Coin +from .proto.cosmos.tx.signing.v1beta1 import signing_pb2 as tx_sign +from .proto.cosmos.tx.v1beta1 import tx_pb2 as cosmos_tx_type from .wallet import PublicKey diff --git a/pyinjective/utils/metadata_validation.py b/pyinjective/utils/metadata_validation.py index d779b7c4..ef357114 100644 --- a/pyinjective/utils/metadata_validation.py +++ b/pyinjective/utils/metadata_validation.py @@ -4,8 +4,8 @@ import pyinjective.constant as constant from pyinjective.async_client import AsyncClient +from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket from pyinjective.core.network import Network -from pyinjective.core.market import SpotMarket, DerivativeMarket, BinaryOptionMarket def find_metadata_inconsistencies(network: Network) -> Tuple[List[Any]]: diff --git a/pyinjective/wallet.py b/pyinjective/wallet.py index 899f4932..06e3f02f 100644 --- a/pyinjective/wallet.py +++ b/pyinjective/wallet.py @@ -1,13 +1,13 @@ -import sha3 import hashlib -import aiohttp import json -import requests from typing import Tuple -from bech32 import bech32_encode, bech32_decode, convertbits +import aiohttp +import requests +import sha3 +from bech32 import bech32_decode, bech32_encode, convertbits from bip32 import BIP32 -from ecdsa import SigningKey, VerifyingKey, SECP256k1, BadSignatureError +from ecdsa import BadSignatureError, SECP256k1, SigningKey, VerifyingKey from ecdsa.util import sigencode_string_canonize from mnemonic import Mnemonic diff --git a/pyproject.toml b/pyproject.toml index 63be2ea2..06697c52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,7 @@ requests-mock = "*" [tool.poetry.group.dev.dependencies] pre-commit = "^3.4.0" flakeheaven = "^3.3.0" +isort = "^5.12.0" [tool.flakeheaven] @@ -60,6 +61,12 @@ pyflakes = ["+*"] pyflakes = ["-F811"] # disable a plugin +[tool.isort] +profile = "black" +line_length = 120 +skip_glob = ["pyinjective/proto/*", ".idea/*"] + + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tests/core/test_gas_limit_estimator.py b/tests/core/test_gas_limit_estimator.py index 13c679e5..da043c2a 100644 --- a/tests/core/test_gas_limit_estimator.py +++ b/tests/core/test_gas_limit_estimator.py @@ -6,7 +6,6 @@ from pyinjective.proto.cosmos.gov.v1beta1 import tx_pb2 as gov_tx_pb from pyinjective.proto.cosmwasm.wasm.v1 import tx_pb2 as wasm_tx_pb from pyinjective.proto.injective.exchange.v1beta1 import tx_pb2 as injective_exchange_tx_pb - from tests.model_fixtures.markets_fixtures import usdt_token # noqa: F401 diff --git a/tests/core/test_market.py b/tests/core/test_market.py index ec8e0dcf..68216823 100644 --- a/tests/core/test_market.py +++ b/tests/core/test_market.py @@ -1,16 +1,13 @@ from decimal import Decimal from pyinjective.constant import Denom - from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket -from tests.model_fixtures.markets_fixtures import ( # noqa: F401 - first_match_bet_market, # noqa: F401 - inj_token, # noqa: F401 - usdt_token, # noqa: F401 - usdt_perp_token, # noqa: F401 - inj_usdt_spot_market, # noqa: F401 - btc_usdt_perp_market, # noqa: F401 -) +from tests.model_fixtures.markets_fixtures import btc_usdt_perp_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import first_match_bet_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import inj_token # noqa: F401 +from tests.model_fixtures.markets_fixtures import inj_usdt_spot_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import usdt_perp_token # noqa: F401 +from tests.model_fixtures.markets_fixtures import usdt_token # noqa: F401; noqa: F401 class TestSpotMarket: diff --git a/tests/core/test_message_based_transaction_fee_calculator.py b/tests/core/test_message_based_transaction_fee_calculator.py index 2c3c4441..eff3ea6e 100644 --- a/tests/core/test_message_based_transaction_fee_calculator.py +++ b/tests/core/test_message_based_transaction_fee_calculator.py @@ -1,13 +1,13 @@ +import math from decimal import Decimal -import math import pytest from pyinjective import Transaction from pyinjective.async_client import AsyncClient from pyinjective.composer import Composer -from pyinjective.core.network import Network from pyinjective.core.broadcaster import MessageBasedTransactionFeeCalculator +from pyinjective.core.network import Network from pyinjective.proto.cosmos.gov.v1beta1 import tx_pb2 as gov_tx_pb2 from pyinjective.proto.cosmwasm.wasm.v1 import tx_pb2 as wasm_tx_pb2 from pyinjective.proto.injective.exchange.v1beta1 import tx_pb2 diff --git a/tests/model_fixtures/markets_fixtures.py b/tests/model_fixtures/markets_fixtures.py index 305887a5..15b35021 100644 --- a/tests/model_fixtures/markets_fixtures.py +++ b/tests/model_fixtures/markets_fixtures.py @@ -1,6 +1,7 @@ -import pytest from decimal import Decimal +import pytest + from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket from pyinjective.core.token import Token diff --git a/tests/rpc_fixtures/configurable_servicers.py b/tests/rpc_fixtures/configurable_servicers.py index c116b9a3..bf32d9ba 100644 --- a/tests/rpc_fixtures/configurable_servicers.py +++ b/tests/rpc_fixtures/configurable_servicers.py @@ -1,10 +1,7 @@ from collections import deque +from pyinjective.proto.exchange import injective_derivative_exchange_rpc_pb2, injective_spot_exchange_rpc_pb2 from pyinjective.proto.exchange.injective_derivative_exchange_rpc_pb2_grpc import InjectiveDerivativeExchangeRPCServicer -from pyinjective.proto.exchange import ( - injective_spot_exchange_rpc_pb2, - injective_derivative_exchange_rpc_pb2, -) from pyinjective.proto.exchange.injective_spot_exchange_rpc_pb2_grpc import InjectiveSpotExchangeRPCServicer diff --git a/tests/rpc_fixtures/markets_fixtures.py b/tests/rpc_fixtures/markets_fixtures.py index d29a87a5..4ff72c4c 100644 --- a/tests/rpc_fixtures/markets_fixtures.py +++ b/tests/rpc_fixtures/markets_fixtures.py @@ -129,8 +129,8 @@ def inj_usdt_spot_market_meta(inj_token_meta, usdt_token_meta): def btc_usdt_perp_market_meta(usdt_perp_token_meta): from pyinjective.proto.exchange.injective_derivative_exchange_rpc_pb2 import ( DerivativeMarketInfo, - PerpetualMarketInfo, PerpetualMarketFunding, + PerpetualMarketInfo, ) perpetual_market_info = PerpetualMarketInfo( diff --git a/tests/test_async_client.py b/tests/test_async_client.py index 7b1e1cfc..ffd78cd3 100644 --- a/tests/test_async_client.py +++ b/tests/test_async_client.py @@ -1,28 +1,25 @@ import logging import pytest -from pyinjective.core.network import Network from pyinjective.async_client import AsyncClient -from pyinjective.proto.exchange import ( - injective_spot_exchange_rpc_pb2, - injective_derivative_exchange_rpc_pb2, -) -from tests.rpc_fixtures.markets_fixtures import ( # noqa: F401 - inj_token_meta, # noqa: F401 - ape_token_meta, # noqa: F401 - usdt_token_meta, # noqa: F401 - usdt_token_meta_second_denom, # noqa: F401 - usdt_perp_token_meta, # noqa: F401 - inj_usdt_spot_market_meta, # noqa: F401 - ape_usdt_spot_market_meta, # noqa: F401 - btc_usdt_perp_market_meta, # noqa: F401 - first_match_bet_market_meta, # noqa: F401 -) +from pyinjective.core.network import Network +from pyinjective.proto.exchange import injective_derivative_exchange_rpc_pb2, injective_spot_exchange_rpc_pb2 from tests.rpc_fixtures.configurable_servicers import ( ConfigurableInjectiveDerivativeExchangeRPCServicer, ConfigurableInjectiveSpotExchangeRPCServicer, ) +from tests.rpc_fixtures.markets_fixtures import ape_token_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import ape_usdt_spot_market_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import btc_usdt_perp_market_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import inj_token_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import inj_usdt_spot_market_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import usdt_perp_token_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import usdt_token_meta # noqa: F401 +from tests.rpc_fixtures.markets_fixtures import ( # noqa: F401; noqa: F401; noqa: F401 + first_match_bet_market_meta, + usdt_token_meta_second_denom, +) @pytest.fixture diff --git a/tests/test_composer.py b/tests/test_composer.py index d5bdc449..d8812580 100644 --- a/tests/test_composer.py +++ b/tests/test_composer.py @@ -1,19 +1,18 @@ -import pytest from decimal import Decimal +import pytest + from pyinjective.composer import Composer -from pyinjective.core.network import Network from pyinjective.constant import Denom from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket +from pyinjective.core.network import Network from pyinjective.proto.injective.exchange.v1beta1 import exchange_pb2 -from tests.model_fixtures.markets_fixtures import ( # noqa: F401 - btc_usdt_perp_market, # noqa: F401 - first_match_bet_market, # noqa: F401 - inj_token, # noqa: F401 - inj_usdt_spot_market, - usdt_token, # noqa: F401 - usdt_perp_token # noqa: F401 -) +from tests.model_fixtures.markets_fixtures import btc_usdt_perp_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import first_match_bet_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import inj_token # noqa: F401 +from tests.model_fixtures.markets_fixtures import inj_usdt_spot_market # noqa: F401 +from tests.model_fixtures.markets_fixtures import usdt_perp_token # noqa: F401 +from tests.model_fixtures.markets_fixtures import usdt_token # noqa: F401 class TestComposer: diff --git a/tests/test_wallet.py b/tests/test_wallet.py index 65769509..aaaeeb7f 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -1,6 +1,6 @@ from eth_hash.auto import keccak -from pyinjective import PrivateKey, Address +from pyinjective import Address, PrivateKey class TestPrivateKey: From 05f3bdf1476f7c56fe40224a300dad605f7b268d Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 13:47:31 -0300 Subject: [PATCH 09/23] (feat) Added Black to the project and as part of the pre-commit. Fixed all detected issues. --- .pre-commit-config.yaml | 4 + compatibility-tests/tests.py | 38 ++-- compatibility-tests/unit_tests.py | 37 ++-- examples/SendToInjective.py | 14 +- examples/chain_client/0_LocalOrderHash.py | 85 ++++----- .../13_MsgIncreasePositionMargin.py | 17 +- examples/chain_client/15_MsgWithdraw.py | 22 ++- .../chain_client/16_MsgSubaccountTransfer.py | 17 +- .../chain_client/17_MsgBatchUpdateOrders.py | 37 ++-- examples/chain_client/18_MsgBid.py | 21 ++- examples/chain_client/19_MsgGrant.py | 16 +- examples/chain_client/1_MsgSend.py | 19 +- examples/chain_client/20_MsgExec.py | 27 ++- examples/chain_client/21_MsgRevoke.py | 17 +- examples/chain_client/22_MsgSendToEth.py | 17 +- .../chain_client/23_MsgRelayPriceFeedPrice.py | 24 ++- examples/chain_client/24_MsgRewardsOptOut.py | 19 +- examples/chain_client/25_MsgDelegate.py | 19 +- .../26_MsgWithdrawDelegatorReward.py | 18 +- examples/chain_client/27_Grants.py | 3 +- examples/chain_client/28_BankBalances.py | 3 +- examples/chain_client/29_BankBalance.py | 3 +- examples/chain_client/2_MsgDeposit.py | 22 ++- examples/chain_client/30_ExternalTransfer.py | 17 +- .../31_MsgCreateBinaryOptionsLimitOrder.py | 20 ++- .../32_MsgCreateBinaryOptionsMarketOrder.py | 17 +- .../33_MsgCancelBinaryOptionsOrder.py | 20 +-- .../34_MsgAdminUpdateBinaryOptionsMarket.py | 17 +- .../35_MsgInstantBinaryOptionsMarketLaunch.py | 17 +- .../chain_client/36_MsgRelayProviderPrices.py | 20 +-- examples/chain_client/37_GetTx.py | 3 +- .../chain_client/38_StreamEventOrderFail.py | 27 +-- examples/chain_client/39_Account.py | 3 +- .../chain_client/3_MsgCreateSpotLimitOrder.py | 17 +- .../chain_client/40_MsgExecuteContract.py | 23 +-- .../chain_client/41_MsgCreateInsuranceFund.py | 17 +- examples/chain_client/42_MsgUnderwrite.py | 17 +- .../chain_client/43_MsgRequestRedemption.py | 17 +- .../chain_client/44_MessageBroadcaster.py | 5 +- ...45_MessageBroadcasterWithGranteeAccount.py | 3 +- .../46_MessageBroadcasterWithoutSimulation.py | 5 +- ...sterWithGranteeAccountWithoutSimulation.py | 3 +- ...8_WithdrawValidatorCommissionAndRewards.py | 23 ++- .../4_MsgCreateSpotMarketOrder.py | 17 +- examples/chain_client/5_MsgCancelSpotOrder.py | 20 +-- .../6_MsgCreateDerivativeLimitOrder.py | 17 +- .../7_MsgCreateDerivativeMarketOrder.py | 17 +- .../8_MsgCancelDerivativeOrder.py | 20 +-- .../accounts_rpc/1_StreamSubaccountBalance.py | 8 +- .../accounts_rpc/2_SubaccountBalance.py | 8 +- .../accounts_rpc/3_SubaccountsList.py | 3 +- .../accounts_rpc/4_SubaccountBalancesList.py | 8 +- .../accounts_rpc/5_SubaccountHistory.py | 10 +- .../accounts_rpc/6_SubaccountOrderSummary.py | 7 +- .../accounts_rpc/7_OrderStates.py | 7 +- .../accounts_rpc/8_Portfolio.py | 3 +- .../exchange_client/accounts_rpc/9_Rewards.py | 6 +- .../exchange_client/auctions_rpc/1_Auction.py | 3 +- .../auctions_rpc/2_Auctions.py | 3 +- .../auctions_rpc/3_StreamBids.py | 3 +- .../10_StreamHistoricalOrders.py | 7 +- .../derivative_exchange_rpc/11_Trades.py | 8 +- .../12_StreamTrades.py | 10 +- .../13_SubaccountOrdersList.py | 7 +- .../14_SubaccountTradesList.py | 4 +- .../15_FundingPayments.py | 9 +- .../17_FundingRates.py | 10 +- .../derivative_exchange_rpc/18_Orderbooks.py | 5 +- .../19_Binary_Options_Markets.py | 8 +- .../derivative_exchange_rpc/1_Market.py | 3 +- .../20_Binary_Options_Market.py | 3 +- .../21_Historical_Orders.py | 3 +- .../22_OrderbooksV2.py | 5 +- .../derivative_exchange_rpc/2_Markets.py | 8 +- .../derivative_exchange_rpc/3_StreamMarket.py | 3 +- .../derivative_exchange_rpc/4_Orderbook.py | 3 +- .../5_StreamOrderbooks.py | 3 +- .../6_StreamOrderbookUpdate.py | 14 +- .../derivative_exchange_rpc/7_Positions.py | 7 +- .../9_StreamPositions.py | 8 +- .../explorer_rpc/10_GetIBCTransfers.py | 5 +- .../explorer_rpc/1_GetTxByHash.py | 3 +- .../explorer_rpc/2_AccountTxs.py | 3 +- .../exchange_client/explorer_rpc/3_Blocks.py | 3 +- .../exchange_client/explorer_rpc/4_Block.py | 3 +- .../explorer_rpc/5_TxsRequest.py | 3 +- .../explorer_rpc/6_StreamTxs.py | 6 +- .../explorer_rpc/7_StreamBlocks.py | 6 +- .../explorer_rpc/8_GetPeggyDeposits.py | 3 +- .../explorer_rpc/9_GetPeggyWithdrawals.py | 8 +- .../insurance_rpc/1_InsuranceFunds.py | 3 +- .../insurance_rpc/2_Redemptions.py | 7 +- examples/exchange_client/meta_rpc/1_Ping.py | 5 +- .../exchange_client/meta_rpc/2_Version.py | 5 +- examples/exchange_client/meta_rpc/3_Info.py | 6 +- .../meta_rpc/4_StreamKeepAlive.py | 6 +- .../oracle_rpc/1_StreamPrices.py | 13 +- .../exchange_client/oracle_rpc/2_Price.py | 11 +- .../oracle_rpc/3_OracleList.py | 3 +- .../portfolio_rpc/1_AccountPortfolio.py | 7 +- .../portfolio_rpc/2_StreamAccountPortfolio.py | 2 +- .../spot_exchange_rpc/10_StreamTrades.py | 6 +- .../11_SubaccountOrdersList.py | 8 +- .../12_SubaccountTradesList.py | 5 +- .../spot_exchange_rpc/13_StreamOrderbooks.py | 5 +- .../spot_exchange_rpc/14_Orderbooks.py | 5 +- .../spot_exchange_rpc/15_HistoricalOrders.py | 9 +- .../spot_exchange_rpc/1_Market.py | 3 +- .../spot_exchange_rpc/2_Markets.py | 8 +- .../spot_exchange_rpc/3_StreamMarkets.py | 3 +- .../spot_exchange_rpc/4_Orderbook.py | 3 +- .../spot_exchange_rpc/6_Trades.py | 5 +- .../7_StreamOrderbookSnapshot.py | 3 +- .../8_StreamOrderbookUpdate.py | 14 +- .../9_StreamHistoricalOrders.py | 8 +- poetry.lock | 84 ++++++++- pyinjective/async_client.py | 135 +++++--------- pyinjective/composer.py | 169 ++++++------------ pyinjective/constant.py | 8 +- pyinjective/core/broadcaster.py | 121 ++++++------- pyinjective/core/gas_limit_estimator.py | 44 +++-- pyinjective/core/market.py | 29 ++- pyinjective/core/network.py | 29 ++- pyinjective/orderhash.py | 32 ++-- pyinjective/sendtocosmos.py | 56 +++--- pyinjective/transaction.py | 8 +- pyinjective/utils/fetch_metadata.py | 36 ++-- pyinjective/utils/logger.py | 1 - pyinjective/utils/metadata_validation.py | 130 +++++++++----- pyinjective/wallet.py | 25 +-- pyproject.toml | 15 ++ tests/core/test_gas_limit_estimator.py | 161 ++++++++--------- tests/core/test_market.py | 108 +++++------ ...essage_based_transaction_fee_calculator.py | 52 +++--- tests/core/test_token.py | 3 +- tests/rpc_fixtures/configurable_servicers.py | 6 +- tests/rpc_fixtures/markets_fixtures.py | 10 +- tests/test_async_client.py | 75 ++++---- tests/test_composer.py | 149 +++++++-------- tests/test_orderhash.py | 23 +-- tests/test_wallet.py | 14 +- 141 files changed, 1406 insertions(+), 1391 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e3b9b8e6..a1388bd3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,3 +22,7 @@ repos: hooks: - id: isort name: isort (python) +- repo: https://github.com/psf/black-pre-commit-mirror + rev: 23.9.1 + hooks: + - id: black diff --git a/compatibility-tests/tests.py b/compatibility-tests/tests.py index 7e01fbcf..c1872378 100644 --- a/compatibility-tests/tests.py +++ b/compatibility-tests/tests.py @@ -16,7 +16,6 @@ class Transaction: - def __init__( self, *, @@ -94,17 +93,14 @@ def get_signed(self) -> str: return json.dumps(signed_tx, separators=(",", ":")) def _sign(self) -> str: - message_str = json.dumps( - self._get_sign_message(), separators=(",", ":"), sort_keys=True) + message_str = json.dumps(self._get_sign_message(), separators=(",", ":"), sort_keys=True) message_bytes = message_str.encode("utf-8") - privkey = ecdsa.SigningKey.from_string( - self._privkey, curve=ecdsa.SECP256k1) + privkey = ecdsa.SigningKey.from_string(self._privkey, curve=ecdsa.SECP256k1) signature_compact_keccak = privkey.sign_deterministic( message_bytes, hashfunc=sha3.keccak_256, sigencode=ecdsa.util.sigencode_string_canonize ) - signature_base64_str = base64.b64encode( - signature_compact_keccak).decode("utf-8") + signature_base64_str = base64.b64encode(signature_compact_keccak).decode("utf-8") return signature_base64_str def _get_sign_message(self) -> Dict[str, Any]: @@ -122,15 +118,13 @@ def _get_sign_message(self) -> Dict[str, Any]: async def main() -> None: - sender_pk = seed_to_privkey( - "physical page glare junk return scale subject river token door mirror title" - ) + sender_pk = seed_to_privkey("physical page glare junk return scale subject river token door mirror title") sender_acc_addr = privkey_to_address(sender_pk) print("Sender Account:", sender_acc_addr) acc_num, acc_seq = await get_account_num_seq(sender_acc_addr) - async with grpc.aio.insecure_channel('testnet-sentry0.injective.network:9910') as channel: + async with grpc.aio.insecure_channel("testnet-sentry0.injective.network:9910") as channel: accounts_rpc = accounts_rpc_grpc.InjectiveAccountsRPCStub(channel) account_addr = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" @@ -169,34 +163,38 @@ async def main() -> None: async def get_account_num_seq(address: str) -> (int, int): async with aiohttp.ClientSession() as session: async with session.request( - 'GET', 'http://staking-lcd-testnet.injective.network/cosmos/auth/v1beta1/accounts/' + address, - headers={'Accept-Encoding': 'application/json'}, + "GET", + "http://staking-lcd-testnet.injective.network/cosmos/auth/v1beta1/accounts/" + address, + headers={"Accept-Encoding": "application/json"}, ) as response: if response.status != 200: print(await response.text()) raise ValueError("HTTP response status", response.status) resp = json.loads(await response.text()) - acc = resp['account']['base_account'] - return acc['account_number'], acc['sequence'] + acc = resp["account"]["base_account"] + return acc["account_number"], acc["sequence"] async def post_tx(tx_json: str): async with aiohttp.ClientSession() as session: async with session.request( - 'POST', 'http://staking-lcd-testnet.injective.network/txs', data=tx_json, - headers={'Content-Type': 'application/json'}, + "POST", + "http://staking-lcd-testnet.injective.network/txs", + data=tx_json, + headers={"Content-Type": "application/json"}, ) as response: if response.status != 200: print(await response.text()) raise ValueError("HTTP response status", response.status) resp = json.loads(await response.text()) - if 'code' in resp: + if "code" in resp: print("Response:", resp) - raise ValueError('sdk error %d: %s' % (resp['code'], resp['raw_log'])) + raise ValueError("sdk error %d: %s" % (resp["code"], resp["raw_log"])) + + return resp["txhash"] - return resp['txhash'] if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/compatibility-tests/unit_tests.py b/compatibility-tests/unit_tests.py index a2a4a7ae..7c19a28c 100644 --- a/compatibility-tests/unit_tests.py +++ b/compatibility-tests/unit_tests.py @@ -16,7 +16,6 @@ class Transaction: - def __init__( self, *, @@ -92,17 +91,14 @@ def get_signed(self) -> str: return json.dumps(signed_tx, separators=(",", ":")) def _sign(self) -> str: - message_str = json.dumps( - self._get_sign_message(), separators=(",", ":"), sort_keys=True) + message_str = json.dumps(self._get_sign_message(), separators=(",", ":"), sort_keys=True) message_bytes = message_str.encode("utf-8") - privkey = ecdsa.SigningKey.from_string( - self._privkey, curve=ecdsa.SECP256k1) + privkey = ecdsa.SigningKey.from_string(self._privkey, curve=ecdsa.SECP256k1) signature_compact_keccak = privkey.sign_deterministic( message_bytes, hashfunc=sha3.keccak_256, sigencode=ecdsa.util.sigencode_string_canonize ) - signature_base64_str = base64.b64encode( - signature_compact_keccak).decode("utf-8") + signature_base64_str = base64.b64encode(signature_compact_keccak).decode("utf-8") return signature_base64_str def _get_sign_message(self) -> Dict[str, Any]: @@ -122,47 +118,48 @@ def _get_sign_message(self) -> Dict[str, Any]: async def get_account_num_seq(address: str) -> (int, int): async with aiohttp.ClientSession() as session: async with session.request( - 'GET', 'http://staking-lcd-testnet.injective.network/cosmos/auth/v1beta1/accounts/' + address, - headers={'Accept-Encoding': 'application/json'}, + "GET", + "http://staking-lcd-testnet.injective.network/cosmos/auth/v1beta1/accounts/" + address, + headers={"Accept-Encoding": "application/json"}, ) as response: if response.status != 200: print(await response.text()) raise ValueError("HTTP response status", response.status) resp = json.loads(await response.text()) - acc = resp['account']['base_account'] - return acc['account_number'], acc['sequence'] + acc = resp["account"]["base_account"] + return acc["account_number"], acc["sequence"] async def post_tx(tx_json: str): async with aiohttp.ClientSession() as session: async with session.request( - 'POST', 'http://staking-lcd-testnet.injective.network/txs', data=tx_json, - headers={'Content-Type': 'application/json'}, + "POST", + "http://staking-lcd-testnet.injective.network/txs", + data=tx_json, + headers={"Content-Type": "application/json"}, ) as response: if response.status != 200: print(await response.text()) raise ValueError("HTTP response status", response.status) resp = json.loads(await response.text()) - if 'code' in resp: + if "code" in resp: print("Response:", resp) - raise ValueError('sdk error %d: %s' % (resp['code'], resp['raw_log'])) + raise ValueError("sdk error %d: %s" % (resp["code"], resp["raw_log"])) - return resp['txhash'] + return resp["txhash"] @pytest.fixture async def msg_send(): - sender_pk = seed_to_privkey( - "physical page glare junk return scale subject river token door mirror title" - ) + sender_pk = seed_to_privkey("physical page glare junk return scale subject river token door mirror title") sender_acc_addr = privkey_to_address(sender_pk) print("Sender Account:", sender_acc_addr) acc_num, acc_seq = await get_account_num_seq(sender_acc_addr) - async with grpc.aio.insecure_channel('testnet-sentry0.injective.network:9910') as channel: + async with grpc.aio.insecure_channel("testnet-sentry0.injective.network:9910") as channel: accounts_rpc = accounts_rpc_grpc.InjectiveAccountsRPCStub(channel) account_addr = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" diff --git a/examples/SendToInjective.py b/examples/SendToInjective.py index 4563a145..b03988b4 100644 --- a/examples/SendToInjective.py +++ b/examples/SendToInjective.py @@ -20,11 +20,12 @@ async def main() -> None: receiver = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" amount = 1 - data = ('{"@type": "/injective.exchange.v1beta1.MsgDeposit",' - '"sender": "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku",' - '"subaccountId": "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000",' - '"amount": {"denom": "inj","amount": "1000000000000000000"}}' - ) + data = ( + '{"@type": "/injective.exchange.v1beta1.MsgDeposit",' + '"sender": "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku",' + '"subaccountId": "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000",' + '"amount": {"denom": "inj","amount": "1000000000000000000"}}' + ) with open("../pyinjective/Peggo_ABI.json") as pego_file: peggo_data = pego_file.read() @@ -39,8 +40,9 @@ async def main() -> None: maxFeePerGas=maxFeePerGas_Gwei, maxPriorityFeePerGas=maxPriorityFeePerGas_Gwei, data=data, - peggo_abi=peggo_abi + peggo_abi=peggo_abi, ) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/0_LocalOrderHash.py b/examples/chain_client/0_LocalOrderHash.py index 1eef1af7..e25d695c 100644 --- a/examples/chain_client/0_LocalOrderHash.py +++ b/examples/chain_client/0_LocalOrderHash.py @@ -24,11 +24,7 @@ async def main() -> None: subaccount_id = address.get_subaccount_id(index=0) subaccount_id_2 = address.get_subaccount_id(index=1) - order_hash_manager = OrderHashManager( - address=address, - network=network, - subaccount_indexes=[0, 1, 2, 7] - ) + order_hash_manager = OrderHashManager(address=address, network=network, subaccount_indexes=[0, 1, 2, 7]) # prepare trade info spot_market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -43,7 +39,7 @@ async def main() -> None: price=0.524, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id, @@ -52,7 +48,7 @@ async def main() -> None: price=27.92, quantity=0.01, is_buy=False, - is_po=False + is_po=False, ), ] @@ -65,7 +61,7 @@ async def main() -> None: quantity=0.01, leverage=1.5, is_buy=True, - is_po=False + is_po=False, ), composer.DerivativeOrder( market_id=deriv_market_id, @@ -75,20 +71,14 @@ async def main() -> None: quantity=0.01, leverage=2, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ), ] # prepare tx msg - spot_msg = composer.MsgBatchCreateSpotLimitOrders( - sender=address.to_acc_bech32(), - orders=spot_orders - ) + spot_msg = composer.MsgBatchCreateSpotLimitOrders(sender=address.to_acc_bech32(), orders=spot_orders) - deriv_msg = composer.MsgBatchCreateDerivativeLimitOrders( - sender=address.to_acc_bech32(), - orders=derivative_orders - ) + deriv_msg = composer.MsgBatchCreateDerivativeLimitOrders(sender=address.to_acc_bech32(), orders=derivative_orders) # compute order hashes order_hashes = order_hash_manager.compute_order_hashes( @@ -109,12 +99,14 @@ async def main() -> None: gas_price = 500000000 base_gas = 85000 gas_limit = base_gas + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -144,12 +136,14 @@ async def main() -> None: gas_price = 500000000 base_gas = 85000 gas_limit = base_gas + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -168,7 +162,7 @@ async def main() -> None: price=1.524, quantity=0.01, is_buy=True, - is_po=True + is_po=True, ), composer.SpotOrder( market_id=spot_market_id, @@ -177,7 +171,7 @@ async def main() -> None: price=27.92, quantity=0.01, is_buy=False, - is_po=False + is_po=False, ), ] @@ -190,7 +184,7 @@ async def main() -> None: quantity=0.01, leverage=1.5, is_buy=True, - is_po=False + is_po=False, ), composer.DerivativeOrder( market_id=deriv_market_id, @@ -200,20 +194,14 @@ async def main() -> None: quantity=0.01, leverage=2, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ), ] # prepare tx msg - spot_msg = composer.MsgBatchCreateSpotLimitOrders( - sender=address.to_acc_bech32(), - orders=spot_orders - ) + spot_msg = composer.MsgBatchCreateSpotLimitOrders(sender=address.to_acc_bech32(), orders=spot_orders) - deriv_msg = composer.MsgBatchCreateDerivativeLimitOrders( - sender=address.to_acc_bech32(), - orders=derivative_orders - ) + deriv_msg = composer.MsgBatchCreateDerivativeLimitOrders(sender=address.to_acc_bech32(), orders=derivative_orders) # compute order hashes order_hashes = order_hash_manager.compute_order_hashes( @@ -234,12 +222,14 @@ async def main() -> None: gas_price = 500000000 base_gas = 85000 gas_limit = base_gas + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -250,5 +240,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/13_MsgIncreasePositionMargin.py b/examples/chain_client/13_MsgIncreasePositionMargin.py index ddab6e91..a2556f78 100644 --- a/examples/chain_client/13_MsgIncreasePositionMargin.py +++ b/examples/chain_client/13_MsgIncreasePositionMargin.py @@ -31,7 +31,7 @@ async def main() -> None: market_id=market_id, source_subaccount_id=subaccount_id, destination_subaccount_id=subaccount_id, - amount=2 + amount=2, ) # build sim tx @@ -55,12 +55,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -71,5 +73,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/15_MsgWithdraw.py b/examples/chain_client/15_MsgWithdraw.py index a8d987e9..437d0037 100644 --- a/examples/chain_client/15_MsgWithdraw.py +++ b/examples/chain_client/15_MsgWithdraw.py @@ -37,12 +37,7 @@ async def main() -> None: subaccount_id = address.get_subaccount_id(index=0) # prepare tx msg - msg = composer.MsgWithdraw( - sender=address.to_acc_bech32(), - subaccount_id=subaccount_id, - amount=1, - denom="USDT" - ) + msg = composer.MsgWithdraw(sender=address.to_acc_bech32(), subaccount_id=subaccount_id, amount=1, denom="USDT") # build sim tx tx = ( @@ -65,12 +60,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -81,5 +78,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/16_MsgSubaccountTransfer.py b/examples/chain_client/16_MsgSubaccountTransfer.py index d97d112e..bc2e5baf 100644 --- a/examples/chain_client/16_MsgSubaccountTransfer.py +++ b/examples/chain_client/16_MsgSubaccountTransfer.py @@ -29,7 +29,7 @@ async def main() -> None: source_subaccount_id=subaccount_id, destination_subaccount_id=dest_subaccount_id, amount=100, - denom="INJ" + denom="INJ", ) # build sim tx @@ -53,12 +53,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -69,5 +71,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/17_MsgBatchUpdateOrders.py b/examples/chain_client/17_MsgBatchUpdateOrders.py index 1617e65b..3b3e7f77 100644 --- a/examples/chain_client/17_MsgBatchUpdateOrders.py +++ b/examples/chain_client/17_MsgBatchUpdateOrders.py @@ -37,26 +37,26 @@ async def main() -> None: composer.OrderData( market_id=derivative_market_id_cancel, subaccount_id=subaccount_id, - order_hash="0x48690013c382d5dbaff9989db04629a16a5818d7524e027d517ccc89fd068103" + order_hash="0x48690013c382d5dbaff9989db04629a16a5818d7524e027d517ccc89fd068103", ), composer.OrderData( market_id=derivative_market_id_cancel_2, subaccount_id=subaccount_id, - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] spot_orders_to_cancel = [ composer.OrderData( market_id=spot_market_id_cancel, subaccount_id=subaccount_id, - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=spot_market_id_cancel_2, subaccount_id=subaccount_id, - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" - ) + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", + ), ] derivative_orders_to_create = [ @@ -68,7 +68,7 @@ async def main() -> None: quantity=0.1, leverage=1, is_buy=True, - is_po=False + is_po=False, ), composer.DerivativeOrder( market_id=derivative_market_id_create, @@ -78,7 +78,7 @@ async def main() -> None: quantity=0.01, leverage=1, is_buy=False, - is_po=False + is_po=False, ), ] @@ -90,7 +90,7 @@ async def main() -> None: price=3, quantity=55, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id_create, @@ -99,7 +99,7 @@ async def main() -> None: price=300, quantity=55, is_buy=False, - is_po=False + is_po=False, ), ] @@ -109,7 +109,7 @@ async def main() -> None: derivative_orders_to_create=derivative_orders_to_create, spot_orders_to_create=spot_orders_to_create, derivative_orders_to_cancel=derivative_orders_to_cancel, - spot_orders_to_cancel=spot_orders_to_cancel + spot_orders_to_cancel=spot_orders_to_cancel, ) # build sim tx @@ -137,12 +137,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -154,5 +156,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/18_MsgBid.py b/examples/chain_client/18_MsgBid.py index a0a0cc60..5a23f172 100644 --- a/examples/chain_client/18_MsgBid.py +++ b/examples/chain_client/18_MsgBid.py @@ -22,11 +22,7 @@ async def main() -> None: await client.get_account(address.to_acc_bech32()) # prepare tx msg - msg = composer.MsgBid( - sender=address.to_acc_bech32(), - round=16250, - bid_amount=1 - ) + msg = composer.MsgBid(sender=address.to_acc_bech32(), round=16250, bid_amount=1) # build sim tx tx = ( @@ -49,12 +45,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -65,5 +63,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/19_MsgGrant.py b/examples/chain_client/19_MsgGrant.py index 2dc6a88b..548af1a5 100644 --- a/examples/chain_client/19_MsgGrant.py +++ b/examples/chain_client/19_MsgGrant.py @@ -30,7 +30,7 @@ async def main() -> None: granter="inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", grantee="inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", msg_type="/injective.exchange.v1beta1.MsgCreateSpotLimitOrder", - expire_in=31536000 # 1 year + expire_in=31536000, # 1 year ) # TYPED AUTHZ @@ -64,12 +64,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) diff --git a/examples/chain_client/1_MsgSend.py b/examples/chain_client/1_MsgSend.py index 390349fc..1d3c28a6 100644 --- a/examples/chain_client/1_MsgSend.py +++ b/examples/chain_client/1_MsgSend.py @@ -24,9 +24,9 @@ async def main() -> None: # prepare tx msg msg = composer.MsgSend( from_address=address.to_acc_bech32(), - to_address='inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r', + to_address="inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", amount=0.000000000000000001, - denom='INJ' + denom="INJ", ) # build sim tx @@ -50,12 +50,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -66,5 +68,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/20_MsgExec.py b/examples/chain_client/20_MsgExec.py index 52dae6f7..c940523c 100644 --- a/examples/chain_client/20_MsgExec.py +++ b/examples/chain_client/20_MsgExec.py @@ -35,13 +35,10 @@ async def main() -> None: price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) - msg = composer.MsgExec( - grantee=grantee, - msgs=[msg0] - ) + msg = composer.MsgExec(grantee=grantee, msgs=[msg0]) # build sim tx tx = ( @@ -63,22 +60,21 @@ async def main() -> None: sim_res_msg = composer.MsgResponses(sim_res, simulation=True) data = sim_res_msg[0] - unpacked_msg_res = composer.UnpackMsgExecResponse( - msg_type=msg0.__class__.__name__, - data=data - ) + unpacked_msg_res = composer.UnpackMsgExecResponse(msg_type=msg0.__class__.__name__, data=data) print("simulation msg response") print(unpacked_msg_res) # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -89,5 +85,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/21_MsgRevoke.py b/examples/chain_client/21_MsgRevoke.py index 2e10e52b..7c040810 100644 --- a/examples/chain_client/21_MsgRevoke.py +++ b/examples/chain_client/21_MsgRevoke.py @@ -25,7 +25,7 @@ async def main() -> None: msg = composer.MsgRevoke( granter="inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku", grantee="inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r", - msg_type="/injective.exchange.v1beta1.MsgCreateSpotLimitOrder" + msg_type="/injective.exchange.v1beta1.MsgCreateSpotLimitOrder", ) # build sim tx @@ -49,12 +49,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -65,5 +67,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/22_MsgSendToEth.py b/examples/chain_client/22_MsgSendToEth.py index d4ee9e97..96f6e435 100644 --- a/examples/chain_client/22_MsgSendToEth.py +++ b/examples/chain_client/22_MsgSendToEth.py @@ -36,7 +36,7 @@ async def main() -> None: denom="INJ", eth_dest="0xaf79152ac5df276d9a8e1e2e22822f9713474902", amount=23, - bridge_fee=bridge_fee + bridge_fee=bridge_fee, ) # build sim tx @@ -60,12 +60,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -76,5 +78,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/23_MsgRelayPriceFeedPrice.py b/examples/chain_client/23_MsgRelayPriceFeedPrice.py index c7b742fd..f55c8c72 100644 --- a/examples/chain_client/23_MsgRelayPriceFeedPrice.py +++ b/examples/chain_client/23_MsgRelayPriceFeedPrice.py @@ -22,17 +22,12 @@ async def main() -> None: await client.get_account(address.to_acc_bech32()) price = 100 - price_to_send = [str(int(price * 10 ** 18))] + price_to_send = [str(int(price * 10**18))] base = ["BAYC"] quote = ["WETH"] # prepare tx msg - msg = composer.MsgRelayPriceFeedPrice( - sender=address.to_acc_bech32(), - price=price_to_send, - base=base, - quote=quote - ) + msg = composer.MsgRelayPriceFeedPrice(sender=address.to_acc_bech32(), price=price_to_send, base=base, quote=quote) # build sim tx tx = ( @@ -55,12 +50,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -71,5 +68,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/24_MsgRewardsOptOut.py b/examples/chain_client/24_MsgRewardsOptOut.py index 55e02103..abf63829 100644 --- a/examples/chain_client/24_MsgRewardsOptOut.py +++ b/examples/chain_client/24_MsgRewardsOptOut.py @@ -22,9 +22,7 @@ async def main() -> None: await client.get_account(address.to_acc_bech32()) # prepare tx msg - msg = composer.MsgRewardsOptOut( - sender=address.to_acc_bech32() - ) + msg = composer.MsgRewardsOptOut(sender=address.to_acc_bech32()) # build sim tx tx = ( @@ -47,12 +45,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -63,5 +63,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/25_MsgDelegate.py b/examples/chain_client/25_MsgDelegate.py index 6d432c4c..9243b6d4 100644 --- a/examples/chain_client/25_MsgDelegate.py +++ b/examples/chain_client/25_MsgDelegate.py @@ -26,9 +26,7 @@ async def main() -> None: amount = 100 msg = composer.MsgDelegate( - delegator_address=address.to_acc_bech32(), - validator_address=validator_address, - amount=amount + delegator_address=address.to_acc_bech32(), validator_address=validator_address, amount=amount ) # build sim tx @@ -52,12 +50,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -68,5 +68,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/26_MsgWithdrawDelegatorReward.py b/examples/chain_client/26_MsgWithdrawDelegatorReward.py index 9eb8e636..61b9fbef 100644 --- a/examples/chain_client/26_MsgWithdrawDelegatorReward.py +++ b/examples/chain_client/26_MsgWithdrawDelegatorReward.py @@ -25,8 +25,7 @@ async def main() -> None: validator_address = "injvaloper1ultw9r29l8nxy5u6thcgusjn95vsy2caw722q5" msg = composer.MsgWithdrawDelegatorReward( - delegator_address=address.to_acc_bech32(), - validator_address=validator_address + delegator_address=address.to_acc_bech32(), validator_address=validator_address ) # build sim tx @@ -50,12 +49,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -66,5 +67,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/27_Grants.py b/examples/chain_client/27_Grants.py index 8a63c6d1..dca8ea42 100644 --- a/examples/chain_client/27_Grants.py +++ b/examples/chain_client/27_Grants.py @@ -13,5 +13,6 @@ async def main() -> None: authorizations = await client.get_grants(granter=granter, grantee=grantee, msg_type_url=msg_type_url) print(authorizations) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/28_BankBalances.py b/examples/chain_client/28_BankBalances.py index ba9864ac..4e6ec895 100644 --- a/examples/chain_client/28_BankBalances.py +++ b/examples/chain_client/28_BankBalances.py @@ -11,5 +11,6 @@ async def main() -> None: all_bank_balances = await client.get_bank_balances(address=address) print(all_bank_balances) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/29_BankBalance.py b/examples/chain_client/29_BankBalance.py index e9a3907e..959d1c72 100644 --- a/examples/chain_client/29_BankBalance.py +++ b/examples/chain_client/29_BankBalance.py @@ -12,5 +12,6 @@ async def main() -> None: bank_balance = await client.get_bank_balance(address=address, denom=denom) print(bank_balance) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/2_MsgDeposit.py b/examples/chain_client/2_MsgDeposit.py index 0d5c5754..13febc04 100644 --- a/examples/chain_client/2_MsgDeposit.py +++ b/examples/chain_client/2_MsgDeposit.py @@ -23,12 +23,7 @@ async def main() -> None: subaccount_id = address.get_subaccount_id(index=0) # prepare tx msg - msg = composer.MsgDeposit( - sender=address.to_acc_bech32(), - subaccount_id=subaccount_id, - amount=0.000001, - denom='INJ' - ) + msg = composer.MsgDeposit(sender=address.to_acc_bech32(), subaccount_id=subaccount_id, amount=0.000001, denom="INJ") # build sim tx tx = ( @@ -51,12 +46,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -67,5 +64,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/30_ExternalTransfer.py b/examples/chain_client/30_ExternalTransfer.py index 7661e7f7..c5dbcc53 100644 --- a/examples/chain_client/30_ExternalTransfer.py +++ b/examples/chain_client/30_ExternalTransfer.py @@ -29,7 +29,7 @@ async def main() -> None: source_subaccount_id=subaccount_id, destination_subaccount_id=dest_subaccount_id, amount=100, - denom="INJ" + denom="INJ", ) # build sim tx @@ -53,12 +53,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -69,5 +71,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py index 8e94abf4..fb2a9d24 100644 --- a/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py +++ b/examples/chain_client/31_MsgCreateBinaryOptionsLimitOrder.py @@ -28,8 +28,7 @@ async def main() -> None: fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" # set custom denom to bypass ini file load (optional) - denom = Denom(description="desc", base=0, quote=6, - min_price_tick_size=1000, min_quantity_tick_size=0.0001) + denom = Denom(description="desc", base=0, quote=6, min_price_tick_size=1000, min_quantity_tick_size=0.0001) # prepare tx msg msg = composer.MsgCreateBinaryOptionsLimitOrder( @@ -41,7 +40,7 @@ async def main() -> None: quantity=1, is_buy=False, is_reduce_only=False, - denom=denom + denom=denom, ) # build sim tx @@ -69,12 +68,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -86,5 +87,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py index dadbdb6c..2408b865 100644 --- a/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py +++ b/examples/chain_client/32_MsgCreateBinaryOptionsMarketOrder.py @@ -35,7 +35,7 @@ async def main() -> None: price=0.5, quantity=1, is_buy=True, - is_reduce_only=False + is_reduce_only=False, ) # build sim tx tx = ( @@ -62,12 +62,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -79,5 +81,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py index 7a4a4cdf..9daaf419 100644 --- a/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py +++ b/examples/chain_client/33_MsgCancelBinaryOptionsOrder.py @@ -28,10 +28,7 @@ async def main() -> None: # prepare tx msg msg = composer.MsgCancelBinaryOptionsOrder( - sender=address.to_acc_bech32(), - market_id=market_id, - subaccount_id=subaccount_id, - order_hash=order_hash + sender=address.to_acc_bech32(), market_id=market_id, subaccount_id=subaccount_id, order_hash=order_hash ) # build sim tx tx = ( @@ -58,12 +55,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -75,5 +74,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py index f155dcbb..da3966e0 100644 --- a/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py +++ b/examples/chain_client/34_MsgAdminUpdateBinaryOptionsMarket.py @@ -35,7 +35,7 @@ async def main() -> None: settlement_price=settlement_price, expiration_timestamp=expiration_timestamp, settlement_timestamp=settlement_timestamp, - status=status + status=status, ) # build sim tx @@ -63,12 +63,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -80,5 +82,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py index 91b59392..1116a669 100644 --- a/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py +++ b/examples/chain_client/35_MsgInstantBinaryOptionsMarketLaunch.py @@ -37,7 +37,7 @@ async def main() -> None: expiration_timestamp=1680730982, settlement_timestamp=1690730982, min_price_tick_size=0.01, - min_quantity_tick_size=0.01 + min_quantity_tick_size=0.01, ) # build sim tx @@ -65,12 +65,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -82,5 +84,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/36_MsgRelayProviderPrices.py b/examples/chain_client/36_MsgRelayProviderPrices.py index 374d6c50..2068c572 100644 --- a/examples/chain_client/36_MsgRelayProviderPrices.py +++ b/examples/chain_client/36_MsgRelayProviderPrices.py @@ -27,10 +27,7 @@ async def main() -> None: # prepare tx msg msg = composer.MsgRelayProviderPrices( - sender=address.to_acc_bech32(), - provider=provider, - symbols=symbols, - prices=prices + sender=address.to_acc_bech32(), provider=provider, symbols=symbols, prices=prices ) # build sim tx @@ -58,12 +55,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -75,5 +74,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/37_GetTx.py b/examples/chain_client/37_GetTx.py index 2ee14f19..ece40b65 100644 --- a/examples/chain_client/37_GetTx.py +++ b/examples/chain_client/37_GetTx.py @@ -11,5 +11,6 @@ async def main() -> None: tx_logs = await client.get_tx(tx_hash=tx_hash) print(tx_logs) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/38_StreamEventOrderFail.py b/examples/chain_client/38_StreamEventOrderFail.py index dc767268..62aed601 100644 --- a/examples/chain_client/38_StreamEventOrderFail.py +++ b/examples/chain_client/38_StreamEventOrderFail.py @@ -9,17 +9,19 @@ async def main() -> None: network = Network.mainnet() - event_filter = ("tm.event='Tx' AND message.sender='inj1rwv4zn3jptsqs7l8lpa3uvzhs57y8duemete9e' " - "AND message.action='/injective.exchange.v1beta1.MsgBatchUpdateOrders' " - "AND injective.exchange.v1beta1.EventOrderFail.flags EXISTS") - query = json.dumps({ - "jsonrpc": "2.0", - "method": "subscribe", - "id": "0", - "params": { - "query": event_filter - }, - }) + event_filter = ( + "tm.event='Tx' AND message.sender='inj1rwv4zn3jptsqs7l8lpa3uvzhs57y8duemete9e' " + "AND message.action='/injective.exchange.v1beta1.MsgBatchUpdateOrders' " + "AND injective.exchange.v1beta1.EventOrderFail.flags EXISTS" + ) + query = json.dumps( + { + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": {"query": event_filter}, + } + ) async with websockets.connect(network.tm_websocket_endpoint) as ws: await ws.send(query) @@ -40,5 +42,6 @@ async def main() -> None: print(dict) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/39_Account.py b/examples/chain_client/39_Account.py index c7b76e2a..43692ba2 100644 --- a/examples/chain_client/39_Account.py +++ b/examples/chain_client/39_Account.py @@ -11,5 +11,6 @@ async def main() -> None: acc = await client.get_account(address=address) print(acc) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/3_MsgCreateSpotLimitOrder.py b/examples/chain_client/3_MsgCreateSpotLimitOrder.py index ca48b45c..a480e817 100644 --- a/examples/chain_client/3_MsgCreateSpotLimitOrder.py +++ b/examples/chain_client/3_MsgCreateSpotLimitOrder.py @@ -35,7 +35,7 @@ async def main() -> None: price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) # build sim tx @@ -63,12 +63,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -80,5 +82,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/40_MsgExecuteContract.py b/examples/chain_client/40_MsgExecuteContract.py index 387d152e..3d92b825 100644 --- a/examples/chain_client/40_MsgExecuteContract.py +++ b/examples/chain_client/40_MsgExecuteContract.py @@ -27,16 +27,16 @@ async def main() -> None: funds = [ composer.Coin( amount=69, - denom='factory/inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6/inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9' + denom="factory/inj1hdvy6tl89llqy3ze8lv6mz5qh66sx9enn0jxg6/inj12ngevx045zpvacus9s6anr258gkwpmthnz80e9", ), - composer.Coin(amount=420, denom='peggy0x44C21afAaF20c270EBbF5914Cfc3b5022173FEB7'), - composer.Coin(amount=1, denom='peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5'), + composer.Coin(amount=420, denom="peggy0x44C21afAaF20c270EBbF5914Cfc3b5022173FEB7"), + composer.Coin(amount=1, denom="peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5"), ] msg = composer.MsgExecuteContract( sender=address.to_acc_bech32(), contract="inj1ady3s7whq30l4fx8sj3x6muv5mx4dfdlcpv8n7", msg='{"increment":{}}', - funds=funds + funds=funds, ) # build sim tx @@ -60,12 +60,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -76,5 +78,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/41_MsgCreateInsuranceFund.py b/examples/chain_client/41_MsgCreateInsuranceFund.py index 7afdee76..86f7b0b6 100644 --- a/examples/chain_client/41_MsgCreateInsuranceFund.py +++ b/examples/chain_client/41_MsgCreateInsuranceFund.py @@ -30,7 +30,7 @@ async def main() -> None: oracle_quote="Frontrunner", oracle_type=11, expiry=-2, - initial_deposit=1000 + initial_deposit=1000, ) # build sim tx @@ -54,12 +54,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -70,5 +72,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/42_MsgUnderwrite.py b/examples/chain_client/42_MsgUnderwrite.py index 11c4443c..087aae33 100644 --- a/examples/chain_client/42_MsgUnderwrite.py +++ b/examples/chain_client/42_MsgUnderwrite.py @@ -26,7 +26,7 @@ async def main() -> None: sender=address.to_acc_bech32(), market_id="0x141e3c92ed55107067ceb60ee412b86256cedef67b1227d6367b4cdf30c55a74", quote_denom="USDT", - amount=100 + amount=100, ) # build sim tx @@ -50,12 +50,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -66,5 +68,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/43_MsgRequestRedemption.py b/examples/chain_client/43_MsgRequestRedemption.py index 801bedcd..7379f055 100644 --- a/examples/chain_client/43_MsgRequestRedemption.py +++ b/examples/chain_client/43_MsgRequestRedemption.py @@ -26,7 +26,7 @@ async def main() -> None: sender=address.to_acc_bech32(), market_id="0x141e3c92ed55107067ceb60ee412b86256cedef67b1227d6367b4cdf30c55a74", share_denom="share15", - amount=100 # raw chain value + amount=100, # raw chain value ) # build sim tx @@ -50,12 +50,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -66,5 +68,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/44_MessageBroadcaster.py b/examples/chain_client/44_MessageBroadcaster.py index 4fbeb719..6b948578 100644 --- a/examples/chain_client/44_MessageBroadcaster.py +++ b/examples/chain_client/44_MessageBroadcaster.py @@ -35,7 +35,7 @@ async def main() -> None: price=3, quantity=55, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id_create, @@ -44,7 +44,7 @@ async def main() -> None: price=300, quantity=55, is_buy=False, - is_po=False + is_po=False, ), ] @@ -59,5 +59,6 @@ async def main() -> None: print("---Transaction Response---") print(result) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py b/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py index 61b9ebd3..860b91e0 100644 --- a/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py +++ b/examples/chain_client/45_MessageBroadcasterWithGranteeAccount.py @@ -41,7 +41,7 @@ async def main() -> None: price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) # broadcast the transaction @@ -49,5 +49,6 @@ async def main() -> None: print("---Transaction Response---") print(result) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/46_MessageBroadcasterWithoutSimulation.py b/examples/chain_client/46_MessageBroadcasterWithoutSimulation.py index dc804b24..1aa19990 100644 --- a/examples/chain_client/46_MessageBroadcasterWithoutSimulation.py +++ b/examples/chain_client/46_MessageBroadcasterWithoutSimulation.py @@ -35,7 +35,7 @@ async def main() -> None: price=3, quantity=55, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id_create, @@ -44,7 +44,7 @@ async def main() -> None: price=300, quantity=55, is_buy=False, - is_po=False + is_po=False, ), ] @@ -59,5 +59,6 @@ async def main() -> None: print("---Transaction Response---") print(result) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py b/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py index 5539c112..ccb41de5 100644 --- a/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py +++ b/examples/chain_client/47_MessageBroadcasterWithGranteeAccountWithoutSimulation.py @@ -41,7 +41,7 @@ async def main() -> None: price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) # broadcast the transaction @@ -49,5 +49,6 @@ async def main() -> None: print("---Transaction Response---") print(result) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py b/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py index 1a05868f..4ab89394 100644 --- a/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py +++ b/examples/chain_client/48_WithdrawValidatorCommissionAndRewards.py @@ -1,4 +1,3 @@ - import asyncio from pyinjective.async_client import AsyncClient @@ -29,13 +28,10 @@ async def main() -> None: validator_address = "injvaloper1ultw9r29l8nxy5u6thcgusjn95vsy2caw722q5" msg0 = composer.MsgWithdrawDelegatorReward( - delegator_address=address.to_acc_bech32(), - validator_address=validator_address + delegator_address=address.to_acc_bech32(), validator_address=validator_address ) - msg1 = composer.MsgWithdrawValidatorCommission( - validator_address=validator_address - ) + msg1 = composer.MsgWithdrawValidatorCommission(validator_address=validator_address) # build sim tx tx = ( @@ -58,12 +54,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -74,5 +72,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/4_MsgCreateSpotMarketOrder.py b/examples/chain_client/4_MsgCreateSpotMarketOrder.py index c93d1cf5..293b5145 100644 --- a/examples/chain_client/4_MsgCreateSpotMarketOrder.py +++ b/examples/chain_client/4_MsgCreateSpotMarketOrder.py @@ -34,7 +34,7 @@ async def main() -> None: fee_recipient=fee_recipient, price=10.522, quantity=0.01, - is_buy=True + is_buy=True, ) # build sim tx @@ -62,12 +62,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -79,5 +81,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/5_MsgCancelSpotOrder.py b/examples/chain_client/5_MsgCancelSpotOrder.py index ee6ca060..f94638bd 100644 --- a/examples/chain_client/5_MsgCancelSpotOrder.py +++ b/examples/chain_client/5_MsgCancelSpotOrder.py @@ -28,10 +28,7 @@ async def main() -> None: # prepare tx msg msg = composer.MsgCancelSpotOrder( - sender=address.to_acc_bech32(), - market_id=market_id, - subaccount_id=subaccount_id, - order_hash=order_hash + sender=address.to_acc_bech32(), market_id=market_id, subaccount_id=subaccount_id, order_hash=order_hash ) # build sim tx @@ -55,12 +52,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -71,5 +70,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py index f5b8e28b..865400b4 100644 --- a/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py +++ b/examples/chain_client/6_MsgCreateDerivativeLimitOrder.py @@ -36,7 +36,7 @@ async def main() -> None: quantity=0.1, leverage=1, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ) # build sim tx @@ -64,12 +64,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -81,5 +83,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py index dd8da09e..db69d7c1 100644 --- a/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py +++ b/examples/chain_client/7_MsgCreateDerivativeMarketOrder.py @@ -35,7 +35,7 @@ async def main() -> None: price=50000, quantity=0.01, leverage=3, - is_buy=True + is_buy=True, ) # build sim tx @@ -63,12 +63,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -80,5 +82,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/chain_client/8_MsgCancelDerivativeOrder.py b/examples/chain_client/8_MsgCancelDerivativeOrder.py index 61fd1d82..f2cda909 100644 --- a/examples/chain_client/8_MsgCancelDerivativeOrder.py +++ b/examples/chain_client/8_MsgCancelDerivativeOrder.py @@ -28,10 +28,7 @@ async def main() -> None: # prepare tx msg msg = composer.MsgCancelDerivativeOrder( - sender=address.to_acc_bech32(), - market_id=market_id, - subaccount_id=subaccount_id, - order_hash=order_hash + sender=address.to_acc_bech32(), market_id=market_id, subaccount_id=subaccount_id, order_hash=order_hash ) # build sim tx @@ -55,12 +52,14 @@ async def main() -> None: # build tx gas_price = 500000000 gas_limit = sim_res.gas_info.gas_used + 20000 # add 20k for gas, fee computation - gas_fee = '{:.18f}'.format((gas_price * gas_limit) / pow(10, 18)).rstrip('0') - fee = [composer.Coin( - amount=gas_price * gas_limit, - denom=network.fee_denom, - )] - tx = tx.with_gas(gas_limit).with_fee(fee).with_memo('').with_timeout_height(client.timeout_height) + gas_fee = "{:.18f}".format((gas_price * gas_limit) / pow(10, 18)).rstrip("0") + fee = [ + composer.Coin( + amount=gas_price * gas_limit, + denom=network.fee_denom, + ) + ] + tx = tx.with_gas(gas_limit).with_fee(fee).with_memo("").with_timeout_height(client.timeout_height) sign_doc = tx.get_sign_doc(pub_key) sig = priv_key.sign(sign_doc.SerializeToString()) tx_raw_bytes = tx.get_tx_data(sig, pub_key) @@ -71,5 +70,6 @@ async def main() -> None: print("gas wanted: {}".format(gas_limit)) print("gas fee: {} INJ".format(gas_fee)) + if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py b/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py index 33973715..9a0364eb 100644 --- a/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py +++ b/examples/exchange_client/accounts_rpc/1_StreamSubaccountBalance.py @@ -9,13 +9,11 @@ async def main() -> None: client = AsyncClient(network) subaccount_id = "0xc7dca7c15c364865f77a4fb67ab11dc95502e6fe000000000000000000000001" denoms = ["inj", "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5"] - subaccount = await client.stream_subaccount_balance( - subaccount_id=subaccount_id, - denoms=denoms - ) + subaccount = await client.stream_subaccount_balance(subaccount_id=subaccount_id, denoms=denoms) async for balance in subaccount: print("Subaccount balance Update:\n") print(balance) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py b/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py index d9a5f424..dd48b9f3 100644 --- a/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py +++ b/examples/exchange_client/accounts_rpc/2_SubaccountBalance.py @@ -9,11 +9,9 @@ async def main() -> None: client = AsyncClient(network) subaccount_id = "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000" denom = "inj" - balance = await client.get_subaccount_balance( - subaccount_id=subaccount_id, - denom=denom - ) + balance = await client.get_subaccount_balance(subaccount_id=subaccount_id, denom=denom) print(balance) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/3_SubaccountsList.py b/examples/exchange_client/accounts_rpc/3_SubaccountsList.py index 835f20e5..af523e2d 100644 --- a/examples/exchange_client/accounts_rpc/3_SubaccountsList.py +++ b/examples/exchange_client/accounts_rpc/3_SubaccountsList.py @@ -11,5 +11,6 @@ async def main() -> None: subacc_list = await client.get_subaccount_list(account_address) print(subacc_list) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py b/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py index 0cbe952c..501d327e 100644 --- a/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py +++ b/examples/exchange_client/accounts_rpc/4_SubaccountBalancesList.py @@ -9,11 +9,9 @@ async def main() -> None: client = AsyncClient(network) subaccount = "0xaf79152ac5df276d9a8e1e2e22822f9713474902000000000000000000000000" denoms = ["inj", "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5"] - subacc_balances_list = await client.get_subaccount_balances_list( - subaccount_id=subaccount, - denoms=denoms - ) + subacc_balances_list = await client.get_subaccount_balances_list(subaccount_id=subaccount, denoms=denoms) print(subacc_balances_list) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py b/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py index 2aa8ea4e..e67d2ab6 100644 --- a/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py +++ b/examples/exchange_client/accounts_rpc/5_SubaccountHistory.py @@ -14,14 +14,10 @@ async def main() -> None: limit = 15 end_time = 1665118340224 subacc_history = await client.get_subaccount_history( - subaccount_id=subaccount, - denom=denom, - transfer_types=transfer_types, - skip=skip, - limit=limit, - end_time=end_time + subaccount_id=subaccount, denom=denom, transfer_types=transfer_types, skip=skip, limit=limit, end_time=end_time ) print(subacc_history) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py b/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py index a6db421f..9026e4e1 100644 --- a/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py +++ b/examples/exchange_client/accounts_rpc/6_SubaccountOrderSummary.py @@ -11,11 +11,10 @@ async def main() -> None: order_direction = "buy" market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" subacc_order_summary = await client.get_subaccount_order_summary( - subaccount_id=subaccount, - order_direction=order_direction, - market_id=market_id + subaccount_id=subaccount, order_direction=order_direction, market_id=market_id ) print(subacc_order_summary) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/7_OrderStates.py b/examples/exchange_client/accounts_rpc/7_OrderStates.py index 1da25533..e78dc842 100644 --- a/examples/exchange_client/accounts_rpc/7_OrderStates.py +++ b/examples/exchange_client/accounts_rpc/7_OrderStates.py @@ -9,16 +9,17 @@ async def main() -> None: client = AsyncClient(network) spot_order_hashes = [ "0xce0d9b701f77cd6ddfda5dd3a4fe7b2d53ba83e5d6c054fb2e9e886200b7b7bb", - "0x2e2245b5431638d76c6e0cc6268970418a1b1b7df60a8e94b8cf37eae6105542" + "0x2e2245b5431638d76c6e0cc6268970418a1b1b7df60a8e94b8cf37eae6105542", ] derivative_order_hashes = [ "0x82113f3998999bdc3892feaab2c4e53ba06c5fe887a2d5f9763397240f24da50", - "0xbb1f036001378cecb5fff1cc69303919985b5bf058c32f37d5aaf9b804c07a06" + "0xbb1f036001378cecb5fff1cc69303919985b5bf058c32f37d5aaf9b804c07a06", ] orders = await client.get_order_states( spot_order_hashes=spot_order_hashes, derivative_order_hashes=derivative_order_hashes ) print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/8_Portfolio.py b/examples/exchange_client/accounts_rpc/8_Portfolio.py index c074c2a9..0a922054 100644 --- a/examples/exchange_client/accounts_rpc/8_Portfolio.py +++ b/examples/exchange_client/accounts_rpc/8_Portfolio.py @@ -11,5 +11,6 @@ async def main() -> None: portfolio = await client.get_portfolio(account_address=account_address) print(portfolio) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/accounts_rpc/9_Rewards.py b/examples/exchange_client/accounts_rpc/9_Rewards.py index f96f0882..b3a486cf 100644 --- a/examples/exchange_client/accounts_rpc/9_Rewards.py +++ b/examples/exchange_client/accounts_rpc/9_Rewards.py @@ -11,8 +11,10 @@ async def main() -> None: epoch = -1 rewards = await client.get_rewards( # account_address=account_address, - epoch=epoch) + epoch=epoch + ) print(rewards) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/auctions_rpc/1_Auction.py b/examples/exchange_client/auctions_rpc/1_Auction.py index 8a813b51..94f73e16 100644 --- a/examples/exchange_client/auctions_rpc/1_Auction.py +++ b/examples/exchange_client/auctions_rpc/1_Auction.py @@ -12,5 +12,6 @@ async def main() -> None: auction = await client.get_auction(bid_round=bid_round) print(auction) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/auctions_rpc/2_Auctions.py b/examples/exchange_client/auctions_rpc/2_Auctions.py index 1bc0f8dc..30576a89 100644 --- a/examples/exchange_client/auctions_rpc/2_Auctions.py +++ b/examples/exchange_client/auctions_rpc/2_Auctions.py @@ -11,5 +11,6 @@ async def main() -> None: auctions = await client.get_auctions() print(auctions) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/auctions_rpc/3_StreamBids.py b/examples/exchange_client/auctions_rpc/3_StreamBids.py index 4540fa09..8306becb 100644 --- a/examples/exchange_client/auctions_rpc/3_StreamBids.py +++ b/examples/exchange_client/auctions_rpc/3_StreamBids.py @@ -12,5 +12,6 @@ async def main() -> None: async for bid in bids: print(bid) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py b/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py index 2b962102..b58448d2 100644 --- a/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py +++ b/examples/exchange_client/derivative_exchange_rpc/10_StreamHistoricalOrders.py @@ -9,11 +9,10 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" - orders = await client.stream_historical_derivative_orders( - market_id=market_id - ) + orders = await client.stream_historical_derivative_orders(market_id=market_id) async for order in orders: print(order) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/11_Trades.py b/examples/exchange_client/derivative_exchange_rpc/11_Trades.py index 72dee870..5ae822a9 100644 --- a/examples/exchange_client/derivative_exchange_rpc/11_Trades.py +++ b/examples/exchange_client/derivative_exchange_rpc/11_Trades.py @@ -10,11 +10,9 @@ async def main() -> None: client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" - trades = await client.get_derivative_trades( - market_id=market_id, - subaccount_id=subaccount_id - ) + trades = await client.get_derivative_trades(market_id=market_id, subaccount_id=subaccount_id) print(trades) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py b/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py index 0eb0d259..8d6246bb 100644 --- a/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py +++ b/examples/exchange_client/derivative_exchange_rpc/12_StreamTrades.py @@ -10,15 +10,13 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff" + "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff", ] subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" - trades = await client.stream_derivative_trades( - market_id=market_ids[0], - subaccount_id=subaccount_id - ) + trades = await client.stream_derivative_trades(market_id=market_ids[0], subaccount_id=subaccount_id) async for trade in trades: print(trade) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py b/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py index c12425e5..a7f06db7 100644 --- a/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py +++ b/examples/exchange_client/derivative_exchange_rpc/13_SubaccountOrdersList.py @@ -13,13 +13,10 @@ async def main() -> None: skip = 1 limit = 2 orders = await client.get_derivative_subaccount_orders( - subaccount_id=subaccount_id, - market_id=market_id, - skip=skip, - limit=limit + subaccount_id=subaccount_id, market_id=market_id, skip=skip, limit=limit ) print(orders) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py b/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py index f89eb7fa..4cd55f06 100644 --- a/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py +++ b/examples/exchange_client/derivative_exchange_rpc/14_SubaccountTradesList.py @@ -20,10 +20,10 @@ async def main() -> None: execution_type=execution_type, direction=direction, skip=skip, - limit=limit + limit=limit, ) print(trades) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py b/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py index 8cc637a0..8f352c9e 100644 --- a/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py +++ b/examples/exchange_client/derivative_exchange_rpc/15_FundingPayments.py @@ -14,13 +14,10 @@ async def main() -> None: limit = 3 end_time = 1676426400125 funding = await client.get_funding_payments( - market_id=market_id, - subaccount_id=subaccount_id, - skip=skip, - limit=limit, - end_time=end_time + market_id=market_id, subaccount_id=subaccount_id, skip=skip, limit=limit, end_time=end_time ) print(funding) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py b/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py index c00a35b9..2a8cbcd1 100644 --- a/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py +++ b/examples/exchange_client/derivative_exchange_rpc/17_FundingRates.py @@ -12,13 +12,9 @@ async def main() -> None: skip = 0 limit = 3 end_time = 1675717201465 - funding_rates = await client.get_funding_rates( - market_id=market_id, - skip=skip, - limit=limit, - end_time=end_time - ) + funding_rates = await client.get_funding_rates(market_id=market_id, skip=skip, limit=limit, end_time=end_time) print(funding_rates) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py b/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py index 2709814e..49b00e02 100644 --- a/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py +++ b/examples/exchange_client/derivative_exchange_rpc/18_Orderbooks.py @@ -10,10 +10,11 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff" + "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff", ] markets = await client.get_derivative_orderbooks(market_ids=market_ids) print(markets) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py b/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py index 773b363c..9ed36e38 100644 --- a/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py +++ b/examples/exchange_client/derivative_exchange_rpc/19_Binary_Options_Markets.py @@ -9,12 +9,10 @@ async def main() -> None: client = AsyncClient(network) market_status = "active" quote_denom = "peggy0xdAC17F958D2ee523a2206206994597C13D831ec7" - market = await client.get_binary_options_markets( - market_status=market_status, - quote_denom=quote_denom - ) + market = await client.get_binary_options_markets(market_status=market_status, quote_denom=quote_denom) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/1_Market.py b/examples/exchange_client/derivative_exchange_rpc/1_Market.py index 52a75e98..f0cdf499 100644 --- a/examples/exchange_client/derivative_exchange_rpc/1_Market.py +++ b/examples/exchange_client/derivative_exchange_rpc/1_Market.py @@ -12,5 +12,6 @@ async def main() -> None: market = await client.get_derivative_market(market_id=market_id) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py b/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py index 2f448439..6c14d93a 100644 --- a/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py +++ b/examples/exchange_client/derivative_exchange_rpc/20_Binary_Options_Market.py @@ -11,5 +11,6 @@ async def main() -> None: market = await client.get_binary_options_market(market_id=market_id) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py b/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py index 8bca13c8..9dc22f6f 100644 --- a/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py +++ b/examples/exchange_client/derivative_exchange_rpc/21_Historical_Orders.py @@ -22,5 +22,6 @@ async def main() -> None: ) print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py b/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py index 43ed58f3..40ae4598 100644 --- a/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py +++ b/examples/exchange_client/derivative_exchange_rpc/22_OrderbooksV2.py @@ -10,10 +10,11 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff" + "0xd5e4b12b19ecf176e4e14b42944731c27677819d2ed93be4104ad7025529c7ff", ] orderbooks = await client.get_derivative_orderbooksV2(market_ids=market_ids) print(orderbooks) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/2_Markets.py b/examples/exchange_client/derivative_exchange_rpc/2_Markets.py index ed0850fb..949695e1 100644 --- a/examples/exchange_client/derivative_exchange_rpc/2_Markets.py +++ b/examples/exchange_client/derivative_exchange_rpc/2_Markets.py @@ -10,11 +10,9 @@ async def main() -> None: client = AsyncClient(network) market_status = "active" quote_denom = "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5" - market = await client.get_derivative_markets( - market_status=market_status, - quote_denom=quote_denom - ) + market = await client.get_derivative_markets(market_status=market_status, quote_denom=quote_denom) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py b/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py index 4f9a8a32..b5b7cbb0 100644 --- a/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py +++ b/examples/exchange_client/derivative_exchange_rpc/3_StreamMarket.py @@ -12,5 +12,6 @@ async def main() -> None: async for market in markets: print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py b/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py index aaf92213..49602701 100644 --- a/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py +++ b/examples/exchange_client/derivative_exchange_rpc/4_Orderbook.py @@ -12,5 +12,6 @@ async def main() -> None: market = await client.get_derivative_orderbook(market_id=market_id) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py b/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py index f1da521f..ab9c5927 100644 --- a/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py +++ b/examples/exchange_client/derivative_exchange_rpc/5_StreamOrderbooks.py @@ -13,5 +13,6 @@ async def main() -> None: async for market in markets: print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py b/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py index e3375223..235e75d2 100644 --- a/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py +++ b/examples/exchange_client/derivative_exchange_rpc/6_StreamOrderbookUpdate.py @@ -79,8 +79,11 @@ def apply_orderbook_update(orderbook: Orderbook, updates): # ensure we have not missed any update if updates.sequence > (orderbook.sequence + 1): - raise Exception("missing orderbook update events from stream, must restart: {} vs {}".format( - updates.sequence, (orderbook.sequence + 1))) + raise Exception( + "missing orderbook update events from stream, must restart: {} vs {}".format( + updates.sequence, (orderbook.sequence + 1) + ) + ) print("updating orderbook with updates at sequence {}".format(updates.sequence)) @@ -91,9 +94,8 @@ def apply_orderbook_update(orderbook: Orderbook, updates): if level.is_active: # upsert level orderbook.levels[direction][level.price] = PriceLevel( - price=Decimal(level.price), - quantity=Decimal(level.quantity), - timestamp=level.timestamp) + price=Decimal(level.price), quantity=Decimal(level.quantity), timestamp=level.timestamp + ) else: if level.price in orderbook.levels[direction]: del orderbook.levels[direction][level.price] @@ -121,5 +123,5 @@ def apply_orderbook_update(orderbook: Orderbook, updates): print("====================================") -if __name__ == '__main__': +if __name__ == "__main__": asyncio.run(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/7_Positions.py b/examples/exchange_client/derivative_exchange_rpc/7_Positions.py index fcd5814e..fddd7b3a 100644 --- a/examples/exchange_client/derivative_exchange_rpc/7_Positions.py +++ b/examples/exchange_client/derivative_exchange_rpc/7_Positions.py @@ -10,7 +10,7 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6", - "0xd97d0da6f6c11710ef06315971250e4e9aed4b7d4cd02059c9477ec8cf243782" + "0xd97d0da6f6c11710ef06315971250e4e9aed4b7d4cd02059c9477ec8cf243782", ] subaccount_id = "0xc6fe5d33615a1c52c08018c47e8bc53646a0e101000000000000000000000000" direction = "short" @@ -23,9 +23,10 @@ async def main() -> None: direction=direction, subaccount_total_positions=subaccount_total_positions, skip=skip, - limit=limit + limit=limit, ) print(positions) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py b/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py index 05b5a484..cc808a7e 100644 --- a/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py +++ b/examples/exchange_client/derivative_exchange_rpc/9_StreamPositions.py @@ -10,12 +10,10 @@ async def main() -> None: client = AsyncClient(network) market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" subaccount_id = "0xea98e3aa091a6676194df40ac089e40ab4604bf9000000000000000000000000" - positions = await client.stream_derivative_positions( - market_id=market_id, - subaccount_id=subaccount_id - ) + positions = await client.stream_derivative_positions(market_id=market_id, subaccount_id=subaccount_id) async for position in positions: print(position) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py b/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py index 33114f4f..62ca0c24 100644 --- a/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py +++ b/examples/exchange_client/explorer_rpc/10_GetIBCTransfers.py @@ -24,9 +24,10 @@ async def main() -> None: destination_channel=destination_channel, dest_port=dest_port, limit=limit, - skip=skip + skip=skip, ) print(ibc_transfers) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/1_GetTxByHash.py b/examples/exchange_client/explorer_rpc/1_GetTxByHash.py index 84096641..33e6abe4 100644 --- a/examples/exchange_client/explorer_rpc/1_GetTxByHash.py +++ b/examples/exchange_client/explorer_rpc/1_GetTxByHash.py @@ -19,5 +19,6 @@ async def main() -> None: first_message = transaction_messages[0] print(first_message) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/2_AccountTxs.py b/examples/exchange_client/explorer_rpc/2_AccountTxs.py index ca4957a2..b1e39445 100644 --- a/examples/exchange_client/explorer_rpc/2_AccountTxs.py +++ b/examples/exchange_client/explorer_rpc/2_AccountTxs.py @@ -20,5 +20,6 @@ async def main() -> None: first_message = first_transaction_messages[0] print(first_message) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/3_Blocks.py b/examples/exchange_client/explorer_rpc/3_Blocks.py index 072403d1..72739096 100644 --- a/examples/exchange_client/explorer_rpc/3_Blocks.py +++ b/examples/exchange_client/explorer_rpc/3_Blocks.py @@ -12,5 +12,6 @@ async def main() -> None: block = await client.get_blocks(limit=limit) print(block) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/4_Block.py b/examples/exchange_client/explorer_rpc/4_Block.py index 433a4071..e043bdcd 100644 --- a/examples/exchange_client/explorer_rpc/4_Block.py +++ b/examples/exchange_client/explorer_rpc/4_Block.py @@ -12,5 +12,6 @@ async def main() -> None: block = await client.get_block(block_height=block_height) print(block) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/5_TxsRequest.py b/examples/exchange_client/explorer_rpc/5_TxsRequest.py index 57803f50..8282816b 100644 --- a/examples/exchange_client/explorer_rpc/5_TxsRequest.py +++ b/examples/exchange_client/explorer_rpc/5_TxsRequest.py @@ -12,5 +12,6 @@ async def main() -> None: txs = await client.get_txs(limit=limit) print(txs) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/6_StreamTxs.py b/examples/exchange_client/explorer_rpc/6_StreamTxs.py index 1d3b9597..f96a595e 100644 --- a/examples/exchange_client/explorer_rpc/6_StreamTxs.py +++ b/examples/exchange_client/explorer_rpc/6_StreamTxs.py @@ -8,10 +8,10 @@ async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() client = AsyncClient(network) - stream_txs = await client.stream_txs( - ) + stream_txs = await client.stream_txs() async for tx in stream_txs: print(tx) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/7_StreamBlocks.py b/examples/exchange_client/explorer_rpc/7_StreamBlocks.py index e167db2a..f5169511 100644 --- a/examples/exchange_client/explorer_rpc/7_StreamBlocks.py +++ b/examples/exchange_client/explorer_rpc/7_StreamBlocks.py @@ -8,10 +8,10 @@ async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() client = AsyncClient(network) - stream_blocks = await client.stream_blocks( - ) + stream_blocks = await client.stream_blocks() async for block in stream_blocks: print(block) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py b/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py index 7c18dd38..4fde668f 100644 --- a/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py +++ b/examples/exchange_client/explorer_rpc/8_GetPeggyDeposits.py @@ -12,5 +12,6 @@ async def main() -> None: peggy_deposits = await client.get_peggy_deposits(receiver=receiver) print(peggy_deposits) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py b/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py index 67859c62..def1fedf 100644 --- a/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py +++ b/examples/exchange_client/explorer_rpc/9_GetPeggyWithdrawals.py @@ -10,11 +10,9 @@ async def main() -> None: client = AsyncClient(network) sender = "inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" limit = 2 - peggy_deposits = await client.get_peggy_withdrawals( - sender=sender, - limit=limit - ) + peggy_deposits = await client.get_peggy_withdrawals(sender=sender, limit=limit) print(peggy_deposits) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py b/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py index 32a52818..167cae93 100644 --- a/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py +++ b/examples/exchange_client/insurance_rpc/1_InsuranceFunds.py @@ -11,5 +11,6 @@ async def main() -> None: insurance_funds = await client.get_insurance_funds() print(insurance_funds) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/insurance_rpc/2_Redemptions.py b/examples/exchange_client/insurance_rpc/2_Redemptions.py index 5b5c0399..794e4b02 100644 --- a/examples/exchange_client/insurance_rpc/2_Redemptions.py +++ b/examples/exchange_client/insurance_rpc/2_Redemptions.py @@ -12,11 +12,10 @@ async def main() -> None: redemption_denom = "share4" status = "disbursed" insurance_redemptions = await client.get_redemptions( - redeemer=redeemer, - redemption_denom=redemption_denom, - status=status + redeemer=redeemer, redemption_denom=redemption_denom, status=status ) print(insurance_redemptions) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/meta_rpc/1_Ping.py b/examples/exchange_client/meta_rpc/1_Ping.py index f342297e..3b75cbae 100644 --- a/examples/exchange_client/meta_rpc/1_Ping.py +++ b/examples/exchange_client/meta_rpc/1_Ping.py @@ -9,7 +9,8 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) resp = await client.ping() - print('Health OK?', resp) + print("Health OK?", resp) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/meta_rpc/2_Version.py b/examples/exchange_client/meta_rpc/2_Version.py index 0493c67c..025a931b 100644 --- a/examples/exchange_client/meta_rpc/2_Version.py +++ b/examples/exchange_client/meta_rpc/2_Version.py @@ -9,7 +9,8 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) resp = await client.version() - print('Version:', resp) + print("Version:", resp) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/meta_rpc/3_Info.py b/examples/exchange_client/meta_rpc/3_Info.py index 33d45d41..8f799da7 100644 --- a/examples/exchange_client/meta_rpc/3_Info.py +++ b/examples/exchange_client/meta_rpc/3_Info.py @@ -10,11 +10,11 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) resp = await client.info() - print('[!] Info:') + print("[!] Info:") print(resp) latency = int(round(time.time() * 1000)) - resp.timestamp - print(f'Server Latency: {latency}ms') + print(f"Server Latency: {latency}ms") -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py b/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py index 2c5686a5..789cabc7 100644 --- a/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py +++ b/examples/exchange_client/meta_rpc/4_StreamKeepAlive.py @@ -30,11 +30,11 @@ async def get_markets(client): async def keepalive(client, tasks: list): stream = await client.stream_keepalive() async for announce in stream: - print('Server announce:', announce) + print("Server announce:", announce) async for task in tasks: task.cancel() - print('Cancelled all tasks') + print("Cancelled all tasks") -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/oracle_rpc/1_StreamPrices.py b/examples/exchange_client/oracle_rpc/1_StreamPrices.py index 360c02ee..ca7f9de5 100644 --- a/examples/exchange_client/oracle_rpc/1_StreamPrices.py +++ b/examples/exchange_client/oracle_rpc/1_StreamPrices.py @@ -8,16 +8,15 @@ async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() client = AsyncClient(network) - base_symbol = 'BTC' - quote_symbol = 'USDT' - oracle_type = 'bandibc' + base_symbol = "BTC" + quote_symbol = "USDT" + oracle_type = "bandibc" oracle_prices = await client.stream_oracle_prices( - base_symbol=base_symbol, - quote_symbol=quote_symbol, - oracle_type=oracle_type + base_symbol=base_symbol, quote_symbol=quote_symbol, oracle_type=oracle_type ) async for oracle in oracle_prices: print(oracle) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/oracle_rpc/2_Price.py b/examples/exchange_client/oracle_rpc/2_Price.py index 48b4c703..f3a5921e 100644 --- a/examples/exchange_client/oracle_rpc/2_Price.py +++ b/examples/exchange_client/oracle_rpc/2_Price.py @@ -8,17 +8,18 @@ async def main() -> None: # select network: local, testnet, mainnet network = Network.testnet() client = AsyncClient(network) - base_symbol = 'BTC' - quote_symbol = 'USDT' - oracle_type = 'bandibc' + base_symbol = "BTC" + quote_symbol = "USDT" + oracle_type = "bandibc" oracle_scale_factor = 6 oracle_prices = await client.get_oracle_prices( base_symbol=base_symbol, quote_symbol=quote_symbol, oracle_type=oracle_type, - oracle_scale_factor=oracle_scale_factor + oracle_scale_factor=oracle_scale_factor, ) print(oracle_prices) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/oracle_rpc/3_OracleList.py b/examples/exchange_client/oracle_rpc/3_OracleList.py index 69fa1789..558ac66d 100644 --- a/examples/exchange_client/oracle_rpc/3_OracleList.py +++ b/examples/exchange_client/oracle_rpc/3_OracleList.py @@ -11,5 +11,6 @@ async def main() -> None: oracle_list = await client.get_oracle_list() print(oracle_list) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py b/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py index 396adce4..965d40c7 100644 --- a/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py +++ b/examples/exchange_client/portfolio_rpc/1_AccountPortfolio.py @@ -9,10 +9,9 @@ async def main() -> None: network = Network.testnet() client = AsyncClient(network) account_address = "inj1clw20s2uxeyxtam6f7m84vgae92s9eh7vygagt" - portfolio = await client.get_account_portfolio( - account_address=account_address - ) + portfolio = await client.get_account_portfolio(account_address=account_address) print(portfolio) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py b/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py index 7b06037c..53d7c4da 100644 --- a/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py +++ b/examples/exchange_client/portfolio_rpc/2_StreamAccountPortfolio.py @@ -14,5 +14,5 @@ async def main() -> None: print(update) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py b/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py index 053b2e61..8bf4a82a 100644 --- a/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py +++ b/examples/exchange_client/spot_exchange_rpc/10_StreamTrades.py @@ -9,7 +9,7 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0" + "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0", ] execution_side = "maker" direction = "sell" @@ -20,11 +20,11 @@ async def main() -> None: execution_side=execution_side, direction=direction, subaccount_id=subaccount_id, - execution_types=execution_types + execution_types=execution_types, ) async for trade in trades: print(trade) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py b/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py index abd20bef..03e901e9 100644 --- a/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py +++ b/examples/exchange_client/spot_exchange_rpc/11_SubaccountOrdersList.py @@ -13,12 +13,10 @@ async def main() -> None: skip = 10 limit = 10 orders = await client.get_spot_subaccount_orders( - subaccount_id=subaccount_id, - market_id=market_id, - skip=skip, - limit=limit + subaccount_id=subaccount_id, market_id=market_id, skip=skip, limit=limit ) print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py b/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py index ae71af7f..a9670e58 100644 --- a/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py +++ b/examples/exchange_client/spot_exchange_rpc/12_SubaccountTradesList.py @@ -20,9 +20,10 @@ async def main() -> None: execution_type=execution_type, direction=direction, skip=skip, - limit=limit + limit=limit, ) print(trades) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py b/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py index 18b6f70f..82fe35e7 100644 --- a/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py +++ b/examples/exchange_client/spot_exchange_rpc/13_StreamOrderbooks.py @@ -9,11 +9,12 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0" + "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0", ] orderbook = await client.stream_spot_orderbook_snapshot(market_ids=market_ids) async for orders in orderbook: print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py b/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py index 34b898e2..2a99f818 100644 --- a/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py +++ b/examples/exchange_client/spot_exchange_rpc/14_Orderbooks.py @@ -9,10 +9,11 @@ async def main() -> None: client = AsyncClient(network) market_ids = [ "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe", - "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0" + "0x7a57e705bb4e09c88aecfc295569481dbf2fe1d5efe364651fbe72385938e9b0", ] orderbooks = await client.get_spot_orderbooksV2(market_ids=market_ids) print(orderbooks) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py b/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py index aa63f432..0a39f80d 100644 --- a/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py +++ b/examples/exchange_client/spot_exchange_rpc/15_HistoricalOrders.py @@ -13,13 +13,10 @@ async def main() -> None: limit = 3 order_types = ["buy_po"] orders = await client.get_historical_spot_orders( - market_id=market_id, - subaccount_id=subaccount_id, - skip=skip, - limit=limit, - order_types=order_types + market_id=market_id, subaccount_id=subaccount_id, skip=skip, limit=limit, order_types=order_types ) print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/1_Market.py b/examples/exchange_client/spot_exchange_rpc/1_Market.py index 95152295..d926e97c 100644 --- a/examples/exchange_client/spot_exchange_rpc/1_Market.py +++ b/examples/exchange_client/spot_exchange_rpc/1_Market.py @@ -11,5 +11,6 @@ async def main() -> None: market = await client.get_spot_market(market_id=market_id) print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/2_Markets.py b/examples/exchange_client/spot_exchange_rpc/2_Markets.py index 926f8290..dc37d25f 100644 --- a/examples/exchange_client/spot_exchange_rpc/2_Markets.py +++ b/examples/exchange_client/spot_exchange_rpc/2_Markets.py @@ -10,13 +10,9 @@ async def main() -> None: market_status = "active" base_denom = "inj" quote_denom = "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5" - market = await client.get_spot_markets( - market_status=market_status, - base_denom=base_denom, - quote_denom=quote_denom - ) + market = await client.get_spot_markets(market_status=market_status, base_denom=base_denom, quote_denom=quote_denom) print(market) -if __name__ == '__main__': +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py b/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py index 25ea9b15..16633271 100644 --- a/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py +++ b/examples/exchange_client/spot_exchange_rpc/3_StreamMarkets.py @@ -12,5 +12,6 @@ async def main() -> None: async for market in markets: print(market) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py b/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py index 03112299..1de0c539 100644 --- a/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py +++ b/examples/exchange_client/spot_exchange_rpc/4_Orderbook.py @@ -11,5 +11,6 @@ async def main() -> None: orderbook = await client.get_spot_orderbookV2(market_id=market_id) print(orderbook) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/6_Trades.py b/examples/exchange_client/spot_exchange_rpc/6_Trades.py index d8acaf66..6c035553 100644 --- a/examples/exchange_client/spot_exchange_rpc/6_Trades.py +++ b/examples/exchange_client/spot_exchange_rpc/6_Trades.py @@ -17,9 +17,10 @@ async def main() -> None: execution_side=execution_side, direction=direction, subaccount_id=subaccount_id, - execution_types=execution_types + execution_types=execution_types, ) print(orders) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py b/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py index e522cf22..5c4ed593 100644 --- a/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py +++ b/examples/exchange_client/spot_exchange_rpc/7_StreamOrderbookSnapshot.py @@ -13,5 +13,6 @@ async def main() -> None: async for orderbook in orderbooks: print(orderbook) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py b/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py index e24cd79f..13a789fd 100644 --- a/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py +++ b/examples/exchange_client/spot_exchange_rpc/8_StreamOrderbookUpdate.py @@ -79,8 +79,11 @@ def apply_orderbook_update(orderbook: Orderbook, updates): # ensure we have not missed any update if updates.sequence > (orderbook.sequence + 1): - raise Exception("missing orderbook update events from stream, must restart: {} vs {}".format( - updates.sequence, (orderbook.sequence + 1))) + raise Exception( + "missing orderbook update events from stream, must restart: {} vs {}".format( + updates.sequence, (orderbook.sequence + 1) + ) + ) print("updating orderbook with updates at sequence {}".format(updates.sequence)) @@ -91,9 +94,8 @@ def apply_orderbook_update(orderbook: Orderbook, updates): if level.is_active: # upsert level orderbook.levels[direction][level.price] = PriceLevel( - price=Decimal(level.price), - quantity=Decimal(level.quantity), - timestamp=level.timestamp) + price=Decimal(level.price), quantity=Decimal(level.quantity), timestamp=level.timestamp + ) else: if level.price in orderbook.levels[direction]: del orderbook.levels[direction][level.price] @@ -121,5 +123,5 @@ def apply_orderbook_update(orderbook: Orderbook, updates): print("====================================") -if __name__ == '__main__': +if __name__ == "__main__": asyncio.run(main()) diff --git a/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py b/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py index 75a12a3e..95dcdb43 100644 --- a/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py +++ b/examples/exchange_client/spot_exchange_rpc/9_StreamHistoricalOrders.py @@ -9,12 +9,10 @@ async def main() -> None: client = AsyncClient(network) market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" order_side = "buy" - orders = await client.stream_historical_spot_orders( - market_id=market_id, - order_side=order_side - ) + orders = await client.stream_historical_spot_orders(market_id=market_id, order_side=order_side) async for order in orders: print(order) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/poetry.lock b/poetry.lock index 65d65b81..7f7f64cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -344,6 +344,52 @@ files = [ {file = "bitarray-2.8.1.tar.gz", hash = "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3"}, ] +[[package]] +name = "black" +version = "23.9.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, + {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, + {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, + {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, + {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, + {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, + {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, + {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, + {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, + {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, + {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "certifi" version = "2023.7.22" @@ -526,6 +572,20 @@ files = [ {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "coincurve" version = "18.0.0" @@ -1542,6 +1602,17 @@ files = [ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "nodeenv" version = "1.8.0" @@ -1580,6 +1651,17 @@ files = [ [package.dependencies] regex = ">=2022.3.15" +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] + [[package]] name = "platformdirs" version = "3.10.0" @@ -2526,4 +2608,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "9910d20ce606278058ffa00c27ab4b42abb06da9278623cc014c0b7076f13503" +content-hash = "fcf0115df57cae7065cda119c217acb85cc70d086b05538537df91ef261002bb" diff --git a/pyinjective/async_client.py b/pyinjective/async_client.py index 1e90a4e6..f279b45f 100644 --- a/pyinjective/async_client.py +++ b/pyinjective/async_client.py @@ -54,10 +54,10 @@ class AsyncClient: def __init__( - self, - network: Network, - insecure: bool = False, - credentials=grpc.ssl_channel_credentials(), + self, + network: Network, + insecure: bool = False, + credentials=grpc.ssl_channel_credentials(), ): # the `insecure` parameter is ignored and will be deprecated soon. The value is taken directly from `network` @@ -74,9 +74,7 @@ def __init__( else grpc.aio.insecure_channel(network.grpc_endpoint) ) - self.stubCosmosTendermint = tendermint_query_grpc.ServiceStub( - self.chain_channel - ) + self.stubCosmosTendermint = tendermint_query_grpc.ServiceStub(self.chain_channel) self.stubAuth = auth_query_grpc.QueryStub(self.chain_channel) self.stubAuthz = authz_query_grpc.QueryStub(self.chain_channel) self.stubBank = bank_query_grpc.QueryStub(self.chain_channel) @@ -91,30 +89,16 @@ def __init__( if (network.use_secure_connection and credentials is not None) else grpc.aio.insecure_channel(network.grpc_exchange_endpoint) ) - self.stubMeta = exchange_meta_rpc_grpc.InjectiveMetaRPCStub( - self.exchange_channel - ) - self.stubExchangeAccount = exchange_accounts_rpc_grpc.InjectiveAccountsRPCStub( - self.exchange_channel - ) + self.stubMeta = exchange_meta_rpc_grpc.InjectiveMetaRPCStub(self.exchange_channel) + self.stubExchangeAccount = exchange_accounts_rpc_grpc.InjectiveAccountsRPCStub(self.exchange_channel) self.stubOracle = oracle_rpc_grpc.InjectiveOracleRPCStub(self.exchange_channel) - self.stubInsurance = insurance_rpc_grpc.InjectiveInsuranceRPCStub( - self.exchange_channel - ) - self.stubSpotExchange = spot_exchange_rpc_grpc.InjectiveSpotExchangeRPCStub( - self.exchange_channel - ) - self.stubDerivativeExchange = ( - derivative_exchange_rpc_grpc.InjectiveDerivativeExchangeRPCStub( - self.exchange_channel - ) - ) - self.stubAuction = auction_rpc_grpc.InjectiveAuctionRPCStub( - self.exchange_channel - ) - self.stubPortfolio = portfolio_rpc_grpc.InjectivePortfolioRPCStub( + self.stubInsurance = insurance_rpc_grpc.InjectiveInsuranceRPCStub(self.exchange_channel) + self.stubSpotExchange = spot_exchange_rpc_grpc.InjectiveSpotExchangeRPCStub(self.exchange_channel) + self.stubDerivativeExchange = derivative_exchange_rpc_grpc.InjectiveDerivativeExchangeRPCStub( self.exchange_channel ) + self.stubAuction = auction_rpc_grpc.InjectiveAuctionRPCStub(self.exchange_channel) + self.stubPortfolio = portfolio_rpc_grpc.InjectivePortfolioRPCStub(self.exchange_channel) # explorer stubs self.explorer_channel = ( @@ -122,9 +106,7 @@ def __init__( if (network.use_secure_connection and credentials is not None) else grpc.aio.insecure_channel(network.grpc_explorer_endpoint) ) - self.stubExplorer = explorer_rpc_grpc.InjectiveExplorerRPCStub( - self.explorer_channel - ) + self.stubExplorer = explorer_rpc_grpc.InjectiveExplorerRPCStub(self.explorer_channel) # timeout height update routine self.cron = aiocron.crontab( @@ -204,11 +186,10 @@ async def get_latest_block(self) -> tendermint_query.GetLatestBlockResponse: async def get_account(self, address: str) -> Optional[account_pb2.EthAccount]: try: - metadata = await self.network.chain_metadata( - metadata_query_provider=self._chain_cookie_metadata_requestor) - account_any = (await self.stubAuth.Account( - auth_query.QueryAccountRequest(address=address), metadata=metadata - )).account + metadata = await self.network.chain_metadata(metadata_query_provider=self._chain_cookie_metadata_requestor) + account_any = ( + await self.stubAuth.Account(auth_query.QueryAccountRequest(address=address), metadata=metadata) + ).account account = account_pb2.EthAccount() if account_any.Is(account.DESCRIPTOR): account_any.Unpack(account) @@ -216,18 +197,15 @@ async def get_account(self, address: str) -> Optional[account_pb2.EthAccount]: self.sequence = int(account.base_account.sequence) except Exception as e: LoggerProvider().logger_for_class(logging_class=self.__class__).debug( - f"error while fetching sequence and number {e}") + f"error while fetching sequence and number {e}" + ) return None async def get_request_id_by_tx_hash(self, tx_hash: bytes) -> List[int]: tx = await self.stubTx.GetTx(tx_service.GetTxRequest(hash=tx_hash)) request_ids = [] for tx in tx.tx_response.logs: - request_event = [ - event - for event in tx.events - if event.type == "request" or event.type == "report" - ] + request_event = [event for event in tx.events if event.type == "request" or event.type == "report"] if len(request_event) == 1: attrs = request_event[0].attributes attr_id = [attr for attr in attrs if attr.key == "id"] @@ -238,37 +216,28 @@ async def get_request_id_by_tx_hash(self, tx_hash: bytes) -> List[int]: raise NotFoundError("Request Id is not found") return request_ids - async def simulate_tx( - self, tx_byte: bytes - ) -> Tuple[Union[abci_type.SimulationResponse, grpc.RpcError], bool]: + async def simulate_tx(self, tx_byte: bytes) -> Tuple[Union[abci_type.SimulationResponse, grpc.RpcError], bool]: try: req = tx_service.SimulateRequest(tx_bytes=tx_byte) - metadata = await self.network.chain_metadata( - metadata_query_provider=self._chain_cookie_metadata_requestor) + metadata = await self.network.chain_metadata(metadata_query_provider=self._chain_cookie_metadata_requestor) return await self.stubTx.Simulate(request=req, metadata=metadata), True except grpc.RpcError as err: return err, False async def send_tx_sync_mode(self, tx_byte: bytes) -> abci_type.TxResponse: - req = tx_service.BroadcastTxRequest( - tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_SYNC - ) + req = tx_service.BroadcastTxRequest(tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_SYNC) metadata = await self.network.chain_metadata(metadata_query_provider=self._chain_cookie_metadata_requestor) result = await self.stubTx.BroadcastTx(request=req, metadata=metadata) return result.tx_response async def send_tx_async_mode(self, tx_byte: bytes) -> abci_type.TxResponse: - req = tx_service.BroadcastTxRequest( - tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_ASYNC - ) + req = tx_service.BroadcastTxRequest(tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_ASYNC) metadata = await self.network.chain_metadata(metadata_query_provider=self._chain_cookie_metadata_requestor) result = await self.stubTx.BroadcastTx(request=req, metadata=metadata) return result.tx_response async def send_tx_block_mode(self, tx_byte: bytes) -> abci_type.TxResponse: - req = tx_service.BroadcastTxRequest( - tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_BLOCK - ) + req = tx_service.BroadcastTxRequest(tx_bytes=tx_byte, mode=tx_service.BroadcastMode.BROADCAST_MODE_BLOCK) metadata = await self.network.chain_metadata(metadata_query_provider=self._chain_cookie_metadata_requestor) result = await self.stubTx.BroadcastTx(request=req, metadata=metadata) return result.tx_response @@ -287,14 +256,10 @@ async def get_grants(self, granter: str, grantee: str, **kwargs): ) async def get_bank_balances(self, address: str): - return await self.stubBank.AllBalances( - bank_query.QueryAllBalancesRequest(address=address) - ) + return await self.stubBank.AllBalances(bank_query.QueryAllBalancesRequest(address=address)) async def get_bank_balance(self, address: str, denom: str): - return await self.stubBank.Balance( - bank_query.QueryBalanceRequest(address=address, denom=denom) - ) + return await self.stubBank.Balance(bank_query.QueryBalanceRequest(address=address, denom=denom)) # Injective Exchange client methods @@ -416,27 +381,21 @@ async def get_ibc_transfers(self, **kwargs): async def stream_subaccount_balance(self, subaccount_id: str, **kwargs): req = exchange_accounts_rpc_pb.StreamSubaccountBalanceRequest( - subaccount_id=subaccount_id, - denoms=kwargs.get("denoms") + subaccount_id=subaccount_id, denoms=kwargs.get("denoms") ) return self.stubExchangeAccount.StreamSubaccountBalance(req) async def get_subaccount_balance(self, subaccount_id: str, denom: str): - req = exchange_accounts_rpc_pb.SubaccountBalanceEndpointRequest( - subaccount_id=subaccount_id, denom=denom - ) + req = exchange_accounts_rpc_pb.SubaccountBalanceEndpointRequest(subaccount_id=subaccount_id, denom=denom) return await self.stubExchangeAccount.SubaccountBalanceEndpoint(req) async def get_subaccount_list(self, account_address: str): - req = exchange_accounts_rpc_pb.SubaccountsListRequest( - account_address=account_address - ) + req = exchange_accounts_rpc_pb.SubaccountsListRequest(account_address=account_address) return await self.stubExchangeAccount.SubaccountsList(req) async def get_subaccount_balances_list(self, subaccount_id: str, **kwargs): req = exchange_accounts_rpc_pb.SubaccountBalancesListRequest( - subaccount_id=subaccount_id, - denoms=kwargs.get("denoms") + subaccount_id=subaccount_id, denoms=kwargs.get("denoms") ) return await self.stubExchangeAccount.SubaccountBalancesList(req) @@ -447,7 +406,7 @@ async def get_subaccount_history(self, subaccount_id: str, **kwargs): transfer_types=kwargs.get("transfer_types"), skip=kwargs.get("skip"), limit=kwargs.get("limit"), - end_time=kwargs.get("end_time") + end_time=kwargs.get("end_time"), ) return await self.stubExchangeAccount.SubaccountHistory(req) @@ -478,20 +437,18 @@ async def get_rewards(self, **kwargs): # OracleRPC - async def stream_oracle_prices( - self, base_symbol: str, quote_symbol: str, oracle_type: str - ): + async def stream_oracle_prices(self, base_symbol: str, quote_symbol: str, oracle_type: str): req = oracle_rpc_pb.StreamPricesRequest( base_symbol=base_symbol, quote_symbol=quote_symbol, oracle_type=oracle_type ) return self.stubOracle.StreamPrices(req) async def get_oracle_prices( - self, - base_symbol: str, - quote_symbol: str, - oracle_type: str, - oracle_scale_factor: int, + self, + base_symbol: str, + quote_symbol: str, + oracle_type: str, + oracle_scale_factor: int, ): req = oracle_rpc_pb.PriceRequest( base_symbol=base_symbol, @@ -534,9 +491,7 @@ async def get_spot_markets(self, **kwargs): return await self.stubSpotExchange.Markets(req) async def stream_spot_markets(self, **kwargs): - req = spot_exchange_rpc_pb.StreamMarketsRequest( - market_ids=kwargs.get("market_ids") - ) + req = spot_exchange_rpc_pb.StreamMarketsRequest(market_ids=kwargs.get("market_ids")) metadata = await self.network.exchange_metadata( metadata_query_provider=self._exchange_cookie_metadata_requestor ) @@ -626,7 +581,7 @@ async def stream_historical_spot_orders(self, market_id: str, **kwargs): subaccount_id=kwargs.get("subaccount_id"), order_types=kwargs.get("order_types"), state=kwargs.get("state"), - execution_types=kwargs.get("execution_types") + execution_types=kwargs.get("execution_types"), ) metadata = await self.network.exchange_metadata( metadata_query_provider=self._exchange_cookie_metadata_requestor @@ -640,7 +595,7 @@ async def stream_historical_derivative_orders(self, market_id: str, **kwargs): subaccount_id=kwargs.get("subaccount_id"), order_types=kwargs.get("order_types"), state=kwargs.get("state"), - execution_types=kwargs.get("execution_types") + execution_types=kwargs.get("execution_types"), ) metadata = await self.network.exchange_metadata( metadata_query_provider=self._exchange_cookie_metadata_requestor @@ -696,9 +651,7 @@ async def get_derivative_markets(self, **kwargs): return await self.stubDerivativeExchange.Markets(req) async def stream_derivative_markets(self, **kwargs): - req = derivative_exchange_rpc_pb.StreamMarketRequest( - market_ids=kwargs.get("market_ids") - ) + req = derivative_exchange_rpc_pb.StreamMarketRequest(market_ids=kwargs.get("market_ids")) metadata = await self.network.exchange_metadata( metadata_query_provider=self._exchange_cookie_metadata_requestor ) @@ -900,9 +853,7 @@ async def get_account_portfolio(self, account_address: str): async def stream_account_portfolio(self, account_address: str, **kwargs): req = portfolio_rpc_pb.StreamAccountPortfolioRequest( - account_address=account_address, - subaccount_id=kwargs.get("subaccount_id"), - type=kwargs.get("type") + account_address=account_address, subaccount_id=kwargs.get("subaccount_id"), type=kwargs.get("type") ) metadata = await self.network.exchange_metadata( metadata_query_provider=self._exchange_cookie_metadata_requestor diff --git a/pyinjective/composer.py b/pyinjective/composer.py index 29752b63..b543b077 100644 --- a/pyinjective/composer.py +++ b/pyinjective/composer.py @@ -32,13 +32,14 @@ class Composer: def __init__( - self, - network: str, - spot_markets: Optional[Dict[str, SpotMarket]] = None, - derivative_markets: Optional[Dict[str, DerivativeMarket]] = None, - binary_option_markets: Optional[Dict[str, BinaryOptionMarket]] = None, - tokens: Optional[Dict[str, Token]] = None): - """ Composer is used to create the requests to send to the nodes using the Client + self, + network: str, + spot_markets: Optional[Dict[str, SpotMarket]] = None, + derivative_markets: Optional[Dict[str, DerivativeMarket]] = None, + binary_option_markets: Optional[Dict[str, BinaryOptionMarket]] = None, + tokens: Optional[Dict[str, Token]] = None, + ): + """Composer is used to create the requests to send to the nodes using the Client :param network: the name of the network to use (mainnet, testnet, devnet) :type network: str @@ -99,7 +100,6 @@ def get_order_mask(self, **kwargs): return order_mask def OrderData(self, market_id: str, subaccount_id: str, order_hash: str, **kwargs): - order_mask = self.get_order_mask(**kwargs) return injective_exchange_tx_pb.OrderData( @@ -221,7 +221,6 @@ def BinaryOptionsOrder( quantity: float, **kwargs, ): - market = self.binary_option_markets[market_id] denom = kwargs.get("denom", None) @@ -280,8 +279,8 @@ def MsgExecuteContract(self, sender: str, contract: str, msg: str, **kwargs): sender=sender, contract=contract, msg=bytes(msg, "utf-8"), - funds=kwargs.get('funds') # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. - # The coins in the list must be sorted in alphabetical order by denoms. + funds=kwargs.get("funds") # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. + # The coins in the list must be sorted in alphabetical order by denoms. ) def MsgDeposit(self, sender: str, subaccount_id: str, amount: float, denom: str): @@ -338,9 +337,7 @@ def MsgCreateSpotMarketOrder( ), ) - def MsgCancelSpotOrder( - self, market_id: str, sender: str, subaccount_id: str, order_hash: str - ): + def MsgCancelSpotOrder(self, market_id: str, sender: str, subaccount_id: str, order_hash: str): return injective_exchange_tx_pb.MsgCancelSpotOrder( sender=sender, market_id=market_id, @@ -349,19 +346,13 @@ def MsgCancelSpotOrder( ) def MsgBatchCreateSpotLimitOrders(self, sender: str, orders: List): - return injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrders( - sender=sender, orders=orders - ) + return injective_exchange_tx_pb.MsgBatchCreateSpotLimitOrders(sender=sender, orders=orders) def MsgBatchCancelSpotOrders(self, sender: str, data: List): - return injective_exchange_tx_pb.MsgBatchCancelSpotOrders( - sender=sender, data=data - ) + return injective_exchange_tx_pb.MsgBatchCancelSpotOrders(sender=sender, data=data) def MsgRewardsOptOut(self, sender: str): - return injective_exchange_tx_pb.MsgRewardsOptOut( - sender=sender - ) + return injective_exchange_tx_pb.MsgRewardsOptOut(sender=sender) def MsgCreateDerivativeLimitOrder( self, @@ -419,7 +410,6 @@ def MsgCreateBinaryOptionsLimitOrder( quantity: float, **kwargs, ): - return injective_exchange_tx_pb.MsgCreateBinaryOptionsLimitOrder( sender=sender, order=self.BinaryOptionsOrder( @@ -454,10 +444,7 @@ def MsgCreateBinaryOptionsMarketOrder( ), ) - def MsgCancelBinaryOptionsOrder( - self, sender: str, market_id: str, subaccount_id: str, order_hash: str - ): - + def MsgCancelBinaryOptionsOrder(self, sender: str, market_id: str, subaccount_id: str, order_hash: str): return injective_exchange_tx_pb.MsgCancelBinaryOptionsOrder( sender=sender, market_id=market_id, @@ -472,7 +459,6 @@ def MsgAdminUpdateBinaryOptionsMarket( status: str, **kwargs, ): - price_to_bytes = None if kwargs.get("settlement_price") is not None: @@ -491,9 +477,7 @@ def MsgAdminUpdateBinaryOptionsMarket( status=status, ) - def MsgRelayProviderPrices( - self, sender: str, provider: str, symbols: list, prices: list - ): + def MsgRelayProviderPrices(self, sender: str, provider: str, symbols: list, prices: list): oracle_prices = [] for price in prices: @@ -523,16 +507,13 @@ def MsgInstantBinaryOptionsMarketLaunch( min_quantity_tick_size: float, **kwargs, ): - scaled_maker_fee_rate = Decimal((maker_fee_rate * pow(10, 18))) maker_fee_to_bytes = bytes(str(scaled_maker_fee_rate), "utf-8") scaled_taker_fee_rate = Decimal((taker_fee_rate * pow(10, 18))) taker_fee_to_bytes = bytes(str(scaled_taker_fee_rate), "utf-8") - scaled_min_price_tick_size = Decimal( - (min_price_tick_size * pow(10, quote_decimals + 18)) - ) + scaled_min_price_tick_size = Decimal((min_price_tick_size * pow(10, quote_decimals + 18))) min_price_to_bytes = bytes(str(scaled_min_price_tick_size), "utf-8") scaled_min_quantity_tick_size = Decimal((min_quantity_tick_size * pow(10, 18))) @@ -555,9 +536,7 @@ def MsgInstantBinaryOptionsMarketLaunch( admin=kwargs.get("admin"), ) - def MsgCancelDerivativeOrder( - self, market_id: str, sender: str, subaccount_id: str, order_hash: str, **kwargs - ): + def MsgCancelDerivativeOrder(self, market_id: str, sender: str, subaccount_id: str, order_hash: str, **kwargs): order_mask = self.get_order_mask(**kwargs) return injective_exchange_tx_pb.MsgCancelDerivativeOrder( @@ -569,36 +548,24 @@ def MsgCancelDerivativeOrder( ) def MsgBatchCreateDerivativeLimitOrders(self, sender: str, orders: List): - return injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrders( - sender=sender, orders=orders - ) + return injective_exchange_tx_pb.MsgBatchCreateDerivativeLimitOrders(sender=sender, orders=orders) def MsgBatchCancelDerivativeOrders(self, sender: str, data: List): - return injective_exchange_tx_pb.MsgBatchCancelDerivativeOrders( - sender=sender, data=data - ) + return injective_exchange_tx_pb.MsgBatchCancelDerivativeOrders(sender=sender, data=data) def MsgBatchUpdateOrders(self, sender: str, **kwargs): return injective_exchange_tx_pb.MsgBatchUpdateOrders( sender=sender, subaccount_id=kwargs.get("subaccount_id"), spot_market_ids_to_cancel_all=kwargs.get("spot_market_ids_to_cancel_all"), - derivative_market_ids_to_cancel_all=kwargs.get( - "derivative_market_ids_to_cancel_all" - ), + derivative_market_ids_to_cancel_all=kwargs.get("derivative_market_ids_to_cancel_all"), spot_orders_to_cancel=kwargs.get("spot_orders_to_cancel"), derivative_orders_to_cancel=kwargs.get("derivative_orders_to_cancel"), spot_orders_to_create=kwargs.get("spot_orders_to_create"), derivative_orders_to_create=kwargs.get("derivative_orders_to_create"), - binary_options_orders_to_cancel=kwargs.get( - "binary_options_orders_to_cancel" - ), - binary_options_market_ids_to_cancel_all=kwargs.get( - "binary_options_market_ids_to_cancel_all" - ), - binary_options_orders_to_create=kwargs.get( - "binary_options_orders_to_create" - ), + binary_options_orders_to_cancel=kwargs.get("binary_options_orders_to_cancel"), + binary_options_market_ids_to_cancel_all=kwargs.get("binary_options_market_ids_to_cancel_all"), + binary_options_orders_to_create=kwargs.get("binary_options_orders_to_create"), ) def MsgLiquidatePosition(self, sender: str, subaccount_id: str, market_id: str): @@ -672,7 +639,6 @@ def MsgExternalTransfer( ) def MsgBid(self, sender: str, bid_amount: float, round: float): - be_amount = Decimal(str(bid_amount)) * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}") return injective_auction_tx_pb.MsgBid( @@ -681,9 +647,7 @@ def MsgBid(self, sender: str, bid_amount: float, round: float): bid_amount=self.Coin(amount=int(be_amount), denom=INJ_DENOM), ) - def MsgGrantGeneric( - self, granter: str, grantee: str, msg_type: str, expire_in: int - ): + def MsgGrantGeneric(self, granter: str, grantee: str, msg_type: str, expire_in: int): auth = cosmos_authz_pb.GenericAuthorization(msg=msg_type) any_auth = any_pb2.Any() any_auth.Pack(auth, type_url_prefix="") @@ -693,9 +657,7 @@ def MsgGrantGeneric( expiration=timestamp_pb2.Timestamp(seconds=(int(time()) + expire_in)), ) - return cosmos_authz_tx_pb.MsgGrant( - granter=granter, grantee=grantee, grant=grant - ) + return cosmos_authz_tx_pb.MsgGrant(granter=granter, grantee=grantee, grant=grant) def MsgGrantTyped( self, @@ -762,9 +724,7 @@ def MsgGrantTyped( expiration=timestamp_pb2.Timestamp(seconds=(int(time()) + expire_in)), ) - return cosmos_authz_tx_pb.MsgGrant( - granter=granter, grantee=grantee, grant=grant - ) + return cosmos_authz_tx_pb.MsgGrant(granter=granter, grantee=grantee, grant=grant) def MsgExec(self, grantee: str, msgs: List): any_msgs: List[any_pb2.Any] = [] @@ -776,21 +736,12 @@ def MsgExec(self, grantee: str, msgs: List): return cosmos_authz_tx_pb.MsgExec(grantee=grantee, msgs=any_msgs) def MsgRevoke(self, granter: str, grantee: str, msg_type: str): - return cosmos_authz_tx_pb.MsgRevoke( - granter=granter, grantee=grantee, msg_type_url=msg_type - ) - - def MsgRelayPriceFeedPrice( - self, sender: list, base: list, quote: list, price: list - ): + return cosmos_authz_tx_pb.MsgRevoke(granter=granter, grantee=grantee, msg_type_url=msg_type) - return injective_oracle_tx_pb.MsgRelayPriceFeedPrice( - sender=sender, base=base, quote=quote, price=price - ) + def MsgRelayPriceFeedPrice(self, sender: list, base: list, quote: list, price: list): + return injective_oracle_tx_pb.MsgRelayPriceFeedPrice(sender=sender, base=base, quote=quote, price=price) - def MsgSendToEth( - self, denom: str, sender: str, eth_dest: str, amount: float, bridge_fee: float - ): + def MsgSendToEth(self, denom: str, sender: str, eth_dest: str, amount: float, bridge_fee: float): token = self.tokens[denom] be_amount = token.chain_formatted_value(human_readable_value=Decimal(str(amount))) be_bridge_fee = token.chain_formatted_value(human_readable_value=Decimal(str(bridge_fee))) @@ -802,10 +753,7 @@ def MsgSendToEth( bridge_fee=self.Coin(amount=int(be_bridge_fee), denom=token.denom), ) - def MsgDelegate( - self, delegator_address: str, validator_address: str, amount: float - ): - + def MsgDelegate(self, delegator_address: str, validator_address: str, amount: float): be_amount = Decimal(str(amount)) * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}") return cosmos_staking_tx_pb.MsgDelegate( @@ -823,7 +771,7 @@ def MsgCreateInsuranceFund( oracle_quote: str, oracle_type: int, expiry: int, - initial_deposit: int + initial_deposit: int, ): token = self.tokens[quote_denom] be_amount = token.chain_formatted_value(human_readable_value=Decimal(str(initial_deposit))) @@ -850,7 +798,9 @@ def MsgUnderwrite( be_amount = token.chain_formatted_value(human_readable_value=Decimal(str(amount))) return injective_insurance_tx_pb.MsgUnderwrite( - sender=sender, market_id=market_id, deposit=self.Coin(amount=int(be_amount), denom=token.denom), + sender=sender, + market_id=market_id, + deposit=self.Coin(amount=int(be_amount), denom=token.denom), ) def MsgRequestRedemption( @@ -860,26 +810,19 @@ def MsgRequestRedemption( share_denom: str, amount: int, ): - return injective_insurance_tx_pb.MsgRequestRedemption( - sender=sender, market_id=market_id, amount=self.Coin(amount=amount, denom=share_denom), + sender=sender, + market_id=market_id, + amount=self.Coin(amount=amount, denom=share_denom), ) - def MsgWithdrawDelegatorReward( - self, delegator_address: str, validator_address: str - ): - + def MsgWithdrawDelegatorReward(self, delegator_address: str, validator_address: str): return cosmos_distribution_tx_pb.MsgWithdrawDelegatorReward( delegator_address=delegator_address, validator_address=validator_address ) - def MsgWithdrawValidatorCommission( - self, validator_address: str - ): - - return cosmos_distribution_tx_pb.MsgWithdrawValidatorCommission( - validator_address=validator_address - ) + def MsgWithdrawValidatorCommission(self, validator_address: str): + return cosmos_distribution_tx_pb.MsgWithdrawValidatorCommission(validator_address=validator_address) def MsgVote( self, @@ -887,24 +830,21 @@ def MsgVote( voter: str, option: int, ): - - return cosmos_gov_tx_pb.MsgVote( - proposal_id=proposal_id, voter=voter, option=option - ) + return cosmos_gov_tx_pb.MsgVote(proposal_id=proposal_id, voter=voter, option=option) def MsgPrivilegedExecuteContract( - self, sender: str, contract: str, msg: str, **kwargs + self, sender: str, contract: str, msg: str, **kwargs ) -> injective_exchange_tx_pb.MsgPrivilegedExecuteContract: return injective_exchange_tx_pb.MsgPrivilegedExecuteContract( sender=sender, contract_address=contract, data=msg, - funds=kwargs.get('funds') # funds is a string of Coin strings, comma separated, - # e.g. 100000inj,20000000000usdt + funds=kwargs.get("funds") # funds is a string of Coin strings, comma separated, + # e.g. 100000inj,20000000000usdt ) def MsgInstantiateContract( - self, sender: str, admin: str, code_id: int, label: str, message: bytes, **kwargs + self, sender: str, admin: str, code_id: int, label: str, message: bytes, **kwargs ) -> wasm_tx_pb.MsgInstantiateContract: return wasm_tx_pb.MsgInstantiateContract( sender=sender, @@ -912,8 +852,8 @@ def MsgInstantiateContract( code_id=code_id, label=label, msg=message, - funds=kwargs.get('funds'), # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. - # The coins in the list must be sorted in alphabetical order by denoms. + funds=kwargs.get("funds"), # funds is a list of cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin. + # The coins in the list must be sorted in alphabetical order by denoms. ) # data field format: [request-msg-header][raw-byte-msg-response] @@ -924,6 +864,7 @@ def MsgResponses(response, simulation=False): data = response.result if not simulation: data = bytes.fromhex(data) + # fmt: off header_map = { "/injective.exchange.v1beta1.MsgCreateSpotLimitOrderResponse": injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, @@ -982,7 +923,7 @@ def MsgResponses(response, simulation=False): "/injective.oracle.v1beta1.MsgRelayProviderPricesResponse": injective_oracle_tx_pb.MsgRelayProviderPrices, } - + # fmt: on msgs = [] for msg in data.msg_responses: msgs.append(header_map[msg.type_url].FromString(msg.value)) @@ -991,6 +932,7 @@ def MsgResponses(response, simulation=False): @staticmethod def UnpackMsgExecResponse(msg_type, data): + # fmt: off header_map = { "MsgCreateSpotLimitOrder": injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse, @@ -1035,6 +977,7 @@ def UnpackMsgExecResponse(msg_type, data): "MsgInstantBinaryOptionsMarketLaunch": injective_exchange_tx_pb.MsgInstantBinaryOptionsMarketLaunchResponse, } + # fmt: on responses = [header_map[msg_type].FromString(result) for result in data.results] return responses @@ -1042,7 +985,7 @@ def UnpackMsgExecResponse(msg_type, data): @staticmethod def UnpackTransactionMessages(transaction): meta_messages = json.loads(transaction.messages.decode()) - + # fmt: off header_map = { "/injective.exchange.v1beta1.MsgCreateSpotLimitOrder": injective_exchange_tx_pb.MsgCreateSpotLimitOrder, @@ -1101,7 +1044,7 @@ def UnpackTransactionMessages(transaction): "/injective.oracle.v1beta1.MsgRelayProviderPrices": injective_oracle_tx_pb.MsgRelayProviderPrices, } - + # fmt: on msgs = [] for msg in meta_messages: msg_as_string_dict = json.dumps(msg["value"]) @@ -1150,7 +1093,7 @@ def _initialize_markets_and_tokens_from_files(self): taker_fee_rate=None, service_provider_fee=None, min_price_tick_size=Decimal(str(configuration_section["min_price_tick_size"])), - min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])) + min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])), ) spot_markets[market.id] = market else: diff --git a/pyinjective/constant.py b/pyinjective/constant.py index 5e04c269..3e8d0d40 100644 --- a/pyinjective/constant.py +++ b/pyinjective/constant.py @@ -26,14 +26,8 @@ class Denom: def __init__( - self, - description: str, - base: int, - quote: int, - min_price_tick_size: float, - min_quantity_tick_size: float + self, description: str, base: int, quote: int, min_price_tick_size: float, min_quantity_tick_size: float ): - self.description = description self.base = base self.quote = quote diff --git a/pyinjective/core/broadcaster.py b/pyinjective/core/broadcaster.py index 2c6f6557..a84b38dd 100644 --- a/pyinjective/core/broadcaster.py +++ b/pyinjective/core/broadcaster.py @@ -13,7 +13,6 @@ class BroadcasterAccountConfig(ABC): - @property @abstractmethod def trading_injective_address(self) -> str: @@ -34,28 +33,28 @@ def messages_prepared_for_transaction(self, messages: List[any_pb2.Any]) -> List ... -class TransactionFeeCalculator (ABC): +class TransactionFeeCalculator(ABC): DEFAULT_GAS_PRICE = 500_000_000 @abstractmethod async def configure_gas_fee_for_transaction( - self, - transaction: Transaction, - private_key: PrivateKey, - public_key: PublicKey, + self, + transaction: Transaction, + private_key: PrivateKey, + public_key: PublicKey, ): ... class MsgBroadcasterWithPk: - def __init__( - self, - network: Network, - account_config: BroadcasterAccountConfig, - client: AsyncClient, - composer: Composer, - fee_calculator: TransactionFeeCalculator): + self, + network: Network, + account_config: BroadcasterAccountConfig, + client: AsyncClient, + composer: Composer, + fee_calculator: TransactionFeeCalculator, + ): self._network = network self._account_config = account_config self._client = client @@ -64,19 +63,16 @@ def __init__( @classmethod def new_using_simulation( - cls, - network: Network, - private_key: str, - client: Optional[AsyncClient] = None, - composer: Optional[Composer] = None, + cls, + network: Network, + private_key: str, + client: Optional[AsyncClient] = None, + composer: Optional[Composer] = None, ): client = client or AsyncClient(network=network) composer = composer or Composer(network=client.network.string()) account_config = StandardAccountBroadcasterConfig(private_key=private_key) - fee_calculator = SimulatedTransactionFeeCalculator( - client=client, - composer=composer - ) + fee_calculator = SimulatedTransactionFeeCalculator(client=client, composer=composer) instance = cls( network=network, account_config=account_config, @@ -88,19 +84,16 @@ def new_using_simulation( @classmethod def new_without_simulation( - cls, - network: Network, - private_key: str, - client: Optional[AsyncClient] = None, - composer: Optional[Composer] = None, + cls, + network: Network, + private_key: str, + client: Optional[AsyncClient] = None, + composer: Optional[Composer] = None, ): client = client or AsyncClient(network=network) composer = composer or Composer(network=client.network.string()) account_config = StandardAccountBroadcasterConfig(private_key=private_key) - fee_calculator = MessageBasedTransactionFeeCalculator( - client=client, - composer=composer - ) + fee_calculator = MessageBasedTransactionFeeCalculator(client=client, composer=composer) instance = cls( network=network, account_config=account_config, @@ -112,19 +105,16 @@ def new_without_simulation( @classmethod def new_for_grantee_account_using_simulation( - cls, - network: Network, - grantee_private_key: str, - client: Optional[AsyncClient] = None, - composer: Optional[Composer] = None, + cls, + network: Network, + grantee_private_key: str, + client: Optional[AsyncClient] = None, + composer: Optional[Composer] = None, ): client = client or AsyncClient(network=network) composer = composer or Composer(network=client.network.string()) account_config = GranteeAccountBroadcasterConfig(grantee_private_key=grantee_private_key, composer=composer) - fee_calculator = SimulatedTransactionFeeCalculator( - client=client, - composer=composer - ) + fee_calculator = SimulatedTransactionFeeCalculator(client=client, composer=composer) instance = cls( network=network, account_config=account_config, @@ -136,19 +126,16 @@ def new_for_grantee_account_using_simulation( @classmethod def new_for_grantee_account_without_simulation( - cls, - network: Network, - grantee_private_key: str, - client: Optional[AsyncClient] = None, - composer: Optional[Composer] = None, + cls, + network: Network, + grantee_private_key: str, + client: Optional[AsyncClient] = None, + composer: Optional[Composer] = None, ): client = client or AsyncClient(network=network) composer = composer or Composer(network=client.network.string()) account_config = GranteeAccountBroadcasterConfig(grantee_private_key=grantee_private_key, composer=composer) - fee_calculator = MessageBasedTransactionFeeCalculator( - client=client, - composer=composer - ) + fee_calculator = MessageBasedTransactionFeeCalculator(client=client, composer=composer) instance = cls( network=network, account_config=account_config, @@ -189,7 +176,6 @@ async def broadcast(self, messages: List[any_pb2.Any]): class StandardAccountBroadcasterConfig(BroadcasterAccountConfig): - def __init__(self, private_key: str): self._private_key = PrivateKey.from_hex(private_key) self._public_key = self._private_key.to_public_key() @@ -213,7 +199,6 @@ def messages_prepared_for_transaction(self, messages: List[any_pb2.Any]) -> List class GranteeAccountBroadcasterConfig(BroadcasterAccountConfig): - def __init__(self, grantee_private_key: str, composer: Composer): self._grantee_private_key = PrivateKey.from_hex(grantee_private_key) self._grantee_public_key = self._grantee_private_key.to_public_key() @@ -242,23 +227,23 @@ def messages_prepared_for_transaction(self, messages: List[any_pb2.Any]) -> List class SimulatedTransactionFeeCalculator(TransactionFeeCalculator): - def __init__( - self, - client: AsyncClient, - composer: Composer, - gas_price: Optional[int] = None, - gas_limit_adjustment_multiplier: Optional[Decimal] = None): + self, + client: AsyncClient, + composer: Composer, + gas_price: Optional[int] = None, + gas_limit_adjustment_multiplier: Optional[Decimal] = None, + ): self._client = client self._composer = composer self._gas_price = gas_price or self.DEFAULT_GAS_PRICE self._gas_limit_adjustment_multiplier = gas_limit_adjustment_multiplier or Decimal("1.3") async def configure_gas_fee_for_transaction( - self, - transaction: Transaction, - private_key: PrivateKey, - public_key: PublicKey, + self, + transaction: Transaction, + private_key: PrivateKey, + public_key: PublicKey, ): sim_sign_doc = transaction.get_sign_doc(public_key) sim_sig = private_key.sign(sim_sign_doc.SerializeToString()) @@ -285,20 +270,16 @@ async def configure_gas_fee_for_transaction( class MessageBasedTransactionFeeCalculator(TransactionFeeCalculator): TRANSACTION_GAS_LIMIT = 60_000 - def __init__( - self, - client: AsyncClient, - composer: Composer, - gas_price: Optional[int] = None): + def __init__(self, client: AsyncClient, composer: Composer, gas_price: Optional[int] = None): self._client = client self._composer = composer self._gas_price = gas_price or self.DEFAULT_GAS_PRICE async def configure_gas_fee_for_transaction( - self, - transaction: Transaction, - private_key: PrivateKey, - public_key: PublicKey, + self, + transaction: Transaction, + private_key: PrivateKey, + public_key: PublicKey, ): messages_gas_limit = math.ceil(self._calculate_gas_limit(messages=transaction.msgs)) transaction_gas_limit = messages_gas_limit + self.TRANSACTION_GAS_LIMIT diff --git a/pyinjective/core/gas_limit_estimator.py b/pyinjective/core/gas_limit_estimator.py index 8ec54acc..2bc5656c 100644 --- a/pyinjective/core/gas_limit_estimator.py +++ b/pyinjective/core/gas_limit_estimator.py @@ -19,9 +19,14 @@ def applies_to(cls, message: any_pb2.Any) -> bool: @classmethod def for_message(cls, message: any_pb2.Any): - estimator_class = next((estimator_subclass for estimator_subclass in cls.__subclasses__() - if estimator_subclass.applies_to(message=message)), - None) + estimator_class = next( + ( + estimator_subclass + for estimator_subclass in cls.__subclasses__() + if estimator_subclass.applies_to(message=message) + ), + None, + ) if estimator_class is None: estimator = DefaultGasLimitEstimator() else: @@ -180,15 +185,21 @@ def gas_limit(self) -> int: total += len(self._message.derivative_orders_to_cancel) * self.DERIVATIVE_ORDER_CANCELATION_GAS_LIMIT total += len(self._message.binary_options_orders_to_cancel) * self.DERIVATIVE_ORDER_CANCELATION_GAS_LIMIT - total += (len(self._message.spot_market_ids_to_cancel_all) - * self.CANCEL_ALL_SPOT_MARKET_GAS_LIMIT - * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS) - total += (len(self._message.derivative_market_ids_to_cancel_all) - * self.CANCEL_ALL_DERIVATIVE_MARKET_GAS_LIMIT - * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS) - total += (len(self._message.binary_options_market_ids_to_cancel_all) - * self.CANCEL_ALL_DERIVATIVE_MARKET_GAS_LIMIT - * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS) + total += ( + len(self._message.spot_market_ids_to_cancel_all) + * self.CANCEL_ALL_SPOT_MARKET_GAS_LIMIT + * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS + ) + total += ( + len(self._message.derivative_market_ids_to_cancel_all) + * self.CANCEL_ALL_DERIVATIVE_MARKET_GAS_LIMIT + * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS + ) + total += ( + len(self._message.binary_options_market_ids_to_cancel_all) + * self.CANCEL_ALL_DERIVATIVE_MARKET_GAS_LIMIT + * self.AVERAGE_CANCEL_ALL_AFFECTED_ORDERS + ) return total @@ -207,8 +218,9 @@ def applies_to(cls, message: any_pb2.Any) -> bool: return cls.message_type(message=message).endswith("MsgExec") def gas_limit(self) -> int: - total = sum([GasLimitEstimator.for_message(message=inner_message).gas_limit() - for inner_message in self._message.msgs]) + total = sum( + [GasLimitEstimator.for_message(message=inner_message).gas_limit() for inner_message in self._message.msgs] + ) total += self.DEFAULT_GAS_LIMIT return total @@ -218,7 +230,6 @@ def _message_class(self, message: any_pb2.Any): class PrivilegedExecuteContractGasLimitEstimator(GasLimitEstimator): - def __init__(self, message: any_pb2.Any): self._message = self._parsed_message(message=message) @@ -234,7 +245,6 @@ def _message_class(self, message: any_pb2.Any): class ExecuteContractGasLimitEstimator(GasLimitEstimator): - def __init__(self, message: any_pb2.Any): self._message = self._parsed_message(message=message) @@ -250,7 +260,6 @@ def _message_class(self, message: any_pb2.Any): class GeneralWasmGasLimitEstimator(GasLimitEstimator): - def __init__(self, message: any_pb2.Any): self._message = self._parsed_message(message=message) @@ -266,7 +275,6 @@ def _message_class(self, message: any_pb2.Any): class GovernanceGasLimitEstimator(GasLimitEstimator): - def __init__(self, message: any_pb2.Any): self._message = self._parsed_message(message=message) diff --git a/pyinjective/core/market.py b/pyinjective/core/market.py index a544880b..58e648bb 100644 --- a/pyinjective/core/market.py +++ b/pyinjective/core/market.py @@ -85,10 +85,7 @@ def margin_to_chain_format(self, human_readable_value: Decimal) -> Decimal: return extended_chain_formatted_value def calculate_margin_in_chain_format( - self, - human_readable_quantity: Decimal, - human_readable_price: Decimal, - leverage: Decimal + self, human_readable_quantity: Decimal, human_readable_price: Decimal, leverage: Decimal ) -> Decimal: chain_formatted_quantity = human_readable_quantity chain_formatted_price = human_readable_price * Decimal(f"1e{self.quote_token.decimals}") @@ -131,9 +128,9 @@ class BinaryOptionMarket: def quantity_to_chain_format(self, human_readable_value: Decimal, special_denom: Optional[Denom] = None) -> Decimal: # Binary option markets do not have a base market to provide the number of decimals decimals = 0 if special_denom is None else special_denom.base - min_quantity_tick_size = (self.min_quantity_tick_size - if special_denom is None - else special_denom.min_quantity_tick_size) + min_quantity_tick_size = ( + self.min_quantity_tick_size if special_denom is None else special_denom.min_quantity_tick_size + ) chain_formatted_value = human_readable_value * Decimal(f"1e{decimals}") quantized_value = chain_formatted_value // min_quantity_tick_size * min_quantity_tick_size extended_chain_formatted_value = quantized_value * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}") @@ -150,21 +147,21 @@ def price_to_chain_format(self, human_readable_value: Decimal, special_denom: Op return extended_chain_formatted_value def calculate_margin_in_chain_format( - self, - human_readable_quantity: Decimal, - human_readable_price: Decimal, - is_buy: bool, - special_denom: Optional[Denom] = None, + self, + human_readable_quantity: Decimal, + human_readable_price: Decimal, + is_buy: bool, + special_denom: Optional[Denom] = None, ) -> Decimal: quantity_decimals = 0 if special_denom is None else special_denom.base price_decimals = self.quote_token.decimals if special_denom is None else special_denom.quote - min_quantity_tick_size = (self.min_quantity_tick_size - if special_denom is None - else special_denom.min_quantity_tick_size) + min_quantity_tick_size = ( + self.min_quantity_tick_size if special_denom is None else special_denom.min_quantity_tick_size + ) price = human_readable_price if is_buy else 1 - human_readable_price chain_formatted_quantity = human_readable_quantity * Decimal(f"1e{quantity_decimals}") chain_formatted_price = price * Decimal(f"1e{price_decimals}") - margin = (chain_formatted_price * chain_formatted_quantity) + margin = chain_formatted_price * chain_formatted_quantity # We are using the min_quantity_tick_size to quantize the margin because that is the way margin is validated # in the chain (it might be changed to a min_notional in the future) quantized_margin = (margin // min_quantity_tick_size) * min_quantity_tick_size diff --git a/pyinjective/core/network.py b/pyinjective/core/network.py index 6b70fca6..930fafe0 100644 --- a/pyinjective/core/network.py +++ b/pyinjective/core/network.py @@ -27,7 +27,6 @@ async def exchange_metadata(self, metadata_query_provider: Callable) -> Tuple[Tu class KubernetesLoadBalancedCookieAssistant(CookieAssistant): - def __init__(self): self._chain_cookie: Optional[str] = None self._exchange_cookie: Optional[str] = None @@ -84,15 +83,13 @@ def _is_cookie_expired(self, cookie_data: str) -> bool: cookie = SimpleCookie() cookie.load(cookie_data) - expiration_time = datetime.datetime.strptime(cookie["GCLB"]["expires"], - "%a, %d-%b-%Y %H:%M:%S %Z").timestamp() + expiration_time = datetime.datetime.strptime(cookie["GCLB"]["expires"], "%a, %d-%b-%Y %H:%M:%S %Z").timestamp() timestamp_diff = expiration_time - time.time() return timestamp_diff < self.SESSION_RENEWAL_OFFSET class BareMetalLoadBalancedCookieAssistant(CookieAssistant): - def __init__(self): self._chain_cookie: Optional[str] = None self._exchange_cookie: Optional[str] = None @@ -239,7 +236,7 @@ def testnet(cls, node="lb"): fee_denom="inj", env="testnet", cookie_assistant=cookie_assistant, - use_secure_connection=use_secure_connection + use_secure_connection=use_secure_connection, ) @classmethod @@ -309,16 +306,16 @@ def local(cls): @classmethod def custom( - cls, - lcd_endpoint, - tm_websocket_endpoint, - grpc_endpoint, - grpc_exchange_endpoint, - grpc_explorer_endpoint, - chain_id, - env, - cookie_assistant: Optional[CookieAssistant] = None, - use_secure_connection: bool = False, + cls, + lcd_endpoint, + tm_websocket_endpoint, + grpc_endpoint, + grpc_exchange_endpoint, + grpc_explorer_endpoint, + chain_id, + env, + cookie_assistant: Optional[CookieAssistant] = None, + use_secure_connection: bool = False, ): assistant = cookie_assistant or DisabledCookieAssistant() return cls( @@ -331,7 +328,7 @@ def custom( fee_denom="inj", env=env, cookie_assistant=assistant, - use_secure_connection=use_secure_connection + use_secure_connection=use_secure_connection, ) def string(self): diff --git a/pyinjective/orderhash.py b/pyinjective/orderhash.py index 9fc850e6..dd6a43c6 100644 --- a/pyinjective/orderhash.py +++ b/pyinjective/orderhash.py @@ -43,14 +43,14 @@ class DerivativeOrder(EIP712Message): # domain_separator = EIP712_domain.hash_struct() -order_type_dict = {0: '\x00', 1: '\x01', 2: '\x02', 3: '\x03', 4: '\x04', 5: '\x05', 6: '\x06', 7: '\x07', 8: '\x08'} +order_type_dict = {0: "\x00", 1: "\x01", 2: "\x02", 3: "\x03", 4: "\x04", 5: "\x05", 6: "\x06", 7: "\x07", 8: "\x08"} class OrderHashResponse: def __init__( - self, - spot: [str] = None, - derivative: [str] = None, + self, + spot: [str] = None, + derivative: [str] = None, ): self.spot = spot self.derivative = derivative @@ -58,17 +58,17 @@ def __init__( class OrderHashManager: def __init__( - self, - address, - network, - subaccount_indexes: [int] = None, + self, + address, + network, + subaccount_indexes: [int] = None, ): self.address = address self.subacc_nonces = dict() for i in subaccount_indexes: subaccount_id = address.get_subaccount_id(index=i) - url = network.lcd_endpoint + '/injective/exchange/v1beta1/exchange/' + subaccount_id + url = network.lcd_endpoint + "/injective/exchange/v1beta1/exchange/" + subaccount_id res = requests.get(url=url) nonce = res.json()["nonce"] self.subacc_nonces[i] = [subaccount_id, nonce + 1] @@ -96,7 +96,7 @@ def compute_order_hashes(self, spot_orders, derivative_orders, subaccount_index) def param_to_backend_go(param) -> int: go_param = Decimal(param) / pow(10, 18) - return format(go_param, '.18f') + return format(go_param, ".18f") def parse_order_type(order): @@ -104,7 +104,7 @@ def parse_order_type(order): def build_eip712_msg(order, nonce): - if order.__class__.__name__ == 'SpotOrder': + if order.__class__.__name__ == "SpotOrder": go_price = param_to_backend_go(order.order_info.price) go_trigger_price = param_to_backend_go(order.trigger_price) go_quantity = param_to_backend_go(order.order_info.quantity) @@ -115,13 +115,13 @@ def build_eip712_msg(order, nonce): SubaccountId=order.order_info.subaccount_id, FeeRecipient=order.order_info.fee_recipient, Price=go_price, - Quantity=go_quantity + Quantity=go_quantity, ), Salt=str(nonce), OrderType=go_order_type, - TriggerPrice=go_trigger_price + TriggerPrice=go_trigger_price, ) - if order.__class__.__name__ == 'DerivativeOrder': + if order.__class__.__name__ == "DerivativeOrder": go_price = param_to_backend_go(order.order_info.price) go_trigger_price = param_to_backend_go(order.trigger_price) go_quantity = param_to_backend_go(order.order_info.quantity) @@ -133,12 +133,12 @@ def build_eip712_msg(order, nonce): SubaccountId=order.order_info.subaccount_id, FeeRecipient=order.order_info.fee_recipient, Price=go_price, - Quantity=go_quantity + Quantity=go_quantity, ), Salt=str(nonce), OrderType=go_order_type, TriggerPrice=go_trigger_price, - Margin=go_margin + Margin=go_margin, ) diff --git a/pyinjective/sendtocosmos.py b/pyinjective/sendtocosmos.py index 208dd078..043910b6 100644 --- a/pyinjective/sendtocosmos.py +++ b/pyinjective/sendtocosmos.py @@ -9,23 +9,23 @@ def __init__(self, network: str): self.network = network def sendToInjective( - self, - ethereum_endpoint: str, - private_key: str, - token_contract: str, - receiver: str, - amount: float, - maxFeePerGas: int, - maxPriorityFeePerGas: int, - peggo_abi: str, - data: str, - decimals=18 + self, + ethereum_endpoint: str, + private_key: str, + token_contract: str, + receiver: str, + amount: float, + maxFeePerGas: int, + maxPriorityFeePerGas: int, + peggo_abi: str, + data: str, + decimals=18, ): - if self.network == 'testnet': + if self.network == "testnet": peggy_proxy_address = "0xd2C6753F6B1783EF0a3857275e16e79D91b539a3" - elif self.network == 'mainnet': + elif self.network == "mainnet": peggy_proxy_address = "0xF955C57f9EA9Dc8781965FEaE0b6A2acE2BAD6f3" - elif self.network == 'devnet': + elif self.network == "devnet": peggy_proxy_address = "0x4F38F75606d046819638f909b66B112aF1095e8d" else: LoggerProvider().logger_for_class(logging_class=self.__class__).info("Network is not supported") @@ -39,7 +39,7 @@ def sendToInjective( receiver_ethereum_address = Address.get_ethereum_address(receiver_address) receiver_address_checksum = web3.to_checksum_address(receiver_ethereum_address) receiver_slice = receiver_address_checksum[2:] - receiver_padded_address = '0x' + receiver_slice.zfill(64) + receiver_padded_address = "0x" + receiver_slice.zfill(64) destination = web3.to_bytes(hexstr=receiver_padded_address) @@ -50,24 +50,18 @@ def sendToInjective( amount_to_send = int(amount * pow(10, decimals)) gas = contract.functions.sendToInjective( - token_contract_address, - destination, - amount_to_send, - data - ).estimate_gas({'from': sender_address_checksum}) + token_contract_address, destination, amount_to_send, data + ).estimate_gas({"from": sender_address_checksum}) transaction_body = { - 'nonce': nonce, - 'gas': gas, - 'maxFeePerGas': web3.to_wei(maxFeePerGas, 'gwei'), - 'maxPriorityFeePerGas': web3.to_wei(maxPriorityFeePerGas, 'gwei'), + "nonce": nonce, + "gas": gas, + "maxFeePerGas": web3.to_wei(maxFeePerGas, "gwei"), + "maxPriorityFeePerGas": web3.to_wei(maxPriorityFeePerGas, "gwei"), } tx = contract.functions.sendToInjective( - token_contract_address, - destination, - amount_to_send, - data + token_contract_address, destination, amount_to_send, data ).buildTransaction(transaction_body) signed_tx = web3.eth.account.signTransaction(tx, private_key=private_key) @@ -75,8 +69,10 @@ def sendToInjective( try: tx_hash = web3.eth.send_raw_transaction(signed_tx.rawTransaction) LoggerProvider().logger_for_class(logging_class=self.__class__).info( - f"Transferred {amount} {token_contract} from {sender_ethereum_address} to {receiver}") + f"Transferred {amount} {token_contract} from {sender_ethereum_address} to {receiver}" + ) LoggerProvider().logger_for_class(logging_class=self.__class__).info( - "Transaction hash: {}".format(Web3.to_hex(tx_hash))) + "Transaction hash: {}".format(Web3.to_hex(tx_hash)) + ) except Exception as e: LoggerProvider().logger_for_class(logging_class=self.__class__).info("Transaction failed {}".format(e)) diff --git a/pyinjective/transaction.py b/pyinjective/transaction.py index 58348771..f54d5649 100644 --- a/pyinjective/transaction.py +++ b/pyinjective/transaction.py @@ -20,7 +20,7 @@ def __init__( fee: List[Coin] = None, gas: int = 0, memo: str = "", - timeout_height: int = 0 + timeout_height: int = 0, ): self.msgs = self.__convert_msgs(msgs) if msgs is not None else [] self.account_num = account_num @@ -75,11 +75,7 @@ def with_timeout_height(self, timeout_height: int) -> "Transaction": return self def __generate_info(self, public_key: PublicKey = None) -> Tuple[str, str]: - body = cosmos_tx_type.TxBody( - messages=self.msgs, - memo=self.memo, - timeout_height=self.timeout_height - ) + body = cosmos_tx_type.TxBody(messages=self.msgs, memo=self.memo, timeout_height=self.timeout_height) body_bytes = body.SerializeToString() mode_info = cosmos_tx_type.ModeInfo(single=cosmos_tx_type.ModeInfo.Single(mode=tx_sign.SIGN_MODE_DIRECT)) diff --git a/pyinjective/utils/fetch_metadata.py b/pyinjective/utils/fetch_metadata.py index 71d008a8..715e43c5 100644 --- a/pyinjective/utils/fetch_metadata.py +++ b/pyinjective/utils/fetch_metadata.py @@ -20,62 +20,67 @@ """ -testnet_denom_output = '' -mainnet_denom_output = '' +testnet_denom_output = "" +mainnet_denom_output = "" async def fetch_denom(network) -> str: - denom_output = '' + denom_output = "" symbols = {} # fetch meta data for spot markets client = AsyncClient(network) - status = 'active' + status = "active" mresp = await client.get_spot_markets(market_status=status) for market in mresp.markets: # append symbols to dict - if market.base_token_meta.SerializeToString() != '': + if market.base_token_meta.SerializeToString() != "": symbols[market.base_token_meta.symbol] = (market.base_denom, market.base_token_meta.decimals) - if market.quote_token_meta.SerializeToString() != '': + if market.quote_token_meta.SerializeToString() != "": symbols[market.quote_token_meta.symbol] = (market.base_denom, market.quote_token_meta.decimals) # format into ini entry - min_display_price_tick_size = (float(market.min_price_tick_size) - / pow(10, market.quote_token_meta.decimals - market.base_token_meta.decimals)) + min_display_price_tick_size = float(market.min_price_tick_size) / pow( + 10, market.quote_token_meta.decimals - market.base_token_meta.decimals + ) min_display_quantity_tick_size = float(market.min_quantity_tick_size) / pow(10, market.base_token_meta.decimals) config = metadata_template.format( market.market_id, - network.string().capitalize(), 'Spot', market.ticker, + network.string().capitalize(), + "Spot", + market.ticker, market.base_token_meta.decimals, market.quote_token_meta.decimals, market.min_price_tick_size, min_display_price_tick_size, market.min_quantity_tick_size, - min_display_quantity_tick_size + min_display_quantity_tick_size, ) denom_output += config # fetch meta data for derivative markets client = AsyncClient(network) - status = 'active' + status = "active" mresp = await client.get_derivative_markets(market_status=status) for market in mresp.markets: # append symbols to dict - if market.quote_token_meta.SerializeToString() != '': + if market.quote_token_meta.SerializeToString() != "": symbols[market.quote_token_meta.symbol] = (market.quote_denom, market.quote_token_meta.decimals) # format into ini entry min_display_price_tick_size = float(market.min_price_tick_size) / pow(10, market.quote_token_meta.decimals) config = metadata_template.format( market.market_id, - network.string().capitalize(), 'Derivative', market.ticker, + network.string().capitalize(), + "Derivative", + market.ticker, 0, market.quote_token_meta.decimals, market.min_price_tick_size, min_display_price_tick_size, market.min_quantity_tick_size, - market.min_quantity_tick_size + market.min_quantity_tick_size, ) denom_output += config @@ -99,5 +104,6 @@ async def main() -> None: with open("../denoms_mainnet.ini", "w") as text_file: text_file.write(data) -if __name__ == '__main__': + +if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(main()) diff --git a/pyinjective/utils/logger.py b/pyinjective/utils/logger.py index 7562e95d..01f1dd09 100644 --- a/pyinjective/utils/logger.py +++ b/pyinjective/utils/logger.py @@ -8,7 +8,6 @@ class LoggerProvider: - def logger(self) -> Logger: return logging.getLogger(__name__) diff --git a/pyinjective/utils/metadata_validation.py b/pyinjective/utils/metadata_validation.py index ef357114..892ef8d5 100644 --- a/pyinjective/utils/metadata_validation.py +++ b/pyinjective/utils/metadata_validation.py @@ -27,45 +27,79 @@ def find_metadata_inconsistencies(network: Network) -> Tuple[List[Any]]: denom = constant.Denom.load_market(network=network.string(), market_id=config_key) if config_key in spot_markets: market: SpotMarket = spot_markets[config_key] - if (market.base_token.decimals != denom.base - or market.quote_token.decimals != denom.quote - or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) - or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size))): - markets_with_diffs.append([ - {"denom-market": config_key, "base_decimals": denom.base, "quote_decimals": denom.quote, - "min_quantity_tick_size": denom.min_quantity_tick_size, - "min_price_tick_size": denom.min_price_tick_size}, - {"newer-market": market.id, "base_decimals": market.base_token.decimals, - "quote_decimals": market.quote_token.decimals, - "min_quantity_tick_size": float(market.min_quantity_tick_size), - "min_price_tick_size": float(market.min_price_tick_size), "ticker": market.ticker}, - ]) + if ( + market.base_token.decimals != denom.base + or market.quote_token.decimals != denom.quote + or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) + or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size)) + ): + markets_with_diffs.append( + [ + { + "denom-market": config_key, + "base_decimals": denom.base, + "quote_decimals": denom.quote, + "min_quantity_tick_size": denom.min_quantity_tick_size, + "min_price_tick_size": denom.min_price_tick_size, + }, + { + "newer-market": market.id, + "base_decimals": market.base_token.decimals, + "quote_decimals": market.quote_token.decimals, + "min_quantity_tick_size": float(market.min_quantity_tick_size), + "min_price_tick_size": float(market.min_price_tick_size), + "ticker": market.ticker, + }, + ] + ) elif config_key in derivative_markets: market: DerivativeMarket = derivative_markets[config_key] - if (market.quote_token.decimals != denom.quote - or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) - or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size))): - markets_with_diffs.append([ - {"denom-market": config_key, "quote_decimals": denom.quote, - "min_quantity_tick_size": denom.min_quantity_tick_size, - "min_price_tick_size": denom.min_price_tick_size}, - {"newer-market": market.id, "quote_decimals": market.quote_token.decimals, - "min_quantity_tick_size": float(market.min_quantity_tick_size), - "min_price_tick_size": float(market.min_price_tick_size), "ticker": market.ticker}, - ]) + if ( + market.quote_token.decimals != denom.quote + or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) + or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size)) + ): + markets_with_diffs.append( + [ + { + "denom-market": config_key, + "quote_decimals": denom.quote, + "min_quantity_tick_size": denom.min_quantity_tick_size, + "min_price_tick_size": denom.min_price_tick_size, + }, + { + "newer-market": market.id, + "quote_decimals": market.quote_token.decimals, + "min_quantity_tick_size": float(market.min_quantity_tick_size), + "min_price_tick_size": float(market.min_price_tick_size), + "ticker": market.ticker, + }, + ] + ) elif config_key in binary_option_markets: market: BinaryOptionMarket = binary_option_markets[config_key] - if (market.quote_token.decimals != denom.quote - or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) - or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size))): - markets_with_diffs.append([ - {"denom-market": config_key, "quote_decimals": denom.quote, - "min_quantity_tick_size": denom.min_quantity_tick_size, - "min_price_tick_size": denom.min_price_tick_size}, - {"newer-market": market.id, "quote_decimals": market.quote_token.decimals, - "min_quantity_tick_size": float(market.min_quantity_tick_size), - "min_price_tick_size": float(market.min_price_tick_size), "ticker": market.ticker}, - ]) + if ( + market.quote_token.decimals != denom.quote + or market.min_price_tick_size != Decimal(str(denom.min_price_tick_size)) + or market.min_quantity_tick_size != Decimal(str(denom.min_quantity_tick_size)) + ): + markets_with_diffs.append( + [ + { + "denom-market": config_key, + "quote_decimals": denom.quote, + "min_quantity_tick_size": denom.min_quantity_tick_size, + "min_price_tick_size": denom.min_price_tick_size, + }, + { + "newer-market": market.id, + "quote_decimals": market.quote_token.decimals, + "min_quantity_tick_size": float(market.min_quantity_tick_size), + "min_price_tick_size": float(market.min_price_tick_size), + "ticker": market.ticker, + }, + ] + ) else: markets_not_found.append({"denom-market": config_key, "description": denom.description}) @@ -76,24 +110,28 @@ def find_metadata_inconsistencies(network: Network) -> Tuple[List[Any]]: peggy_denom, decimals = constant.Denom.load_peggy_denom(network=network.string(), symbol=config_key) if config_key in all_tokens: token = all_tokens[config_key] - if (token.denom != peggy_denom - or token.decimals != decimals): - peggy_denoms_with_diffs.append([ - {"denom_token": config_key, "peggy_denom": peggy_denom, "decimals": decimals}, - {"newer_token": token.symbol, "peggy_denom": token.denom, "decimals": token.decimals} - ]) + if token.denom != peggy_denom or token.decimals != decimals: + peggy_denoms_with_diffs.append( + [ + {"denom_token": config_key, "peggy_denom": peggy_denom, "decimals": decimals}, + {"newer_token": token.symbol, "peggy_denom": token.denom, "decimals": token.decimals}, + ] + ) else: peggy_denoms_not_found.append( - {"denom_token": config_key, "peggy_denom": peggy_denom, "decimals": decimals}) + {"denom_token": config_key, "peggy_denom": peggy_denom, "decimals": decimals} + ) return markets_with_diffs, markets_not_found, peggy_denoms_with_diffs, peggy_denoms_not_found def print_metadata_mismatches(network: Network): - (markets_with_diffs, - markets_not_found, - peggy_denoms_with_diffs, - peggy_denoms_not_found) = find_metadata_inconsistencies(network=network) + ( + markets_with_diffs, + markets_not_found, + peggy_denoms_with_diffs, + peggy_denoms_not_found, + ) = find_metadata_inconsistencies(network=network) for diff_pair in markets_with_diffs: print(f"{diff_pair[0]}\n{diff_pair[1]}") diff --git a/pyinjective/wallet.py b/pyinjective/wallet.py index 06e3f02f..991ba744 100644 --- a/pyinjective/wallet.py +++ b/pyinjective/wallet.py @@ -255,39 +255,40 @@ def to_hex(self) -> str: def get_subaccount_id(self, index: int) -> str: """Return a hex representation of address""" - id = index.to_bytes(12, byteorder='big').hex() - return '0x' + self.addr.hex() + id + id = index.to_bytes(12, byteorder="big").hex() + return "0x" + self.addr.hex() + id def get_ethereum_address(self) -> str: - return '0x' + self.addr.hex() + return "0x" + self.addr.hex() async def async_init_num_seq(self, lcd_endpoint: str) -> "Address": async with aiohttp.ClientSession() as session: async with session.request( - 'GET', lcd_endpoint + '/cosmos/auth/v1beta1/accounts/' + self.to_acc_bech32(), - headers={'Accept-Encoding': 'application/json'}, + "GET", + lcd_endpoint + "/cosmos/auth/v1beta1/accounts/" + self.to_acc_bech32(), + headers={"Accept-Encoding": "application/json"}, ) as response: if response.status != 200: print(await response.text()) raise ValueError("HTTP response status", response.status) resp = json.loads(await response.text()) - acc = resp['account']['base_account'] - self.number = int(acc['account_number']) - self.sequence = int(acc['sequence']) + acc = resp["account"]["base_account"] + self.number = int(acc["account_number"]) + self.sequence = int(acc["sequence"]) return self def init_num_seq(self, lcd_endpoint: str) -> "Address": response = requests.get( url=f"{lcd_endpoint}/cosmos/auth/v1beta1/accounts/{self.to_acc_bech32()}", - headers={'Accept-Encoding': 'application/json'} + headers={"Accept-Encoding": "application/json"}, ) if response.status_code != 200: raise ValueError("HTTP response status", response.status_code) resp = json.loads(response.text) - acc = resp['account']['base_account'] - self.number = int(acc['account_number']) - self.sequence = int(acc['sequence']) + acc = resp["account"]["base_account"] + self.number = int(acc["account_number"]) + self.sequence = int(acc["sequence"]) return self def get_sequence(self): diff --git a/pyproject.toml b/pyproject.toml index 06697c52..67d925f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ requests-mock = "*" pre-commit = "^3.4.0" flakeheaven = "^3.3.0" isort = "^5.12.0" +black = "^23.9.1" [tool.flakeheaven] @@ -67,6 +68,20 @@ line_length = 120 skip_glob = ["pyinjective/proto/*", ".idea/*"] +[tool.black] +line-length = 120 +target-version = ["py39", "py310", "py311"] +# 'extend-exclude' excludes files or directories in addition to the defaults +extend-exclude = ''' +# A regex preceded with ^/ will apply only to files and directories +# in the root of the project. +( + ^pyinjective/proto/.* + | \.idea/.* +) +''' + + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tests/core/test_gas_limit_estimator.py b/tests/core/test_gas_limit_estimator.py index da043c2a..a2838f0b 100644 --- a/tests/core/test_gas_limit_estimator.py +++ b/tests/core/test_gas_limit_estimator.py @@ -10,21 +10,15 @@ class TestGasLimitEstimator: - def test_estimation_for_message_without_applying_rule(self): composer = Composer(network="testnet") - message = composer.MsgSend( - from_address="from_address", - to_address="to_address", - amount=1, - denom='INJ' - ) + message = composer.MsgSend(from_address="from_address", to_address="to_address", amount=1, denom="INJ") estimator = GasLimitEstimator.for_message(message=message) expected_message_gas_limit = 150_000 - assert(expected_message_gas_limit == estimator.gas_limit()) + assert expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_create_spot_limit_orders(self): spot_market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -37,7 +31,7 @@ def test_estimation_for_batch_create_spot_limit_orders(self): price=5, quantity=1, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id, @@ -46,19 +40,16 @@ def test_estimation_for_batch_create_spot_limit_orders(self): price=4, quantity=1, is_buy=True, - is_po=False + is_po=False, ), ] - message = composer.MsgBatchCreateSpotLimitOrders( - sender="sender", - orders=orders - ) + message = composer.MsgBatchCreateSpotLimitOrders(sender="sender", orders=orders) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 45000 expected_message_gas_limit = 5000 - assert((expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_cancel_spot_orders(self): spot_market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -67,29 +58,26 @@ def test_estimation_for_batch_cancel_spot_orders(self): composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", ), composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] - message = composer.MsgBatchCancelSpotOrders( - sender="sender", - data=orders - ) + message = composer.MsgBatchCancelSpotOrders(sender="sender", data=orders) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 45000 expected_message_gas_limit = 5000 - assert((expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_create_derivative_limit_orders(self): market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" @@ -103,7 +91,7 @@ def test_estimation_for_batch_create_derivative_limit_orders(self): quantity=1, leverage=1, is_buy=True, - is_po=False + is_po=False, ), composer.DerivativeOrder( market_id=market_id, @@ -113,19 +101,16 @@ def test_estimation_for_batch_create_derivative_limit_orders(self): quantity=1, leverage=1, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ), ] - message = composer.MsgBatchCreateDerivativeLimitOrders( - sender="sender", - orders=orders - ) + message = composer.MsgBatchCreateDerivativeLimitOrders(sender="sender", orders=orders) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 60_000 expected_message_gas_limit = 5000 - assert((expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_cancel_derivative_orders(self): spot_market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -134,29 +119,26 @@ def test_estimation_for_batch_cancel_derivative_orders(self): composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", ), composer.OrderData( market_id=spot_market_id, subaccount_id="subaccount_id", - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] - message = composer.MsgBatchCancelDerivativeOrders( - sender="sender", - data=orders - ) + message = composer.MsgBatchCancelDerivativeOrders(sender="sender", data=orders) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 55_000 expected_message_gas_limit = 5000 - assert((expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_create_spot_orders(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -169,7 +151,7 @@ def test_estimation_for_batch_update_orders_to_create_spot_orders(self): price=5, quantity=1, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=market_id, @@ -178,7 +160,7 @@ def test_estimation_for_batch_update_orders_to_create_spot_orders(self): price=4, quantity=1, is_buy=True, - is_po=False + is_po=False, ), ] message = composer.MsgBatchUpdateOrders( @@ -186,14 +168,14 @@ def test_estimation_for_batch_update_orders_to_create_spot_orders(self): derivative_orders_to_create=[], spot_orders_to_create=orders, derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 40_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_create_derivative_orders(self): market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" @@ -207,7 +189,7 @@ def test_estimation_for_batch_update_orders_to_create_derivative_orders(self): quantity=1, leverage=1, is_buy=True, - is_po=False + is_po=False, ), composer.DerivativeOrder( market_id=market_id, @@ -217,7 +199,7 @@ def test_estimation_for_batch_update_orders_to_create_derivative_orders(self): quantity=1, leverage=1, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ), ] message = composer.MsgBatchUpdateOrders( @@ -225,14 +207,14 @@ def test_estimation_for_batch_update_orders_to_create_derivative_orders(self): derivative_orders_to_create=orders, spot_orders_to_create=[], derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 60_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_create_binary_orders(self, usdt_token): market_id = "0x230dcce315364ff6360097838701b14713e2f4007d704df20ed3d81d09eec957" @@ -264,7 +246,7 @@ def test_estimation_for_batch_update_orders_to_create_binary_orders(self, usdt_t quantity=1, leverage=1, is_buy=True, - is_po=False + is_po=False, ), composer.BinaryOptionsOrder( market_id=market_id, @@ -274,7 +256,7 @@ def test_estimation_for_batch_update_orders_to_create_binary_orders(self, usdt_t quantity=1, leverage=1, is_buy=False, - is_reduce_only=False + is_reduce_only=False, ), ] message = composer.MsgBatchUpdateOrders( @@ -283,14 +265,14 @@ def test_estimation_for_batch_update_orders_to_create_binary_orders(self, usdt_t spot_orders_to_create=[], binary_options_orders_to_create=orders, derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 60_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 2) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_spot_orders(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -299,32 +281,32 @@ def test_estimation_for_batch_update_orders_to_cancel_spot_orders(self): composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] message = composer.MsgBatchUpdateOrders( sender="senders", derivative_orders_to_create=[], spot_orders_to_create=[], derivative_orders_to_cancel=[], - spot_orders_to_cancel=orders + spot_orders_to_cancel=orders, ) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 45_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_derivative_orders(self): market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" @@ -333,32 +315,32 @@ def test_estimation_for_batch_update_orders_to_cancel_derivative_orders(self): composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] message = composer.MsgBatchUpdateOrders( sender="senders", derivative_orders_to_create=[], spot_orders_to_create=[], derivative_orders_to_cancel=orders, - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_order_gas_limit = 55_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_binary_orders(self): market_id = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" @@ -367,18 +349,18 @@ def test_estimation_for_batch_update_orders_to_cancel_binary_orders(self): composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d" + order_hash="0x3870fbdd91f07d54425147b1bb96404f4f043ba6335b422a6d494d285b387f2d", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2" + order_hash="0x222daa22f60fe9f075ed0ca583459e121c23e64431c3fbffdedda04598ede0d2", ), composer.OrderData( market_id=market_id, subaccount_id="subaccount_id", - order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5" - ) + order_hash="0x7ee76255d7ca763c56b0eab9828fca89fdd3739645501c8a80f58b62b4f76da5", + ), ] message = composer.MsgBatchUpdateOrders( sender="senders", @@ -393,7 +375,7 @@ def test_estimation_for_batch_update_orders_to_cancel_binary_orders(self): expected_order_gas_limit = 55_000 expected_message_gas_limit = 10_000 - assert((expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit()) + assert (expected_order_gas_limit * 3) + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_all_for_spot_market(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -406,14 +388,14 @@ def test_estimation_for_batch_update_orders_to_cancel_all_for_spot_market(self): derivative_orders_to_create=[], spot_orders_to_create=[], derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_gas_limit = 35_000 * 20 expected_message_gas_limit = 10_000 - assert(expected_gas_limit + expected_message_gas_limit == estimator.gas_limit()) + assert expected_gas_limit + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_all_for_derivative_market(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -426,14 +408,14 @@ def test_estimation_for_batch_update_orders_to_cancel_all_for_derivative_market( derivative_orders_to_create=[], spot_orders_to_create=[], derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_gas_limit = 45_000 * 20 expected_message_gas_limit = 10_000 - assert(expected_gas_limit + expected_message_gas_limit == estimator.gas_limit()) + assert expected_gas_limit + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_batch_update_orders_to_cancel_all_for_binary_options_market(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -446,14 +428,14 @@ def test_estimation_for_batch_update_orders_to_cancel_all_for_binary_options_mar derivative_orders_to_create=[], spot_orders_to_create=[], derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] + spot_orders_to_cancel=[], ) estimator = GasLimitEstimator.for_message(message=message) expected_gas_limit = 45_000 * 20 expected_message_gas_limit = 10_000 - assert(expected_gas_limit + expected_message_gas_limit == estimator.gas_limit()) + assert expected_gas_limit + expected_message_gas_limit == estimator.gas_limit() def test_estimation_for_exec_message(self): market_id = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe" @@ -466,7 +448,7 @@ def test_estimation_for_exec_message(self): price=5, quantity=1, is_buy=True, - is_po=False + is_po=False, ), ] inner_message = composer.MsgBatchUpdateOrders( @@ -474,12 +456,9 @@ def test_estimation_for_exec_message(self): derivative_orders_to_create=[], spot_orders_to_create=orders, derivative_orders_to_cancel=[], - spot_orders_to_cancel=[] - ) - message = composer.MsgExec( - grantee="grantee", - msgs=[inner_message] + spot_orders_to_cancel=[], ) + message = composer.MsgExec(grantee="grantee", msgs=[inner_message]) estimator = GasLimitEstimator.for_message(message=message) @@ -487,10 +466,10 @@ def test_estimation_for_exec_message(self): expected_inner_message_gas_limit = 10_000 expected_exec_message_gas_limit = 5_000 - assert(expected_order_gas_limit - + expected_inner_message_gas_limit - + expected_exec_message_gas_limit - == estimator.gas_limit()) + assert ( + expected_order_gas_limit + expected_inner_message_gas_limit + expected_exec_message_gas_limit + == estimator.gas_limit() + ) def test_estimation_for_privileged_execute_contract_message(self): message = injective_exchange_tx_pb.MsgPrivilegedExecuteContract() @@ -498,7 +477,7 @@ def test_estimation_for_privileged_execute_contract_message(self): expected_gas_limit = 900_000 - assert(expected_gas_limit == estimator.gas_limit()) + assert expected_gas_limit == estimator.gas_limit() def test_estimation_for_execute_contract_message(self): composer = Composer(network="testnet") @@ -511,7 +490,7 @@ def test_estimation_for_execute_contract_message(self): expected_gas_limit = 375_000 - assert(expected_gas_limit == estimator.gas_limit()) + assert expected_gas_limit == estimator.gas_limit() def test_estimation_for_wasm_message(self): message = wasm_tx_pb.MsgInstantiateContract2() @@ -519,7 +498,7 @@ def test_estimation_for_wasm_message(self): expected_gas_limit = 225_000 - assert(expected_gas_limit == estimator.gas_limit()) + assert expected_gas_limit == estimator.gas_limit() def test_estimation_for_governance_message(self): message = gov_tx_pb.MsgDeposit() @@ -527,7 +506,7 @@ def test_estimation_for_governance_message(self): expected_gas_limit = 2_250_000 - assert(expected_gas_limit == estimator.gas_limit()) + assert expected_gas_limit == estimator.gas_limit() def test_estimation_for_generic_exchange_message(self): composer = Composer(network="testnet") @@ -539,10 +518,10 @@ def test_estimation_for_generic_exchange_message(self): price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) estimator = GasLimitEstimator.for_message(message=message) expected_gas_limit = 100_000 - assert(expected_gas_limit == estimator.gas_limit()) + assert expected_gas_limit == estimator.gas_limit() diff --git a/tests/core/test_market.py b/tests/core/test_market.py index 68216823..003f39a2 100644 --- a/tests/core/test_market.py +++ b/tests/core/test_market.py @@ -11,17 +11,17 @@ class TestSpotMarket: - def test_convert_quantity_to_chain_format(self, inj_usdt_spot_market: SpotMarket): original_quantity = Decimal("123.456789") chain_value = inj_usdt_spot_market.quantity_to_chain_format(human_readable_value=original_quantity) expected_value = original_quantity * Decimal(f"1e{inj_usdt_spot_market.base_token.decimals}") - quantized_value = ((expected_value // inj_usdt_spot_market.min_quantity_tick_size) - * inj_usdt_spot_market.min_quantity_tick_size) + quantized_value = ( + expected_value // inj_usdt_spot_market.min_quantity_tick_size + ) * inj_usdt_spot_market.min_quantity_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_price_to_chain_format(self, inj_usdt_spot_market: SpotMarket): original_quantity = Decimal("123.456789") @@ -29,11 +29,12 @@ def test_convert_price_to_chain_format(self, inj_usdt_spot_market: SpotMarket): chain_value = inj_usdt_spot_market.price_to_chain_format(human_readable_value=original_quantity) price_decimals = inj_usdt_spot_market.quote_token.decimals - inj_usdt_spot_market.base_token.decimals expected_value = original_quantity * Decimal(f"1e{price_decimals}") - quantized_value = ((expected_value // inj_usdt_spot_market.min_price_tick_size) - * inj_usdt_spot_market.min_price_tick_size) + quantized_value = ( + expected_value // inj_usdt_spot_market.min_price_tick_size + ) * inj_usdt_spot_market.min_price_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_quantity_from_chain_format(self, inj_usdt_spot_market: SpotMarket): expected_quantity = Decimal("123.456") @@ -41,7 +42,7 @@ def test_convert_quantity_from_chain_format(self, inj_usdt_spot_market: SpotMark chain_format_quantity = expected_quantity * Decimal(f"1e{inj_usdt_spot_market.base_token.decimals}") human_readable_quantity = inj_usdt_spot_market.quantity_from_chain_format(chain_value=chain_format_quantity) - assert (expected_quantity == human_readable_quantity) + assert expected_quantity == human_readable_quantity def test_convert_price_from_chain_format(self, inj_usdt_spot_market: SpotMarket): expected_price = Decimal("123.456") @@ -50,20 +51,20 @@ def test_convert_price_from_chain_format(self, inj_usdt_spot_market: SpotMarket) chain_format_price = expected_price * Decimal(f"1e{price_decimals}") human_readable_price = inj_usdt_spot_market.price_from_chain_format(chain_value=chain_format_price) - assert (expected_price == human_readable_price) + assert expected_price == human_readable_price class TestDerivativeMarket: - def test_convert_quantity_to_chain_format(self, btc_usdt_perp_market: DerivativeMarket): original_quantity = Decimal("123.456789") chain_value = btc_usdt_perp_market.quantity_to_chain_format(human_readable_value=original_quantity) - quantized_value = ((original_quantity // btc_usdt_perp_market.min_quantity_tick_size) - * btc_usdt_perp_market.min_quantity_tick_size) + quantized_value = ( + original_quantity // btc_usdt_perp_market.min_quantity_tick_size + ) * btc_usdt_perp_market.min_quantity_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_price_to_chain_format(self, btc_usdt_perp_market: DerivativeMarket): original_quantity = Decimal("123.456789") @@ -71,11 +72,12 @@ def test_convert_price_to_chain_format(self, btc_usdt_perp_market: DerivativeMar chain_value = btc_usdt_perp_market.price_to_chain_format(human_readable_value=original_quantity) price_decimals = btc_usdt_perp_market.quote_token.decimals expected_value = original_quantity * Decimal(f"1e{price_decimals}") - quantized_value = ((expected_value // btc_usdt_perp_market.min_price_tick_size) - * btc_usdt_perp_market.min_price_tick_size) + quantized_value = ( + expected_value // btc_usdt_perp_market.min_price_tick_size + ) * btc_usdt_perp_market.min_price_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_margin_to_chain_format(self, btc_usdt_perp_market: DerivativeMarket): original_quantity = Decimal("123.456789") @@ -83,11 +85,12 @@ def test_convert_margin_to_chain_format(self, btc_usdt_perp_market: DerivativeMa chain_value = btc_usdt_perp_market.margin_to_chain_format(human_readable_value=original_quantity) margin_decimals = btc_usdt_perp_market.quote_token.decimals expected_value = original_quantity * Decimal(f"1e{margin_decimals}") - quantized_value = ((expected_value // btc_usdt_perp_market.min_quantity_tick_size) - * btc_usdt_perp_market.min_quantity_tick_size) + quantized_value = ( + expected_value // btc_usdt_perp_market.min_quantity_tick_size + ) * btc_usdt_perp_market.min_quantity_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_quantity_from_chain_format(self, btc_usdt_perp_market: DerivativeMarket): expected_quantity = Decimal("123.456") @@ -95,7 +98,7 @@ def test_convert_quantity_from_chain_format(self, btc_usdt_perp_market: Derivati chain_format_quantity = expected_quantity human_readable_quantity = btc_usdt_perp_market.quantity_from_chain_format(chain_value=chain_format_quantity) - assert (expected_quantity == human_readable_quantity) + assert expected_quantity == human_readable_quantity def test_convert_price_from_chain_format(self, btc_usdt_perp_market: DerivativeMarket): expected_price = Decimal("123.456") @@ -104,7 +107,7 @@ def test_convert_price_from_chain_format(self, btc_usdt_perp_market: DerivativeM chain_format_price = expected_price * Decimal(f"1e{price_decimals}") human_readable_price = btc_usdt_perp_market.price_from_chain_format(chain_value=chain_format_price) - assert (expected_price == human_readable_price) + assert expected_price == human_readable_price def test_convert_margin_from_chain_format(self, btc_usdt_perp_market: DerivativeMarket): expected_margin = Decimal("123.456") @@ -113,11 +116,10 @@ def test_convert_margin_from_chain_format(self, btc_usdt_perp_market: Derivative chain_format_margin = expected_margin * Decimal(f"1e{price_decimals}") human_readable_margin = btc_usdt_perp_market.margin_from_chain_format(chain_value=chain_format_margin) - assert (expected_margin == human_readable_margin) + assert expected_margin == human_readable_margin class TestBinaryOptionMarket: - def test_convert_quantity_to_chain_format_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") fixed_denom = Denom( @@ -129,15 +131,15 @@ def test_convert_quantity_to_chain_format_with_fixed_denom(self, first_match_bet ) chain_value = first_match_bet_market.quantity_to_chain_format( - human_readable_value=original_quantity, - special_denom=fixed_denom + human_readable_value=original_quantity, special_denom=fixed_denom ) chain_formatted_quantity = original_quantity * Decimal(f"1e{fixed_denom.base}") - quantized_value = ((chain_formatted_quantity // Decimal(str(fixed_denom.min_quantity_tick_size))) - * Decimal(str(fixed_denom.min_quantity_tick_size))) + quantized_value = (chain_formatted_quantity // Decimal(str(fixed_denom.min_quantity_tick_size))) * Decimal( + str(fixed_denom.min_quantity_tick_size) + ) quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_quantity_to_chain_format_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -145,11 +147,12 @@ def test_convert_quantity_to_chain_format_without_fixed_denom(self, first_match_ chain_value = first_match_bet_market.quantity_to_chain_format( human_readable_value=original_quantity, ) - quantized_value = ((original_quantity // first_match_bet_market.min_quantity_tick_size) - * first_match_bet_market.min_quantity_tick_size) + quantized_value = ( + original_quantity // first_match_bet_market.min_quantity_tick_size + ) * first_match_bet_market.min_quantity_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_price_to_chain_format_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -167,11 +170,12 @@ def test_convert_price_to_chain_format_with_fixed_denom(self, first_match_bet_ma ) price_decimals = fixed_denom.quote expected_value = original_quantity * Decimal(f"1e{price_decimals}") - quantized_value = ((expected_value // Decimal(str(fixed_denom.min_price_tick_size))) - * Decimal(str(fixed_denom.min_price_tick_size))) + quantized_value = (expected_value // Decimal(str(fixed_denom.min_price_tick_size))) * Decimal( + str(fixed_denom.min_price_tick_size) + ) quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_convert_price_to_chain_format_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -179,11 +183,12 @@ def test_convert_price_to_chain_format_without_fixed_denom(self, first_match_bet chain_value = first_match_bet_market.price_to_chain_format(human_readable_value=original_quantity) price_decimals = first_match_bet_market.quote_token.decimals expected_value = original_quantity * Decimal(f"1e{price_decimals}") - quantized_value = ((expected_value // first_match_bet_market.min_price_tick_size) - * first_match_bet_market.min_price_tick_size) + quantized_value = ( + expected_value // first_match_bet_market.min_price_tick_size + ) * first_match_bet_market.min_price_tick_size quantized_chain_format_value = quantized_value * Decimal("1e18") - assert (quantized_chain_format_value == chain_value) + assert quantized_chain_format_value == chain_value def test_calculate_margin_for_buy_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -208,13 +213,12 @@ def test_calculate_margin_for_buy_with_fixed_denom(self, first_match_bet_market: expected_quantity = original_quantity * Decimal(f"1e{quantity_decimals}") expected_price = original_price * Decimal(f"1e{price_decimals}") expected_margin = expected_quantity * expected_price - quantized_margin = ( - (expected_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) - * Decimal(str(fixed_denom.min_quantity_tick_size)) + quantized_margin = (expected_margin // Decimal(str(fixed_denom.min_quantity_tick_size))) * Decimal( + str(fixed_denom.min_quantity_tick_size) ) quantized_chain_format_margin = quantized_margin * Decimal("1e18") - assert (quantized_chain_format_margin == chain_value) + assert quantized_chain_format_margin == chain_value def test_calculate_margin_for_buy_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -229,13 +233,12 @@ def test_calculate_margin_for_buy_without_fixed_denom(self, first_match_bet_mark price_decimals = first_match_bet_market.quote_token.decimals expected_price = original_price * Decimal(f"1e{price_decimals}") expected_margin = original_quantity * expected_price - quantized_margin = ( - (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) - * Decimal(str(first_match_bet_market.min_quantity_tick_size)) + quantized_margin = (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) * Decimal( + str(first_match_bet_market.min_quantity_tick_size) ) quantized_chain_format_margin = quantized_margin * Decimal("1e18") - assert (quantized_chain_format_margin == chain_value) + assert quantized_chain_format_margin == chain_value def test_calculate_margin_for_sell_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -250,13 +253,12 @@ def test_calculate_margin_for_sell_without_fixed_denom(self, first_match_bet_mar price_decimals = first_match_bet_market.quote_token.decimals expected_price = (Decimal(1) - original_price) * Decimal(f"1e{price_decimals}") expected_margin = original_quantity * expected_price - quantized_margin = ( - (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) - * Decimal(str(first_match_bet_market.min_quantity_tick_size)) + quantized_margin = (expected_margin // Decimal(str(first_match_bet_market.min_quantity_tick_size))) * Decimal( + str(first_match_bet_market.min_quantity_tick_size) ) quantized_chain_format_margin = quantized_margin * Decimal("1e18") - assert (quantized_chain_format_margin == chain_value) + assert quantized_chain_format_margin == chain_value def test_convert_quantity_from_chain_format_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -274,7 +276,7 @@ def test_convert_quantity_from_chain_format_with_fixed_denom(self, first_match_b chain_value=chain_formatted_quantity, special_denom=fixed_denom ) - assert (original_quantity == human_readable_quantity) + assert original_quantity == human_readable_quantity def test_convert_quantity_from_chain_format_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_quantity = Decimal("123.456789") @@ -285,7 +287,7 @@ def test_convert_quantity_from_chain_format_without_fixed_denom(self, first_matc chain_value=chain_formatted_quantity ) - assert (original_quantity == human_readable_quantity) + assert original_quantity == human_readable_quantity def test_convert_price_from_chain_format_with_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_price = Decimal("123.456789") @@ -303,7 +305,7 @@ def test_convert_price_from_chain_format_with_fixed_denom(self, first_match_bet_ chain_value=chain_formatted_price, special_denom=fixed_denom ) - assert (original_price == human_readable_price) + assert original_price == human_readable_price def test_convert_price_from_chain_format_without_fixed_denom(self, first_match_bet_market: BinaryOptionMarket): original_price = Decimal("123.456789") @@ -311,4 +313,4 @@ def test_convert_price_from_chain_format_without_fixed_denom(self, first_match_b human_readable_price = first_match_bet_market.price_from_chain_format(chain_value=chain_formatted_price) - assert (original_price == human_readable_price) + assert original_price == human_readable_price diff --git a/tests/core/test_message_based_transaction_fee_calculator.py b/tests/core/test_message_based_transaction_fee_calculator.py index eff3ea6e..f4c3a8d8 100644 --- a/tests/core/test_message_based_transaction_fee_calculator.py +++ b/tests/core/test_message_based_transaction_fee_calculator.py @@ -14,7 +14,6 @@ class TestMessageBasedTransactionFeeCalculator: - @pytest.mark.asyncio async def test_gas_fee_for_privileged_execute_contract_message(self): network = Network.testnet(node="sentry") @@ -34,8 +33,8 @@ async def test_gas_fee_for_privileged_execute_contract_message(self): expected_transaction_gas_limit = 60_000 expected_gas_limit = math.ceil(Decimal(6) * 150_000 + expected_transaction_gas_limit) - assert(expected_gas_limit == transaction.fee.gas_limit) - assert(str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_execute_contract_message(self): @@ -60,8 +59,8 @@ async def test_gas_fee_for_execute_contract_message(self): expected_transaction_gas_limit = 60_000 expected_gas_limit = math.ceil(Decimal(2.5) * 150_000 + expected_transaction_gas_limit) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_wasm_message(self): @@ -82,8 +81,8 @@ async def test_gas_fee_for_wasm_message(self): expected_transaction_gas_limit = 60_000 expected_gas_limit = math.ceil(Decimal(1.5) * 150_000 + expected_transaction_gas_limit) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_governance_message(self): @@ -104,8 +103,8 @@ async def test_gas_fee_for_governance_message(self): expected_transaction_gas_limit = 60_000 expected_gas_limit = math.ceil(Decimal(15) * 150_000 + expected_transaction_gas_limit) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_exchange_message(self): @@ -126,7 +125,7 @@ async def test_gas_fee_for_exchange_message(self): price=7.523, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ) transaction = Transaction() transaction.with_messages(message) @@ -135,8 +134,8 @@ async def test_gas_fee_for_exchange_message(self): expected_transaction_gas_limit = 60_000 expected_gas_limit = math.ceil(Decimal(1) * 100_000 + expected_transaction_gas_limit) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_msg_exec_message(self): @@ -157,12 +156,9 @@ async def test_gas_fee_for_msg_exec_message(self): price=7.523, quantity=0.01, is_buy=True, - is_po=False - ) - message = composer.MsgExec( - grantee="grantee", - msgs=[inner_message] + is_po=False, ) + message = composer.MsgExec(grantee="grantee", msgs=[inner_message]) transaction = Transaction() transaction.with_messages(message) @@ -174,8 +170,8 @@ async def test_gas_fee_for_msg_exec_message(self): expected_gas_limit = math.ceil( expected_exec_message_gas_limit + expected_inner_message_gas_limit + expected_transaction_gas_limit ) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount @pytest.mark.asyncio async def test_gas_fee_for_two_messages_in_one_transaction(self): @@ -196,19 +192,11 @@ async def test_gas_fee_for_two_messages_in_one_transaction(self): price=7.523, quantity=0.01, is_buy=True, - is_po=False - ) - message = composer.MsgExec( - grantee="grantee", - msgs=[inner_message] + is_po=False, ) + message = composer.MsgExec(grantee="grantee", msgs=[inner_message]) - send_message = composer.MsgSend( - from_address="address", - to_address='to_address', - amount=1, - denom='INJ' - ) + send_message = composer.MsgSend(from_address="address", to_address="to_address", amount=1, denom="INJ") transaction = Transaction() transaction.with_messages(message, send_message) @@ -225,5 +213,5 @@ async def test_gas_fee_for_two_messages_in_one_transaction(self): + expected_send_message_gas_limit + expected_transaction_gas_limit ) - assert (expected_gas_limit == transaction.fee.gas_limit) - assert (str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount) + assert expected_gas_limit == transaction.fee.gas_limit + assert str(expected_gas_limit * 5_000_000) == transaction.fee.amount[0].amount diff --git a/tests/core/test_token.py b/tests/core/test_token.py index 478bf906..6c649f06 100644 --- a/tests/core/test_token.py +++ b/tests/core/test_token.py @@ -4,11 +4,10 @@ class TestToken: - def test_chain_formatted_value(self, inj_token): value = Decimal("1.3456") chain_formatted_value = inj_token.chain_formatted_value(human_readable_value=value) expected_value = value * Decimal(f"1e{inj_token.decimals}") - assert (chain_formatted_value == expected_value) + assert chain_formatted_value == expected_value diff --git a/tests/rpc_fixtures/configurable_servicers.py b/tests/rpc_fixtures/configurable_servicers.py index bf32d9ba..8c46dd2d 100644 --- a/tests/rpc_fixtures/configurable_servicers.py +++ b/tests/rpc_fixtures/configurable_servicers.py @@ -6,7 +6,6 @@ class ConfigurableInjectiveSpotExchangeRPCServicer(InjectiveSpotExchangeRPCServicer): - def __init__(self): super().__init__() self.markets_queue = deque() @@ -16,7 +15,6 @@ async def Markets(self, request: injective_spot_exchange_rpc_pb2.MarketsRequest, class ConfigurableInjectiveDerivativeExchangeRPCServicer(InjectiveDerivativeExchangeRPCServicer): - def __init__(self): super().__init__() self.markets_queue = deque() @@ -26,8 +24,6 @@ async def Markets(self, request: injective_derivative_exchange_rpc_pb2.MarketsRe return self.markets_queue.pop() async def BinaryOptionsMarkets( - self, - request: injective_derivative_exchange_rpc_pb2.BinaryOptionsMarketsRequest, - context=None + self, request: injective_derivative_exchange_rpc_pb2.BinaryOptionsMarketsRequest, context=None ): return self.binary_option_markets_queue.pop() diff --git a/tests/rpc_fixtures/markets_fixtures.py b/tests/rpc_fixtures/markets_fixtures.py index 4ff72c4c..534ec8d7 100644 --- a/tests/rpc_fixtures/markets_fixtures.py +++ b/tests/rpc_fixtures/markets_fixtures.py @@ -11,7 +11,7 @@ def inj_token_meta(): symbol="INJ", logo="https://static.alchemyapi.io/images/assets/7226.png", decimals=18, - updated_at=1681739137644 + updated_at=1681739137644, ) return token @@ -27,7 +27,7 @@ def ape_token_meta(): symbol="APE", logo="https://assets.coingecko.com/coins/images/24383/small/apecoin.jpg?1647476455", decimals=18, - updated_at=1681739137646 + updated_at=1681739137646, ) return token @@ -43,7 +43,7 @@ def usdt_token_meta(): symbol="USDT", logo="https://static.alchemyapi.io/images/assets/825.png", decimals=6, - updated_at=1681739137645 + updated_at=1681739137645, ) return token @@ -59,7 +59,7 @@ def usdt_token_meta_second_denom(): symbol="USDT", logo="https://static.alchemyapi.io/images/assets/826.png", decimals=6, - updated_at=1691739137645 + updated_at=1691739137645, ) return token @@ -75,7 +75,7 @@ def usdt_perp_token_meta(): symbol="USDTPerp", logo="https://static.alchemyapi.io/images/assets/825.png", decimals=6, - updated_at=1683929869866 + updated_at=1683929869866, ) return token diff --git a/tests/test_async_client.py b/tests/test_async_client.py index ffd78cd3..c2bc2335 100644 --- a/tests/test_async_client.py +++ b/tests/test_async_client.py @@ -33,7 +33,6 @@ def derivative_servicer(): class TestAsyncClient: - @pytest.mark.asyncio async def test_sync_timeout_height_logs_exception(self, caplog): client = AsyncClient( @@ -49,9 +48,9 @@ async def test_sync_timeout_height_logs_exception(self, caplog): (record for record in caplog.record_tuples if record[2].startswith(expected_log_message_prefix)), None, ) - assert (found_log is not None) - assert (found_log[0] == "pyinjective.async_client.AsyncClient") - assert (found_log[1] == logging.DEBUG) + assert found_log is not None + assert found_log[0] == "pyinjective.async_client.AsyncClient" + assert found_log[1] == logging.DEBUG @pytest.mark.asyncio async def test_get_account_logs_exception(self, caplog): @@ -68,31 +67,31 @@ async def test_get_account_logs_exception(self, caplog): (record for record in caplog.record_tuples if record[2].startswith(expected_log_message_prefix)), None, ) - assert (found_log is not None) - assert (found_log[0] == "pyinjective.async_client.AsyncClient") - assert (found_log[1] == logging.DEBUG) + assert found_log is not None + assert found_log[0] == "pyinjective.async_client.AsyncClient" + assert found_log[1] == logging.DEBUG @pytest.mark.asyncio async def test_initialize_tokens_and_markets( - self, - spot_servicer, - derivative_servicer, - inj_usdt_spot_market_meta, - ape_usdt_spot_market_meta, - btc_usdt_perp_market_meta, - first_match_bet_market_meta, + self, + spot_servicer, + derivative_servicer, + inj_usdt_spot_market_meta, + ape_usdt_spot_market_meta, + btc_usdt_perp_market_meta, + first_match_bet_market_meta, ): - spot_servicer.markets_queue.append(injective_spot_exchange_rpc_pb2.MarketsResponse( - markets=[inj_usdt_spot_market_meta, ape_usdt_spot_market_meta] - )) - derivative_servicer.markets_queue.append(injective_derivative_exchange_rpc_pb2.MarketsResponse( - markets=[btc_usdt_perp_market_meta] - )) - derivative_servicer.binary_option_markets_queue.append( - injective_derivative_exchange_rpc_pb2.BinaryOptionsMarketsResponse( - markets=[first_match_bet_market_meta] + spot_servicer.markets_queue.append( + injective_spot_exchange_rpc_pb2.MarketsResponse( + markets=[inj_usdt_spot_market_meta, ape_usdt_spot_market_meta] ) ) + derivative_servicer.markets_queue.append( + injective_derivative_exchange_rpc_pb2.MarketsResponse(markets=[btc_usdt_perp_market_meta]) + ) + derivative_servicer.binary_option_markets_queue.append( + injective_derivative_exchange_rpc_pb2.BinaryOptionsMarketsResponse(markets=[first_match_bet_market_meta]) + ) client = AsyncClient( network=Network.local(), @@ -105,30 +104,28 @@ async def test_initialize_tokens_and_markets( await client._initialize_tokens_and_markets() all_tokens = await client.all_tokens() - assert(5 == len(all_tokens)) + assert 5 == len(all_tokens) inj_symbol, usdt_symbol = inj_usdt_spot_market_meta.ticker.split("/") ape_symbol, _ = ape_usdt_spot_market_meta.ticker.split("/") alternative_usdt_name = ape_usdt_spot_market_meta.quote_token_meta.name usdt_perp_symbol = btc_usdt_perp_market_meta.quote_token_meta.symbol - assert(inj_symbol in all_tokens) - assert(usdt_symbol in all_tokens) - assert(alternative_usdt_name in all_tokens) - assert(ape_symbol in all_tokens) - assert(usdt_perp_symbol in all_tokens) + assert inj_symbol in all_tokens + assert usdt_symbol in all_tokens + assert alternative_usdt_name in all_tokens + assert ape_symbol in all_tokens + assert usdt_perp_symbol in all_tokens all_spot_markets = await client.all_spot_markets() - assert (2 == len(all_spot_markets)) - assert (any((inj_usdt_spot_market_meta.market_id == market.id for market in all_spot_markets.values()))) - assert (any((ape_usdt_spot_market_meta.market_id == market.id for market in all_spot_markets.values()))) + assert 2 == len(all_spot_markets) + assert any((inj_usdt_spot_market_meta.market_id == market.id for market in all_spot_markets.values())) + assert any((ape_usdt_spot_market_meta.market_id == market.id for market in all_spot_markets.values())) all_derivative_markets = await client.all_derivative_markets() - assert (1 == len(all_derivative_markets)) - assert (any((btc_usdt_perp_market_meta.market_id == market.id for market in all_derivative_markets.values()))) + assert 1 == len(all_derivative_markets) + assert any((btc_usdt_perp_market_meta.market_id == market.id for market in all_derivative_markets.values())) all_binary_option_markets = await client.all_binary_option_markets() - assert (1 == len(all_binary_option_markets)) - assert ( - any( - (first_match_bet_market_meta.market_id == market.id for market in all_binary_option_markets.values()) - ) + assert 1 == len(all_binary_option_markets) + assert any( + (first_match_bet_market_meta.market_id == market.id for market in all_binary_option_markets.values()) ) diff --git a/tests/test_composer.py b/tests/test_composer.py index d8812580..c36eb5c5 100644 --- a/tests/test_composer.py +++ b/tests/test_composer.py @@ -16,7 +16,6 @@ class TestComposer: - @pytest.fixture def inj_usdt_market_id(self): return "0xa508cb32923323679f29a032c70342c147c17d0145625922b0ef22e955c844c0" @@ -32,7 +31,7 @@ def basic_composer(self, inj_usdt_spot_market, btc_usdt_perp_market, first_match inj_usdt_spot_market.base_token.symbol: inj_usdt_spot_market.base_token, inj_usdt_spot_market.quote_token.symbol: inj_usdt_spot_market.quote_token, btc_usdt_perp_market.quote_token.symbol: btc_usdt_perp_market.quote_token, - } + }, ) return composer @@ -42,18 +41,20 @@ def test_composer_initialization_from_ini_files(self): inj_token = composer.tokens["INJ"] inj_usdt_spot_market = next( - (market for market in composer.spot_markets.values() - if market.ticker == "'Devnet Spot INJ/USDT'") + (market for market in composer.spot_markets.values() if market.ticker == "'Devnet Spot INJ/USDT'") ) inj_usdt_perp_market = next( - (market for market in composer.derivative_markets.values() - if market.ticker == "'Devnet Derivative INJ/USDT PERP'") + ( + market + for market in composer.derivative_markets.values() + if market.ticker == "'Devnet Derivative INJ/USDT PERP'" + ) ) - assert (18 == inj_token.decimals) - assert (18 == inj_usdt_spot_market.base_token.decimals) - assert (6 == inj_usdt_spot_market.quote_token.decimals) - assert (6 == inj_usdt_perp_market.quote_token.decimals) + assert 18 == inj_token.decimals + assert 18 == inj_usdt_spot_market.base_token.decimals + assert 6 == inj_usdt_spot_market.quote_token.decimals + assert 6 == inj_usdt_perp_market.quote_token.decimals def test_buy_spot_order_creation(self, basic_composer: Composer, inj_usdt_spot_market: SpotMarket): fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" @@ -70,21 +71,25 @@ def test_buy_spot_order_creation(self, basic_composer: Composer, inj_usdt_spot_m price_decimals = inj_usdt_spot_market.quote_token.decimals - inj_usdt_spot_market.base_token.decimals chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") - expected_price = ((chain_format_price // inj_usdt_spot_market.min_price_tick_size) - * inj_usdt_spot_market.min_price_tick_size - * Decimal("1e18")) + expected_price = ( + (chain_format_price // inj_usdt_spot_market.min_price_tick_size) + * inj_usdt_spot_market.min_price_tick_size + * Decimal("1e18") + ) chain_format_quantity = Decimal(str(quantity)) * Decimal(f"1e{inj_usdt_spot_market.base_token.decimals}") - expected_quantity = ((chain_format_quantity // inj_usdt_spot_market.min_quantity_tick_size) - * inj_usdt_spot_market.min_quantity_tick_size - * Decimal("1e18")) - - assert (order.market_id == inj_usdt_spot_market.id) - assert (order.order_info.subaccount_id == "1") - assert (order.order_info.fee_recipient == fee_recipient) - assert (order.order_info.price == str(int(expected_price))) - assert (order.order_info.quantity == str(int(expected_quantity))) - assert (order.order_type == exchange_pb2.OrderType.BUY) - assert (order.trigger_price == "0") + expected_quantity = ( + (chain_format_quantity // inj_usdt_spot_market.min_quantity_tick_size) + * inj_usdt_spot_market.min_quantity_tick_size + * Decimal("1e18") + ) + + assert order.market_id == inj_usdt_spot_market.id + assert order.order_info.subaccount_id == "1" + assert order.order_info.fee_recipient == fee_recipient + assert order.order_info.price == str(int(expected_price)) + assert order.order_info.quantity == str(int(expected_quantity)) + assert order.order_type == exchange_pb2.OrderType.BUY + assert order.trigger_price == "0" def test_buy_derivative_order_creation(self, basic_composer: Composer, btc_usdt_perp_market: DerivativeMarket): fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" @@ -121,14 +126,14 @@ def test_buy_derivative_order_creation(self, basic_composer: Composer, btc_usdt_ * Decimal("1e18") ) - assert (order.market_id == btc_usdt_perp_market.id) - assert (order.order_info.subaccount_id == "1") - assert (order.order_info.fee_recipient == fee_recipient) - assert (order.order_info.price == str(int(expected_price))) - assert (order.order_info.quantity == str(int(expected_quantity))) - assert (order.order_type == exchange_pb2.OrderType.BUY) - assert (order.margin == str(int(expected_margin))) - assert (order.trigger_price == "0") + assert order.market_id == btc_usdt_perp_market.id + assert order.order_info.subaccount_id == "1" + assert order.order_info.fee_recipient == fee_recipient + assert order.order_info.price == str(int(expected_price)) + assert order.order_info.quantity == str(int(expected_quantity)) + assert order.order_type == exchange_pb2.OrderType.BUY + assert order.margin == str(int(expected_margin)) + assert order.trigger_price == "0" def test_increase_position_margin(self, basic_composer: Composer, btc_usdt_perp_market: DerivativeMarket): sender = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" @@ -149,16 +154,14 @@ def test_increase_position_margin(self, basic_composer: Composer, btc_usdt_perp_ * Decimal("1e18") ) - assert (message.market_id == btc_usdt_perp_market.id) - assert (message.sender == sender) - assert (message.source_subaccount_id == "1") - assert (message.destination_subaccount_id == "2") - assert (message.amount == str(int(expected_margin))) + assert message.market_id == btc_usdt_perp_market.id + assert message.sender == sender + assert message.source_subaccount_id == "1" + assert message.destination_subaccount_id == "2" + assert message.amount == str(int(expected_margin)) def test_buy_binary_option_order_creation_with_fixed_denom( - self, - basic_composer: Composer, - first_match_bet_market: BinaryOptionMarket + self, basic_composer: Composer, first_match_bet_market: BinaryOptionMarket ): fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" price = 6.869 @@ -202,19 +205,19 @@ def test_buy_binary_option_order_creation_with_fixed_denom( * Decimal("1e18") ) - assert (order.market_id == first_match_bet_market.id) - assert (order.order_info.subaccount_id == "1") - assert (order.order_info.fee_recipient == fee_recipient) - assert (order.order_info.price == str(int(expected_price))) - assert (order.order_info.quantity == str(int(expected_quantity))) - assert (order.order_type == exchange_pb2.OrderType.BUY) - assert (order.margin == str(int(expected_margin))) - assert (order.trigger_price == "0") + assert order.market_id == first_match_bet_market.id + assert order.order_info.subaccount_id == "1" + assert order.order_info.fee_recipient == fee_recipient + assert order.order_info.price == str(int(expected_price)) + assert order.order_info.quantity == str(int(expected_quantity)) + assert order.order_type == exchange_pb2.OrderType.BUY + assert order.margin == str(int(expected_margin)) + assert order.trigger_price == "0" def test_buy_binary_option_order_creation_without_fixed_denom( - self, - basic_composer: Composer, - first_match_bet_market: BinaryOptionMarket, + self, + basic_composer: Composer, + first_match_bet_market: BinaryOptionMarket, ): fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" price = 6.869 @@ -231,23 +234,29 @@ def test_buy_binary_option_order_creation_without_fixed_denom( price_decimals = first_match_bet_market.quote_token.decimals chain_format_price = Decimal(str(price)) * Decimal(f"1e{price_decimals}") - expected_price = ((chain_format_price // first_match_bet_market.min_price_tick_size) - * first_match_bet_market.min_price_tick_size - * Decimal("1e18")) + expected_price = ( + (chain_format_price // first_match_bet_market.min_price_tick_size) + * first_match_bet_market.min_price_tick_size + * Decimal("1e18") + ) chain_format_quantity = Decimal(str(quantity)) - expected_quantity = ((chain_format_quantity // first_match_bet_market.min_quantity_tick_size) - * first_match_bet_market.min_quantity_tick_size - * Decimal("1e18")) - chain_format_margin = (chain_format_quantity * chain_format_price) - expected_margin = ((chain_format_margin // first_match_bet_market.min_quantity_tick_size) - * first_match_bet_market.min_quantity_tick_size - * Decimal("1e18")) - - assert (order.market_id == first_match_bet_market.id) - assert (order.order_info.subaccount_id == "1") - assert (order.order_info.fee_recipient == fee_recipient) - assert (order.order_info.price == str(int(expected_price))) - assert (order.order_info.quantity == str(int(expected_quantity))) - assert (order.order_type == exchange_pb2.OrderType.BUY) - assert (order.margin == str(int(expected_margin))) - assert (order.trigger_price == "0") + expected_quantity = ( + (chain_format_quantity // first_match_bet_market.min_quantity_tick_size) + * first_match_bet_market.min_quantity_tick_size + * Decimal("1e18") + ) + chain_format_margin = chain_format_quantity * chain_format_price + expected_margin = ( + (chain_format_margin // first_match_bet_market.min_quantity_tick_size) + * first_match_bet_market.min_quantity_tick_size + * Decimal("1e18") + ) + + assert order.market_id == first_match_bet_market.id + assert order.order_info.subaccount_id == "1" + assert order.order_info.fee_recipient == fee_recipient + assert order.order_info.price == str(int(expected_price)) + assert order.order_info.quantity == str(int(expected_quantity)) + assert order.order_type == exchange_pb2.OrderType.BUY + assert order.margin == str(int(expected_margin)) + assert order.trigger_price == "0" diff --git a/tests/test_orderhash.py b/tests/test_orderhash.py index c5331e26..c57b6305 100644 --- a/tests/test_orderhash.py +++ b/tests/test_orderhash.py @@ -5,7 +5,6 @@ class TestOrderHashManager: - def test_spot_order_hash(self, requests_mock): network = Network.devnet() composer = Composer(network=network.string()) @@ -17,11 +16,7 @@ def test_spot_order_hash(self, requests_mock): url = network.lcd_endpoint + "/injective/exchange/v1beta1/exchange/" + subaccount_id requests_mock.get(url, json={"nonce": 0}) - order_hash_manager = OrderHashManager( - address=address, - network=network, - subaccount_indexes=[0] - ) + order_hash_manager = OrderHashManager(address=address, network=network, subaccount_indexes=[0]) spot_market_id = "0xa508cb32923323679f29a032c70342c147c17d0145625922b0ef22e955c844c0" fee_recipient = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" @@ -34,7 +29,7 @@ def test_spot_order_hash(self, requests_mock): price=0.524, quantity=0.01, is_buy=True, - is_po=False + is_po=False, ), composer.SpotOrder( market_id=spot_market_id, @@ -43,17 +38,15 @@ def test_spot_order_hash(self, requests_mock): price=27.92, quantity=0.01, is_buy=False, - is_po=False + is_po=False, ), ] order_hashes_response = order_hash_manager.compute_order_hashes( - spot_orders=spot_orders, - derivative_orders=[], - subaccount_index=0 + spot_orders=spot_orders, derivative_orders=[], subaccount_index=0 ) - assert (len(order_hashes_response.spot) == 2) - assert (len(order_hashes_response.derivative) == 0) - assert (order_hashes_response.spot[0] == "0x6b1e4d1fb3012735dd5e386175eb4541c024e0d8dbfeb452767b973d70ae0924") - assert (order_hashes_response.spot[1] == "0xb36146f913955d989269732d167ec554e6d0d544411d82d7f86aef18350b252b") + assert len(order_hashes_response.spot) == 2 + assert len(order_hashes_response.derivative) == 0 + assert order_hashes_response.spot[0] == "0x6b1e4d1fb3012735dd5e386175eb4541c024e0d8dbfeb452767b973d70ae0924" + assert order_hashes_response.spot[1] == "0xb36146f913955d989269732d167ec554e6d0d544411d82d7f86aef18350b252b" diff --git a/tests/test_wallet.py b/tests/test_wallet.py index aaaeeb7f..a2740a97 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -4,20 +4,20 @@ class TestPrivateKey: - def test_private_key_signature_generation(self): private_key = PrivateKey.from_mnemonic("test mnemonic never use other places") signature = private_key.sign(msg="test message".encode()) - expected_signature = (b'\x8f\xae\xcb#z\x9a+\x12\x88\xea\xb5xZ"\x8f\x98y\xb8\x97\xa7F\xd5\xdd\x15s\x05;' - b'\x04\x1d\xbaY|rw\x8b\xbb\x19\xfc\x8e\x15\x8b\xf1\x18\x08\xba\xc7\x15\xed\xb0\xee\x95' - b'\x0e|Ch\x7f\xaf\x9cH\xc6\x9f\xbf\x14\xa5') + expected_signature = ( + b'\x8f\xae\xcb#z\x9a+\x12\x88\xea\xb5xZ"\x8f\x98y\xb8\x97\xa7F\xd5\xdd\x15s\x05;' + b"\x04\x1d\xbaY|rw\x8b\xbb\x19\xfc\x8e\x15\x8b\xf1\x18\x08\xba\xc7\x15\xed\xb0\xee\x95" + b"\x0e|Ch\x7f\xaf\x9cH\xc6\x9f\xbf\x14\xa5" + ) - assert (expected_signature == signature) + assert expected_signature == signature class TestPublicKey: - def test_convert_public_key_to_address(self): private_key = PrivateKey.from_mnemonic("test mnemonic never use other places") public_key = private_key.to_public_key() @@ -27,4 +27,4 @@ def test_convert_public_key_to_address(self): hashed_value = keccak(key[1:]) expected_address = Address(hashed_value[12:]) - assert (expected_address == address) + assert expected_address == address From a30481c598814f84bf599fe783bff85d54d62276 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 16:20:18 -0300 Subject: [PATCH 10/23] (feat) Added GitHub workflow to run tests and calculate coverage --- .github/workflows/pre-commit.yml | 4 +- .github/workflows/run-tests.yml | 46 +++++++++++++++++ poetry.lock | 87 +++++++++++++++++++++++++++++++- pyproject.toml | 10 ++++ 4 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/run-tests.yml diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 5a18ae2c..13b12d25 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,5 +1,4 @@ name: pre-commit - on: pull_request: push: @@ -12,7 +11,8 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Install Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 + - name: Install poetry run: python -m pip install poetry - name: Cache the virtualenv diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 00000000..576ae0cd --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,46 @@ +name: run-tests +on: + pull_request: + push: + branches: [master, dev] + +jobs: + run-tests: + strategy: + matrix: + python: ["3.9", "3.10", "3.11"] + os: [ubuntu-18.04, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + env: + OS: ${{ matrix.os }} + PYTHON: ${{ matrix.python }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + + - name: Install poetry + run: python -m pip install poetry + - name: Cache the virtualenv + id: cache-venv + uses: actions/cache@v3 + with: + path: ./.venv + key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} + + - name: Install dependencies + if: steps.cache-venv.outputs.cache-hit != 'true' + run: python -m poetry install + + - name: Run tests and Generate coverage + run: | + poetry run pytest --cov --cov-report=xml + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + env_vars: OS,PYTHON + verbose: true diff --git a/poetry.lock b/poetry.lock index 7f7f64cc..28358a9f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -652,6 +652,73 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coverage" +version = "7.3.1" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, + {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, + {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, + {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, + {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, + {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, + {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, + {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, + {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, + {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, + {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, + {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, + {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + [[package]] name = "croniter" version = "1.4.1" @@ -1860,6 +1927,24 @@ pytest = ">=7.0.0" docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + [[package]] name = "pytest-grpc" version = "0.8.0" @@ -2608,4 +2693,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "fcf0115df57cae7065cda119c217acb85cc70d086b05538537df91ef261002bb" +content-hash = "1c74ebf70d3cc8987fe3218c68cb29aa1a11121e1bd854af44dd2886413b5541" diff --git a/pyproject.toml b/pyproject.toml index 67d925f2..a3ac1d0d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ pytest = "*" pytest-asyncio = "*" pytest-grpc = "*" requests-mock = "*" +pytest-cov = "^4.1.0" [tool.poetry.group.dev.dependencies] @@ -71,6 +72,7 @@ skip_glob = ["pyinjective/proto/*", ".idea/*"] [tool.black] line-length = 120 target-version = ["py39", "py310", "py311"] +include = '\.pyi?$' # 'extend-exclude' excludes files or directories in addition to the defaults extend-exclude = ''' # A regex preceded with ^/ will apply only to files and directories @@ -81,6 +83,14 @@ extend-exclude = ''' ) ''' +[tool.coverage.run] +branch = true +source_pkgs = ["pyinjective"] +omit = ["pyinjective/proto/*"] + +[tool.coverage.report] +skip_empty = true + [build-system] requires = ["poetry-core"] From 2d1bb99ce594e7b40588388d938b83fa980fd3d9 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 16:28:27 -0300 Subject: [PATCH 11/23] (fix) Fix reference to ubuntu OS in the run-test GitHub workflow --- .github/workflows/run-tests.yml | 3 +-- codecov.yml | 0 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 codecov.yml diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 576ae0cd..2741adab 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: python: ["3.9", "3.10", "3.11"] - os: [ubuntu-18.04, macos-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} env: OS: ${{ matrix.os }} @@ -43,4 +43,3 @@ jobs: uses: codecov/codecov-action@v3 with: env_vars: OS,PYTHON - verbose: true diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..e69de29b From be1b05bf9381b9fe38a47d68f53915312de813f5 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 16:31:53 -0300 Subject: [PATCH 12/23] (fix) Consider Python version in the GitHub workflow cache for the environment --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 2741adab..ccde1d03 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -29,7 +29,7 @@ jobs: uses: actions/cache@v3 with: path: ./.venv - key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} + key: ${{ runner.os }}-${{ matrix.python }}-venv-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies if: steps.cache-venv.outputs.cache-hit != 'true' From cee1e5dcf2d5afa3e81eb2f44051f3163f81f81a Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 17:23:18 -0300 Subject: [PATCH 13/23] (feat) Added CodeCov badge to README file --- README.md | 2 ++ pyproject.toml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index b7c6a55a..0c9f3905 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## Injective Python SDK +[![codecov](https://codecov.io/gh/InjectiveLabs/sdk-python/graph/badge.svg?token=RBGK98G6F1)](https://codecov.io/gh/InjectiveLabs/sdk-python) + ### Dependencies **Ubuntu** diff --git a/pyproject.toml b/pyproject.toml index a3ac1d0d..d88fdaca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,6 +90,8 @@ omit = ["pyinjective/proto/*"] [tool.coverage.report] skip_empty = true +fail_under = 56.3 +precision = 2 [build-system] From f5d2e1a05f1a56b727e11c4212ccb337532545ef Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 17:26:46 -0300 Subject: [PATCH 14/23] (fix) Fix minimum required coverage --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d88fdaca..d512dca9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,7 +90,7 @@ omit = ["pyinjective/proto/*"] [tool.coverage.report] skip_empty = true -fail_under = 56.3 +fail_under = 53.1 precision = 2 From 9c3bff0bde26c09dc2b29446576f4fc45c98ca78 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 17:28:56 -0300 Subject: [PATCH 15/23] (fix) Fix minimum required coverage --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d512dca9..d0189976 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,7 +90,7 @@ omit = ["pyinjective/proto/*"] [tool.coverage.report] skip_empty = true -fail_under = 53.1 +fail_under = 52 precision = 2 From 189c4987a74d6b105b00f79f090cf31373c7e9dc Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 17:39:21 -0300 Subject: [PATCH 16/23] (fix) Updated README file --- README.md | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 0c9f3905..d3dcc206 100644 --- a/README.md +++ b/README.md @@ -26,20 +26,20 @@ pip install injective-py ``` ### Usage -Requires Python 3.7+ +Requires Python 3.9+ +Please install `poetry` following the steps described in the [documentation](https://python-poetry.org/docs/#installation) [Examples](https://github.com/InjectiveLabs/sdk-python/tree/master/examples) ```bash -$ pipenv shell -$ pipenv install +$ poetry install # connecting to Injective Exchange API # and listening for new orders from a specific spot market -$ python examples/exchange_client/spot_exchange_rpc/8_StreamOrders.py +$ poetry run python examples/exchange_client/spot_exchange_rpc/8_StreamOrders.py # sending a msg with bank transfer # signs and posts a transaction to the Injective Chain -$ python examples/chain_client/1_MsgSend.py +$ poetry run python examples/chain_client/1_MsgSend.py ``` Upgrade `pip` to the latest version, if you see these warnings: ``` @@ -51,16 +51,10 @@ Upgrade `pip` to the latest version, if you see these warnings: 1. Generate proto binding & build ``` make gen - python -m build + poetry build ``` -2. Enable dev env - ``` - pipenv shell - pipenv install --dev - ``` - -3. Install pkg +2. Install pkg ``` # from local build pip uninstall injective-py @@ -71,27 +65,23 @@ Upgrade `pip` to the latest version, if you see these warnings: pip install injective-py ``` -4. Fetch latest denom config +3. Fetch latest denom config ``` -python pyinjective/fetch_metadata.py +poetry run python pyinjective/fetch_metadata.py ``` Note that the [sync client](https://github.com/InjectiveLabs/sdk-python/blob/master/pyinjective/client.py) has been deprecated as of April 18, 2022. If you are using the sync client please make sure to transition to the [async client](https://github.com/InjectiveLabs/sdk-python/blob/master/pyinjective/async_client.py), for more information read [here](https://github.com/InjectiveLabs/sdk-python/issues/101) -5. Install the development environment (requires `pipenv`) -``` -pipenv install -d -``` - -6. Run all unit tests in a development environment +4. Run all unit tests in a development environment ``` -make tests +poetry run pytest -v ``` ### Changelogs **0.9** * Replace Pipenv with Poetry * Add pre-commit validations to the project +* Add a GitHub workflow to run all tests and calculate coverage for each PR **0.8.5** * Added NEOK/USDT and ORAI/USDT spot markets to the mainnet .ini file From 088e3fd010d60e3aebb4fa204c1f7d1fcb7201d8 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 17:57:29 -0300 Subject: [PATCH 17/23] (fix) Changed release workflow to try to solve the error publishing packages to PyPi --- .github/workflows/release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 18ca5bd3..a1dcda8e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,7 @@ jobs: uses: actions/setup-python@v3 - name: Install poetry run: python -m pip install poetry - - run: poetry config pypi-token.pypi "${{ secrets.PYPI_API_KEY }}" - name: Publish package - run: poetry publish --build + run: | + poetry config pypi-token.pypi "${{ secrets.PYPI_API_KEY }}" + poetry publish --build From c17aeb5ce5c322cbe2671b0c99eaf613c6119056 Mon Sep 17 00:00:00 2001 From: abel Date: Tue, 19 Sep 2023 18:12:01 -0300 Subject: [PATCH 18/23] (fix) Fix release workflow configuration --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a1dcda8e..f3d31554 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,6 +16,8 @@ jobs: - name: Install poetry run: python -m pip install poetry - name: Publish package + env: + PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} run: | - poetry config pypi-token.pypi "${{ secrets.PYPI_API_KEY }}" + poetry config pypi-token.pypi $PYPI_TOKEN poetry publish --build From bbd7b3d02478c1944994f7ad6aad506b04b4bfaf Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 20 Sep 2023 11:15:13 -0300 Subject: [PATCH 19/23] (fix) Added port to endpoints where the port was missing, to have the same configuration in the Go SDK --- pyinjective/core/network.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyinjective/core/network.py b/pyinjective/core/network.py index 930fafe0..39c4af65 100644 --- a/pyinjective/core/network.py +++ b/pyinjective/core/network.py @@ -218,11 +218,11 @@ def testnet(cls, node="lb"): cookie_assistant = BareMetalLoadBalancedCookieAssistant() use_secure_connection = True else: - lcd_endpoint = "https://testnet.lcd.injective.network" - tm_websocket_endpoint = "wss://testnet.tm.injective.network/websocket" - grpc_endpoint = "testnet.chain.grpc.injective.network" - grpc_exchange_endpoint = "testnet.exchange.grpc.injective.network" - grpc_explorer_endpoint = "testnet.explorer.grpc.injective.network" + lcd_endpoint = "https://testnet.lcd.injective.network:443" + tm_websocket_endpoint = "wss://testnet.tm.injective.network:443/websocket" + grpc_endpoint = "testnet.chain.grpc.injective.network:443" + grpc_exchange_endpoint = "testnet.exchange.grpc.injective.network:443" + grpc_explorer_endpoint = "testnet.explorer.grpc.injective.network:443" cookie_assistant = DisabledCookieAssistant() use_secure_connection = True From cd78b5f3b8963e5a7bec76024f5a0ecc608259f5 Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 20 Sep 2023 12:44:02 -0300 Subject: [PATCH 20/23] (fix) Included missing project infor in Poetry useful when building and publishing the library --- pyproject.toml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d0189976..e3a6c098 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,8 +3,15 @@ name = "injective-py" version = "0.9.dev" description = "Injective Python SDK, with Exchange API Client" authors = ["Injective Labs "] -license = "Apache Software License 2.0" +license = "Apache-2.0" readme = "README.md" +homepage = "https://injectivelabs.org/" +repository = "https://github.com/InjectiveLabs/sdk-python" +documentation = "https://api.injective.exchange/" +keywords = ["injective", "blockchain", "cosmos", "injectivelabs"] +classifiers = [ + "Intended Audience :: Developers", +] packages = [ { include = "pyinjective" }, ] From 9a5846e8c180c5dd3788071c816405b1d4b76de6 Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 20 Sep 2023 13:15:17 -0300 Subject: [PATCH 21/23] (fix) Changed broadcaster logic to initialize timeout_height and sequence in the AsyncClient only if they have not been initialized yet --- pyinjective/core/broadcaster.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyinjective/core/broadcaster.py b/pyinjective/core/broadcaster.py index a84b38dd..a121ef22 100644 --- a/pyinjective/core/broadcaster.py +++ b/pyinjective/core/broadcaster.py @@ -146,8 +146,12 @@ def new_for_grantee_account_without_simulation( return instance async def broadcast(self, messages: List[any_pb2.Any]): - await self._client.sync_timeout_height() - await self._client.get_account(self._account_config.trading_injective_address) + # Only force initialization of timeout_height and account info (number and sequence) if they are not initialized + # Done this way to allow users to handle timeout_height and sequence re-synchronization in case of errors + if self._client.timeout_height == 1: + await self._client.sync_timeout_height() + if self._client.number == 0: + await self._client.get_account(self._account_config.trading_injective_address) messages_for_transaction = self._account_config.messages_prepared_for_transaction(messages=messages) From 24eda15a4a415b85c72402b2e0684ce110809cca Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 20 Sep 2023 13:15:17 -0300 Subject: [PATCH 22/23] (fix) Changed broadcaster logic to initialize timeout_height and sequence in the AsyncClient only if they have not been initialized yet --- pyinjective/core/broadcaster.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyinjective/core/broadcaster.py b/pyinjective/core/broadcaster.py index a84b38dd..a121ef22 100644 --- a/pyinjective/core/broadcaster.py +++ b/pyinjective/core/broadcaster.py @@ -146,8 +146,12 @@ def new_for_grantee_account_without_simulation( return instance async def broadcast(self, messages: List[any_pb2.Any]): - await self._client.sync_timeout_height() - await self._client.get_account(self._account_config.trading_injective_address) + # Only force initialization of timeout_height and account info (number and sequence) if they are not initialized + # Done this way to allow users to handle timeout_height and sequence re-synchronization in case of errors + if self._client.timeout_height == 1: + await self._client.sync_timeout_height() + if self._client.number == 0: + await self._client.get_account(self._account_config.trading_injective_address) messages_for_transaction = self._account_config.messages_prepared_for_transaction(messages=messages) From 9b0945c737199b16255541c67412753d9f99e6f8 Mon Sep 17 00:00:00 2001 From: abel Date: Wed, 20 Sep 2023 15:26:52 -0300 Subject: [PATCH 23/23] (feat) Updated version number to release v0.9.0 --- README.md | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3dcc206..b7c23ec1 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,8 @@ poetry run pytest -v ``` ### Changelogs -**0.9** +**0.9.0** +* Improvement in broadcaster to initialize the account sequence number and the timeout height only when required * Replace Pipenv with Poetry * Add pre-commit validations to the project * Add a GitHub workflow to run all tests and calculate coverage for each PR diff --git a/pyproject.toml b/pyproject.toml index e3a6c098..c3ccee97 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "injective-py" -version = "0.9.dev" +version = "0.9.0" description = "Injective Python SDK, with Exchange API Client" authors = ["Injective Labs "] license = "Apache-2.0"