void build_submit_values(YAAMP_JOB_VALUES *submitvalues, YAAMP_JOB_TEMPLATE *templ, const char *nonce1, const char *nonce2, const char *ntime, const char *nonce) { sprintf(submitvalues->coinbase, "%s%s%s%s", templ->coinb1, nonce1, nonce2, templ->coinb2); int coinbase_len = strlen(submitvalues->coinbase); unsigned char coinbase_bin[1024]; memset(coinbase_bin, 0, 1024); binlify(coinbase_bin, submitvalues->coinbase); char doublehash[128]; memset(doublehash, 0, 128); sha256_double_hash_hex((char *)coinbase_bin, doublehash, coinbase_len/2); string merkleroot = merkle_with_first(templ->txsteps, doublehash); ser_string_be(merkleroot.c_str(), submitvalues->merkleroot_be, 8); sprintf(submitvalues->header, "%s%s%s%s%s%s", templ->version, templ->prevhash_be, submitvalues->merkleroot_be, ntime, templ->nbits, nonce); ser_string_be(submitvalues->header, submitvalues->header_be, 20); binlify(submitvalues->header_bin, submitvalues->header_be); // printf("%s\n", submitvalues->header_be); int header_len = strlen(submitvalues->header)/2; g_current_algo->hash_function((char *)submitvalues->header_bin, (char *)submitvalues->hash_bin, header_len); hexlify(submitvalues->hash_hex, submitvalues->hash_bin, 32); string_be(submitvalues->hash_hex, submitvalues->hash_be); }
int test_merkle() { vector<string> hash; hash.push_back(""); hash.push_back("999d2c8bb6bda0bf784d9ebeb631d711dbbbfe1bc006ea13d6ad0d6a2649a971"); hash.push_back("3f92594d5a3d7b4df29d7dd7c46a0dac39a96e751ba0fc9bab5435ea5e22a19d"); hash.push_back("a5633f03855f541d8e60a6340fc491d49709dc821f3acb571956a856637adcb6"); hash.push_back("28d97c850eaf917a4c76c02474b05b70a197eaefb468d21c22ed110afe8ec9e0"); vector<string> res = merkle_steps(hash); string mr = merkle_with_first(res, "d43b669fb42cfa84695b844c0402d410213faa4f3e66cb7248f688ff19d5e5f7"); printf("mr: %s\n", mr.c_str()); // 82293f182d5db07d08acf334a5a907012bbb9990851557ac0ec028116081bd5a }