mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-02-05 03:34:24 +00:00
WIP: built with latest cn code.
This commit is contained in:
parent
baf31da4a7
commit
bbb78c76a0
@ -19,6 +19,8 @@ BITCOIN_GUI_NAME=kevacoin-qt
|
|||||||
BITCOIN_CLI_NAME=kevacoin-cli
|
BITCOIN_CLI_NAME=kevacoin-cli
|
||||||
BITCOIN_TX_NAME=kevacoin-tx
|
BITCOIN_TX_NAME=kevacoin-tx
|
||||||
|
|
||||||
|
AM_PROG_AS()
|
||||||
|
|
||||||
dnl Unless the user specified ARFLAGS, force it to be cr
|
dnl Unless the user specified ARFLAGS, force it to be cr
|
||||||
AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
|
AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to <cr> if not set])
|
||||||
if test "x${ARFLAGS+set}" != "xset"; then
|
if test "x${ARFLAGS+set}" != "xset"; then
|
||||||
|
@ -364,14 +364,44 @@ libbitcoin_cnutils_a_SOURCES = \
|
|||||||
cn_utils/cryptonote_basic/cryptonote_basic_impl.cpp \
|
cn_utils/cryptonote_basic/cryptonote_basic_impl.cpp \
|
||||||
cn_utils/cryptonote_basic/cryptonote_format_utils.cpp \
|
cn_utils/cryptonote_basic/cryptonote_format_utils.cpp \
|
||||||
cn_utils/cryptonote_basic/difficulty.cpp \
|
cn_utils/cryptonote_basic/difficulty.cpp \
|
||||||
|
cn_utils/cryptonote_basic/account.cpp \
|
||||||
cn_utils/crypto/random.c \
|
cn_utils/crypto/random.c \
|
||||||
cn_utils/crypto/tree-hash.c \
|
cn_utils/crypto/tree-hash.c \
|
||||||
|
cn_utils/crypto/oaes_lib.c \
|
||||||
|
cn_utils/crypto/aesb.c \
|
||||||
|
cn_utils/crypto/hash-extra-groestl.c \
|
||||||
|
cn_utils/crypto/hash-extra-skein.c \
|
||||||
|
cn_utils/crypto/hash-extra-blake.c \
|
||||||
|
cn_utils/crypto/hash-extra-jh.c \
|
||||||
|
cn_utils/crypto/jh.c \
|
||||||
|
cn_utils/crypto/blake256.c \
|
||||||
|
cn_utils/crypto/groestl.c \
|
||||||
|
cn_utils/crypto/skein.c \
|
||||||
|
cn_utils/crypto/chacha.c \
|
||||||
|
cn_utils/crypto/crypto_ops_builder/verify.c \
|
||||||
cn_utils/crypto/crypto.cpp \
|
cn_utils/crypto/crypto.cpp \
|
||||||
cn_utils/crypto/crypto-ops.c \
|
cn_utils/crypto/crypto-ops.c \
|
||||||
cn_utils/crypto/crypto-ops-data.c \
|
cn_utils/crypto/crypto-ops-data.c \
|
||||||
|
cn_utils/crypto/slow-hash.c \
|
||||||
cn_utils/crypto/hash.c \
|
cn_utils/crypto/hash.c \
|
||||||
cn_utils/crypto/keccak.c \
|
cn_utils/crypto/keccak.c \
|
||||||
cn_utils/common/base58.cpp
|
cn_utils/crypto/CryptonightR_JIT.c \
|
||||||
|
cn_utils/crypto/CryptonightR_template.S \
|
||||||
|
cn_utils/common/base58.cpp \
|
||||||
|
cn_utils/common/aligned.c \
|
||||||
|
cn_utils/common/perf_timer.cpp \
|
||||||
|
cn_utils/contrib/epee/src/memwipe.c \
|
||||||
|
cn_utils/contrib/epee/src/mlocker.cpp \
|
||||||
|
cn_utils/contrib/epee/src/hex.cpp \
|
||||||
|
cn_utils/contrib/epee/src/wipeable_string.cpp \
|
||||||
|
cn_utils/ringct/rctTypes.cpp \
|
||||||
|
cn_utils/ringct/rctOps.cpp \
|
||||||
|
cn_utils/ringct/bulletproofs.cc \
|
||||||
|
cn_utils/ringct/multiexp.cc \
|
||||||
|
cn_utils/ringct/rctCryptoOps.c \
|
||||||
|
cn_utils/device/device.cpp \
|
||||||
|
cn_utils/device/device_default.cpp \
|
||||||
|
cn_utils/external/easylogging++/easylogging++.cc
|
||||||
|
|
||||||
# util: shared between all executables.
|
# util: shared between all executables.
|
||||||
# This library *must* be included to make sure that the glibc
|
# This library *must* be included to make sure that the glibc
|
||||||
@ -473,10 +503,10 @@ kevacoin_tx_LDADD = \
|
|||||||
$(LIBUNIVALUE) \
|
$(LIBUNIVALUE) \
|
||||||
$(LIBBITCOIN_COMMON) \
|
$(LIBBITCOIN_COMMON) \
|
||||||
$(LIBBITCOIN_UTIL) \
|
$(LIBBITCOIN_UTIL) \
|
||||||
$(LIBBITCOIN_CNUTILS) \
|
|
||||||
$(LIBBITCOIN_CONSENSUS) \
|
$(LIBBITCOIN_CONSENSUS) \
|
||||||
$(LIBBITCOIN_CRYPTO) \
|
$(LIBBITCOIN_CRYPTO) \
|
||||||
$(LIBSECP256K1)
|
$(LIBSECP256K1) \
|
||||||
|
$(LIBBITCOIN_CNUTILS)
|
||||||
|
|
||||||
kevacoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
kevacoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
||||||
#
|
#
|
||||||
|
@ -228,7 +228,7 @@ namespace cryptonote {
|
|||||||
info.has_payment_id = false;
|
info.has_payment_id = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_PRINT_L1("Wrong address prefix: " << prefix << ", expected " << address_prefix
|
LOG_PRINT_L1("Wrong address prefix: " << prefix << ", expected " << address_prefix
|
||||||
<< " or " << integrated_address_prefix
|
<< " or " << integrated_address_prefix
|
||||||
<< " or " << subaddress_prefix);
|
<< " or " << subaddress_prefix);
|
||||||
return false;
|
return false;
|
||||||
@ -296,6 +296,7 @@ namespace cryptonote {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
bool get_account_address_from_str_or_url(
|
bool get_account_address_from_str_or_url(
|
||||||
address_parse_info& info
|
address_parse_info& info
|
||||||
@ -311,6 +312,7 @@ namespace cryptonote {
|
|||||||
return !address_str.empty() &&
|
return !address_str.empty() &&
|
||||||
get_account_address_from_str(info, nettype, address_str);
|
get_account_address_from_str(info, nettype, address_str);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
bool operator ==(const cryptonote::transaction& a, const cryptonote::transaction& b) {
|
bool operator ==(const cryptonote::transaction& a, const cryptonote::transaction& b) {
|
||||||
return cryptonote::get_transaction_hash(a) == cryptonote::get_transaction_hash(b);
|
return cryptonote::get_transaction_hash(a) == cryptonote::get_transaction_hash(b);
|
||||||
@ -319,6 +321,106 @@ namespace cryptonote {
|
|||||||
bool operator ==(const cryptonote::block& a, const cryptonote::block& b) {
|
bool operator ==(const cryptonote::block& a, const cryptonote::block& b) {
|
||||||
return cryptonote::get_block_hash(a) == cryptonote::get_block_hash(b);
|
return cryptonote::get_block_hash(a) == cryptonote::get_block_hash(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
bool construct_miner_tx(size_t height, size_t median_weight, uint64_t already_generated_coins, size_t current_block_weight, uint64_t fee, const account_public_address &miner_address, transaction& tx, const blobdata& extra_nonce, size_t max_outs, uint8_t hard_fork_version) {
|
||||||
|
tx.vin.clear();
|
||||||
|
tx.vout.clear();
|
||||||
|
tx.extra.clear();
|
||||||
|
|
||||||
|
keypair txkey = keypair::generate(hw::get_device("default"));
|
||||||
|
add_tx_pub_key_to_extra(tx, txkey.pub);
|
||||||
|
if(!extra_nonce.empty())
|
||||||
|
if(!add_extra_nonce_to_tx_extra(tx.extra, extra_nonce))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
txin_gen in;
|
||||||
|
in.height = height;
|
||||||
|
|
||||||
|
uint64_t block_reward;
|
||||||
|
if(!get_block_reward(median_weight, current_block_weight, already_generated_coins, block_reward, hard_fork_version))
|
||||||
|
{
|
||||||
|
LOG_PRINT_L0("Block is too big");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
|
||||||
|
LOG_PRINT_L1("Creating block template: reward " << block_reward <<
|
||||||
|
", fee " << fee);
|
||||||
|
#endif
|
||||||
|
block_reward += fee;
|
||||||
|
|
||||||
|
// from hard fork 2, we cut out the low significant digits. This makes the tx smaller, and
|
||||||
|
// keeps the paid amount almost the same. The unpaid remainder gets pushed back to the
|
||||||
|
// emission schedule
|
||||||
|
// from hard fork 4, we use a single "dusty" output. This makes the tx even smaller,
|
||||||
|
// and avoids the quantization. These outputs will be added as rct outputs with identity
|
||||||
|
// masks, to they can be used as rct inputs.
|
||||||
|
if (hard_fork_version >= 2 && hard_fork_version < 4) {
|
||||||
|
block_reward = block_reward - block_reward % ::config::BASE_REWARD_CLAMP_THRESHOLD;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<uint64_t> out_amounts;
|
||||||
|
decompose_amount_into_digits(block_reward, hard_fork_version >= 2 ? 0 : ::config::DEFAULT_DUST_THRESHOLD,
|
||||||
|
[&out_amounts](uint64_t a_chunk) { out_amounts.push_back(a_chunk); },
|
||||||
|
[&out_amounts](uint64_t a_dust) { out_amounts.push_back(a_dust); });
|
||||||
|
|
||||||
|
CHECK_AND_ASSERT_MES(1 <= max_outs, false, "max_out must be non-zero");
|
||||||
|
if (height == 0 || hard_fork_version >= 4)
|
||||||
|
{
|
||||||
|
// the genesis block was not decomposed, for unknown reasons
|
||||||
|
while (max_outs < out_amounts.size())
|
||||||
|
{
|
||||||
|
//out_amounts[out_amounts.size() - 2] += out_amounts.back();
|
||||||
|
//out_amounts.resize(out_amounts.size() - 1);
|
||||||
|
out_amounts[1] += out_amounts[0];
|
||||||
|
for (size_t n = 1; n < out_amounts.size(); ++n)
|
||||||
|
out_amounts[n - 1] = out_amounts[n];
|
||||||
|
out_amounts.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CHECK_AND_ASSERT_MES(max_outs >= out_amounts.size(), false, "max_out exceeded");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t summary_amounts = 0;
|
||||||
|
for (size_t no = 0; no < out_amounts.size(); no++)
|
||||||
|
{
|
||||||
|
crypto::key_derivation derivation = AUTO_VAL_INIT(derivation);;
|
||||||
|
crypto::public_key out_eph_public_key = AUTO_VAL_INIT(out_eph_public_key);
|
||||||
|
bool r = crypto::generate_key_derivation(miner_address.m_view_public_key, txkey.sec, derivation);
|
||||||
|
CHECK_AND_ASSERT_MES(r, false, "while creating outs: failed to generate_key_derivation(" << miner_address.m_view_public_key << ", " << txkey.sec << ")");
|
||||||
|
|
||||||
|
r = crypto::derive_public_key(derivation, no, miner_address.m_spend_public_key, out_eph_public_key);
|
||||||
|
CHECK_AND_ASSERT_MES(r, false, "while creating outs: failed to derive_public_key(" << derivation << ", " << no << ", "<< miner_address.m_spend_public_key << ")");
|
||||||
|
|
||||||
|
txout_to_key tk;
|
||||||
|
tk.key = out_eph_public_key;
|
||||||
|
|
||||||
|
tx_out out;
|
||||||
|
summary_amounts += out.amount = out_amounts[no];
|
||||||
|
out.target = tk;
|
||||||
|
tx.vout.push_back(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_AND_ASSERT_MES(summary_amounts == block_reward, false, "Failed to construct miner tx, summary_amounts = " << summary_amounts << " not equal block_reward = " << block_reward);
|
||||||
|
|
||||||
|
if (hard_fork_version >= 4)
|
||||||
|
tx.version = 2;
|
||||||
|
else
|
||||||
|
tx.version = 1;
|
||||||
|
|
||||||
|
//lock
|
||||||
|
tx.unlock_time = height + CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW;
|
||||||
|
tx.vin.push_back(in);
|
||||||
|
|
||||||
|
tx.invalidate_hashes();
|
||||||
|
|
||||||
|
//LOG_PRINT("MINER_TX generated ok, block_reward=" << print_money(block_reward) << "(" << print_money(block_reward - fee) << "+" << print_money(fee)
|
||||||
|
// << "), current_block_size=" << current_block_size << ", already_generated_coins=" << already_generated_coins << ", tx_id=" << get_transaction_hash(tx), LOG_LEVEL_2);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include <utilstrencodings.h>
|
#include <utilstrencodings.h>
|
||||||
#include <crypto/common.h>
|
#include <crypto/common.h>
|
||||||
|
|
||||||
|
extern "C" void cn_slow_hash(const void *data, size_t length, char *hash, int variant, int prehashed, uint64_t height);
|
||||||
|
|
||||||
uint256 CBlockHeader::GetHash() const
|
uint256 CBlockHeader::GetHash() const
|
||||||
{
|
{
|
||||||
return SerializeHash(*this);
|
return SerializeHash(*this);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user