Exemple #1
0
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()
Exemple #2
0
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)
Exemple #3
0
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'
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
def skale():
    web3 = init_web3(ENDPOINT)
    wallet = Web3Wallet(ETH_PRIVATE_KEY, web3)
    return Skale(ENDPOINT, TEST_ABI_FILEPATH, wallet)
Exemple #13
0
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)