def test_multithead_calls(): init_web3(ENDPOINT) monitors = [] for _ in range(0, 5): monitor = threading.Thread(target=get_node_data, daemon=True) monitor.start() monitors.append(monitor) for monitor in monitors: monitor.join()
def test_lib_init(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) skale = Skale(ENDPOINT, TEST_ABI_FILEPATH, wallet) lib_contracts_info = skale._Skale__contracts_info for contract_info in CONTRACTS_INFO: assert isinstance(lib_contracts_info[contract_info.name], ContractInfo) lib_contracts = skale._Skale__contracts assert len(lib_contracts) == len(CONTRACTS_INFO) for lib_contract in lib_contracts.values(): assert issubclass(type(lib_contract), BaseContract) assert lib_contract.address is not None assert int(lib_contract.address, 16) != 0 assert web3.eth.getCode(lib_contract.address) assert lib_contract.abi is not None assert skale.abi is not None provider = skale.web3.provider assert isinstance(provider, WebsocketProvider) http_endpoint = 'http://localhost:8080' with mock.patch.object(Skale, '_Skale__init_contracts'): skale = Skale(http_endpoint, TEST_ABI_FILEPATH, wallet) provider = skale.web3.provider assert isinstance(provider, HTTPProvider) file_endpoint = 'file://local_file:1001' with pytest.raises(Exception): Skale(file_endpoint, TEST_ABI_FILEPATH, wallet)
def test_sgx_key_init(): with mock.patch('skale.wallets.sgx_wallet.SgxClient', new=SgxClient): web3 = init_web3(ENDPOINT) wallet = SgxWallet('TEST_ENDPOINT', web3, 'TEST_KEY') assert wallet.key_name == 'TEST_KEY' assert wallet.address == ADDRESS assert wallet.public_key == 'ab00000000000000000000000000000000000000'
def init_skale(node_id=None): if node_id is None: wallet = RPCWallet(os.environ['TM_URL']) if ENV != 'DEV' else None else: ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) return Skale(ENDPOINT, ABI_FILEPATH, wallet)
def init_wallet(endpoint): if not TM_URL and not ETH_PRIVATE_KEY: raise Exception( 'You should provide TM_URL or ETH_PRIVATE_KEY to init wallet') if TM_URL: return RPCWallet(TM_URL) web3 = init_web3(endpoint) return Web3Wallet(ETH_PRIVATE_KEY, web3)
def init_skale_w_wallet(endpoint, wallet_type, pk_file=None, spin=True): """Init instance of SKALE library with wallet""" web3 = init_web3(endpoint) if wallet_type == 'hardware': wallet = LedgerWallet(web3) else: with open(pk_file, 'r') as f: pk = str(f.read()).strip() wallet = Web3Wallet(pk, web3) return init_skale(endpoint, wallet, spin)
def init_wallet(endpoint): if TM_URL: return RPCWallet(TM_URL) web3 = init_web3(endpoint) if LEDGER: return LedgerWallet(web3, debug=True) if ETH_PRIVATE_KEY: return Web3Wallet(ETH_PRIVATE_KEY, web3) raise Exception('You should provide TM_URL or ETH_PRIVATE_KEY or ' 'set LEDGER=1 to init wallet') return Web3Wallet(ETH_PRIVATE_KEY, web3)
def test_sgx_sign_without_nonce(): with mock.patch('skale.wallets.sgx_wallet.SgxClient', new=SgxClient): web3 = init_web3(ENDPOINT) wallet = SgxWallet('TEST_ENDPOINT', web3) tx_dict = { 'to': '0x1057dc7277a319927D3eB43e05680B75a00eb5f4', 'value': 9, 'gas': 200000, 'gasPrice': 1, 'chainId': None, 'data': b'\x9b\xd9\xbb\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95qY\xc4i\xfc;\xba\xa8\xe3\x9e\xe0\xa3$\xc28\x8a\xd6Q\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\xe0\xb6\xb3\xa7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xc0\x04/Rglamorous-kitalpha\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # noqa } wallet.sign(tx_dict)
def init_skale_w_wallet(endpoint, wallet_type, pk_file=None, disable_spin=DISABLE_SPIN): """Init instance of SKALE library with wallet""" web3 = init_web3(endpoint) if wallet_type == 'ledger': wallet = LedgerWallet(web3) elif wallet_type == 'sgx': info = get_sgx_info() wallet = SgxWallet(info['server_url'], web3, key_name=info['key'], path_to_cert=SGX_SSL_CERTS_PATH) else: with open(pk_file, 'r') as f: pk = str(f.read()).strip() wallet = Web3Wallet(pk, web3) return init_skale(endpoint, wallet, disable_spin)
def test_hardware_sign_and_send(): with mock.patch('ledgerblue.comm.getDongle', new=get_dongle_mock): web3 = init_web3(ENDPOINT) wallet = LedgerWallet(web3) tx_dict = { 'to': '0x1057dc7277a319927D3eB43e05680B75a00eb5f4', 'value': 9, 'gas': 200000, 'gasPrice': 1, 'nonce': 7, 'chainId': None, 'data': b'\x9b\xd9\xbb\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95qY\xc4i\xfc;\xba\xa8\xe3\x9e\xe0\xa3$\xc28\x8a\xd6Q\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\xe0\xb6\xb3\xa7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xc0\x04/Rglamorous-kitalpha\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # noqa } wallet.sign(tx_dict)
def test_sgx_sign_and_send_without_nonce(): with mock.patch.object(web3.eth.Eth, 'sendRawTransaction') as send_tx_mock: with mock.patch('skale.wallets.sgx_wallet.SgxClient', new=SgxClient): web3_inst = init_web3(ENDPOINT) wallet = SgxWallet('TEST_ENDPOINT', web3_inst) tx_dict = { 'to': '0x1057dc7277a319927D3eB43e05680B75a00eb5f4', 'value': 9, 'gas': 200000, 'gasPrice': 1, 'chainId': None, 'data': b'\x9b\xd9\xbb\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95qY\xc4i\xfc;\xba\xa8\xe3\x9e\xe0\xa3$\xc28\x8a\xd6Q\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\xe0\xb6\xb3\xa7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xc0\x04/Rglamorous-kitalpha\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # noqa } signed = wallet.sign(tx_dict) wallet.sign_and_send(tx_dict) send_tx_mock.assert_called_with(signed.rawTransaction)
def skale(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) return Skale(ENDPOINT, TEST_ABI_FILEPATH, wallet)
def skale(): '''Returns a SKALE instance with provider from config''' web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) return Skale(ENDPOINT, TEST_ABI_FILEPATH, wallet)
from skale.utils.helper import init_default_logger from skale.utils.account_tools import generate_accounts logger = logging.getLogger(__name__) init_default_logger() CURRENT_DIR = os.path.dirname(os.path.realpath(__file__)) ENDPOINT = os.environ['ENDPOINT'] ABI_FILEPATH = os.path.join(CURRENT_DIR, 'manager.json') ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] N_WALLETS = os.environ['N_WALLETS'] SKALE_AMOUNT = os.environ['SKALE_AMOUNT'] ETH_AMOUNT = os.environ['ETH_AMOUNT'] web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) def save_wallet_info(i, account): filename = f'wallet-{i}.txt' filepath = os.path.join(CURRENT_DIR, 'wallets', filename) with open(filepath, 'w') as outfile: logger.info(f'Saving info to {filename}') outfile.write(account["private_key"]) def prepare_wallets(): accounts = generate_accounts(skale, skale.wallet, N_WALLETS, SKALE_AMOUNT, ETH_AMOUNT, True)