mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-26 23:04:39 +00:00
WIP: merged mining.
This commit is contained in:
parent
fce6d8ea6d
commit
1aa390ff47
@ -46,7 +46,7 @@ uint256 CBlockHeader::GetPoWHash() const
|
||||
|
||||
// Merged mining.
|
||||
cryptonote::tx_extra_keva_blockhash keva_blockhash;
|
||||
if (!cryptonote::get_keva_blockhash_from_extra(cnHeader.aux_pow->miner_tx.extra, keva_blockhash)) {
|
||||
if (!cryptonote::get_keva_blockhash_from_extra(cnHeader.aux_pow_ptr->miner_tx.extra, keva_blockhash)) {
|
||||
return DIFFICULTY_1;
|
||||
}
|
||||
uint256 actualHash = GetHash();
|
||||
@ -55,14 +55,14 @@ uint256 CBlockHeader::GetPoWHash() const
|
||||
}
|
||||
|
||||
crypto::hash miner_tx_hash;
|
||||
if (!cryptonote::get_transaction_hash(cnHeader.aux_pow->miner_tx, miner_tx_hash)) {
|
||||
if (!cryptonote::get_transaction_hash(cnHeader.aux_pow_ptr->miner_tx, miner_tx_hash)) {
|
||||
return DIFFICULTY_1;
|
||||
}
|
||||
|
||||
crypto::hash aux_blocks_merkle_root;
|
||||
crypto::tree_hash_from_branch(
|
||||
reinterpret_cast<const char (*)[32]>(cnHeader.aux_pow->merkle_branch.data()),
|
||||
cnHeader.aux_pow->merkle_branch.size(),
|
||||
reinterpret_cast<const char (*)[32]>(cnHeader.aux_pow_ptr->merkle_branch.data()),
|
||||
cnHeader.aux_pow_ptr->merkle_branch.size(),
|
||||
reinterpret_cast<char*>(&miner_tx_hash), 0,
|
||||
reinterpret_cast<char*>(&aux_blocks_merkle_root));
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <primitives/transaction.h>
|
||||
#include <serialize.h>
|
||||
#include <uint256.h>
|
||||
#include <utilstrencodings.h>
|
||||
|
||||
#include <cryptonote_basic/cryptonote_format_utils.h>
|
||||
|
||||
@ -22,27 +23,6 @@ public:
|
||||
// merkel tree whose root is merkle_root.
|
||||
std::vector<crypto::hash> merkle_branch;
|
||||
|
||||
uint256 CheckMerkleBranch (uint256 hash,
|
||||
const std::vector<uint256>& vMerkleBranch,
|
||||
int nIndex)
|
||||
{
|
||||
if (nIndex == -1) {
|
||||
return uint256();
|
||||
}
|
||||
#if 0
|
||||
for (std::vector<uint256>::const_iterator it(vMerkleBranch.begin());
|
||||
it != vMerkleBranch.end(); ++it) {
|
||||
if (nIndex & 1) {
|
||||
hash = Hash(BEGIN(*it), END(*it), BEGIN(hash), END(hash));
|
||||
} else {
|
||||
hash = Hash(BEGIN(hash), END(hash), BEGIN(*it), END(*it));
|
||||
}
|
||||
nIndex >>= 1;
|
||||
}
|
||||
return hash;
|
||||
#endif
|
||||
}
|
||||
|
||||
// load
|
||||
template <template <bool> class Archive>
|
||||
bool do_serialize(Archive<false>& ar)
|
||||
@ -82,7 +62,7 @@ private:
|
||||
bool is_aux_block;
|
||||
|
||||
public:
|
||||
std::unique_ptr<CAuxPow> aux_pow; // It is used only is_aux_block is true.
|
||||
std::shared_ptr<CAuxPow> aux_pow_ptr; // It is used only is_aux_block is true.
|
||||
|
||||
CryptoNoteHeader() : is_aux_block(false)
|
||||
{
|
||||
@ -131,7 +111,7 @@ public:
|
||||
memcpy(merkle_root.begin(), &merkle_hash, merkle_root.size());
|
||||
VARINT_FIELD(nTxes)
|
||||
if (is_aux_block) {
|
||||
aux_pow_ptr = std::make_unique<CAuxPow>();
|
||||
aux_pow_ptr = std::shared_ptr<CAuxPow>(new CAuxPow());
|
||||
FIELD(*aux_pow_ptr)
|
||||
}
|
||||
return true;
|
||||
@ -153,7 +133,7 @@ public:
|
||||
FIELD(merkle_hash)
|
||||
VARINT_FIELD(nTxes)
|
||||
if (is_aux_block) {
|
||||
FIELD(*aux_pow)
|
||||
FIELD(*aux_pow_ptr)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -621,7 +621,7 @@ static uint256 CryptoHashToUint256(const crypto::hash& hash)
|
||||
// Cryptonote RPC call, only one parameter allowed.
|
||||
UniValue submitblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 2) {
|
||||
if (request.fHelp || request.params.size() > 2 || request.params.size() < 1) {
|
||||
throw std::runtime_error(
|
||||
"submitblock \"hexdata\"\n"
|
||||
"\nAttempts to submit new block to network.\n"
|
||||
@ -637,7 +637,7 @@ UniValue submitblock(const JSONRPCRequest& request)
|
||||
);
|
||||
}
|
||||
|
||||
std::unique_ptr<CAuxPow> auxPow = std::make_unique<CAuxPow>();
|
||||
std::shared_ptr<CAuxPow> auxPow;
|
||||
bool isAuxPow = false;
|
||||
if (request.params.size() == 2) {
|
||||
if (request.params[1].getType() != UniValue::VSTR) {
|
||||
@ -647,6 +647,7 @@ UniValue submitblock(const JSONRPCRequest& request)
|
||||
ss << request.params[1].get_str();
|
||||
// load
|
||||
binary_archive<false> ba(ss);
|
||||
auxPow = std::shared_ptr<CAuxPow>(new CAuxPow());
|
||||
isAuxPow = ::serialization::serialize(ba, *auxPow);
|
||||
}
|
||||
|
||||
@ -698,7 +699,7 @@ UniValue submitblock(const JSONRPCRequest& request)
|
||||
|
||||
block.cnHeader.SetAuxBlock(isAuxPow);
|
||||
if (isAuxPow) {
|
||||
block.cnHeader.aux_pow = std::move(auxPow);
|
||||
block.cnHeader.aux_pow_ptr = auxPow;
|
||||
}
|
||||
|
||||
// TODO: fix the return message.
|
||||
@ -954,7 +955,7 @@ static const CRPCCommand commands[] =
|
||||
{ "mining", "getmininginfo", &getmininginfo, {} },
|
||||
{ "mining", "prioritisetransaction", &prioritisetransaction, {"txid","dummy","fee_delta"} },
|
||||
{ "mining", "getblocktemplate", &getblocktemplate, {"reserve_size", "wallet_address", "is_aux_block"} },
|
||||
{ "mining", "submitblock", &submitblock, {"hexdata","auxpow"} },
|
||||
{ "mining", "submitblock", &submitblock, {"hexdata", "auxpow"} },
|
||||
|
||||
|
||||
{ "generating", "generatetoaddress", &generatetoaddress, {"nblocks","address","maxtries"} },
|
||||
|
Loading…
x
Reference in New Issue
Block a user