diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 626ad27..de20d02 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -36,4 +36,4 @@ jobs: with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: dist/ + packages_dir: ./axie-utils/dist/ diff --git a/axie-utils/README.md b/axie-utils/README.md index 3520711..18b2ba1 100644 --- a/axie-utils/README.md +++ b/axie-utils/README.md @@ -2,6 +2,8 @@ Aim of this library is to contain all the actions one might want to do when building tools around the Axie Infinity videogame. It started with me building an automation tool and needing to build different solutions. Extracting this functionality allows for that easily. +**NOTE: Only v1 of this library uses free tx, from v2 and onwards all transactions consume RON. That is due to now free tx being much more rare to have available.** + # Installation diff --git a/axie-utils/axie_utils/__init__.py b/axie-utils/axie_utils/__init__.py index bc03c8d..3946961 100644 --- a/axie-utils/axie_utils/__init__.py +++ b/axie-utils/axie_utils/__init__.py @@ -1,4 +1,4 @@ -__version__ = '1.1.3' +__version__ = '2.0.0' __all__ = [ 'Axies', 'AxieGraphQL', @@ -7,6 +7,7 @@ 'CustomUI', 'Morph', 'Payment', + 'Scatter', 'Transfer', 'TrezorAxieGraphQL', 'TrezorBreed', @@ -14,6 +15,7 @@ 'TrezorConfig', 'TrezorMorph', 'TrezorPayment', + 'TrezorScatter', 'TrezorTransfer', 'get_nonce', 'get_lastclaim', @@ -26,5 +28,6 @@ from axie_utils.graphql import AxieGraphQL, TrezorAxieGraphQL from axie_utils.morphing import Morph, TrezorMorph from axie_utils.payments import Payment, TrezorPayment +from axie_utils.scatter import Scatter, TrezorScatter from axie_utils.transfers import Transfer, TrezorTransfer from axie_utils.utils import get_nonce, check_balance, CustomUI, TrezorConfig, get_lastclaim diff --git a/axie-utils/axie_utils/abis.py b/axie-utils/axie_utils/abis.py index 785bffc..a0352ca 100644 --- a/axie-utils/axie_utils/abis.py +++ b/axie-utils/axie_utils/abis.py @@ -90,3 +90,33 @@ 'stateMutability': 'view', 'type': 'function', }] + +SCATTER_ABI = [{ + 'constant': False, + 'inputs': [ + {'name': 'token', 'type':'address'}, + {'name': 'recipients', 'type': 'address[]'}, + {'name': 'values', 'type': 'uint256[]'}], + 'name': 'disperseTokenSimple', + 'outputs': [], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'function' + }, { + 'constant': False, + 'inputs': [{'name': 'token', 'type': 'address'},{'name': 'recipients', 'type': 'address[]'},{'name': 'values', 'type': 'uint256[]'}], + 'name': 'disperseToken', + 'outputs': [], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'function' + }, { + 'constant': False, + 'inputs': [ + {'name': 'recipients', 'type': 'address[]'},{'name': 'values', 'type': 'uint256[]'}], + 'name': 'disperseEther', + 'outputs': [], + 'payable': True, + 'stateMutability': 'payable', + 'type': 'function' + }] diff --git a/axie-utils/axie_utils/breeding.py b/axie-utils/axie_utils/breeding.py index cb3490d..84064dc 100644 --- a/axie-utils/axie_utils/breeding.py +++ b/axie-utils/axie_utils/breeding.py @@ -10,7 +10,7 @@ from axie_utils.abis import AXIE_ABI from axie_utils.utils import ( get_nonce, - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, AXIE_CONTRACT, TIMEOUT_MINS, USER_AGENT @@ -21,7 +21,7 @@ class Breed: def __init__(self, sire_axie, matron_axie, address, private_key): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.sire_axie = sire_axie self.matron_axie = matron_axie @@ -43,7 +43,7 @@ def execute(self): ).buildTransaction({ "chainId": 2020, "gas": 492874, - "gasPrice": self.w3.toWei("0", "gwei"), + "gasPrice": self.w3.toWei("1", "gwei"), "nonce": nonce }) # Sign transaction @@ -53,8 +53,8 @@ def execute(self): ) # Send raw transaction self.w3.eth.send_raw_transaction(signed.rawTransaction) - # get transaction hash - hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) # Wait for transaction to finish or timeout logging.info("{self} about to start!") start_time = datetime.now() @@ -65,7 +65,7 @@ def execute(self): logging.info(f"Transaction {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -78,6 +78,7 @@ def execute(self): if success: logging.info(f"{self} completed successfully") + return _hash else: logging.info(f"{self} failed") @@ -90,14 +91,14 @@ class TrezorBreed: def __init__(self, sire_axie, matron_axie, address, client, bip_path): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.sire_axie = sire_axie self.matron_axie = matron_axie self.address = address.replace("ronin:", "0x") self.client = client self.bip_path = parse_path(bip_path) - self.gwei = self.w3.toWei('0', 'gwei') + self.gwei = self.w3.toWei('1', 'gwei') self.gas = 250000 def execute(self): @@ -115,7 +116,7 @@ def execute(self): ).buildTransaction({ "chainId": 2020, "gas": self.gas, - "gasPrice": self.w3.toWei("0", "gwei"), + "gasPrice": self.gwei, "nonce": nonce }) data = self.w3.toBytes(hexstr=breed_tx['data']) @@ -134,8 +135,8 @@ def execute(self): transaction = rlp.encode((nonce, self.gwei, self.gas, to, 0, data) + sig) # Send raw transaction self.w3.eth.send_raw_transaction(transaction) - # get transaction hash - hash = self.w3.toHex(self.w3.keccak(transaction)) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(transaction)) # Wait for transaction to finish or timeout logging.info("{self} about to start!") start_time = datetime.now() @@ -146,7 +147,7 @@ def execute(self): logging.info(f"Transaction {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -159,8 +160,10 @@ def execute(self): if success: logging.info(f"{self} completed successfully") + return _hash else: logging.info(f"{self} failed") + return def __str__(self): return (f"Breeding axie {self.sire_axie} with {self.matron_axie} in account " diff --git a/axie-utils/axie_utils/claims.py b/axie-utils/axie_utils/claims.py index b819c1f..b0219a5 100644 --- a/axie-utils/axie_utils/claims.py +++ b/axie-utils/axie_utils/claims.py @@ -13,7 +13,7 @@ check_balance, get_nonce, SLP_CONTRACT, - RONIN_PROVIDER_FREE + RONIN_PROVIDER ) from axie_utils.graphql import AxieGraphQL, TrezorAxieGraphQL @@ -23,7 +23,7 @@ def __init__(self, acc_name, **kwargs): super().__init__(**kwargs) self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": self.user_agent}})) self.slp_contract = self.w3.eth.contract( address=Web3.toChecksumAddress(SLP_CONTRACT), @@ -88,7 +88,7 @@ async def async_execute(self): signature['amount'], signature['timestamp'], signature['signature'] - ).buildTransaction({'gas': 492874, 'gasPrice': 0, 'nonce': nonce}) + ).buildTransaction({'gas': 492874, 'gasPrice': 1, 'nonce': nonce}) # Sign claim signed_claim = self.w3.eth.account.sign_transaction( claim, @@ -160,7 +160,7 @@ def execute(self): signature['amount'], signature['timestamp'], signature['signature'] - ).buildTransaction({'gas': 492874, 'gasPrice': 0, 'nonce': nonce}) + ).buildTransaction({'gas': 492874, 'gasPrice': 1, 'nonce': nonce}) # Sign claim signed_claim = self.w3.eth.account.sign_transaction( claim, @@ -197,7 +197,7 @@ def __init__(self, acc_name, **kwargs): super().__init__(**kwargs) self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": self.user_agent}})) self.slp_contract = self.w3.eth.contract( address=Web3.toChecksumAddress(SLP_CONTRACT), @@ -205,7 +205,7 @@ def __init__(self, acc_name, **kwargs): ) self.acc_name = acc_name self.request = requests.Session() - self.gwei = self.w3.toWei('0', 'gwei') + self.gwei = self.w3.toWei('1', 'gwei') self.gas = 492874 def has_unclaimed_slp(self): @@ -264,7 +264,7 @@ async def async_execute(self): signature['amount'], signature['timestamp'], signature['signature'] - ).buildTransaction({'gas': self.gas, 'gasPrice': 0, 'nonce': nonce}) + ).buildTransaction({'gas': self.gas, 'gasPrice': 1, 'nonce': nonce}) data = self.w3.toBytes(hexstr=claim['data']) to = self.w3.toBytes(hexstr=SLP_CONTRACT) sig = ethereum.sign_tx( diff --git a/axie-utils/axie_utils/payments.py b/axie-utils/axie_utils/payments.py index aca81c9..520c3e5 100644 --- a/axie-utils/axie_utils/payments.py +++ b/axie-utils/axie_utils/payments.py @@ -11,7 +11,7 @@ from axie_utils.utils import ( get_nonce, SLP_CONTRACT, - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, TIMEOUT_MINS, USER_AGENT ) @@ -21,7 +21,7 @@ class Payment: def __init__(self, name, from_acc, from_private, to_acc, amount): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.name = name self.from_acc = from_acc.replace("ronin:", "0x") @@ -33,60 +33,17 @@ def __init__(self, name, from_acc, from_private, to_acc, amount): abi=SLP_ABI ) - def send_replacement_tx(self, nonce): + def increase_gas_tx(self, nonce): # check nonce is still available, do nothing if nonce is not available anymore if nonce != get_nonce(self.from_acc): return - # build replacement tx - replacement_tx = self.contract.functions.transfer( - Web3.toChecksumAddress(self.from_acc), - 0 - ).buildTransaction({ - "chainId": 2020, - "gas": 492874, - "gasPrice": self.w3.toWei("0", "gwei"), - "nonce": nonce - }) - # Sign Transaction - signed = self.w3.eth.account.sign_transaction( - replacement_tx, - private_key=self.from_private - ) - # Send raw transaction - self.w3.eth.send_raw_transaction(signed.rawTransaction) - # get transaction hash - new_hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) - # Wait for transaction to finish or timeout - start_time = datetime.now() - while True: - # We will wait for max 5min for this replacement tx to happen - if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): - success = False - logging.info("Replacement transaction, timed out!") - break - try: - receipt = self.w3.eth.get_transaction_receipt(new_hash) - if receipt['status'] == 1: - success = True - else: - success = False - break - except exceptions.TransactionNotFound: - sleep(10) - logging.info(f"Waiting for replacement tx to finish (Nonce: {nonce})") + # Increase gas price to get tx unstuck + self.execute(1.01, nonce) - if success: - logging.info(f"Successfuly replaced transaction with nonce: {nonce}") - logging.info(f"Trying again to execute transaction {self} in 10 seconds") - sleep(10) - self.execute() - else: - logging.info(f"Important: Replacement transaction failed. Means we could not complete tx {self}") - logging.info(f"Important: Please fix account ({self.name}) transactions manually before launching again.") - - def execute(self): + def execute(self, gas_price=1, nonce=None): # Get Nonce - nonce = get_nonce(self.from_acc) + if nonce is None: + nonce = get_nonce(self.from_acc) # Build transaction transaction = self.contract.functions.transfer( Web3.toChecksumAddress(self.to_acc), @@ -94,7 +51,7 @@ def execute(self): ).buildTransaction({ "chainId": 2020, "gas": 246437, - "gasPrice": self.w3.toWei("0", "gwei"), + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), "nonce": nonce }) # Sign Transaction @@ -104,8 +61,8 @@ def execute(self): ) # Send raw transaction self.w3.eth.send_raw_transaction(signed.rawTransaction) - # get transaction hash - hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) # Wait for transaction to finish or timeout start_time = datetime.now() while True: @@ -115,7 +72,7 @@ def execute(self): logging.info(f"Transaction {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -127,11 +84,12 @@ def execute(self): logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") if success: - logging.info(f"Transaction {self} completed! Hash: {hash} - " - f"Explorer: https://explorer.roninchain.com/tx/{str(hash)}") + logging.info(f"Transaction {self} completed! _hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash else: - logging.info(f"Transaction {self} failed. Trying to replace it with a 0 value tx and re-try.") - self.send_replacement_tx(nonce) + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) def __str__(self): return f"{self.name}({self.to_acc.replace('0x', 'ronin:')}) for the amount of {self.amount} SLP" @@ -141,7 +99,7 @@ class TrezorPayment: def __init__(self, name, client, bip_path, from_acc, to_acc, amount): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.name = name self.from_acc = from_acc.replace("ronin:", "0x") @@ -153,71 +111,19 @@ def __init__(self, name, client, bip_path, from_acc, to_acc, amount): ) self.client = client self.bip_path = parse_path(bip_path) - self.gwei = self.w3.toWei('0', 'gwei') self.gas = 250000 - def send_replacement_tx(self, nonce): + def increase_gas_tx(self, nonce): # check nonce is still available, do nothing if nonce is not available anymore if nonce != get_nonce(self.from_acc): return - # build replacement tx - replace_tx = self.contract.functions.transfer( - Web3.toChecksumAddress(self.from_acc), - 0 - ).buildTransaction({ - "chainId": 2020, - "gas": self.gas, - "gasPrice": self.w3.toWei("0", "gwei"), - "nonce": nonce - }) - data = self.w3.toBytes(hexstr=replace_tx['data']) - to = self.w3.toBytes(hexstr=SLP_CONTRACT) - sig = ethereum.sign_tx( - self.client, - n=self.bip_path, - nonce=nonce, - gas_price=self.gwei, - gas_limit=self.gas, - to=SLP_CONTRACT, - value=0, - data=data, - chain_id=2020 - ) - replacement_tx = rlp.encode((nonce, self.gwei, self.gas, to, 0, data) + sig) - # Send raw transaction - self.w3.eth.send_raw_transaction(replacement_tx) - # get transaction hash - new_hash = self.w3.toHex(self.w3.keccak(replacement_tx)) - # Wait for transaction to finish or timeout - start_time = datetime.now() - while True: - # We will wait for max 5min for this replacement tx to happen - if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): - success = False - logging.info("Replacement transaction, timed out!") - break - try: - receipt = self.w3.eth.get_transaction_receipt(new_hash) - if receipt['status'] == 1: - success = True - else: - success = False - break - except exceptions.TransactionNotFound: - sleep(10) - logging.info(f"Waiting for replacement tx to finish (Nonce: {nonce})") - - if success: - logging.info(f"Successfuly replaced transaction with nonce: {nonce}") - logging.info(f"Trying again to execute transaction {self} in 10 seconds") - sleep(10) - self.execute() - else: - logging.info(f"Replacement transaction failed. Means we could not complete tx {self}") + # Increase gas price to get tx unstuck + self.execute(1.01, nonce) - def execute(self): + def execute(self, gas_price=1, nonce=None): # Get Nonce - nonce = get_nonce(self.from_acc) + if nonce is None: + nonce = get_nonce(self.from_acc) # Build transaction send_tx = self.contract.functions.transfer( Web3.toChecksumAddress(self.to_acc), @@ -225,7 +131,7 @@ def execute(self): ).buildTransaction({ "chainId": 2020, "gas": self.gas, - "gasPrice": self.gwei, + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), "nonce": nonce }) data = self.w3.toBytes(hexstr=send_tx['data']) @@ -234,17 +140,17 @@ def execute(self): self.client, n=self.bip_path, nonce=nonce, - gas_price=self.gwei, + gas_price=self.w3.toWei(str(gas_price), "gwei"), gas_limit=self.gas, to=SLP_CONTRACT, value=0, data=data, chain_id=2020 ) - transaction = rlp.encode((nonce, self.gwei, self.gas, to, 0, data) + sig) + transaction = rlp.encode((nonce, self.w3.toWei(str(gas_price), 'gwei'), self.gas, to, 0, data) + sig) # Send raw transaction self.w3.eth.send_raw_transaction(transaction) - hash = self.w3.toHex(self.w3.keccak(transaction)) + _hash = self.w3.toHex(self.w3.keccak(transaction)) # Wait for transaction to finish or timeout start_time = datetime.now() while True: @@ -254,7 +160,7 @@ def execute(self): logging.info(f"Transaction {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -266,11 +172,12 @@ def execute(self): logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") if success: - logging.info(f"Transaction {self} completed! Hash: {hash} - " - f"Explorer: https://explorer.roninchain.com/tx/{str(hash)}") + logging.info(f"Transaction {self} completed! _hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash else: - logging.info(f"Transaction {self} failed. Trying to replace it with a 0 value tx and re-try.") - self.send_replacement_tx(nonce) + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) def __str__(self): return f"{self.name}({self.to_acc.replace('0x', 'ronin:')}) for the amount of {self.amount} SLP" diff --git a/axie-utils/axie_utils/scatter.py b/axie-utils/axie_utils/scatter.py new file mode 100644 index 0000000..fb25fc9 --- /dev/null +++ b/axie-utils/axie_utils/scatter.py @@ -0,0 +1,423 @@ +import rlp +import logging +from datetime import datetime, timedelta +from time import sleep + +from trezorlib import ethereum +from trezorlib.tools import parse_path +from web3 import Web3, exceptions + +from axie_utils.abis import SCATTER_ABI, BALANCE_ABI +from axie_utils.utils import ( + get_nonce, + check_balance, + SCATTER_CONTRACT, + TOKENS, + RONIN_PROVIDER, + USER_AGENT, + TIMEOUT_MINS +) + + +class Scatter: + def __init__(self, token, from_acc, from_private, to_ronin_ammount_dict): + self.w3 = Web3( + Web3.HTTPProvider( + RONIN_PROVIDER, + request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) + self.token = token.lower() + if self.token != 'ron': + self.token_contract = self.w3.eth.contract( + address=Web3.toChecksumAddress(TOKENS[self.token]), + abi=BALANCE_ABI + ) + self.from_acc = from_acc.replace("ronin:", "0x") + self.from_private = from_private + self.contract = self.w3.eth.contract( + address=Web3.toChecksumAddress(SCATTER_CONTRACT), + abi=SCATTER_ABI + ) + self.to_list = [] + self.amounts_list = [] + for k,v in to_ronin_ammount_dict.items(): + self.to_list.append(k) + self.amounts_list.append(v) + + def is_contract_accepted(self): + allowance = self.token_contract.functions.allowance( + Web3.toChecksumAddress(self.from_acc), + Web3.toChecksumAddress(SCATTER_CONTRACT)).call() + if int(allowance) > sum(self.amounts_list): + return True + return self.approve_contract() + + def approve_contract(self): + approve_tx = self.token_contract.functions.approve( + Web3.toChecksumAddress(SCATTER_CONTRACT), + 115792089237316195423570985008687907853269984665640564039457584007913129639935 + ).buildTransaction({ + "from": Web3.toChecksumAddress(self.from_acc), + "to": Web3.toChecksumAddress(TOKENS[self.token]), + "gas": 1000000, + "gasPrice": self.w3.toWei(1, "gwei") + }) + signed_approval = self.w3.eth.account.sign_transaction( + approve_tx, + private_key=self.from_private + ) + self.w3.eth.send_raw_transaction(signed_approval.rawTransaction) + approve_hash = self.w3.toHex(self.w3.keccak(signed_approval.rawTransaction)) + approved = self.w3.eth.wait_for_transaction_receipt(approve_hash, timeout=240) + if approved['status'] == 1: + return True + return False + + def increase_gas_tx(self, nonce): + # check nonce is still available, do nothing if nonce is not available anymore + if nonce != get_nonce(self.from_acc): + return + # Increase gas price to get tx unstuck + return self.execute(1.01, nonce) + + def execute_token(self, gas_price=1, nonce=None): + # Check token is approved + if not self.is_contract_accepted(): + logging.warning(f"Token {self.token} is not approved to use scatter, " + "you can re-try or manually accept it on " + "scatter website (https://scatter.roninchain.com/).") + return + + # Check enough balance is present + if not check_balance(self.from_acc, self.token) >= sum(self.amounts_list) and check_balance(self.from_acc, 'ron') >= 0.011: + logging.warning("Not enough {TOKEN[self.token]} balance or not enough RON to pay for the tx") + return + + # Get Nonce + if nonce is None: + nonce = get_nonce(self.from_acc) + # Build transaction + transaction = self.contract.functions.disperseTokenSimple( + TOKENS[self.token], + self.to_list, + self.amounts_list + ).buildTransaction({ + "chainId": 2020, + "gas": 1000000, + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), + "nonce": nonce + }) + # Sign Transaction + signed = self.w3.eth.account.sign_transaction( + transaction, + private_key=self.from_private + ) + # Send raw transaction + self.w3.eth.send_raw_transaction(signed.rawTransaction) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) + # Wait for transaction to finish or timeout + start_time = datetime.now() + while True: + # We will wait for max 5minutes for this tx to respond, if it does not, we will re-try + if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): + success = False + logging.info(f"Transaction {self}, timed out!") + break + try: + recepit = self.w3.eth.get_transaction_receipt(_hash) + if recepit["status"] == 1: + success = True + else: + success = False + break + except exceptions.TransactionNotFound: + # Sleep 10s while waiting + sleep(10) + logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") + + if success: + logging.info(f"Transaction {self} completed! hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash + else: + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) + + + def execute_ron(self, gas_price=1, nonce=None): + # Check enough balance is present + if not check_balance(self.from_acc, 'ron') >= (sum(self.amounts_list) + 0.011): + logging.warning("Not enough RON balance to scatter and pay the tx.") + return + + # Get Nonce + if nonce is None: + nonce = get_nonce(self.from_acc) + # Build transaction + transaction = self.contract.functions.disperseEther( + self.to_list, + self.amounts_list + ).buildTransaction({ + "chainId": 2020, + "gas": 1000000, + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), + "nonce": nonce + }) + # Sign Transaction + signed = self.w3.eth.account.sign_transaction( + transaction, + private_key=self.from_private + ) + # Send raw transaction + self.w3.eth.send_raw_transaction(signed.rawTransaction) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) + # Wait for transaction to finish or timeout + start_time = datetime.now() + while True: + # We will wait for max 5minutes for this tx to respond, if it does not, we will re-try + if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): + success = False + logging.info(f"Transaction {self}, timed out!") + break + try: + recepit = self.w3.eth.get_transaction_receipt(_hash) + if recepit["status"] == 1: + success = True + else: + success = False + break + except exceptions.TransactionNotFound: + # Sleep 10s while waiting + sleep(10) + logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") + + if success: + logging.info(f"Transaction {self} completed! hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash + else: + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) + + def execute(self, gas_price=1, nonce=None): + if self.token == 'ron': + return self.execute_ron(gas_price, nonce) + return self.execute_token(gas_price, nonce) + + +class TrezorScatter: + def __init__(self, token, from_acc, client, bip_path, to_ronin_ammount_dict): + self.w3 = Web3( + Web3.HTTPProvider( + RONIN_PROVIDER, + request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) + self.token = token.lower() + if self.token != 'ron': + self.token_contract = self.w3.eth.contract( + address=Web3.toChecksumAddress(TOKENS[self.token]), + abi=BALANCE_ABI + ) + self.from_acc = from_acc.replace("ronin:", "0x") + self.client = client + self.bip_path = parse_path(bip_path) + self.contract = self.w3.eth.contract( + address=Web3.toChecksumAddress(SCATTER_CONTRACT), + abi=SCATTER_ABI + ) + self.to_list = [] + self.amounts_list = [] + for k,v in to_ronin_ammount_dict.items(): + self.to_list.append(k) + self.amounts_list.append(v) + + def is_contract_accepted(self): + allowance = self.token_contract.functions.allowance( + Web3.toChecksumAddress(self.from_acc), + Web3.toChecksumAddress(SCATTER_CONTRACT)).call() + if int(allowance) > sum(self.amounts_list): + return True + self.approve_contract() + + def approve_contract(self): + nonce = get_nonce(self.from_acc) + approve_tx = self.token_contract.functions.approve( + Web3.toChecksumAddress(SCATTER_CONTRACT), + 115792089237316195423570985008687907853269984665640564039457584007913129639935 + ).buildTransaction({ + "from": Web3.toChecksumAddress(self.from_acc), + "to": Web3.toChecksumAddress(TOKENS[self.token]), + "gas": 1000000, + "gasPrice": self.w3.toWei(1, "gwei") + }) + data = self.w3.toBytes(hexstr=approve_tx['data']) + to = self.w3.toBytes(hexstr=TOKENS[self.token]) + sig = ethereum.sign_tx( + self.client, + n=self.bip_path, + nonce=nonce, + gas_price=self.w3.toWei(1, "gwei"), + gas_limit=1000000, + to=TOKENS[self.token], + value=0, + data=data, + chain_id=2020 + ) + transaction = rlp.encode((nonce, self.w3.toWei(1, "gwei"), 1000000, to, 0, data) + sig) + self.w3.eth.send_raw_transaction(transaction) + approve_hash = self.w3.toHex(self.w3.keccak(transaction)) + approved = self.w3.eth.wait_for_transaction_receipt(approve_hash, timeout=240) + if approved['status'] == 1: + return True + return False + + def increase_gas_tx(self, nonce): + # check nonce is still available, do nothing if nonce is not available anymore + if nonce != get_nonce(self.from_acc): + return + # Increase gas price to get tx unstuck + if self.token == 'ron': + self.execute_ron(1.01, nonce) + self.execute_token(1.01, nonce) + + def execute_token(self, gas_price=1, nonce=None): + # Check token is approved + if not self.is_contract_accepted(): + logging.warning(f"Token {self.token} is not approved to use scatter, " + "you can re-try or manually accept it on " + "scatter website (https://scatter.roninchain.com/).") + return + + # Check enough balance is present + if not check_balance(self.from_acc, self.token) >= sum(self.amounts_list) and check_balance(self.from_acc, 'ron') >= 0.011: + logging.warning("Not enough {TOKEN[self.token]} balance or not enough RON to pay for the tx") + return + + # Get Nonce + if nonce is None: + nonce = get_nonce(self.from_acc) + # Build transaction + transaction = self.contract.functions.disperseTokenSimple( + TOKENS[self.token], + self.to_list, + self.amounts_list + ).buildTransaction({ + "chainId": 2020, + "gas": 1000000, + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), + "nonce": nonce + }) + data = self.w3.toBytes(hexstr=transaction['data']) + to = self.w3.toBytes(hexstr=SCATTER_CONTRACT) + sig = ethereum.sign_tx( + self.client, + n=self.bip_path, + nonce=nonce, + gas_price=self.w3.toWei(str(gas_price), "gwei"), + gas_limit=1000000, + to=SCATTER_CONTRACT, + value=0, + data=data, + chain_id=2020 + ) + transaction = rlp.encode((nonce, self.w3.toWei(str(gas_price), "gwei"), 1000000, to, 0, data) + sig) + # Send raw transaction + self.w3.eth.send_raw_transaction(transaction) + _hash = self.w3.toHex(self.w3.keccak(transaction)) + # Wait for transaction to finish or timeout + start_time = datetime.now() + while True: + # We will wait for max 5minutes for this tx to respond, if it does not, we will re-try + if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): + success = False + logging.info(f"Transaction {self}, timed out!") + break + try: + recepit = self.w3.eth.get_transaction_receipt(_hash) + if recepit["status"] == 1: + success = True + else: + success = False + break + except exceptions.TransactionNotFound: + # Sleep 10s while waiting + sleep(10) + logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") + + if success: + logging.info(f"Transaction {self} completed! hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash + else: + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) + + + def execute_ron(self, gas_price=1, nonce=None): + # Check enough balance is present + if not check_balance(self.from_acc, 'ron') >= sum(self.amounts_list) + 0.011: + logging.warning("Not enough RON balance to scatter and pay the tx.") + return + + # Get Nonce + if nonce is None: + nonce = get_nonce(self.from_acc) + # Build transaction + transaction = self.contract.functions.disperseEther( + self.to_list, + self.amounts_list + ).buildTransaction({ + "chainId": 2020, + "gas": 1000000, + "gasPrice": self.w3.toWei(str(gas_price), "gwei"), + "nonce": nonce + }) + data = self.w3.toBytes(hexstr=transaction['data']) + to = self.w3.toBytes(hexstr=SCATTER_CONTRACT) + sig = ethereum.sign_tx( + self.client, + n=self.bip_path, + nonce=nonce, + gas_price=self.w3.toWei(str(gas_price), "gwei"), + gas_limit=1000000, + to=SCATTER_CONTRACT, + value=0, + data=data, + chain_id=2020 + ) + transaction = rlp.encode((nonce, self.w3.toWei(str(gas_price), "gwei"), 1000000, to, 0, data) + sig) + # Send raw transaction + self.w3.eth.send_raw_transaction(transaction) + _hash = self.w3.toHex(self.w3.keccak(transaction)) + # Wait for transaction to finish or timeout + start_time = datetime.now() + while True: + # We will wait for max 5minutes for this tx to respond, if it does not, we will re-try + if datetime.now() - start_time > timedelta(minutes=TIMEOUT_MINS): + success = False + logging.info(f"Transaction {self}, timed out!") + break + try: + recepit = self.w3.eth.get_transaction_receipt(_hash) + if recepit["status"] == 1: + success = True + else: + success = False + break + except exceptions.TransactionNotFound: + # Sleep 10s while waiting + sleep(10) + logging.info(f"Waiting for transaction '{self}' to finish (Nonce:{nonce})...") + + if success: + logging.info(f"Transaction {self} completed! hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash + else: + logging.info(f"Transaction {self} failed. Trying to augment gas price to unstuck it.") + self.increase_gas_tx(nonce) + + def execute(self, gas_price=1, nonce=None): + if self.token == 'ron': + return self.execute_ron(gas_price, nonce) + return self.execute_token(gas_price, nonce) diff --git a/axie-utils/axie_utils/transfers.py b/axie-utils/axie_utils/transfers.py index ac2c26a..43e8e48 100644 --- a/axie-utils/axie_utils/transfers.py +++ b/axie-utils/axie_utils/transfers.py @@ -10,7 +10,7 @@ from axie_utils.abis import AXIE_ABI from axie_utils.utils import ( get_nonce, - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, AXIE_CONTRACT, TIMEOUT_MINS, USER_AGENT @@ -21,7 +21,7 @@ class Transfer: def __init__(self, from_acc, from_private, to_acc, axie_id): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.from_acc = from_acc.replace("ronin:", "0x") self.from_private = from_private @@ -45,7 +45,7 @@ def execute(self): "chainId": 2020, "gas": 492874, "from": Web3.toChecksumAddress(self.from_acc), - "gasPrice": self.w3.toWei("0", "gwei"), + "gasPrice": self.w3.toWei("1", "gwei"), "value": 0, "nonce": nonce }) @@ -56,8 +56,8 @@ def execute(self): ) # Send raw transaction self.w3.eth.send_raw_transaction(signed.rawTransaction) - # get transaction hash - hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) + # get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(signed.rawTransaction)) # Wait for transaction to finish or timeout start_time = datetime.now() while True: @@ -67,7 +67,7 @@ def execute(self): logging.info(f"Important: Transfer {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -78,10 +78,12 @@ def execute(self): # Sleep 10 seconds not to constantly send requests! sleep(10) if success: - logging.info(f"{self} completed! Hash: {hash} - " - f"Explorer: https://explorer.roninchain.com/tx/{str(hash)}") + logging.info(f"{self} completed! Hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash else: logging.info(f"{self} failed") + return def __str__(self): return (f"Axie Transfer of axie ({self.axie_id}) from account ({self.from_acc.replace('0x', 'ronin:')}) " @@ -92,14 +94,14 @@ class TrezorTransfer: def __init__(self, from_acc, client, bip_path, to_acc, axie_id): self.w3 = Web3( Web3.HTTPProvider( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) self.from_acc = from_acc.replace("ronin:", "0x") self.to_acc = to_acc.replace("ronin:", "0x") self.axie_id = axie_id self.client = client self.bip_path = parse_path(bip_path) - self.gwei = self.w3.toWei('0', 'gwei') + self.gwei = self.w3.toWei('1', 'gwei') self.gas = 250000 def execute(self): @@ -118,7 +120,7 @@ def execute(self): "chainId": 2020, "gas": self.gas, "from": Web3.toChecksumAddress(self.from_acc), - "gasPrice": self.w3.toWei("0", "gwei"), + "gasPrice": self.w3.toWei("1", "gwei"), "value": 0, "nonce": nonce }) @@ -138,8 +140,8 @@ def execute(self): transaction = rlp.encode((nonce, self.gwei, self.gas, to, 0, data) + sig) # Send raw transaction self.w3.eth.send_raw_transaction(transaction) - # Get transaction hash - hash = self.w3.toHex(self.w3.keccak(transaction)) + # Get transaction _hash + _hash = self.w3.toHex(self.w3.keccak(transaction)) # Wait for transaction to finish or timeout start_time = datetime.now() while True: @@ -149,7 +151,7 @@ def execute(self): logging.info(f"Transfer {self}, timed out!") break try: - recepit = self.w3.eth.get_transaction_receipt(hash) + recepit = self.w3.eth.get_transaction_receipt(_hash) if recepit["status"] == 1: success = True else: @@ -160,10 +162,12 @@ def execute(self): # Sleep 10 seconds not to constantly send requests! sleep(10) if success: - logging.info(f"{self} completed! Hash: {hash} - " - f"Explorer: https://explorer.roninchain.com/tx/{str(hash)}") + logging.info(f"{self} completed! Hash: {_hash} - " + f"Explorer: https://explorer.roninchain.com/tx/{str(_hash)}") + return _hash else: logging.info(f"{self} failed") + return def __str__(self): return (f"Axie Transfer of axie ({self.axie_id}) from account ({self.from_acc.replace('0x', 'ronin:')}) " diff --git a/axie-utils/axie_utils/utils.py b/axie-utils/axie_utils/utils.py index f2c8d26..af9728e 100644 --- a/axie-utils/axie_utils/utils.py +++ b/axie-utils/axie_utils/utils.py @@ -18,6 +18,8 @@ AXS_CONTRACT = "0x97a9107c1793bc407d6f527b77e7fff4d812bece" SLP_CONTRACT = "0xa8754b9fa15fc18bb59458815510e40a12cd2014" WETH_CONTRACT = "0xc99a6a985ed2cac1ef41640596c5a5f9f4e19ef5" +USDC_CONTRACT = "0x0b7007c13325c48911f73a2dad5fa5dcbf808adc" +SCATTER_CONTRACT = "0x14978681c5f8ce2f6b66d1f1551b0ec67405574c" RONIN_PROVIDER_FREE = "https://proxy.roninchain.com/free-gas-rpc" RONIN_PROVIDER = "https://api.roninchain.com/rpc" RETRIES = Retry( @@ -27,25 +29,28 @@ allowed_methods=frozenset(['GET', 'POST']) ) +TOKENS = { + 'slp': SLP_CONTRACT, + 'axs': AXS_CONTRACT, + 'axies': AXIE_CONTRACT, + 'weth': WETH_CONTRACT, + 'usdc': USDC_CONTRACT +} -def check_balance(account, token='slp'): - if token == 'slp': - contract = SLP_CONTRACT - elif token == 'axs': - contract = AXS_CONTRACT - elif token == "axies": - contract = AXIE_CONTRACT - elif token == "weth": - contract = WETH_CONTRACT - else: - return 0 +def check_balance(account, token='slp'): w3 = Web3( Web3.HTTPProvider( RONIN_PROVIDER, request_kwargs={ "headers": {"content-type": "application/json", "user-agent": USER_AGENT}})) + if token.lower() in TOKENS: + contract = TOKENS[token.lower()] + elif token.lower() == "ron": + return float(w3.eth.get_balance(Web3.toChecksumAddress(account.replace("ronin:", "0x"))) / 1000000000000000000) + else: + return 0 ctr = w3.eth.contract( address=Web3.toChecksumAddress(contract), abi=BALANCE_ABI diff --git a/axie-utils/poetry.lock b/axie-utils/poetry.lock index ee582bb..be4732e 100644 --- a/axie-utils/poetry.lock +++ b/axie-utils/poetry.lock @@ -88,7 +88,7 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.10" +version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -99,7 +99,7 @@ unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.0.3" +version = "8.0.4" description = "Composable command line interface toolkit" category = "main" optional = false @@ -118,7 +118,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "construct" -version = "2.10.67" +version = "2.10.68" description = "A powerful declarative symmetric parser/builder for binary data" category = "main" optional = false @@ -129,11 +129,11 @@ extras = ["arrow", "cloudpickle", "enum34", "lz4", "numpy", "ruamel.yaml"] [[package]] name = "coverage" -version = "6.2" +version = "6.3.2" description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] tomli = {version = "*", optional = true, markers = "extra == \"toml\""} @@ -192,7 +192,7 @@ tools = ["hypothesis (>=3.6.1,<4)"] [[package]] name = "eth-account" -version = "0.5.6" +version = "0.5.7" description = "eth-account: Sign Ethereum transactions and messages with local private keys" category = "main" optional = false @@ -202,17 +202,17 @@ python-versions = ">=3.6, <4" bitarray = ">=1.2.1,<1.3.0" eth-abi = ">=2.0.0b7,<3" eth-keyfile = ">=0.5.0,<0.6.0" -eth-keys = ">=0.2.1,<0.3.2 || >0.3.2,<0.4.0" +eth-keys = ">=0.3.4,<0.4.0" eth-rlp = ">=0.1.2,<2" eth-utils = ">=1.3.0,<2" hexbytes = ">=0.1.0,<1" rlp = ">=1.0.0,<3" [package.extras] -dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "hypothesis (>=4.18.0,<5)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"] +dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "hypothesis (>=4.18.0,<5)", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (==3.14.6)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"] doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"] lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)"] -test = ["hypothesis (>=4.18.0,<5)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"] +test = ["hypothesis (>=4.18.0,<5)", "pytest (>=6.2.5,<7)", "pytest-xdist", "tox (==3.14.6)"] [[package]] name = "eth-hash" @@ -249,7 +249,7 @@ pycryptodome = ">=3.4.7,<4.0.0" [[package]] name = "eth-keys" -version = "0.3.3" +version = "0.3.4" description = "Common API for Ethereum key operations." category = "main" optional = false @@ -257,14 +257,14 @@ python-versions = "*" [package.dependencies] eth-typing = ">=2.2.1,<3.0.0" -eth-utils = ">=1.3.0,<2.0.0" +eth-utils = ">=1.8.2,<2.0.0" [package.extras] coincurve = ["coincurve (>=7.0.0,<13.0.0)"] -dev = ["tox (==2.7.0)", "bumpversion (==0.5.3)", "twine", "eth-utils (>=1.3.0,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)", "flake8 (==3.0.4)", "mypy (==0.701)", "asn1tools (>=0.146.2,<0.147)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==3.2.2)", "hypothesis (>=4.56.1,<5.0.0)", "eth-hash", "eth-hash"] -eth-keys = ["eth-utils (>=1.3.0,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)"] -lint = ["flake8 (==3.0.4)", "mypy (==0.701)"] -test = ["asn1tools (>=0.146.2,<0.147)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==3.2.2)", "hypothesis (>=4.56.1,<5.0.0)", "eth-hash", "eth-hash"] +dev = ["tox (==3.20.0)", "bumpversion (==0.5.3)", "twine", "eth-utils (>=1.8.2,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)", "flake8 (==3.0.4)", "mypy (==0.782)", "asn1tools (>=0.146.2,<0.147)", "factory-boy (>=3.0.1,<3.1)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==5.4.1)", "hypothesis (>=5.10.3,<6.0.0)", "eth-hash", "eth-hash"] +eth-keys = ["eth-utils (>=1.8.2,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)"] +lint = ["flake8 (==3.0.4)", "mypy (==0.782)"] +test = ["asn1tools (>=0.146.2,<0.147)", "factory-boy (>=3.0.1,<3.1)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==5.4.1)", "hypothesis (>=5.10.3,<6.0.0)", "eth-hash", "eth-hash"] [[package]] name = "eth-rlp" @@ -287,7 +287,7 @@ test = ["eth-hash", "pytest-xdist", "pytest (==5.4.1)", "tox (==3.14.6)"] [[package]] name = "eth-typing" -version = "2.2.2" +version = "2.3.0" description = "eth-typing: Common type annotations for ethereum python packages" category = "main" optional = false @@ -321,22 +321,22 @@ test = ["hypothesis (>=4.43.0,<5.0.0)", "pytest (==5.4.1)", "pytest-xdist", "tox [[package]] name = "freezegun" -version = "1.1.0" +version = "1.2.1" description = "Let your Python tests travel through time" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.dependencies] python-dateutil = ">=2.7" [[package]] name = "frozenlist" -version = "1.2.0" +version = "1.3.0" description = "A list-like structure which implements collections.abc.MutableSequence" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "hexbytes" @@ -354,7 +354,7 @@ test = ["eth-utils (>=1.0.1,<2)", "hypothesis (>=3.44.24,<4)", "pytest-xdist", " [[package]] name = "hidapi" -version = "0.11.0.post2" +version = "0.11.2" description = "A Cython interface to the hidapi from https://github.com/libusb/hidapi" category = "main" optional = false @@ -407,7 +407,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator [[package]] name = "libusb1" -version = "2.0.1" +version = "3.0.0" description = "Pure-python wrapper for libusb-1.0" category = "main" optional = false @@ -458,11 +458,11 @@ varint = "*" [[package]] name = "multidict" -version = "5.2.0" +version = "6.0.2" description = "multidict implementation" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "netaddr" @@ -508,7 +508,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "protobuf" -version = "3.19.3" +version = "3.19.4" description = "Protocol Buffers" category = "main" optional = false @@ -524,7 +524,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pycryptodome" -version = "3.12.0" +version = "3.14.1" description = "Cryptographic library for Python" category = "main" optional = false @@ -532,7 +532,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pyparsing" -version = "3.0.6" +version = "3.0.7" description = "Python parsing module" category = "dev" optional = false @@ -543,11 +543,11 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" -version = "0.18.0" +version = "0.18.1" description = "Persistent/Functional/Immutable data structures" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "pytest" @@ -601,11 +601,11 @@ testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtuale [[package]] name = "pytest-mock" -version = "3.6.1" +version = "3.7.0" description = "Thin-wrapper around the mock package for easier use with pytest" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] pytest = ">=5.0" @@ -702,7 +702,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "2.0.0" +version = "2.0.1" description = "A lil' TOML parser" category = "dev" optional = false @@ -744,7 +744,7 @@ stellar = ["stellar-sdk (>=4.0.0,<6.0.0)"] [[package]] name = "typing-extensions" -version = "4.0.1" +version = "4.1.1" description = "Backported and Experimental Type Hints for Python 3.6+" category = "main" optional = false @@ -752,14 +752,14 @@ python-versions = ">=3.6" [[package]] name = "urllib3" -version = "1.26.8" +version = "1.26.9" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] -brotli = ["brotlipy (>=0.6.0)"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] @@ -773,7 +773,7 @@ python-versions = "*" [[package]] name = "web3" -version = "5.26.0" +version = "5.28.0" description = "Web3.py" category = "main" optional = false @@ -782,7 +782,7 @@ python-versions = ">=3.6,<4" [package.dependencies] aiohttp = ">=3.7.4.post0,<4" eth-abi = ">=2.0.0b6,<3.0.0" -eth-account = ">=0.5.6,<0.6.0" +eth-account = ">=0.5.7,<0.6.0" eth-hash = {version = ">=0.2.0,<1.0.0", extras = ["pycryptodome"]} eth-typing = ">=2.0.0,<3.0.0" eth-utils = ">=1.9.5,<2.0.0" @@ -796,10 +796,10 @@ requests = ">=2.16.0,<3.0.0" websockets = ">=9.1,<10" [package.extras] -dev = ["eth-tester[py-evm] (==v0.6.0-beta.4)", "py-geth (>=3.7.0,<4)", "flake8 (==3.8.3)", "isort (>=4.2.15,<4.3.5)", "mypy (==0.910)", "types-setuptools (>=57.4.4,<58)", "types-requests (>=2.26.1,<3)", "types-protobuf (>=3.18.2,<4)", "mock", "sphinx-better-theme (>=0.1.4)", "click (>=5.1)", "configparser (==3.5.0)", "contextlib2 (>=0.5.4)", "py-geth (>=3.6.0,<4)", "py-solc (>=0.4.0)", "pytest (>=4.4.0,<5.0.0)", "sphinx (>=3.0,<4)", "sphinx-rtd-theme (>=0.1.9)", "toposort (>=1.4)", "towncrier (==18.5.0)", "urllib3", "wheel", "bumpversion", "flaky (>=3.7.0,<4)", "hypothesis (>=3.31.2,<6)", "pytest-asyncio (>=0.10.0,<0.11)", "pytest-mock (>=1.10,<2)", "pytest-pythonpath (>=0.3)", "pytest-watch (>=4.2,<5)", "pytest-xdist (>=1.29,<2)", "setuptools (>=38.6.0)", "tox (>=1.8.0)", "tqdm (>4.32,<5)", "twine (>=1.13,<2)", "pluggy (==0.13.1)", "when-changed (>=0.3.0,<0.4)"] +dev = ["eth-tester[py-evm] (==v0.6.0-beta.6)", "py-geth (>=3.7.0,<4)", "flake8 (==3.8.3)", "isort (>=4.2.15,<4.3.5)", "mypy (==0.910)", "types-setuptools (>=57.4.4,<58)", "types-requests (>=2.26.1,<3)", "types-protobuf (>=3.18.2,<4)", "mock", "sphinx-better-theme (>=0.1.4)", "click (>=5.1)", "configparser (==3.5.0)", "contextlib2 (>=0.5.4)", "py-geth (>=3.6.0,<4)", "py-solc (>=0.4.0)", "pytest (>=4.4.0,<5.0.0)", "sphinx (>=3.0,<4)", "sphinx-rtd-theme (>=0.1.9)", "toposort (>=1.4)", "towncrier (==18.5.0)", "urllib3", "wheel", "bumpversion", "flaky (>=3.7.0,<4)", "hypothesis (>=3.31.2,<6)", "pytest-asyncio (>=0.10.0,<0.11)", "pytest-mock (>=1.10,<2)", "pytest-pythonpath (>=0.3)", "pytest-watch (>=4.2,<5)", "pytest-xdist (>=1.29,<2)", "setuptools (>=38.6.0)", "tox (>=1.8.0)", "tqdm (>4.32,<5)", "twine (>=1.13,<2)", "pluggy (==0.13.1)", "when-changed (>=0.3.0,<0.4)"] docs = ["mock", "sphinx-better-theme (>=0.1.4)", "click (>=5.1)", "configparser (==3.5.0)", "contextlib2 (>=0.5.4)", "py-geth (>=3.6.0,<4)", "py-solc (>=0.4.0)", "pytest (>=4.4.0,<5.0.0)", "sphinx (>=3.0,<4)", "sphinx-rtd-theme (>=0.1.9)", "toposort (>=1.4)", "towncrier (==18.5.0)", "urllib3", "wheel"] linter = ["flake8 (==3.8.3)", "isort (>=4.2.15,<4.3.5)", "mypy (==0.910)", "types-setuptools (>=57.4.4,<58)", "types-requests (>=2.26.1,<3)", "types-protobuf (>=3.18.2,<4)"] -tester = ["eth-tester[py-evm] (==v0.6.0-beta.4)", "py-geth (>=3.7.0,<4)"] +tester = ["eth-tester[py-evm] (==v0.6.0-beta.6)", "py-geth (>=3.7.0,<4)"] [[package]] name = "websockets" @@ -929,68 +929,62 @@ certifi = [ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, + {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, + {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] construct = [ - {file = "construct-2.10.67.tar.gz", hash = "sha256:730235fedf4f2fee5cfadda1d14b83ef1bf23790fb1cc579073e10f70a050883"}, + {file = "construct-2.10.68.tar.gz", hash = "sha256:7b2a3fd8e5f597a5aa1d614c3bd516fa065db01704c72a1efaaeec6ef23d8b45"}, ] coverage = [ - {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, - {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, - {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, - {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, - {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, - {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, - {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, - {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, - {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, - {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, - {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, - {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, - {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, - {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, - {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, - {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, - {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, - {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, - {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, - {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, + {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, + {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, + {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, + {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, + {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, + {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, + {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, + {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, + {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, + {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, + {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, + {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, + {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, + {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, + {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, + {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, + {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, + {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, + {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, + {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, + {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, + {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, ] cytoolz = [ {file = "cytoolz-0.11.2.tar.gz", hash = "sha256:ea23663153806edddce7e4153d1d407d62357c05120a4e8485bddf1bd5ab22b4"}, @@ -1004,8 +998,8 @@ eth-abi = [ {file = "eth_abi-2.1.1.tar.gz", hash = "sha256:4bb1d87bb6605823379b07f6c02c8af45df01a27cc85bd6abb7cf1446ce7d188"}, ] eth-account = [ - {file = "eth-account-0.5.6.tar.gz", hash = "sha256:baef80956e88af5643f8602e72aab6bcd91d8a9f71dd03c7a7f1145f5e6fd694"}, - {file = "eth_account-0.5.6-py3-none-any.whl", hash = "sha256:d324daf5a40bd5bdaf5ddaebfec71e7440b21f9ae4989921ce1253d63f8fe436"}, + {file = "eth-account-0.5.7.tar.gz", hash = "sha256:c86b59ff92f1bb14dea2632c2df657be6a98c450cfe24e2536fb69b6207364e7"}, + {file = "eth_account-0.5.7-py3-none-any.whl", hash = "sha256:a82ff2500d7e7a54535ec3d4ea0a58feaf6e94f3ff65ae999f2a508e9b2e1ec1"}, ] eth-hash = [ {file = "eth-hash-0.3.2.tar.gz", hash = "sha256:3f40cecd5ead88184aa9550afc19d057f103728108c5102f592f8415949b5a76"}, @@ -1016,135 +1010,125 @@ eth-keyfile = [ {file = "eth_keyfile-0.5.1-py3-none-any.whl", hash = "sha256:70d734af17efdf929a90bb95375f43522be4ed80c3b9e0a8bca575fb11cd1159"}, ] eth-keys = [ - {file = "eth-keys-0.3.3.tar.gz", hash = "sha256:a9a1e83e443bd369265b1a1b66dc30f6841bdbb3577ecd042e037b7b405b6cb0"}, - {file = "eth_keys-0.3.3-py3-none-any.whl", hash = "sha256:412dd5c9732b8e92af40c9c77597f4661c57eba3897aaa55e527af56a8c5ab47"}, + {file = "eth-keys-0.3.4.tar.gz", hash = "sha256:e5590797f5e2930086c705a6dd1ac14397f74f19bdcd1b5f837475554f354ad8"}, + {file = "eth_keys-0.3.4-py3-none-any.whl", hash = "sha256:565bf62179b8143bcbd302a0ec6c49882d9c7678f9e6ab0484a8a5725f5ef10e"}, ] eth-rlp = [ {file = "eth-rlp-0.2.1.tar.gz", hash = "sha256:f016f980b0ed42ee7650ba6e4e4d3c4e9aa06d8b9c6825a36d3afe5aa0187a8b"}, {file = "eth_rlp-0.2.1-py3-none-any.whl", hash = "sha256:cc389ef8d7b6f76a98f90bcdbff1b8684b3a78f53d47e871191b50d4d6aee5a1"}, ] eth-typing = [ - {file = "eth-typing-2.2.2.tar.gz", hash = "sha256:97ba0f83da7cf1d3668f6ed54983f21168076c552762bf5e06d4a20921877f3f"}, - {file = "eth_typing-2.2.2-py3-none-any.whl", hash = "sha256:1140c7592321dbf10d6663c46f7e43eb0e6410b011b03f14b3df3eb1f76aa9bb"}, + {file = "eth-typing-2.3.0.tar.gz", hash = "sha256:39cce97f401f082739b19258dfa3355101c64390914c73fe2b90012f443e0dc7"}, + {file = "eth_typing-2.3.0-py3-none-any.whl", hash = "sha256:b7fa58635c1cb0cbf538b2f5f1e66139575ea4853eac1d6000f0961a4b277422"}, ] eth-utils = [ {file = "eth-utils-1.10.0.tar.gz", hash = "sha256:bf82762a46978714190b0370265a7148c954d3f0adaa31c6f085ea375e4c61af"}, {file = "eth_utils-1.10.0-py3-none-any.whl", hash = "sha256:74240a8c6f652d085ed3c85f5f1654203d2f10ff9062f83b3bad0a12ff321c7a"}, ] freezegun = [ - {file = "freezegun-1.1.0-py2.py3-none-any.whl", hash = "sha256:2ae695f7eb96c62529f03a038461afe3c692db3465e215355e1bb4b0ab408712"}, - {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, + {file = "freezegun-1.2.1-py3-none-any.whl", hash = "sha256:15103a67dfa868ad809a8f508146e396be2995172d25f927e48ce51c0bf5cb09"}, + {file = "freezegun-1.2.1.tar.gz", hash = "sha256:b4c64efb275e6bc68dc6e771b17ffe0ff0f90b81a2a5189043550b6519926ba4"}, ] frozenlist = [ - {file = "frozenlist-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:977a1438d0e0d96573fd679d291a1542097ea9f4918a8b6494b06610dfeefbf9"}, - {file = "frozenlist-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8d86547a5e98d9edd47c432f7a14b0c5592624b496ae9880fb6332f34af1edc"}, - {file = "frozenlist-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:181754275d5d32487431a0a29add4f897968b7157204bc1eaaf0a0ce80c5ba7d"}, - {file = "frozenlist-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5df31bb2b974f379d230a25943d9bf0d3bc666b4b0807394b131a28fca2b0e5f"}, - {file = "frozenlist-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4766632cd8a68e4f10f156a12c9acd7b1609941525569dd3636d859d79279ed3"}, - {file = "frozenlist-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16eef427c51cb1203a7c0ab59d1b8abccaba9a4f58c4bfca6ed278fc896dc193"}, - {file = "frozenlist-1.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:01d79515ed5aa3d699b05f6bdcf1fe9087d61d6b53882aa599a10853f0479c6c"}, - {file = "frozenlist-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28e164722ea0df0cf6d48c4d5bdf3d19e87aaa6dfb39b0ba91153f224b912020"}, - {file = "frozenlist-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e63ad0beef6ece06475d29f47d1f2f29727805376e09850ebf64f90777962792"}, - {file = "frozenlist-1.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41de4db9b9501679cf7cddc16d07ac0f10ef7eb58c525a1c8cbff43022bddca4"}, - {file = "frozenlist-1.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a9d84ee6427b65a81fc24e6ef589cb794009f5ca4150151251c062773e7ed2"}, - {file = "frozenlist-1.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:f5f3b2942c3b8b9bfe76b408bbaba3d3bb305ee3693e8b1d631fe0a0d4f93673"}, - {file = "frozenlist-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c98d3c04701773ad60d9545cd96df94d955329efc7743fdb96422c4b669c633b"}, - {file = "frozenlist-1.2.0-cp310-cp310-win32.whl", hash = "sha256:72cfbeab7a920ea9e74b19aa0afe3b4ad9c89471e3badc985d08756efa9b813b"}, - {file = "frozenlist-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:11ff401951b5ac8c0701a804f503d72c048173208490c54ebb8d7bb7c07a6d00"}, - {file = "frozenlist-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b46f997d5ed6d222a863b02cdc9c299101ee27974d9bbb2fd1b3c8441311c408"}, - {file = "frozenlist-1.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:351686ca020d1bcd238596b1fa5c8efcbc21bffda9d0efe237aaa60348421e2a"}, - {file = "frozenlist-1.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfbaa08cf1452acad9cb1c1d7b89394a41e712f88df522cea1a0f296b57782a0"}, - {file = "frozenlist-1.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2ae2f5e9fa10805fb1c9adbfefaaecedd9e31849434be462c3960a0139ed729"}, - {file = "frozenlist-1.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6790b8d96bbb74b7a6f4594b6f131bd23056c25f2aa5d816bd177d95245a30e3"}, - {file = "frozenlist-1.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:41f62468af1bd4e4b42b5508a3fe8cc46a693f0cdd0ca2f443f51f207893d837"}, - {file = "frozenlist-1.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:ec6cf345771cdb00791d271af9a0a6fbfc2b6dd44cb753f1eeaa256e21622adb"}, - {file = "frozenlist-1.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:14a5cef795ae3e28fb504b73e797c1800e9249f950e1c964bb6bdc8d77871161"}, - {file = "frozenlist-1.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8b54cdd2fda15467b9b0bfa78cee2ddf6dbb4585ef23a16e14926f4b076dfae4"}, - {file = "frozenlist-1.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f025f1d6825725b09c0038775acab9ae94264453a696cc797ce20c0769a7b367"}, - {file = "frozenlist-1.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:84e97f59211b5b9083a2e7a45abf91cfb441369e8bb6d1f5287382c1c526def3"}, - {file = "frozenlist-1.2.0-cp36-cp36m-win32.whl", hash = "sha256:c5328ed53fdb0a73c8a50105306a3bc013e5ca36cca714ec4f7bd31d38d8a97f"}, - {file = "frozenlist-1.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9ade70aea559ca98f4b1b1e5650c45678052e76a8ab2f76d90f2ac64180215a2"}, - {file = "frozenlist-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0d3ffa8772464441b52489b985d46001e2853a3b082c655ec5fad9fb6a3d618"}, - {file = "frozenlist-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3457f8cf86deb6ce1ba67e120f1b0128fcba1332a180722756597253c465fc1d"}, - {file = "frozenlist-1.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a72eecf37eface331636951249d878750db84034927c997d47f7f78a573b72b"}, - {file = "frozenlist-1.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:acc4614e8d1feb9f46dd829a8e771b8f5c4b1051365d02efb27a3229048ade8a"}, - {file = "frozenlist-1.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:87521e32e18a2223311afc2492ef2d99946337da0779ddcda77b82ee7319df59"}, - {file = "frozenlist-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b4c7665a17c3a5430edb663e4ad4e1ad457614d1b2f2b7f87052e2ef4fa45ca"}, - {file = "frozenlist-1.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed58803563a8c87cf4c0771366cf0ad1aa265b6b0ae54cbbb53013480c7ad74d"}, - {file = "frozenlist-1.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:aa44c4740b4e23fcfa259e9dd52315d2b1770064cde9507457e4c4a65a04c397"}, - {file = "frozenlist-1.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:2de5b931701257d50771a032bba4e448ff958076380b049fd36ed8738fdb375b"}, - {file = "frozenlist-1.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6e105013fa84623c057a4381dc8ea0361f4d682c11f3816cc80f49a1f3bc17c6"}, - {file = "frozenlist-1.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:705c184b77565955a99dc360f359e8249580c6b7eaa4dc0227caa861ef46b27a"}, - {file = "frozenlist-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:a37594ad6356e50073fe4f60aa4187b97d15329f2138124d252a5a19c8553ea4"}, - {file = "frozenlist-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:25b358aaa7dba5891b05968dd539f5856d69f522b6de0bf34e61f133e077c1a4"}, - {file = "frozenlist-1.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af2a51c8a381d76eabb76f228f565ed4c3701441ecec101dd18be70ebd483cfd"}, - {file = "frozenlist-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:82d22f6e6f2916e837c91c860140ef9947e31194c82aaeda843d6551cec92f19"}, - {file = "frozenlist-1.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1cfe6fef507f8bac40f009c85c7eddfed88c1c0d38c75e72fe10476cef94e10f"}, - {file = "frozenlist-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f602e380a5132880fa245c92030abb0fc6ff34e0c5500600366cedc6adb06a"}, - {file = "frozenlist-1.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ad065b2ebd09f32511ff2be35c5dfafee6192978b5a1e9d279a5c6e121e3b03"}, - {file = "frozenlist-1.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc93f5f62df3bdc1f677066327fc81f92b83644852a31c6aa9b32c2dde86ea7d"}, - {file = "frozenlist-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:89fdfc84c6bf0bff2ff3170bb34ecba8a6911b260d318d377171429c4be18c73"}, - {file = "frozenlist-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:47b2848e464883d0bbdcd9493c67443e5e695a84694efff0476f9059b4cb6257"}, - {file = "frozenlist-1.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4f52d0732e56906f8ddea4bd856192984650282424049c956857fed43697ea43"}, - {file = "frozenlist-1.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:16ef7dd5b7d17495404a2e7a49bac1bc13d6d20c16d11f4133c757dd94c4144c"}, - {file = "frozenlist-1.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1cf63243bc5f5c19762943b0aa9e0d3fb3723d0c514d820a18a9b9a5ef864315"}, - {file = "frozenlist-1.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:54a1e09ab7a69f843cd28fefd2bcaf23edb9e3a8d7680032c8968b8ac934587d"}, - {file = "frozenlist-1.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:954b154a4533ef28bd3e83ffdf4eadf39deeda9e38fb8feaf066d6069885e034"}, - {file = "frozenlist-1.2.0-cp38-cp38-win32.whl", hash = "sha256:cb3957c39668d10e2b486acc85f94153520a23263b6401e8f59422ef65b9520d"}, - {file = "frozenlist-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0a7c7cce70e41bc13d7d50f0e5dd175f14a4f1837a8549b0936ed0cbe6170bf9"}, - {file = "frozenlist-1.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4c457220468d734e3077580a3642b7f682f5fd9507f17ddf1029452450912cdc"}, - {file = "frozenlist-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e74f8b4d8677ebb4015ac01fcaf05f34e8a1f22775db1f304f497f2f88fdc697"}, - {file = "frozenlist-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fbd4844ff111449f3bbe20ba24fbb906b5b1c2384d0f3287c9f7da2354ce6d23"}, - {file = "frozenlist-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0081a623c886197ff8de9e635528fd7e6a387dccef432149e25c13946cb0cd0"}, - {file = "frozenlist-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b6e21e5770df2dea06cb7b6323fbc008b13c4a4e3b52cb54685276479ee7676"}, - {file = "frozenlist-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:406aeb340613b4b559db78d86864485f68919b7141dec82aba24d1477fd2976f"}, - {file = "frozenlist-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:878ebe074839d649a1cdb03a61077d05760624f36d196884a5cafb12290e187b"}, - {file = "frozenlist-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1fef737fd1388f9b93bba8808c5f63058113c10f4e3c0763ced68431773f72f9"}, - {file = "frozenlist-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a495c3d513573b0b3f935bfa887a85d9ae09f0627cf47cad17d0cc9b9ba5c38"}, - {file = "frozenlist-1.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e7d0dd3e727c70c2680f5f09a0775525229809f1a35d8552b92ff10b2b14f2c2"}, - {file = "frozenlist-1.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:66a518731a21a55b7d3e087b430f1956a36793acc15912e2878431c7aec54210"}, - {file = "frozenlist-1.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:94728f97ddf603d23c8c3dd5cae2644fa12d33116e69f49b1644a71bb77b89ae"}, - {file = "frozenlist-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c1e8e9033d34c2c9e186e58279879d78c94dd365068a3607af33f2bc99357a53"}, - {file = "frozenlist-1.2.0-cp39-cp39-win32.whl", hash = "sha256:83334e84a290a158c0c4cc4d22e8c7cfe0bba5b76d37f1c2509dabd22acafe15"}, - {file = "frozenlist-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:735f386ec522e384f511614c01d2ef9cf799f051353876b4c6fb93ef67a6d1ee"}, - {file = "frozenlist-1.2.0.tar.gz", hash = "sha256:68201be60ac56aff972dc18085800b6ee07973c49103a8aba669dee3d71079de"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45334234ec30fc4ea677f43171b18a27505bfb2dba9aca4398a62692c0ea8868"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47be22dc27ed933d55ee55845d34a3e4e9f6fee93039e7f8ebadb0c2f60d403f"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03a7dd1bfce30216a3f51a84e6dd0e4a573d23ca50f0346634916ff105ba6e6b"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:691ddf6dc50480ce49f68441f1d16a4c3325887453837036e0fb94736eae1e58"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde99812f237f79eaf3f04ebffd74f6718bbd216101b35ac7955c2d47c17da02"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a202458d1298ced3768f5a7d44301e7c86defac162ace0ab7434c2e961166e8"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9e3e9e365991f8cc5f5edc1fd65b58b41d0514a6a7ad95ef5c7f34eb49b3d3e"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:04cb491c4b1c051734d41ea2552fde292f5f3a9c911363f74f39c23659c4af78"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:436496321dad302b8b27ca955364a439ed1f0999311c393dccb243e451ff66aa"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:754728d65f1acc61e0f4df784456106e35afb7bf39cfe37227ab00436fb38676"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb275c6385dd72594758cbe96c07cdb9bd6becf84235f4a594bdf21e3596c9d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win32.whl", hash = "sha256:e30b2f9683812eb30cf3f0a8e9f79f8d590a7999f731cf39f9105a7c4a39489d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f7353ba3367473d1d616ee727945f439e027f0bb16ac1a750219a8344d1d5d3c"}, + {file = "frozenlist-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88aafd445a233dbbf8a65a62bc3249a0acd0d81ab18f6feb461cc5a938610d24"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4406cfabef8f07b3b3af0f50f70938ec06d9f0fc26cbdeaab431cbc3ca3caeaa"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf829bd2e2956066dd4de43fd8ec881d87842a06708c035b37ef632930505a2"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:603b9091bd70fae7be28bdb8aa5c9990f4241aa33abb673390a7f7329296695f"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25af28b560e0c76fa41f550eacb389905633e7ac02d6eb3c09017fa1c8cdfde1"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c7a8a9fc9383b52c410a2ec952521906d355d18fccc927fca52ab575ee8b93"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:65bc6e2fece04e2145ab6e3c47428d1bbc05aede61ae365b2c1bddd94906e478"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f7c935c7b58b0d78c0beea0c7358e165f95f1fd8a7e98baa40d22a05b4a8141"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd89acd1b8bb4f31b47072615d72e7f53a948d302b7c1d1455e42622de180eae"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6983a31698490825171be44ffbafeaa930ddf590d3f051e397143a5045513b01"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adac9700675cf99e3615eb6a0eb5e9f5a4143c7d42c05cea2e7f71c27a3d0846"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:0c36e78b9509e97042ef869c0e1e6ef6429e55817c12d78245eb915e1cca7468"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:57f4d3f03a18facacb2a6bcd21bccd011e3b75d463dc49f838fd699d074fabd1"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c905a5186d77111f02144fab5b849ab524f1e876a1e75205cd1386a9be4b00a"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5009062d78a8c6890d50b4e53b0ddda31841b3935c1937e2ed8c1bda1c7fb9d"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2fdc3cd845e5a1f71a0c3518528bfdbfe2efaf9886d6f49eacc5ee4fd9a10953"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e650bd09b5dda929523b9f8e7f99b24deac61240ecc1a32aeba487afcd970f"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40dff8962b8eba91fd3848d857203f0bd704b5f1fa2b3fc9af64901a190bba08"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:768efd082074bb203c934e83a61654ed4931ef02412c2fbdecea0cff7ecd0274"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:006d3595e7d4108a12025ddf415ae0f6c9e736e726a5db0183326fd191b14c5e"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871d42623ae15eb0b0e9df65baeee6976b2e161d0ba93155411d58ff27483ad8"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aff388be97ef2677ae185e72dc500d19ecaf31b698986800d3fc4f399a5e30a5"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9f892d6a94ec5c7b785e548e42722e6f3a52f5f32a8461e82ac3e67a3bd073f1"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:e982878792c971cbd60ee510c4ee5bf089a8246226dea1f2138aa0bb67aff148"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c6c321dd013e8fc20735b92cb4892c115f5cdb82c817b1e5b07f6b95d952b2f0"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30530930410855c451bea83f7b272fb1c495ed9d5cc72895ac29e91279401db3"}, + {file = "frozenlist-1.3.0-cp38-cp38-win32.whl", hash = "sha256:40ec383bc194accba825fbb7d0ef3dda5736ceab2375462f1d8672d9f6b68d07"}, + {file = "frozenlist-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f20baa05eaa2bcd5404c445ec51aed1c268d62600362dc6cfe04fae34a424bd9"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0437fe763fb5d4adad1756050cbf855bbb2bf0d9385c7bb13d7a10b0dd550486"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b684c68077b84522b5c7eafc1dc735bfa5b341fb011d5552ebe0968e22ed641c"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93641a51f89473837333b2f8100f3f89795295b858cd4c7d4a1f18e299dc0a4f"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6d32ff213aef0fd0bcf803bffe15cfa2d4fde237d1d4838e62aec242a8362fa"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31977f84828b5bb856ca1eb07bf7e3a34f33a5cddce981d880240ba06639b94d"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c62964192a1c0c30b49f403495911298810bada64e4f03249ca35a33ca0417a"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4eda49bea3602812518765810af732229b4291d2695ed24a0a20e098c45a707b"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acb267b09a509c1df5a4ca04140da96016f40d2ed183cdc356d237286c971b51"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1e26ac0a253a2907d654a37e390904426d5ae5483150ce3adedb35c8c06614a"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f96293d6f982c58ebebb428c50163d010c2f05de0cde99fd681bfdc18d4b2dc2"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e84cb61b0ac40a0c3e0e8b79c575161c5300d1d89e13c0e02f76193982f066ed"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:ff9310f05b9d9c5c4dd472983dc956901ee6cb2c3ec1ab116ecdde25f3ce4951"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d26b650b71fdc88065b7a21f8ace70175bcf3b5bdba5ea22df4bfd893e795a3b"}, + {file = "frozenlist-1.3.0-cp39-cp39-win32.whl", hash = "sha256:01a73627448b1f2145bddb6e6c2259988bb8aee0fb361776ff8604b99616cd08"}, + {file = "frozenlist-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:772965f773757a6026dea111a15e6e2678fbd6216180f82a48a40b27de1ee2ab"}, + {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, ] hexbytes = [ {file = "hexbytes-0.2.2-py3-none-any.whl", hash = "sha256:ef53c37ea9f316fff86fcb1df057b4c6ba454da348083e972031bbf7bc9c3acc"}, {file = "hexbytes-0.2.2.tar.gz", hash = "sha256:a5881304d186e87578fb263a85317c808cf130e1d4b3d37d30142ab0f7898d03"}, ] hidapi = [ - {file = "hidapi-0.11.0.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fc745eaec01dcc25d71b02cd868e1e34e0c53c4ac7f0f0edbb3a56dbd5e50f8"}, - {file = "hidapi-0.11.0.post2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:23b54a90af7d4d73e730153099f37869feb27784649d1bf29a52ce9faf3168fb"}, - {file = "hidapi-0.11.0.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c91ee15c358787583b8f403f9b7b40d48fa4d3e74544e6313f90de83a7695a96"}, - {file = "hidapi-0.11.0.post2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a70135e8091c8ae685374fcb148ee81b15423072e2ee32f40f7ad710879d4a"}, - {file = "hidapi-0.11.0.post2-cp310-cp310-win32.whl", hash = "sha256:19ca6866dee8ac7668f3b4f12103c0df55ff65cda5c9c400aefc21fb29512004"}, - {file = "hidapi-0.11.0.post2-cp310-cp310-win_amd64.whl", hash = "sha256:449f6a9f0230ec0af749a4f6057afd81285112d702e2b8b19059a061ec8df591"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f30a90663a399f71cd3df75d42422643eb3fc290ca19553eaee88ca352e626ff"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8bd1395e25ae557f129973b2153fdb8a0d6debd0f7411ba72abe7dbe536ebe3"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017f379e03f00a35ba12df9819df9bd219a14dd8444860d093a6f9878a505867"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afabcf8fdbdc355b907c03984258d7f9acc01eac5114837364fe227c239d53d7"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-win32.whl", hash = "sha256:67953056555f48539f268f9326462f4a1d525191712fd6af3666e7787f4a609b"}, - {file = "hidapi-0.11.0.post2-cp36-cp36m-win_amd64.whl", hash = "sha256:3083655c9306ff87c3f790949cdbac933fc8c6912dd7063c0c3e6e199b9e40b8"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8f8e67042d5dbf6ecec0f8cbf347d99ad074dcb600754bc60609f3340c746977"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:782d0c208d794c540e999b1737ddb9ebc36df604d7739889b9659fcc3819f4ce"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a19864e2528fff9c708126f72176790c0bb7cb1e31a904ccadc6b6f9fd29a7a1"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:053f1f06a671b1e466339a04ee46d91b86932212aaf3b9160d358a6fae80ef50"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-win32.whl", hash = "sha256:87cbeee15afe23759a3c8eb07eb0ecf156f5f4db98aa31ff2ceee4b45feac4f9"}, - {file = "hidapi-0.11.0.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:9e82b4aaa9c000c49b6fb1296974713b21d3e8fa3e0c87efab03998e4d6dbeee"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1bc4ed3c34e4b0b6be589ef88845d7697bd81acf9079ded9d53ab1ebe874dc01"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7d28a6473626f7ddb83a32349196880e8ff38a809f4eeb221f212264c8c9431"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d15e7238bbeab71313b4366e65032e5db6c314a3323729e1d4a4798f6f6c111b"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84040de52295f043094ca2b6257c6c1fe390fd8d2623ae000a46122150b15b7"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-win32.whl", hash = "sha256:08da7855400a516a742c4dfd6a3b6d69ee56d281561f7fb284c7a289bb2d5b40"}, - {file = "hidapi-0.11.0.post2-cp38-cp38-win_amd64.whl", hash = "sha256:08f5eb2e3e5451c3c631b6b018b3187b6a2fca9c3c200cb5a17fb69fd7f479bb"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:55d1a6cdbefb5de85bb54e6d4d4967554fed7d26b874d3290cb1a9f02dfa5865"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c70ec32cdfd0c1303fe4aa22ddf839282bdce279a0c038c6efdddc703342dd6"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:991b9c9f5a4400d3493cfba2511b0a7f6199eff3ef0968ca65bace32d0f811bf"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad8d5ce93c4ea2a51a10cd8405409252107350b0402e3372d905846c0e7326ae"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-win32.whl", hash = "sha256:89c51889894d389e0de63a2adb7faafd9c8c24928b50848365cd4b4d0d57e10b"}, - {file = "hidapi-0.11.0.post2-cp39-cp39-win_amd64.whl", hash = "sha256:5a64b6509064b683ef8ca9888f71906e3dbc6909ab2e3361cbaf6d25a007ab5f"}, - {file = "hidapi-0.11.0.post2.tar.gz", hash = "sha256:da815e0d1d4b2ef1ebbcc85034572105dca29627eb61881337aa39010f2ef8cb"}, + {file = "hidapi-0.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94da1fd2f83a5a378069c4365624ad55f009284c056c3edd7a811184464b4c78"}, + {file = "hidapi-0.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d1c4ceea536e3a323c057f1dd1b2394a5db13c73393e17b6127e9d9ff9dba276"}, + {file = "hidapi-0.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1752c396e0d22ba896712005d9e9dfdad3ac3217446bef0008de126b51dc82c6"}, + {file = "hidapi-0.11.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c799d60ec870106c3aea58ac09239849f42ca062ecad5dccadf516e205c55a5"}, + {file = "hidapi-0.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbac1cdd5277aef5c682e31a02638b8b88bbd2b7fdfa271561a86181ef231428"}, + {file = "hidapi-0.11.2-cp310-cp310-win32.whl", hash = "sha256:8e3b01acd0ea20d3635284eb3b1b64c322b86b3036f91367dc4f0bf11281013a"}, + {file = "hidapi-0.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:b2f03f03027c53d3b427c015937515faaf72d42fc3ef8ac7b8cffafb9e03c44c"}, + {file = "hidapi-0.11.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95a50f408716eb3a36bf16939c4f5b7a7940c8ca704272e67144c5eecb27c5c5"}, + {file = "hidapi-0.11.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4955c649edb0e1418110bfb6591ec5eda29f2b978a8e87b18d0a8bd8e28ffb63"}, + {file = "hidapi-0.11.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfd605193ebc0aa3ae71595a9aa33e0a1bbfb172a02c97bbd51bed5e03404fbf"}, + {file = "hidapi-0.11.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5827fd38577304a20268a4da22f4766af3052c33706760fec04f90326dcca5d5"}, + {file = "hidapi-0.11.2-cp36-cp36m-win32.whl", hash = "sha256:0be398136fa5fd6ed7648ca7df675100312a2158c39e1de059ea1d4f88e61046"}, + {file = "hidapi-0.11.2-cp36-cp36m-win_amd64.whl", hash = "sha256:0053afb387e660273db3cf252434cd5181c561725ed442cd44024ec2b5c97bbe"}, + {file = "hidapi-0.11.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a202b2a83feacffe9bad076d3b01cd43589d80456d23dd4cfede78e45b27242d"}, + {file = "hidapi-0.11.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80b1c110f87af3a6fedad3a0aa1a7a55745aee60470f271d3c333b61da0b1113"}, + {file = "hidapi-0.11.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6308ec52a970a491a5a7d888f081d08d523d06a912bdf84fc4d3b109f69876b8"}, + {file = "hidapi-0.11.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54ddf36f9b71d37846c60cc0a7777824a078b4e65c06c6dbd201eec538ecfbd3"}, + {file = "hidapi-0.11.2-cp37-cp37m-win32.whl", hash = "sha256:a10fd1d7071e47c5b16a9ad8014adbce2b5dafacd50c7ffcec56e19c8efc50ae"}, + {file = "hidapi-0.11.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c65b5de57d078ce4b723be1341afe479ad0987d4ba859ae3b1085f21643e13f3"}, + {file = "hidapi-0.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3af72e81caa8678c82764ea6f09e3d5b616ada59415a6c1e2ae791a604e60a82"}, + {file = "hidapi-0.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a031dab7380de39f2e81974e7d788f81a5ea7de3862cec42a382ecae9f20885"}, + {file = "hidapi-0.11.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8320e916dda08d8b38f2552c3fbf63e77212a15b0c1f04dcb604fdd3b3fb825d"}, + {file = "hidapi-0.11.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:990683ca81eda551cb0e14efa487fb552a11901be06293167f60bf92e80b7cc3"}, + {file = "hidapi-0.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7539ec488e91839c2c17d4a394990fa64ae4149e397ea859596ef6669b6aa23d"}, + {file = "hidapi-0.11.2-cp38-cp38-win32.whl", hash = "sha256:f9319f8ea5d6f28737355a8462e1ccee6019b3d2d81a462e54b43acc53f63c36"}, + {file = "hidapi-0.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:5100b267e60eac1ef5e023342838029c41800b61fe9a4de31d94d9126eab4211"}, + {file = "hidapi-0.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3452b5e4cd9ab330ff098cfe7c71ecf3418874efe94f121353ac1b5208fa14f"}, + {file = "hidapi-0.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e63a7904f2fadab3976240695adc0775f4a473817fa0bcd9230383e70793f538"}, + {file = "hidapi-0.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:175588e3e671198668d9d67ed6e8d48b10d02f46e1998e734f1c212e76f7df6f"}, + {file = "hidapi-0.11.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41b16d2df7eaaa5d47773b0d768d6a05d3731728ccb6ef4c2e19caa6d7e39136"}, + {file = "hidapi-0.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cf804d58fd6b7f7064577f5ded6487e1466005815a9d83f1f3329432c7e418c"}, + {file = "hidapi-0.11.2-cp39-cp39-win32.whl", hash = "sha256:54137df3e14d679db0b7574dcb21cbdb001a2faa3ec47c49b17cd4f1e237dce3"}, + {file = "hidapi-0.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:ce9347211e1c9e57fed8784fc8a9dec3295d14a4ea955e62c8f00a28eaac662e"}, + {file = "hidapi-0.11.2.tar.gz", hash = "sha256:c984b7ec2fc2ea987cd44cf06947e55572498ed2d43c64890b4ab58b29af72bc"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1163,10 +1147,10 @@ jsonschema = [ {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] libusb1 = [ - {file = "libusb1-2.0.1-py3-none-any.whl", hash = "sha256:81381ce1d8852a4d4345b2ee8218971d35865b5f025fef96b43ee082757099cd"}, - {file = "libusb1-2.0.1-py3-none-win32.whl", hash = "sha256:9fda3055c98ab043cfb3beac93ef1de2900ad11d949c694f58bdf414ce2bd03c"}, - {file = "libusb1-2.0.1-py3-none-win_amd64.whl", hash = "sha256:a97bcb90f589d863c5e971b013c8cf7e1915680a951e66c4222a2c5bb64b7153"}, - {file = "libusb1-2.0.1.tar.gz", hash = "sha256:d3ba82ecf7ab6a48d21dac6697e26504670cc3522b8e5941bd28fb56cf3f6c46"}, + {file = "libusb1-3.0.0-py3-none-any.whl", hash = "sha256:0e652b04cbe85ec8e74f9ee82b49f861fb14b5320ae51399387ad2601ccc0500"}, + {file = "libusb1-3.0.0-py3-none-win32.whl", hash = "sha256:083f75e5d15cb5e2159e64c308c5317284eae926a820d6dce53a9505d18be3b2"}, + {file = "libusb1-3.0.0-py3-none-win_amd64.whl", hash = "sha256:6f6bb010632ada35c661d17a65e135077beef0fbb2434d5ffdb3a4a911fd9490"}, + {file = "libusb1-3.0.0.tar.gz", hash = "sha256:5792a9defee40f15d330a40d9b1800545c32e47ba7fc66b6f28f133c9fcc8538"}, ] lru-dict = [ {file = "lru-dict-1.1.7.tar.gz", hash = "sha256:45b81f67d75341d4433abade799a47e9c42a9e22a118531dcb5e549864032d7c"}, @@ -1184,78 +1168,65 @@ multiaddr = [ {file = "multiaddr-0.0.9.tar.gz", hash = "sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf"}, ] multidict = [ - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"}, - {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"}, - {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"}, - {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"}, - {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"}, - {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"}, - {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"}, - {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"}, - {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"}, - {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"}, - {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"}, - {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"}, - {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"}, - {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, + {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, + {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, + {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, + {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, + {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, + {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, + {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, + {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, + {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, + {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, ] netaddr = [ {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, @@ -1273,95 +1244,95 @@ pluggy = [ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] protobuf = [ - {file = "protobuf-3.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1cb2ed66aac593adbf6dca4f07cd7ee7e2958b17bbc85b2cc8bc564ebeb258ec"}, - {file = "protobuf-3.19.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:898bda9cd37ec0c781b598891e86435de80c3bfa53eb483a9dac5a11ec93e942"}, - {file = "protobuf-3.19.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ad761ef3be34c8bdc7285bec4b40372a8dad9e70cfbdc1793cd3cf4c1a4ce74"}, - {file = "protobuf-3.19.3-cp310-cp310-win32.whl", hash = "sha256:2cddcbcc222f3144765ccccdb35d3621dc1544da57a9aca7e1944c1a4fe3db11"}, - {file = "protobuf-3.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:6202df8ee8457cb00810c6e76ced480f22a1e4e02c899a14e7b6e6e1de09f938"}, - {file = "protobuf-3.19.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:397d82f1c58b76445469c8c06b8dee1ff67b3053639d054f52599a458fac9bc6"}, - {file = "protobuf-3.19.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e54b8650e849ee8e95e481024bff92cf98f5ec61c7650cb838d928a140adcb63"}, - {file = "protobuf-3.19.3-cp36-cp36m-win32.whl", hash = "sha256:3bf3a07d17ba3511fe5fa916afb7351f482ab5dbab5afe71a7a384274a2cd550"}, - {file = "protobuf-3.19.3-cp36-cp36m-win_amd64.whl", hash = "sha256:afa8122de8064fd577f49ae9eef433561c8ace97a0a7b969d56e8b1d39b5d177"}, - {file = "protobuf-3.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18c40a1b8721026a85187640f1786d52407dc9c1ba8ec38accb57a46e84015f6"}, - {file = "protobuf-3.19.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:af7238849fa79285d448a24db686517570099739527a03c9c2971cce99cc5ae2"}, - {file = "protobuf-3.19.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e765e6dfbbb02c55e4d6d1145743401a84fc0b508f5a81b2c5a738cf86353139"}, - {file = "protobuf-3.19.3-cp37-cp37m-win32.whl", hash = "sha256:c781402ed5396ab56358d7b866d78c03a77cbc26ba0598d8bb0ac32084b1a257"}, - {file = "protobuf-3.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:544fe9705189b249380fae07952d220c97f5c6c9372a6f936cc83a79601dcb70"}, - {file = "protobuf-3.19.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84bf3aa3efb00dbe1c7ed55da0f20800b0662541e582d7e62b3e1464d61ed365"}, - {file = "protobuf-3.19.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3f80a3491eaca767cdd86cb8660dc778f634b44abdb0dffc9b2a8e8d0cd617d0"}, - {file = "protobuf-3.19.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9401d96552befcc7311f5ef8f0fa7dba0ef5fd805466b158b141606cd0ab6a8"}, - {file = "protobuf-3.19.3-cp38-cp38-win32.whl", hash = "sha256:ef02d112c025e83db5d1188a847e358beab3e4bbfbbaf10eaf69e67359af51b2"}, - {file = "protobuf-3.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:1291a0a7db7d792745c99d4657b4c5c4942695c8b1ac1bfb993a34035ec123f7"}, - {file = "protobuf-3.19.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49677e5e9c7ea1245a90c2e8a00d304598f22ea3aa0628f0e0a530a9e70665fa"}, - {file = "protobuf-3.19.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df2ba379ee42427e8fcc6a0a76843bff6efb34ef5266b17f95043939b5e25b69"}, - {file = "protobuf-3.19.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2acd7ca329be544d1a603d5f13a4e34a3791c90d651ebaf130ba2e43ae5397c6"}, - {file = "protobuf-3.19.3-cp39-cp39-win32.whl", hash = "sha256:b53519b2ebec70cfe24b4ddda21e9843f0918d7c3627a785393fb35d402ab8ad"}, - {file = "protobuf-3.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:8ceaf5fdb72c8e1fcb7be9f2b3b07482ce058a3548180c0bdd5c7e4ac5e14165"}, - {file = "protobuf-3.19.3-py2.py3-none-any.whl", hash = "sha256:f6d4b5b7595a57e69eb7314c67bef4a3c745b4caf91accaf72913d8e0635111b"}, - {file = "protobuf-3.19.3.tar.gz", hash = "sha256:d975a6314fbf5c524d4981e24294739216b5fb81ef3c14b86fb4b045d6690907"}, + {file = "protobuf-3.19.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f51d5a9f137f7a2cec2d326a74b6e3fc79d635d69ffe1b036d39fc7d75430d37"}, + {file = "protobuf-3.19.4-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09297b7972da685ce269ec52af761743714996b4381c085205914c41fcab59fb"}, + {file = "protobuf-3.19.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072fbc78d705d3edc7ccac58a62c4c8e0cec856987da7df8aca86e647be4e35c"}, + {file = "protobuf-3.19.4-cp310-cp310-win32.whl", hash = "sha256:7bb03bc2873a2842e5ebb4801f5c7ff1bfbdf426f85d0172f7644fcda0671ae0"}, + {file = "protobuf-3.19.4-cp310-cp310-win_amd64.whl", hash = "sha256:f358aa33e03b7a84e0d91270a4d4d8f5df6921abe99a377828839e8ed0c04e07"}, + {file = "protobuf-3.19.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1c91ef4110fdd2c590effb5dca8fdbdcb3bf563eece99287019c4204f53d81a4"}, + {file = "protobuf-3.19.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c438268eebb8cf039552897d78f402d734a404f1360592fef55297285f7f953f"}, + {file = "protobuf-3.19.4-cp36-cp36m-win32.whl", hash = "sha256:835a9c949dc193953c319603b2961c5c8f4327957fe23d914ca80d982665e8ee"}, + {file = "protobuf-3.19.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4276cdec4447bd5015453e41bdc0c0c1234eda08420b7c9a18b8d647add51e4b"}, + {file = "protobuf-3.19.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6cbc312be5e71869d9d5ea25147cdf652a6781cf4d906497ca7690b7b9b5df13"}, + {file = "protobuf-3.19.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:54a1473077f3b616779ce31f477351a45b4fef8c9fd7892d6d87e287a38df368"}, + {file = "protobuf-3.19.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:435bb78b37fc386f9275a7035fe4fb1364484e38980d0dd91bc834a02c5ec909"}, + {file = "protobuf-3.19.4-cp37-cp37m-win32.whl", hash = "sha256:16f519de1313f1b7139ad70772e7db515b1420d208cb16c6d7858ea989fc64a9"}, + {file = "protobuf-3.19.4-cp37-cp37m-win_amd64.whl", hash = "sha256:cdc076c03381f5c1d9bb1abdcc5503d9ca8b53cf0a9d31a9f6754ec9e6c8af0f"}, + {file = "protobuf-3.19.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69da7d39e39942bd52848438462674c463e23963a1fdaa84d88df7fbd7e749b2"}, + {file = "protobuf-3.19.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:48ed3877fa43e22bcacc852ca76d4775741f9709dd9575881a373bd3e85e54b2"}, + {file = "protobuf-3.19.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd95d1dfb9c4f4563e6093a9aa19d9c186bf98fa54da5252531cc0d3a07977e7"}, + {file = "protobuf-3.19.4-cp38-cp38-win32.whl", hash = "sha256:b38057450a0c566cbd04890a40edf916db890f2818e8682221611d78dc32ae26"}, + {file = "protobuf-3.19.4-cp38-cp38-win_amd64.whl", hash = "sha256:7ca7da9c339ca8890d66958f5462beabd611eca6c958691a8fe6eccbd1eb0c6e"}, + {file = "protobuf-3.19.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:36cecbabbda242915529b8ff364f2263cd4de7c46bbe361418b5ed859677ba58"}, + {file = "protobuf-3.19.4-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c1068287025f8ea025103e37d62ffd63fec8e9e636246b89c341aeda8a67c934"}, + {file = "protobuf-3.19.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96bd766831596d6014ca88d86dc8fe0fb2e428c0b02432fd9db3943202bf8c5e"}, + {file = "protobuf-3.19.4-cp39-cp39-win32.whl", hash = "sha256:84123274d982b9e248a143dadd1b9815049f4477dc783bf84efe6250eb4b836a"}, + {file = "protobuf-3.19.4-cp39-cp39-win_amd64.whl", hash = "sha256:3112b58aac3bac9c8be2b60a9daf6b558ca3f7681c130dcdd788ade7c9ffbdca"}, + {file = "protobuf-3.19.4-py2.py3-none-any.whl", hash = "sha256:8961c3a78ebfcd000920c9060a262f082f29838682b1f7201889300c1fbe0616"}, + {file = "protobuf-3.19.4.tar.gz", hash = "sha256:9df0c10adf3e83015ced42a9a7bd64e13d06c4cf45c340d2c63020ea04499d0a"}, ] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pycryptodome = [ - {file = "pycryptodome-3.12.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:90ad3381ccdc6a24cc2841e295706a168f32abefe64c679695712acac71fd5da"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e80f7469b0b3ea0f694230477d8501dc5a30a717e94fddd4821e6721f3053eae"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:b91404611767a7485837a6f1fd20cf9a5ae0ad362040a022cd65827ecb1b0d00"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:db66ccda65d5d20c17b00768e462a86f6f540f9aea8419a7f76cc7d9effd82cd"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:dc88355c4b261ed259268e65705b28b44d99570337694d593f06e3b1698eaaf3"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:6f8f5b7b53516da7511951910ab458e799173722c91fea54e2ba2f56d102e4aa"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-win32.whl", hash = "sha256:93acad54a72d81253242eb0a15064be559ec9d989e5173286dc21cad19f01765"}, - {file = "pycryptodome-3.12.0-cp27-cp27m-win_amd64.whl", hash = "sha256:5a8c24d39d4a237dbfe181ea6593792bf9b5582c7fcfa7b8e0e12fda5eec07af"}, - {file = "pycryptodome-3.12.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:32d15da81959faea6cbed95df2bb44f7f796211c110cf90b5ad3b2aeeb97fc8e"}, - {file = "pycryptodome-3.12.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:aed7eb4b64c600fbc5e6d4238991ad1b4179a558401f203d1fcbd24883748982"}, - {file = "pycryptodome-3.12.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:341c6bbf932c406b4f3ee2372e8589b67ac0cf4e99e7dc081440f43a3cde9f0f"}, - {file = "pycryptodome-3.12.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:de0b711d673904dd6c65307ead36cb76622365a393569bf880895cba21195b7a"}, - {file = "pycryptodome-3.12.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:3558616f45d8584aee3eba27559bc6fd0ba9be6c076610ed3cc62bd5229ffdc3"}, - {file = "pycryptodome-3.12.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a78e4324e566b5fbc2b51e9240950d82fa9e1c7eb77acdf27f58712f65622c1d"}, - {file = "pycryptodome-3.12.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:3f2f3dd596c6128d91314e60a6bcf4344610ef0e97f4ae4dd1770f86dd0748d8"}, - {file = "pycryptodome-3.12.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:e05f994f30f1cda3cbe57441f41220d16731cf99d868bb02a8f6484c454c206b"}, - {file = "pycryptodome-3.12.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:4cded12e13785bbdf4ba1ff5fb9d261cd98162145f869e4fbc4a4b9083392f0b"}, - {file = "pycryptodome-3.12.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:1181c90d1a6aee68a84826825548d0db1b58d8541101f908d779d601d1690586"}, - {file = "pycryptodome-3.12.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:6bb0d340c93bcb674ea8899e2f6408ec64c6c21731a59481332b4b2a8143cc60"}, - {file = "pycryptodome-3.12.0-cp35-abi3-win32.whl", hash = "sha256:39da5807aa1ff820799c928f745f89432908bf6624b9e981d2d7f9e55d91b860"}, - {file = "pycryptodome-3.12.0-cp35-abi3-win_amd64.whl", hash = "sha256:212c7f7fe11cad9275fbcff50ca977f1c6643f13560d081e7b0f70596df447b8"}, - {file = "pycryptodome-3.12.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:b07a4238465eb8c65dd5df2ab8ba6df127e412293c0ed7656c003336f557a100"}, - {file = "pycryptodome-3.12.0-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:a6e1bcd9d5855f1a3c0f8d585f44c81b08f39a02754007f374fb8db9605ba29c"}, - {file = "pycryptodome-3.12.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:aceb1d217c3a025fb963849071446cf3aca1353282fe1c3cb7bd7339a4d47947"}, - {file = "pycryptodome-3.12.0-pp27-pypy_73-win32.whl", hash = "sha256:f699360ae285fcae9c8f53ca6acf33796025a82bb0ccd7c1c551b04c1726def3"}, - {file = "pycryptodome-3.12.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d845c587ceb82ac7cbac7d0bf8c62a1a0fe7190b028b322da5ca65f6e5a18b9e"}, - {file = "pycryptodome-3.12.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:d8083de50f6dec56c3c6f270fb193590999583a1b27c9c75bc0b5cac22d438cc"}, - {file = "pycryptodome-3.12.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:9ea2f6674c803602a7c0437fccdc2ea036707e60456974fe26ca263bd501ec45"}, - {file = "pycryptodome-3.12.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:5d4264039a2087977f50072aaff2346d1c1c101cb359f9444cf92e3d1f42b4cd"}, - {file = "pycryptodome-3.12.0.zip", hash = "sha256:12c7343aec5a3b3df5c47265281b12b611f26ec9367b6129199d67da54b768c1"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:75a3a364fee153e77ed889c957f6f94ec6d234b82e7195b117180dcc9fc16f96"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:aae395f79fa549fb1f6e3dc85cf277f0351e15a22e6547250056c7f0c990d6a5"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f403a3e297a59d94121cb3ee4b1cf41f844332940a62d71f9e4a009cc3533493"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ce7a875694cd6ccd8682017a7c06c6483600f151d8916f2b25cf7a439e600263"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a36ab51674b014ba03da7f98b675fcb8eabd709a2d8e18219f784aba2db73b72"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:50a5346af703330944bea503106cd50c9c2212174cfcb9939db4deb5305a8367"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-win32.whl", hash = "sha256:36e3242c4792e54ed906c53f5d840712793dc68b726ec6baefd8d978c5282d30"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:c880a98376939165b7dc504559f60abe234b99e294523a273847f9e7756f4132"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:dcd65355acba9a1d0fc9b923875da35ed50506e339b35436277703d7ace3e222"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:766a8e9832128c70012e0c2b263049506cbf334fb21ff7224e2704102b6ef59e"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:2562de213960693b6d657098505fd4493c45f3429304da67efcbeb61f0edfe89"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d1b7739b68a032ad14c5e51f7e4e1a5f92f3628bba024a2bda1f30c481fc85d8"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:27e92c1293afcb8d2639baf7eb43f4baada86e4de0f1fb22312bfc989b95dae2"}, + {file = "pycryptodome-3.14.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f2772af1c3ef8025c85335f8b828d0193fa1e43256621f613280e2c81bfad423"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:9ec761a35dbac4a99dcbc5cd557e6e57432ddf3e17af8c3c86b44af9da0189c0"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:e64738207a02a83590df35f59d708bf1e7ea0d6adce712a777be2967e5f7043c"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:e24d4ec4b029611359566c52f31af45c5aecde7ef90bf8f31620fd44c438efe7"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:8b5c28058102e2974b9868d72ae5144128485d466ba8739abd674b77971454cc"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:924b6aad5386fb54f2645f22658cb0398b1f25bc1e714a6d1522c75d527deaa5"}, + {file = "pycryptodome-3.14.1-cp35-abi3-win32.whl", hash = "sha256:53dedbd2a6a0b02924718b520a723e88bcf22e37076191eb9b91b79934fb2192"}, + {file = "pycryptodome-3.14.1-cp35-abi3-win_amd64.whl", hash = "sha256:ea56a35fd0d13121417d39a83f291017551fa2c62d6daa6b04af6ece7ed30d84"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:028dcbf62d128b4335b61c9fbb7dd8c376594db607ef36d5721ee659719935d5"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:69f05aaa90c99ac2f2af72d8d7f185f729721ad7c4be89e9e3d0ab101b0ee875"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:12ef157eb1e01a157ca43eda275fa68f8db0dd2792bc4fe00479ab8f0e6ae075"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-win32.whl", hash = "sha256:f572a3ff7b6029dd9b904d6be4e0ce9e309dcb847b03e3ac8698d9d23bb36525"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9924248d6920b59c260adcae3ee231cd5af404ac706ad30aa4cd87051bf09c50"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:e0c04c41e9ade19fbc0eff6aacea40b831bfcb2c91c266137bcdfd0d7b2f33ba"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:893f32210de74b9f8ac869ed66c97d04e7d351182d6d39ebd3b36d3db8bda65d"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:7fb90a5000cc9c9ff34b4d99f7f039e9c3477700e309ff234eafca7b7471afc0"}, + {file = "pycryptodome-3.14.1.tar.gz", hash = "sha256:e04e40a7f8c1669195536a37979dd87da2c32dbdc73d6fe35f0077b0c17c803b"}, ] pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, - {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, - {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -1376,8 +1347,8 @@ pytest-cov = [ {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] pytest-mock = [ - {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, - {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, + {file = "pytest-mock-3.7.0.tar.gz", hash = "sha256:5112bd92cc9f186ee96e1a92efc84969ea494939c3aead39c50f421c4cc69534"}, + {file = "pytest_mock-3.7.0-py3-none-any.whl", hash = "sha256:6cff27cec936bf81dc5ee87f07132b807bcda51106b5ec4b90a04331cba76231"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -1418,8 +1389,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, - {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] toolz = [ {file = "toolz-0.11.2-py3-none-any.whl", hash = "sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f"}, @@ -1430,19 +1401,19 @@ trezor = [ {file = "trezor-0.13.0.tar.gz", hash = "sha256:4571aa09dbfe88b31eb2f16c7c359b4809621b75a04b7b5bc9dbffe17046c99a"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, ] urllib3 = [ - {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, - {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] varint = [ {file = "varint-1.0.2.tar.gz", hash = "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"}, ] web3 = [ - {file = "web3-5.26.0-py3-none-any.whl", hash = "sha256:074163febd05780d66774a74e081fb7093285266fc7ea3541e71ec6cdbad8919"}, - {file = "web3-5.26.0.tar.gz", hash = "sha256:d4ba2e92b4759b43674fa0ae2b7303bc34cd5665a3252ab033c81a9acd01a38e"}, + {file = "web3-5.28.0-py3-none-any.whl", hash = "sha256:d4feb07fcfc01bc5525a1aa3062ec1d44089c24f941a1b6fa7acfc9ec20f46b2"}, + {file = "web3-5.28.0.tar.gz", hash = "sha256:15209f1da8b99f85dadaa10f1117a8ec0624fc04426c62d8fe2d126bf0498b6e"}, ] websockets = [ {file = "websockets-9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da"}, diff --git a/axie-utils/pyproject.toml b/axie-utils/pyproject.toml index bc8ccf9..e0dd24c 100644 --- a/axie-utils/pyproject.toml +++ b/axie-utils/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "axie-utils" -version = "1.1.3" +version = "2.0.0" description = "Library that provides the functionality you need to build your own axie Infinity python tools" authors = ["Ferran Marin "] license = "GNU LGPLv3" diff --git a/axie-utils/tests/test_breeding.py b/axie-utils/tests/test_breeding.py index 4dfe29e..60d0b30 100644 --- a/axie-utils/tests/test_breeding.py +++ b/axie-utils/tests/test_breeding.py @@ -2,7 +2,7 @@ from axie_utils import Breed, TrezorBreed from axie_utils.abis import AXIE_ABI -from axie_utils.utils import AXIE_CONTRACT, RONIN_PROVIDER_FREE, USER_AGENT +from axie_utils.utils import AXIE_CONTRACT, RONIN_PROVIDER, USER_AGENT def test_breed_init(): @@ -39,7 +39,7 @@ def test_breed_execute(mocked_provider, b.execute() mock_get_nonce.assert_called_once() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(AXIE_CONTRACT) @@ -91,7 +91,7 @@ def test_trezorbreed_execute(mocked_provider, mock_rlp.assert_called() mock_get_nonce.assert_called_once() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(AXIE_CONTRACT) diff --git a/axie-utils/tests/test_claims.py b/axie-utils/tests/test_claims.py index 946942c..fa27d5b 100644 --- a/axie-utils/tests/test_claims.py +++ b/axie-utils/tests/test_claims.py @@ -9,7 +9,7 @@ from axie_utils import Claim, TrezorClaim from axie_utils.abis import SLP_ABI -from axie_utils.utils import SLP_CONTRACT, RONIN_PROVIDER_FREE, USER_AGENT +from axie_utils.utils import SLP_CONTRACT, RONIN_PROVIDER, USER_AGENT from tests.utils import MockedSignedMsg @@ -19,7 +19,7 @@ def test_claim_init(mocked_provider, mocked_checksum, mocked_contract): c = Claim(account="ronin:foo", private_key="bar", acc_name="test_acc") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -45,7 +45,7 @@ def test_has_unclaimed_slp(mocked_provider, mocked_checksum, mocked_contract, mo assert unclaimed == 2 mocked_check.assert_called_with("0xfoo") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -63,7 +63,7 @@ def test_has_unclaimed_slp_failed_req(mocked_provider, mocked_checksum, mocked_c unclaimed = c.has_unclaimed_slp() assert unclaimed is None mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -115,7 +115,7 @@ def test_get_jwt(mocked_provider, mocked_checksum, mocked_random_msg, mock_sign_ } assert req_mocker.request_history[0].json() == expected_payload mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -136,7 +136,7 @@ def test_get_jwt_fail_req(mocked_provider, mocked_checksum, mocked_random_msg, m jwt = c.get_jwt() assert jwt is None mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -186,7 +186,7 @@ def test_jwq_fail_req_content(mocked_provider, mocked_checksum, mocked_random_ms assert jwt is None assert req_mocker.request_history[0].json() == expected_payload mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -222,7 +222,7 @@ def test_jwq_fail_req_content_2(mocked_provider, mocked_checksum, mocked_random_ assert req_mocker.request_history[0].json() == expected_payload assert jwt is None mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -271,7 +271,7 @@ async def test_claim_async_execute(mocked_provider, c = Claim(account="ronin:foo", private_key="0x00003A01C01173D676B64123", acc_name="test_acc") await c.async_execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_has_calls([call(SLP_CONTRACT), call("0xfoo")]) @@ -330,7 +330,7 @@ async def test_async_execute_failed_get_blockchain(mocked_provider, c = Claim(account="ronin:foo", private_key="0x00003A01C01173D676B64123", acc_name="test_acc") await c.async_execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with('0xa8754b9fa15fc18bb59458815510e40a12cd2014') @@ -388,7 +388,7 @@ def test_claim_execution(mocked_provider, c = Claim(account="ronin:foo", private_key="0x00003A01C01173D676B64123", acc_name="test_acc") c.execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_has_calls([call(SLP_CONTRACT), call("0xfoo")]) @@ -446,7 +446,7 @@ def test_execution_failed_get_blockchain(mocked_provider, c = Claim(account="ronin:foo", private_key="0x00003A01C01173D676B64123", acc_name="test_acc") c.execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with('0xa8754b9fa15fc18bb59458815510e40a12cd2014') @@ -474,7 +474,7 @@ def test_trezor_claim_init(mocked_provider, mocked_checksum, mocked_contract, mo mock_open(read_data='SLP_ABI')): c = TrezorClaim(account="ronin:foo", acc_name="test_acc", bip_path="m/44'/60'/0'/0/0", client="client") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -507,7 +507,7 @@ def test_has_unclaimed_slp_trezor(mocked_provider, mocked_checksum, mocked_contr mocked_check.assert_called_with("0xfoo") mocked_parse.assert_called_with("m/44'/60'/0'/0/0") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -530,7 +530,7 @@ def test_has_unclaimed_slp_failed_req_trezor(mocked_provider, mocked_checksum, m assert unclaimed is None mocked_parse.assert_called_with("m/44'/60'/0'/0/0") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -589,7 +589,7 @@ def test_get_jwt_trezor(mocked_provider, mocked_checksum, mocked_random_msg, moc assert req_mocker.request_history[0].json() == expected_payload mocked_parse.assert_called_with("m/44'/60'/0'/0/0") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -618,7 +618,7 @@ def test_get_jwt_fail_req_trezor( assert jwt is None mocked_parse.assert_called_with("m/44'/60'/0'/0/0") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -676,7 +676,7 @@ def test_jwq_fail_req_content_trezor( mocked_parse.assert_called_with("m/44'/60'/0'/0/0") assert req_mocker.request_history[0].json() == expected_payload mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -720,7 +720,7 @@ def test_jwq_fail_req_content_2_trezor( assert jwt is None mocked_parse.assert_called_with("m/44'/60'/0'/0/0") mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with(SLP_CONTRACT) @@ -778,7 +778,7 @@ async def test_claim_async_execute_trezor(mocked_provider, c = TrezorClaim(account="ronin:foo", acc_name="test_acc", bip_path="m/44'/60'/0'/0/0", client="client") await c.async_execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_to_bytes.assert_called() @@ -850,7 +850,7 @@ async def test_async_execute_failed_get_blockchain_trezor(mocked_provider, c = TrezorClaim(account="ronin:foo", acc_name="test_acc", bip_path="m/44'/60'/0'/0/0", client="client") await c.async_execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with('0xa8754b9fa15fc18bb59458815510e40a12cd2014') @@ -921,7 +921,7 @@ def test_claim_execute_trezor(mocked_provider, c = TrezorClaim(account="ronin:foo", acc_name="test_acc", bip_path="m/44'/60'/0'/0/0", client="client") c.execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_to_bytes.assert_called() @@ -992,7 +992,7 @@ def test_execute_failed_get_blockchain_trezor(mocked_provider, c = TrezorClaim(account="ronin:foo", acc_name="test_acc", bip_path="m/44'/60'/0'/0/0", client="client") c.execute() mocked_provider.assert_called_with( - RONIN_PROVIDER_FREE, + RONIN_PROVIDER, request_kwargs={"headers": {"content-type": "application/json", "user-agent": USER_AGENT}} ) mocked_checksum.assert_called_with('0xa8754b9fa15fc18bb59458815510e40a12cd2014') diff --git a/axie-utils/tests/test_module.py b/axie-utils/tests/test_module.py index 387deee..01457b3 100644 --- a/axie-utils/tests/test_module.py +++ b/axie-utils/tests/test_module.py @@ -2,26 +2,28 @@ def test_version(): - assert axie_utils.__version__ == '1.1.3' + assert axie_utils.__version__ == '2.0.0' def test_init(): assert axie_utils.__all__ == [ - 'Axies', - 'AxieGraphQL', - 'Breed', - 'Claim', - 'CustomUI', - 'Morph', - 'Payment', - 'Transfer', - 'TrezorAxieGraphQL', - 'TrezorBreed', - 'TrezorClaim', - 'TrezorConfig', - 'TrezorMorph', - 'TrezorPayment', - 'TrezorTransfer', - 'get_nonce', - 'get_lastclaim', - 'check_balance'] + 'Axies', + 'AxieGraphQL', + 'Breed', + 'Claim', + 'CustomUI', + 'Morph', + 'Payment', + 'Scatter', + 'Transfer', + 'TrezorAxieGraphQL', + 'TrezorBreed', + 'TrezorClaim', + 'TrezorConfig', + 'TrezorMorph', + 'TrezorPayment', + 'TrezorScatter', + 'TrezorTransfer', + 'get_nonce', + 'get_lastclaim', + 'check_balance'] diff --git a/axie-utils/tests/test_payments.py b/axie-utils/tests/test_payments.py index 684e17f..04f0f15 100644 --- a/axie-utils/tests/test_payments.py +++ b/axie-utils/tests/test_payments.py @@ -61,7 +61,7 @@ def test_execute_calls_web3_functions(mock_transaction_receipt, @patch("web3.eth.Eth.get_transaction_count", return_value=123) -@patch("axie_utils.Payment.send_replacement_tx") +@patch("axie_utils.Payment.increase_gas_tx") @patch("web3.Web3.toChecksumAddress", return_value="checksum") @patch("web3.eth.Eth.account.sign_transaction") @patch("web3.eth.Eth.send_raw_transaction") @@ -76,7 +76,7 @@ def test_execute_calls_web3_functions_retry(mock_transaction_receipt, mock_send, mock_sign, mock_checksum, - mock_replacement_tx, + mock_increase_gas_tx, _): p = Payment( "random_account", @@ -96,7 +96,7 @@ def test_execute_calls_web3_functions_retry(mock_transaction_receipt, call('0xfrom_ronin'), call('0xto_ronin')]) mock_transaction_receipt.assert_called_with("transaction_hash") - mock_replacement_tx.assert_called_with(123) + mock_increase_gas_tx.assert_called_with(123) @patch("axie_utils.payments.rlp.encode") @@ -151,8 +151,8 @@ def test_execute_calls_web3_functions_trezor(mock_transaction_receipt, @patch("web3.Web3.keccak", return_value='result_of_keccak') @patch("web3.eth.Eth.contract") @patch("web3.eth.Eth.get_transaction_receipt", return_value={'status': 0}) -@patch("axie_utils.payments.TrezorPayment.send_replacement_tx") -def test_execute_calls_web3_functions_retry_trezor(mock_replacement_tx, +@patch("axie_utils.payments.TrezorPayment.increase_gas_tx") +def test_execute_calls_web3_functions_retry_trezor(mock_increase_gas_tx, mock_transaction_receipt, mock_contract, mock_keccak, @@ -183,4 +183,4 @@ def test_execute_calls_web3_functions_retry_trezor(mock_replacement_tx, call('0xfrom_ronin'), call('0xto_ronin')]) mock_transaction_receipt.assert_called_with("transaction_hash") - mock_replacement_tx.assert_called_with(123) + mock_increase_gas_tx.assert_called_with(123) diff --git a/axie-utils/tests/test_scatter.py b/axie-utils/tests/test_scatter.py new file mode 100644 index 0000000..15ee044 --- /dev/null +++ b/axie-utils/tests/test_scatter.py @@ -0,0 +1,192 @@ +from mock import patch, call + +from axie_utils import Scatter, TrezorScatter +from axie_utils.abis import SCATTER_ABI +from axie_utils.utils import ( + TOKENS, + SLP_CONTRACT, +) +from tests.utils import MockedAllowed, MockedNotAllowed + + + +def test_scatter_init(): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + assert s.token == 'slp' + assert s.from_acc == '0xfrom_acc' + assert s.from_private == '0xprivate_key' + assert s.to_list == ['ronin:abc1', 'ronin:dce2'] + assert s.amounts_list == [1, 10] + +def test_scatter_init_ron(): + s = Scatter('ron', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + assert s.token == 'ron' + assert s.from_acc == '0xfrom_acc' + assert s.from_private == '0xprivate_key' + assert s.to_list == ['ronin:abc1', 'ronin:dce2'] + assert s.amounts_list == [1, 10] + + +def test_scatter_init_trezor(): + s = TrezorScatter('slp', 'ronin:from_acc', 'client', "m/44'/60'/0'/0/0", {'ronin:abc1': 1, 'ronin:dce2': 10}) + assert s.token == 'slp' + assert s.from_acc == '0xfrom_acc' + assert s.client == 'client' + assert s.to_list == ['ronin:abc1', 'ronin:dce2'] + assert s.amounts_list == [1, 10] + + +@patch("web3.eth.Eth.contract", return_value = MockedAllowed) +@patch("web3.Web3.toChecksumAddress") +def test_is_contract_accepted_success(mocked_checkssum, mocked_approve): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + mocked_checkssum.assert_called() + mocked_approve.assert_called() + assert s.is_contract_accepted() == True + + + +@patch("axie_utils.scatter.Scatter.approve_contract", return_value='FOO') +@patch("web3.eth.Eth.contract", return_value = MockedNotAllowed) +@patch("web3.Web3.toChecksumAddress") +def test_is_contract_accepted_fail(mocked_checkssum, mocked_approve, _): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + mocked_checkssum.assert_called() + mocked_approve.assert_called() + assert s.is_contract_accepted() == "FOO" + + +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("web3.eth.Eth.account.sign_transaction") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.wait_for_transaction_receipt", return_value={'status': 1}) +def test_approve_contract(*args): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + r = s.approve_contract() + assert r == True + + +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("web3.eth.Eth.account.sign_transaction") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.wait_for_transaction_receipt", return_value={'status': 0}) +def test_approve_contract_failed(*args): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + r = s.approve_contract() + assert r == False + + +@patch("axie_utils.payments.rlp.encode") +@patch("web3.Web3.toBytes") +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("axie_utils.payments.ethereum.sign_tx") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.wait_for_transaction_receipt", return_value={'status': 1}) +def test_approve_contract_trezor(*args): + s = TrezorScatter('slp', 'ronin:from_acc', 'client', "m/44'/60'/0'/0/0", {'ronin:abc1': 1, 'ronin:dce2': 10}) + r = s.approve_contract() + assert r == True + + +@patch("axie_utils.scatter.get_nonce", return_value=1) +def test_increase_gas_tx_no_avilable_nonce(mocked_nonce): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + r = s.increase_gas_tx(123) + mocked_nonce.assert_called() + assert r is None + + +@patch("axie_utils.scatter.Scatter.execute_token") +@patch("axie_utils.scatter.get_nonce", return_value=123) +def test_increase_gas_tx(mocked_nonce, mocked_execute_token): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + s.increase_gas_tx(123) + mocked_nonce.assert_called() + mocked_execute_token.assert_called_with(1.01, 123) + + +@patch("axie_utils.scatter.Scatter.execute_ron") +@patch("axie_utils.scatter.get_nonce", return_value=123) +def test_increase_gas_tx_ron(mocked_nonce, mocked_execute_ron): + s = Scatter('ron', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + s.increase_gas_tx(123) + mocked_nonce.assert_called() + mocked_execute_ron.assert_called_with(1.01, 123) + + +@patch("axie_utils.scatter.check_balance", return_value=100000) +@patch("axie_utils.scatter.Scatter.is_contract_accepted", return_value=True) +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("web3.eth.Eth.account.sign_transaction") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.get_transaction_receipt", return_value={'status': 1}) +def test_execute_token(*args): + s = Scatter('slp', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + resp = s.execute() + assert resp == 'transaction_hash' + + +@patch("axie_utils.scatter.check_balance", return_value=100000) +@patch("axie_utils.scatter.TrezorScatter.is_contract_accepted", return_value=True) +@patch("axie_utils.payments.rlp.encode") +@patch("web3.Web3.toBytes") +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("axie_utils.payments.ethereum.sign_tx") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.get_transaction_receipt", return_value={'status': 1}) +def test_execute_token_trezor(*args): + s = TrezorScatter('slp', 'ronin:from_acc', 'client', "m/44'/60'/0'/0/0", {'ronin:abc1': 1, 'ronin:dce2': 10}) + resp = s.execute() + assert resp == 'transaction_hash' + + +@patch("axie_utils.scatter.check_balance", return_value=100000) +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("web3.eth.Eth.account.sign_transaction") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.get_transaction_receipt", return_value={'status': 1}) +def test_execute_ron(*args): + s = Scatter('ron', 'ronin:from_acc', '0xprivate_key', {'ronin:abc1': 1, 'ronin:dce2': 10}) + resp = s.execute() + assert resp == 'transaction_hash' + + +@patch("axie_utils.scatter.check_balance", return_value=100000) +@patch("axie_utils.payments.rlp.encode") +@patch("web3.Web3.toBytes") +@patch("web3.eth.Eth.get_transaction_count", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value="checksum") +@patch("axie_utils.payments.ethereum.sign_tx") +@patch("web3.eth.Eth.send_raw_transaction") +@patch("web3.Web3.toHex", return_value="transaction_hash") +@patch("web3.Web3.keccak", return_value='result_of_keccak') +@patch("web3.eth.Eth.contract") +@patch("web3.eth.Eth.get_transaction_receipt", return_value={'status': 1}) +def test_execute_ron_trezor(*args): + s = TrezorScatter('ron', 'ronin:from_acc', 'client', "m/44'/60'/0'/0/0", {'ronin:abc1': 1, 'ronin:dce2': 10}) + resp = s.execute() + assert resp == 'transaction_hash' \ No newline at end of file diff --git a/axie-utils/tests/test_utils.py b/axie-utils/tests/test_utils.py index 18e25dc..3440cc8 100644 --- a/axie-utils/tests/test_utils.py +++ b/axie-utils/tests/test_utils.py @@ -1,9 +1,18 @@ from datetime import datetime +from tabnanny import check +from unittest import mock -from mock import patch +from mock import patch, call import requests_mock -from axie_utils import TrezorConfig, get_lastclaim +from axie_utils import TrezorConfig, get_lastclaim, check_balance +from axie_utils.utils import ( + AXIE_CONTRACT, + AXS_CONTRACT, + SLP_CONTRACT, + WETH_CONTRACT, + USDC_CONTRACT +) def test_trezor_config_init(): @@ -52,3 +61,77 @@ def test_get_lastclaim_no_json(): req_mocker.get(url) d = get_lastclaim(account) assert d == None + + +@patch("web3.eth.Eth.contract") +@patch("web3.Web3.toChecksumAddress") +def test_check_balance_slp(mocked_checksum, mock_contract): + balance = check_balance('account', 'slp') + mocked_checksum.assert_has_calls(calls=[ + call(SLP_CONTRACT), + call("account") + ]) + mock_contract.assert_called() + assert balance == 1 + + +@patch("web3.eth.Eth.contract") +@patch("web3.Web3.toChecksumAddress") +def test_check_balance_axs(mocked_checksum, mock_contract): + balance = check_balance('account', 'axs') + mocked_checksum.assert_has_calls(calls=[ + call(AXS_CONTRACT), + call("account") + ]) + mock_contract.assert_called() + assert balance == 1 + + +@patch("web3.eth.Eth.contract") +@patch("web3.Web3.toChecksumAddress") +def test_check_balance_axies(mocked_checksum, mock_contract): + balance = check_balance('account', 'axies') + mocked_checksum.assert_has_calls(calls=[ + call(AXIE_CONTRACT), + call("account") + ]) + mock_contract.assert_called() + assert balance == 1 + + +@patch("web3.eth.Eth.contract") +@patch("web3.Web3.toChecksumAddress") +def test_check_balance_weth(mocked_checksum, mock_contract): + balance = check_balance('account', 'weth') + mocked_checksum.assert_has_calls(calls=[ + call(WETH_CONTRACT), + call("account") + ]) + mock_contract.assert_called() + assert balance == 1 + + +@patch("web3.eth.Eth.contract") +@patch("web3.Web3.toChecksumAddress") +def test_check_balance_usdc(mocked_checksum, mock_contract): + balance = check_balance('account', 'usdc') + mocked_checksum.assert_has_calls(calls=[ + call(USDC_CONTRACT), + call("account") + ]) + mock_contract.assert_called() + assert balance == 1 + + +@patch("web3.eth.Eth.get_balance", return_value=123) +@patch("web3.Web3.toChecksumAddress", return_value='addrs') +def test_check_balance_ron(mocked_checksum, mocked_balance): + balance = check_balance('account', 'ron') + mocked_checksum.assert_called_with('account') + mocked_balance.assert_called_with('addrs') + assert balance == 123 / 1000000000000000000 + + +def test_check_balance_invalid(): + balance = check_balance('account', 'foo') + assert balance == 0 diff --git a/axie-utils/tests/utils.py b/axie-utils/tests/utils.py index 4f5a2c5..1505c9c 100644 --- a/axie-utils/tests/utils.py +++ b/axie-utils/tests/utils.py @@ -5,3 +5,29 @@ class MockedSignedMsg: def __init__(self): self.signature = HexBytes(b'123') + + +class CallClass: + + def call(): + return 123 + + +class CallClassZero: + + def call(): + return 0 + + +class MockedAllowed: + + class functions: + def allowance(self, *args, **kwargs): + return CallClass + + +class MockedNotAllowed: + + class functions: + def allowance(self, *args, **kwargs): + return CallClassZero \ No newline at end of file