def setup_chain_state(w3): coinbase = w3.eth.coinbase assert is_same_address(coinbase, common.COINBASE) # # Math Contract # math_contract_factory = w3.eth.contract( abi=MATH_ABI, bytecode=MATH_BYTECODE, ) math_deploy_receipt = common.deploy_contract(w3, 'math', math_contract_factory) assert is_dict(math_deploy_receipt) # # Emitter Contract # emitter_contract_factory = w3.eth.contract( abi=CONTRACT_EMITTER_ABI, bytecode=CONTRACT_EMITTER_CODE, ) emitter_deploy_receipt = common.deploy_contract(w3, 'emitter', emitter_contract_factory) emitter_contract = emitter_contract_factory(emitter_deploy_receipt['contractAddress']) txn_hash_with_log = emitter_contract.functions.logDouble( which=EMITTER_ENUM['LogDoubleWithIndex'], arg0=12345, arg1=54321, ).transact({ 'from': w3.eth.coinbase, }) print('TXN_HASH_WITH_LOG:', txn_hash_with_log) txn_receipt_with_log = mine_transaction_hash(w3, txn_hash_with_log) block_with_log = w3.eth.get_block(txn_receipt_with_log['blockHash']) print('BLOCK_HASH_WITH_LOG:', block_with_log['hash']) # # Revert Contract # revert_contract_factory = w3.eth.contract( abi=_REVERT_CONTRACT_ABI, bytecode=REVERT_CONTRACT_BYTECODE, ) revert_deploy_receipt = common.deploy_contract(w3, 'revert', revert_contract_factory) revert_contract = revert_contract_factory(revert_deploy_receipt['contractAddress']) txn_hash_normal_function = revert_contract.functions.normalFunction().transact( {'gas': 320000, 'from': w3.eth.coinbase} ) print('TXN_HASH_REVERT_NORMAL:', txn_hash_normal_function) txn_hash_revert_with_msg = revert_contract.functions.revertWithMessage().transact( {'gas': 320000, 'from': w3.eth.coinbase} ) print('TXN_HASH_REVERT_WITH_MSG:', txn_hash_revert_with_msg) txn_receipt_revert_with_msg = common.mine_transaction_hash(w3, txn_hash_revert_with_msg) block_hash_revert_with_msg = w3.eth.get_block(txn_receipt_revert_with_msg['blockHash']) print('BLOCK_HASH_REVERT_WITH_MSG:', block_hash_revert_with_msg['hash']) txn_hash_revert_with_no_msg = revert_contract.functions.revertWithoutMessage().transact( {'gas': 320000, 'from': w3.eth.coinbase} ) print('TXN_HASH_REVERT_WITH_NO_MSG:', txn_hash_revert_with_no_msg) txn_receipt_revert_with_no_msg = common.mine_transaction_hash(w3, txn_hash_revert_with_no_msg) block_hash_revert_no_msg = w3.eth.get_block(txn_receipt_revert_with_no_msg['blockHash']) print('BLOCK_HASH_REVERT_NO_MSG:', block_hash_revert_no_msg['hash']) # # Empty Block # empty_block_number = mine_block(w3) print('MINED_EMPTY_BLOCK') empty_block = w3.eth.get_block(empty_block_number) assert is_dict(empty_block) assert not empty_block['transactions'] print('EMPTY_BLOCK_HASH:', empty_block['hash']) # # Block with Transaction # w3.geth.personal.unlock_account(coinbase, common.KEYFILE_PW) w3.geth.miner.start(1) mined_txn_hash = w3.eth.send_transaction({ 'from': coinbase, 'to': coinbase, 'value': 1, 'gas': 21000, 'gas_price': w3.eth.gas_price, }) mined_txn_receipt = mine_transaction_hash(w3, mined_txn_hash) print('MINED_TXN_HASH:', mined_txn_hash) block_with_txn = w3.eth.get_block(mined_txn_receipt['blockHash']) print('BLOCK_WITH_TXN_HASH:', block_with_txn['hash']) geth_fixture = { 'math_deploy_txn_hash': math_deploy_receipt['transactionHash'], 'math_address': math_deploy_receipt['contractAddress'], 'emitter_deploy_txn_hash': emitter_deploy_receipt['transactionHash'], 'emitter_address': emitter_deploy_receipt['contractAddress'], 'txn_hash_with_log': txn_hash_with_log, 'block_hash_with_log': block_with_log['hash'], 'empty_block_hash': empty_block['hash'], 'mined_txn_hash': mined_txn_hash, 'block_with_txn_hash': block_with_txn['hash'], 'revert_address': revert_deploy_receipt['contractAddress'], 'block_hash_revert_with_msg': block_hash_revert_with_msg['hash'], 'block_hash_revert_no_msg': block_hash_revert_no_msg['hash'], } return geth_fixture
def setup_chain_state(web3): coinbase = web3.eth.coinbase assert is_same_address(coinbase, common.COINBASE) # # Math Contract # math_contract_factory = web3.eth.contract( abi=MATH_ABI, bytecode=MATH_BYTECODE, ) math_deploy_receipt = common.deploy_contract(web3, 'math', math_contract_factory) assert is_dict(math_deploy_receipt) # # Emitter Contract # emitter_contract_factory = web3.eth.contract( abi=EMITTER_ABI, bytecode=EMITTER_BYTECODE, ) emitter_deploy_receipt = common.deploy_contract(web3, 'emitter', emitter_contract_factory) emitter_contract = emitter_contract_factory( emitter_deploy_receipt['contractAddress']) txn_hash_with_log = emitter_contract.functions.logDouble( which=EMITTER_ENUM['LogDoubleWithIndex'], arg0=12345, arg1=54321, ).transact({ 'from': web3.eth.coinbase, }) print('TXN_HASH_WITH_LOG:', txn_hash_with_log) txn_receipt_with_log = common.mine_transaction_hash( web3, txn_hash_with_log) block_with_log = web3.eth.getBlock(txn_receipt_with_log['blockHash']) print('BLOCK_HASH_WITH_LOG:', block_with_log['hash']) # # Empty Block # empty_block_number = common.mine_block(web3) print('MINED_EMPTY_BLOCK') empty_block = web3.eth.getBlock(empty_block_number) assert is_dict(empty_block) assert not empty_block['transactions'] print('EMPTY_BLOCK_HASH:', empty_block['hash']) # # Block with Transaction # web3.personal.unlockAccount(coinbase, common.KEYFILE_PW) web3.miner.start(1) mined_txn_hash = web3.eth.sendTransaction({ 'from': coinbase, 'to': coinbase, 'value': 1, 'gas': 21000, 'gas_price': web3.eth.gasPrice, }) mined_txn_receipt = common.mine_transaction_hash(web3, mined_txn_hash) print('MINED_TXN_HASH:', mined_txn_hash) block_with_txn = web3.eth.getBlock(mined_txn_receipt['blockHash']) print('BLOCK_WITH_TXN_HASH:', block_with_txn['hash']) geth_fixture = { 'math_deploy_txn_hash': math_deploy_receipt['transactionHash'], 'math_address': math_deploy_receipt['contractAddress'], 'emitter_deploy_txn_hash': emitter_deploy_receipt['transactionHash'], 'emitter_address': emitter_deploy_receipt['contractAddress'], 'txn_hash_with_log': txn_hash_with_log, 'block_hash_with_log': block_with_log['hash'], 'empty_block_hash': empty_block['hash'], 'mined_txn_hash': mined_txn_hash, 'block_with_txn_hash': block_with_txn['hash'], } return geth_fixture
def setup_chain_state(web3): coinbase = web3.eth.coinbase assert is_same_address(coinbase, common.COINBASE) # # Math Contract # math_contract_factory = web3.eth.contract( abi=MATH_ABI, bytecode=MATH_BYTECODE, ) math_deploy_receipt = common.deploy_contract(web3, 'math', math_contract_factory) assert is_dict(math_deploy_receipt) # # Emitter Contract # emitter_contract_factory = web3.eth.contract( abi=EMITTER_ABI, bytecode=EMITTER_BYTECODE, ) emitter_deploy_receipt = common.deploy_contract(web3, 'emitter', emitter_contract_factory) emitter_contract = emitter_contract_factory(emitter_deploy_receipt['contractAddress']) txn_hash_with_log = emitter_contract.functions.logDouble( which=EMITTER_ENUM['LogDoubleWithIndex'], arg0=12345, arg1=54321, ).transact({ 'from': web3.eth.coinbase, }) print('TXN_HASH_WITH_LOG:', txn_hash_with_log) txn_receipt_with_log = common.mine_transaction_hash(web3, txn_hash_with_log) block_with_log = web3.eth.getBlock(txn_receipt_with_log['blockHash']) print('BLOCK_HASH_WITH_LOG:', block_with_log['hash']) # # Empty Block # empty_block_number = common.mine_block(web3) print('MINED_EMPTY_BLOCK') empty_block = web3.eth.getBlock(empty_block_number) assert is_dict(empty_block) assert not empty_block['transactions'] print('EMPTY_BLOCK_HASH:', empty_block['hash']) # # Block with Transaction # web3.personal.unlockAccount(coinbase, common.KEYFILE_PW) web3.miner.start(1) mined_txn_hash = web3.eth.sendTransaction({ 'from': coinbase, 'to': coinbase, 'value': 1, 'gas': 21000, 'gas_price': web3.eth.gasPrice, }) mined_txn_receipt = common.mine_transaction_hash(web3, mined_txn_hash) print('MINED_TXN_HASH:', mined_txn_hash) block_with_txn = web3.eth.getBlock(mined_txn_receipt['blockHash']) print('BLOCK_WITH_TXN_HASH:', block_with_txn['hash']) geth_fixture = { 'math_deploy_txn_hash': math_deploy_receipt['transactionHash'], 'math_address': math_deploy_receipt['contractAddress'], 'emitter_deploy_txn_hash': emitter_deploy_receipt['transactionHash'], 'emitter_address': emitter_deploy_receipt['contractAddress'], 'txn_hash_with_log': txn_hash_with_log, 'block_hash_with_log': block_with_log['hash'], 'empty_block_hash': empty_block['hash'], 'mined_txn_hash': mined_txn_hash, 'block_with_txn_hash': block_with_txn['hash'], } return geth_fixture