78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
|
# standard imports
|
||
|
import os
|
||
|
|
||
|
# external imports
|
||
|
import pytest
|
||
|
from chainlib.eth.contract import (
|
||
|
ABIContractEncoder,
|
||
|
ABIContractType,
|
||
|
)
|
||
|
from chainlib.eth.nonce import RPCNonceOracle
|
||
|
from chainlib.eth.gas import OverrideGasOracle
|
||
|
from chainlib.eth.block import (
|
||
|
block_latest,
|
||
|
block_by_number,
|
||
|
Block,
|
||
|
)
|
||
|
from chainlib.eth.tx import (
|
||
|
receipt,
|
||
|
TxFactory,
|
||
|
TxFormat,
|
||
|
unpack,
|
||
|
Tx,
|
||
|
)
|
||
|
from hexathon import strip_0x
|
||
|
|
||
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||
|
root_dir = os.path.dirname(script_dir)
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope='function')
|
||
|
def bogus_tx_block(
|
||
|
default_chain_spec,
|
||
|
eth_rpc,
|
||
|
eth_signer,
|
||
|
contract_roles,
|
||
|
):
|
||
|
|
||
|
nonce_oracle = RPCNonceOracle(contract_roles['CONTRACT_DEPLOYER'], conn=eth_rpc)
|
||
|
gas_oracle = OverrideGasOracle(limit=2000000, conn=eth_rpc)
|
||
|
|
||
|
f = open(os.path.join(script_dir, 'testdata', 'Bogus.bin'), 'r')
|
||
|
bytecode = f.read()
|
||
|
f.close()
|
||
|
|
||
|
c = TxFactory(default_chain_spec, signer=eth_signer, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle)
|
||
|
tx = c.template(contract_roles['CONTRACT_DEPLOYER'], None, use_nonce=True)
|
||
|
tx = c.set_code(tx, bytecode)
|
||
|
(tx_hash_hex, o) = c.build(tx)
|
||
|
|
||
|
r = eth_rpc.do(o)
|
||
|
|
||
|
o = receipt(tx_hash_hex)
|
||
|
r = eth_rpc.do(o)
|
||
|
|
||
|
contract_address = r['contract_address']
|
||
|
|
||
|
enc = ABIContractEncoder()
|
||
|
enc.method('poke')
|
||
|
data = enc.get()
|
||
|
tx = c.template(contract_roles['CONTRACT_DEPLOYER'], contract_address, use_nonce=True)
|
||
|
tx = c.set_code(tx, data)
|
||
|
(tx_hash_hex, o) = c.finalize(tx, TxFormat.JSONRPC)
|
||
|
r = eth_rpc.do(o)
|
||
|
tx_signed_raw_hex = strip_0x(o['params'][0])
|
||
|
|
||
|
o = block_latest()
|
||
|
r = eth_rpc.do(o)
|
||
|
o = block_by_number(r, include_tx=False)
|
||
|
r = eth_rpc.do(o)
|
||
|
block = Block(r)
|
||
|
block.txs = [tx_hash_hex]
|
||
|
|
||
|
tx_signed_raw_bytes = bytes.fromhex(strip_0x(tx_signed_raw_hex))
|
||
|
tx_src = unpack(tx_signed_raw_bytes, default_chain_spec)
|
||
|
tx = Tx(tx_src, block=block)
|
||
|
|
||
|
return (block, tx)
|