stratum: add an additional test to validate bm_job construction

This commit is contained in:
johnny9 2023-05-26 19:41:14 -04:00
parent d583332f3b
commit 3d6d27b101

View File

@ -75,6 +75,31 @@ TEST_CASE("Validate bm job construction", "[mining]")
TEST_ASSERT_EQUAL_UINT8_ARRAY(expected_midstate_bin, job.midstate, 32);
}
// Values calculated from esp-miner/components/stratum/test/verifiers/bm1397.py
TEST_CASE("Validate bm job construction 2", "[mining]")
{
const char * notify_json_str = "{\"id\":null,\"method\":\"mining.notify\","
"\"params\":[\"21554471e8\",\"8bc8707eb169ad3bda101ae60c8d48bd00aff68a00006c8b0000000000000000\",\"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4b03d8130cfabe6d6db0ba74b36edc62c9268c945b53ebf1a7865b88bcdd40235a7a63d0f5ed5b6c400100000000000000\",\"e8714455212f736c7573682f00000000033de04728000000001976a9147c154ed1dc59609e3d26abb2df2ea3d587cd8c4188ac00000000000000002c6a4c2952534b424c4f434b3ae8c3686251b5ced65b6a65ea3e0491ac2975cd87c02b0640d3ec3c20005167770000000000000000266a24aa21a9eddffbecb5ef0a46324a3dd902fa84509a38d2c91548768845db5d6c2de0e33f6100000000\","
"[\"8ef6b79382a1fc5152c7e69b2dd4e3795ed758d6fe7748ef4d96e3ad8ac180b8\",\"5b6e1cfecd94050b763c2c6a08d4caabd54daee665aa8e41b53b39ec76b62707\",\"f85b768f83fffbb3927f7f440cb57a5ed386f368aae88ad9b9d92e7bc1cdce15\",\"e51b9391c39019d8a2a27becc048cc770f5d33b49a29779fdc7bed04767ca962\",\"9f5d08316ead260455ec532a58935411a3eecf3c9948a52325de495d7dd7b776\",\"57e10cad23a646ad3a87fcd34eae454567dbd44946e746ee6310a86b98afa4ac\",\"f3b65cc08b25901b657efb22f0a9a23e1a61ce1e268f801d8cfe782b4a0c5e5d\",\"648e00fe2a57dca155c7d4260bc52273b28adb42e1bceb45d5ee03f4a4c5d174\",\"43ad393f7efe4b7a29775dbbc10b3b2737e9457764a7b39bc8ac6b470b968ac8\",\"4964b9b2bf601dfb2bd62067acafe556650412b1e6fe32df48c39310f7dc255d\",\"44d354ac57fcb68b408df7f5396122195384914dd2db13d5766c334fc48c2069\",\"568514a2db82a055772218f52db2f5fa157c37a9ba16c1a239819e57f0d16218\"],"
"\"20000004\",\"1705ae3a\",\"6470e2a1\",true]}";
mining_notify params = parse_mining_notify_message(notify_json_str);
char * coinbase_tx = construct_coinbase_tx(params.coinbase_1, params.coinbase_2, "336508070fca95", "0000000000000000");
char * merkle_root = calculate_merkle_root_hash(coinbase_tx, (uint8_t(*)[32])params.merkle_branches, params.n_merkle_branches);
bm_job job = construct_bm_job(&params, merkle_root);
uint8_t expected_midstate_bin[32];
hex2bin("5FD281AF6A1750EAEE502C04067738BD46C82FC22112FFE797CE7F035D276126", expected_midstate_bin, 32);
// bytes are reversed for the midstate on the bm job command packet
reverse_bytes(expected_midstate_bin, 32);
TEST_ASSERT_EQUAL_UINT8_ARRAY(expected_midstate_bin, job.midstate, 32);
TEST_ASSERT_EQUAL_UINT32(0x1705ae3a, job.target);
TEST_ASSERT_EQUAL_UINT32(0x6470e2a1, job.ntime);
TEST_ASSERT_EQUAL_UINT8(0x8a, job.merkle_root[28]);
TEST_ASSERT_EQUAL_UINT8(0xdd, job.merkle_root[29]);
TEST_ASSERT_EQUAL_UINT8(0xa8, job.merkle_root[30]);
TEST_ASSERT_EQUAL_UINT8(0x6a, job.merkle_root[31]);
}
TEST_CASE("Test extranonce 2 generation", "[mining extranonce2]")
{
char * first = extranonce_2_generate(0, 4);