Skip to content

Commit

Permalink
Fixed merged mining block hash calc
Browse files Browse the repository at this point in the history
  • Loading branch information
MoneroOcean committed Apr 5, 2019
1 parent c359843 commit f382894
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
18 changes: 16 additions & 2 deletions src/cryptonote_core/cryptonote_basic.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,20 @@
#include "misc_language.h"
#include "tx_extra.h"
#include "ringct/rctTypes.h"
#include "cryptonote_protocol/blobdatatype.h"


namespace cryptonote
{
struct block;
class transaction;
class transaction_prefix;
struct tx_extra_merge_mining_tag;

// Implemented in cryptonote_format_utils.cpp
bool get_transaction_hash(const transaction& t, crypto::hash& res);
void get_transaction_prefix_hash(const transaction_prefix& tx, crypto::hash& h);
void get_blob_hash(const blobdata& blob, crypto::hash& res);
bool get_mm_tag_from_extra(const std::vector<uint8_t>& tx, tx_extra_merge_mining_tag& mm_tag);

const static crypto::hash null_hash = AUTO_VAL_INIT(null_hash);
Expand Down Expand Up @@ -353,8 +357,18 @@ namespace cryptonote
if (hashing_serialization)
{
crypto::hash miner_tx_hash;
if (!get_transaction_hash(b.miner_tx, miner_tx_hash))
return false;

if (b.miner_tx.version < 2) {
if (!get_transaction_hash(b.miner_tx, miner_tx_hash))
return false;
} else {
get_transaction_prefix_hash(static_cast<const transaction_prefix&>(b.miner_tx), miner_tx_hash);
const uint8_t data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x36, 0x78, 0x9e, 0x7a, 0x1e, 0x28, 0x14, 0x36, 0x46, 0x42, 0x29, 0x82, 0x8f, 0x81, 0x7d, 0x66, 0x12, 0xf7, 0xb4, 0x77, 0xd6, 0x65, 0x91, 0xff, 0x96, 0xa9, 0xe0, 0x64, 0xbc, 0xc9, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
blobdata blobdata((char*)data, sizeof(data));
const unsigned char* p = (unsigned char*)&miner_tx_hash;
for (int i = 0; i != HASH_SIZE; ++ i, ++ p) blobdata[i] = *p;
get_blob_hash(blobdata, miner_tx_hash);
}

crypto::hash merkle_root;
crypto::tree_hash_from_branch(b.miner_tx_branch.data(), b.miner_tx_branch.size(), miner_tx_hash, 0, merkle_root);
Expand Down
1 change: 0 additions & 1 deletion src/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ NAN_METHOD(get_block_id) {
if (!Buffer::HasInstance(target)) return THROW_ERROR_EXCEPTION("Argument should be a buffer object.");

blobdata input = std::string(Buffer::Data(target), Buffer::Length(target));
blobdata output = "";

enum BLOB_TYPE blob_type = BLOB_TYPE_CRYPTONOTE;
if (info.Length() >= 2) {
Expand Down

0 comments on commit f382894

Please sign in to comment.