70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
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, '../../contracts/validator_registration.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
|