2021-05-27 16:16:18 +02:00
|
|
|
# standard imports
|
|
|
|
import os
|
|
|
|
import logging
|
|
|
|
|
|
|
|
# external imports
|
|
|
|
import pytest
|
|
|
|
import celery
|
|
|
|
from chainqueue.tx import create as queue_create
|
2021-05-27 19:21:30 +02:00
|
|
|
from chainlib.eth.nonce import (
|
|
|
|
RPCNonceOracle,
|
|
|
|
OverrideNonceOracle,
|
|
|
|
)
|
2021-05-27 16:16:18 +02:00
|
|
|
from chainlib.eth.gas import (
|
|
|
|
OverrideGasOracle,
|
|
|
|
Gas,
|
|
|
|
)
|
|
|
|
from chainlib.eth.tx import (
|
|
|
|
TxFormat,
|
|
|
|
unpack,
|
|
|
|
receipt,
|
|
|
|
)
|
|
|
|
from hexathon import (
|
|
|
|
add_0x,
|
|
|
|
strip_0x,
|
|
|
|
)
|
|
|
|
from chainqueue.state import (
|
|
|
|
set_reserved,
|
|
|
|
set_ready,
|
|
|
|
)
|
|
|
|
|
|
|
|
logg = logging.getLogger()
|
|
|
|
|
|
|
|
|
|
|
|
def test_hashes_to_txs(
|
|
|
|
init_database,
|
|
|
|
default_chain_spec,
|
|
|
|
agent_roles,
|
|
|
|
eth_rpc,
|
|
|
|
eth_signer,
|
|
|
|
celery_session_worker,
|
|
|
|
):
|
|
|
|
|
|
|
|
nonce_oracle = OverrideNonceOracle(agent_roles['ALICE'], 42)
|
|
|
|
gas_oracle = OverrideGasOracle(price=1000000000, limit=21000)
|
|
|
|
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
|
|
|
(tx_hash_hex_one, tx_signed_raw_hex_one) = c.create(agent_roles['ALICE'], agent_roles['BOB'], 100 * (10 ** 6), tx_format=TxFormat.RLP_SIGNED)
|
|
|
|
|
|
|
|
queue_create(
|
|
|
|
default_chain_spec,
|
|
|
|
42,
|
|
|
|
agent_roles['ALICE'],
|
|
|
|
tx_hash_hex_one,
|
|
|
|
tx_signed_raw_hex_one,
|
|
|
|
session=init_database,
|
|
|
|
)
|
|
|
|
|
|
|
|
#nonce_oracle = OverrideNonceOracle(agent_roles['ALICE'], 43)
|
|
|
|
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
|
|
|
(tx_hash_hex_two, tx_signed_raw_hex_two) = c.create(agent_roles['ALICE'], agent_roles['CAROL'], 200 * (10 ** 6), tx_format=TxFormat.RLP_SIGNED)
|
|
|
|
|
|
|
|
queue_create(
|
|
|
|
default_chain_spec,
|
|
|
|
43,
|
|
|
|
agent_roles['ALICE'],
|
|
|
|
tx_hash_hex_two,
|
|
|
|
tx_signed_raw_hex_two,
|
|
|
|
session=init_database,
|
|
|
|
)
|
|
|
|
|
|
|
|
init_database.commit()
|
|
|
|
|
|
|
|
bogus_one = add_0x(os.urandom(32).hex())
|
|
|
|
bogus_two = add_0x(os.urandom(32).hex())
|
|
|
|
|
|
|
|
yarrgs = [
|
|
|
|
bogus_one,
|
|
|
|
tx_hash_hex_two,
|
|
|
|
bogus_two,
|
|
|
|
tx_hash_hex_one,
|
|
|
|
]
|
|
|
|
s = celery.signature(
|
|
|
|
'cic_eth.eth.tx.hashes_to_txs',
|
|
|
|
[
|
|
|
|
yarrgs,
|
|
|
|
],
|
|
|
|
queue=None,
|
|
|
|
)
|
|
|
|
t = s.apply_async()
|
|
|
|
r = t.get_leaf()
|
|
|
|
assert t.successful()
|
|
|
|
assert len(r) == 2
|
|
|
|
|
|
|
|
logg.debug('r {}'.format(r))
|
|
|
|
txs = [
|
|
|
|
tx_signed_raw_hex_two,
|
|
|
|
tx_signed_raw_hex_one,
|
|
|
|
]
|
|
|
|
for tx in r:
|
|
|
|
txs.remove(add_0x(tx))
|
|
|
|
assert len(txs) == 0
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-05-27 19:21:30 +02:00
|
|
|
def test_double_send(
|
2021-05-27 16:16:18 +02:00
|
|
|
init_database,
|
|
|
|
default_chain_spec,
|
|
|
|
agent_roles,
|
|
|
|
eth_rpc,
|
|
|
|
eth_signer,
|
|
|
|
celery_session_worker,
|
|
|
|
):
|
|
|
|
|
|
|
|
nonce_oracle = RPCNonceOracle(agent_roles['ALICE'], conn=eth_rpc)
|
|
|
|
gas_oracle = OverrideGasOracle(price=1000000000, limit=21000)
|
|
|
|
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
|
|
|
(tx_hash_hex_one, tx_signed_raw_hex_one) = c.create(agent_roles['ALICE'], agent_roles['BOB'], 100 * (10 ** 6), tx_format=TxFormat.RLP_SIGNED)
|
|
|
|
|
|
|
|
queue_create(
|
|
|
|
default_chain_spec,
|
|
|
|
42,
|
|
|
|
agent_roles['ALICE'],
|
|
|
|
tx_hash_hex_one,
|
|
|
|
tx_signed_raw_hex_one,
|
|
|
|
session=init_database,
|
|
|
|
)
|
|
|
|
set_ready(default_chain_spec, tx_hash_hex_one, session=init_database)
|
|
|
|
set_reserved(default_chain_spec, tx_hash_hex_one, session=init_database)
|
|
|
|
|
|
|
|
c = Gas(default_chain_spec, signer=eth_signer, nonce_oracle=nonce_oracle, gas_oracle=gas_oracle)
|
|
|
|
(tx_hash_hex_two, tx_signed_raw_hex_two) = c.create(agent_roles['ALICE'], agent_roles['CAROL'], 200 * (10 ** 6), tx_format=TxFormat.RLP_SIGNED)
|
|
|
|
|
|
|
|
queue_create(
|
|
|
|
default_chain_spec,
|
|
|
|
43,
|
|
|
|
agent_roles['ALICE'],
|
|
|
|
tx_hash_hex_two,
|
|
|
|
tx_signed_raw_hex_two,
|
|
|
|
session=init_database,
|
|
|
|
)
|
|
|
|
|
|
|
|
set_ready(default_chain_spec, tx_hash_hex_two, session=init_database)
|
|
|
|
set_reserved(default_chain_spec, tx_hash_hex_two, session=init_database)
|
|
|
|
init_database.commit()
|
|
|
|
|
|
|
|
yarrgs = [
|
|
|
|
tx_signed_raw_hex_one,
|
|
|
|
tx_signed_raw_hex_two,
|
|
|
|
]
|
|
|
|
s = celery.signature(
|
|
|
|
'cic_eth.eth.tx.send',
|
|
|
|
[
|
|
|
|
yarrgs,
|
|
|
|
default_chain_spec.asdict(),
|
|
|
|
],
|
|
|
|
queue=None
|
|
|
|
)
|
|
|
|
t = s.apply_async()
|
|
|
|
r = t.get_leaf()
|
|
|
|
assert t.successful()
|
|
|
|
|
|
|
|
o = receipt(tx_hash_hex_one)
|
|
|
|
r = eth_rpc.do(o)
|
|
|
|
assert r['status'] == 1
|
|
|
|
|
|
|
|
o = receipt(tx_hash_hex_two)
|
|
|
|
r = eth_rpc.do(o)
|
|
|
|
assert r['status'] == 1
|
2021-05-27 17:16:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|