import pytest import eth_tester from eth_tester import ( EthereumTester, PyEVMBackend, ) from web3 import Web3 from web3.providers.eth_tester import EthereumTesterProvider import json import os DIR = os.path.dirname(__file__) def get_deposit_contract_json(): file_path = os.path.join(DIR, '../../deposit_contract.json') deposit_contract_json = open(file_path).read() return json.loads(deposit_contract_json) # Constants MIN_DEPOSIT_AMOUNT = 1000000000 # Gwei FULL_DEPOSIT_AMOUNT = 32000000000 # Gwei DEPOSIT_CONTRACT_TREE_DEPTH = 32 TWO_TO_POWER_OF_TREE_DEPTH = 2**DEPOSIT_CONTRACT_TREE_DEPTH @pytest.fixture def tester(): return EthereumTester(PyEVMBackend()) @pytest.fixture def a0(tester): return tester.get_accounts()[0] @pytest.fixture def w3(tester): web3 = Web3(EthereumTesterProvider(tester)) return web3 @pytest.fixture def registration_contract(w3, tester): contract_bytecode = get_deposit_contract_json()['bytecode'] contract_abi = get_deposit_contract_json()['abi'] registration = w3.eth.contract( abi=contract_abi, bytecode=contract_bytecode) tx_hash = registration.constructor().transact() tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash) registration_deployed = w3.eth.contract( address=tx_receipt.contractAddress, abi=contract_abi ) return registration_deployed @pytest.fixture def assert_tx_failed(tester): def assert_tx_failed(function_to_test, exception=eth_tester.exceptions.TransactionFailed): snapshot_id = tester.take_snapshot() with pytest.raises(exception): function_to_test() tester.revert_to_snapshot(snapshot_id) return assert_tx_failed