Test RandomX GBT longpoll across SHA tip changes
This commit is contained in:
parent
df7d2c83eb
commit
779b6515a1
1 changed files with 63 additions and 1 deletions
|
|
@ -5,11 +5,17 @@
|
||||||
|
|
||||||
"""Test activation-aware RandomX mining RPC handling."""
|
"""Test activation-aware RandomX mining RPC handling."""
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
from test_framework.address import ADDRESS_BCRT1_UNSPENDABLE_DESCRIPTOR
|
from test_framework.address import ADDRESS_BCRT1_UNSPENDABLE_DESCRIPTOR
|
||||||
from test_framework.blocktools import NORMAL_GBT_REQUEST_PARAMS
|
from test_framework.blocktools import NORMAL_GBT_REQUEST_PARAMS
|
||||||
from test_framework.messages import CBlock, CBlockHeader, from_hex
|
from test_framework.messages import CBlock, CBlockHeader, from_hex
|
||||||
from test_framework.test_framework import DigiByteTestFramework
|
from test_framework.test_framework import DigiByteTestFramework
|
||||||
from test_framework.util import assert_equal, assert_raises_rpc_error
|
from test_framework.util import (
|
||||||
|
assert_equal,
|
||||||
|
assert_raises_rpc_error,
|
||||||
|
get_rpc_proxy,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
BLOCK_VERSION_ALGO = 15 << 8
|
BLOCK_VERSION_ALGO = 15 << 8
|
||||||
|
|
@ -430,6 +436,62 @@ class RandomXGetBlockTemplateTest(DigiByteTestFramework):
|
||||||
assert_equal(epoch_template["randomx_seed"], expected_epoch_seed)
|
assert_equal(epoch_template["randomx_seed"], expected_epoch_seed)
|
||||||
assert_equal(len(epoch_template["randomx_seed"]), 64)
|
assert_equal(len(epoch_template["randomx_seed"]), 64)
|
||||||
|
|
||||||
|
self.log.info("RandomX longpoll remains RandomX after a SHA256D tip change")
|
||||||
|
longpoll_result = {}
|
||||||
|
longpoll_rpc = get_rpc_proxy(
|
||||||
|
node.url,
|
||||||
|
1,
|
||||||
|
timeout=60,
|
||||||
|
coveragedir=node.coverage_dir,
|
||||||
|
)
|
||||||
|
|
||||||
|
def randomx_longpoll():
|
||||||
|
try:
|
||||||
|
longpoll_result["template"] = longpoll_rpc.getblocktemplate(
|
||||||
|
{
|
||||||
|
"longpollid": epoch_template["longpollid"],
|
||||||
|
"rules": ["segwit"],
|
||||||
|
},
|
||||||
|
"randomx",
|
||||||
|
)
|
||||||
|
except BaseException as e:
|
||||||
|
longpoll_result["error"] = e
|
||||||
|
|
||||||
|
longpoll_thread = threading.Thread(target=randomx_longpoll)
|
||||||
|
longpoll_thread.start()
|
||||||
|
longpoll_thread.join(1)
|
||||||
|
assert longpoll_thread.is_alive()
|
||||||
|
|
||||||
|
sha_block = self.generatetodescriptor(
|
||||||
|
node,
|
||||||
|
1,
|
||||||
|
ADDRESS_BCRT1_UNSPENDABLE_DESCRIPTOR,
|
||||||
|
1000000,
|
||||||
|
"sha256d",
|
||||||
|
sync_fun=self.no_op,
|
||||||
|
)[0]
|
||||||
|
|
||||||
|
longpoll_thread.join(10)
|
||||||
|
assert not longpoll_thread.is_alive()
|
||||||
|
|
||||||
|
if "error" in longpoll_result:
|
||||||
|
raise longpoll_result["error"]
|
||||||
|
|
||||||
|
longpoll_template = longpoll_result["template"]
|
||||||
|
assert_equal(longpoll_template["height"], 65)
|
||||||
|
assert_equal(longpoll_template["previousblockhash"], sha_block)
|
||||||
|
assert_equal(longpoll_template["pow_algo_id"], 1)
|
||||||
|
assert_equal(longpoll_template["pow_algo"], "randomx")
|
||||||
|
assert_equal(
|
||||||
|
longpoll_template["version"] & BLOCK_VERSION_ALGO,
|
||||||
|
BLOCK_VERSION_RANDOMX,
|
||||||
|
)
|
||||||
|
assert_equal(longpoll_template["randomx_seed_height"], 56)
|
||||||
|
assert_equal(
|
||||||
|
longpoll_template["randomx_seed"],
|
||||||
|
expected_epoch_seed,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
RandomXGetBlockTemplateTest().main()
|
RandomXGetBlockTemplateTest().main()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue