Expose RandomX seed in getblocktemplate
This commit is contained in:
parent
013f0929ac
commit
2c7dfb6a75
2 changed files with 45 additions and 0 deletions
|
|
@ -863,6 +863,10 @@ static RPCHelpMan getblocktemplate()
|
|||
{RPCResult::Type::NUM_TIME, "curtime", "current timestamp in " + UNIX_EPOCH_TIME},
|
||||
{RPCResult::Type::STR, "bits", "compressed target of next block"},
|
||||
{RPCResult::Type::NUM, "height", "The height of the next block"},
|
||||
{RPCResult::Type::NUM, "pow_algo_id", "Mining algorithm id: 0 for SHA256D, 1 for RandomX"},
|
||||
{RPCResult::Type::STR, "pow_algo", "Mining algorithm name: sha256d or randomx"},
|
||||
{RPCResult::Type::NUM, "randomx_seed_height", /* optional */ true, "Height of the block used as the RandomX seed source"},
|
||||
{RPCResult::Type::STR_HEX, "randomx_seed", /* optional */ true, "RandomX seed key in raw uint256 byte order"},
|
||||
{RPCResult::Type::STR, "default_witness_commitment", /* optional */ true, "a valid witness commitment for the unmodified block template"},
|
||||
}},
|
||||
},
|
||||
|
|
@ -1212,6 +1216,31 @@ static RPCHelpMan getblocktemplate()
|
|||
result.pushKV("bits", strprintf("%08x", pblock->nBits));
|
||||
result.pushKV("height", (int64_t)(pindexPrev->nHeight+1));
|
||||
|
||||
result.pushKV("pow_algo_id", algo);
|
||||
result.pushKV("pow_algo", GetMiningAlgoName(algo));
|
||||
|
||||
if (algo == ALGO_RANDOMX) {
|
||||
const int blockHeight = pindexPrev->nHeight + 1;
|
||||
const int seedHeight =
|
||||
GetRandomXSeedHeight(blockHeight, consensusParams);
|
||||
|
||||
uint256 randomxSeed;
|
||||
if (!GetRandomXSeed(
|
||||
pindexPrev,
|
||||
blockHeight,
|
||||
consensusParams,
|
||||
randomxSeed)) {
|
||||
throw JSONRPCError(
|
||||
RPC_INTERNAL_ERROR,
|
||||
"Failed to resolve RandomX seed");
|
||||
}
|
||||
|
||||
result.pushKV("randomx_seed_height", seedHeight);
|
||||
result.pushKV(
|
||||
"randomx_seed",
|
||||
HexStr(MakeUCharSpan(randomxSeed)));
|
||||
}
|
||||
|
||||
if (consensusParams.signet_blocks) {
|
||||
result.pushKV("signet_challenge", HexStr(consensusParams.signet_challenge));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,6 +56,10 @@ class RandomXGetBlockTemplateTest(DigiByteTestFramework):
|
|||
sha_template["version"] & BLOCK_VERSION_ALGO,
|
||||
BLOCK_VERSION_SHA256D,
|
||||
)
|
||||
assert_equal(sha_template["pow_algo_id"], 0)
|
||||
assert_equal(sha_template["pow_algo"], "sha256d")
|
||||
assert "randomx_seed_height" not in sha_template
|
||||
assert "randomx_seed" not in sha_template
|
||||
|
||||
self.log.info("Mining RPC reports only SHA256D before activation")
|
||||
mining_info = node.getmininginfo()
|
||||
|
|
@ -130,6 +134,14 @@ class RandomXGetBlockTemplateTest(DigiByteTestFramework):
|
|||
randomx_template["version"] & BLOCK_VERSION_ALGO,
|
||||
BLOCK_VERSION_RANDOMX,
|
||||
)
|
||||
assert_equal(randomx_template["pow_algo_id"], 1)
|
||||
assert_equal(randomx_template["pow_algo"], "randomx")
|
||||
assert_equal(randomx_template["randomx_seed_height"], 0)
|
||||
|
||||
genesis_hash = node.getblockhash(0)
|
||||
expected_randomx_seed = bytes.fromhex(genesis_hash)[::-1].hex()
|
||||
assert_equal(randomx_template["randomx_seed"], expected_randomx_seed)
|
||||
assert_equal(len(randomx_template["randomx_seed"]), 64)
|
||||
|
||||
self.log.info("Default GBT remains SHA256D after RandomX activation")
|
||||
sha_template = node.getblocktemplate(NORMAL_GBT_REQUEST_PARAMS)
|
||||
|
|
@ -138,6 +150,10 @@ class RandomXGetBlockTemplateTest(DigiByteTestFramework):
|
|||
sha_template["version"] & BLOCK_VERSION_ALGO,
|
||||
BLOCK_VERSION_SHA256D,
|
||||
)
|
||||
assert_equal(sha_template["pow_algo_id"], 0)
|
||||
assert_equal(sha_template["pow_algo"], "sha256d")
|
||||
assert "randomx_seed_height" not in sha_template
|
||||
assert "randomx_seed" not in sha_template
|
||||
|
||||
self.log.info("Mining RPC exposes SHA256D and RandomX at activation")
|
||||
mining_info = node.getmininginfo()
|
||||
|
|
|
|||
Loading…
Reference in a new issue