89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
|
# standard imports
|
|||
|
import logging
|
|||
|
|
|||
|
# external imports
|
|||
|
import celery
|
|||
|
from chainlib.connection import RPCConnection
|
|||
|
from chainlib.eth.nonce import OverrideNonceOracle
|
|||
|
from chainqueue.tx import (
|
|||
|
create as queue_create,
|
|||
|
)
|
|||
|
from chainlib.eth.gas import (
|
|||
|
Gas,
|
|||
|
OverrideGasOracle,
|
|||
|
)
|
|||
|
from chainlib.eth.tx import TxFormat
|
|||
|
from chainqueue.query import get_nonce_tx_cache
|
|||
|
from chainqueue.db.models.otx import Otx
|
|||
|
from chainqueue.db.enum import StatusBits
|
|||
|
from hexathon import add_0x
|
|||
|
|
|||
|
# local imports
|
|||
|
from cic_eth.admin.nonce import shift_nonce
|
|||
|
from cic_eth.eth.gas import cache_gas_data
|
|||
|
|
|||
|
logg = logging.getLogger()
|
|||
|
|
|||
|
|
|||
|
def test_shift_nonce(
|
|||
|
default_chain_spec,
|
|||
|
init_database,
|
|||
|
eth_rpc,
|
|||
|
eth_signer,
|
|||
|
agent_roles,
|
|||
|
celery_session_worker,
|
|||
|
caplog,
|
|||
|
):
|
|||
|
|
|||
|
nonce_oracle = OverrideNonceOracle(agent_roles['ALICE'], 42)
|
|||
|
gas_oracle = OverrideGasOracle(limit=21000, conn=eth_rpc)
|
|||
|
|
|||
|
tx_hashes = []
|
|||
|
txs = []
|
|||
|
|
|||
|
for i in range(10):
|
|||
|
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
|||
|
(tx_hash_hex, tx_signed_raw_hex) = c.create(agent_roles['ALICE'], agent_roles['BOB'], 100 * (10 ** 6), tx_format=TxFormat.RLP_SIGNED)
|
|||
|
queue_create(
|
|||
|
default_chain_spec,
|
|||
|
42+i,
|
|||
|
agent_roles['ALICE'],
|
|||
|
tx_hash_hex,
|
|||
|
tx_signed_raw_hex,
|
|||
|
session=init_database,
|
|||
|
)
|
|||
|
cache_gas_data(
|
|||
|
tx_hash_hex,
|
|||
|
tx_signed_raw_hex,
|
|||
|
default_chain_spec.asdict(),
|
|||
|
)
|
|||
|
tx_hashes.append(tx_hash_hex)
|
|||
|
txs.append(tx_signed_raw_hex)
|
|||
|
|
|||
|
init_database.commit()
|
|||
|
|
|||
|
s = celery.signature(
|
|||
|
'cic_eth.admin.nonce.shift_nonce',
|
|||
|
[
|
|||
|
default_chain_spec.asdict(),
|
|||
|
tx_hashes[3],
|
|||
|
],
|
|||
|
queue=None
|
|||
|
)
|
|||
|
t = s.apply_async()
|
|||
|
r = t.get_leaf()
|
|||
|
assert t.successful()
|
|||
|
init_database.commit()
|
|||
|
|
|||
|
|
|||
|
for i in range(42+3, 42+10):
|
|||
|
txs = get_nonce_tx_cache(default_chain_spec, i, agent_roles['ALICE'], session=init_database)
|
|||
|
for k in txs.keys():
|
|||
|
hsh = add_0x(k)
|
|||
|
otx = Otx.load(hsh, session=init_database)
|
|||
|
logg.debug('checking nonce {} tx {} status {}'.format(i, otx.tx_hash, otx.status))
|
|||
|
if add_0x(k) == tx_hashes[i-42]:
|
|||
|
assert otx.status & StatusBits.OBSOLETE == StatusBits.OBSOLETE
|
|||
|
else:
|
|||
|
assert otx.status == 1
|