fixed fee calc issue, removed segwit enable fallback

This commit is contained in:
Brannon King 2019-09-25 13:41:31 -06:00
parent 12ab16f50e
commit 9149e371ed
4 changed files with 29 additions and 4 deletions

View file

@ -11,7 +11,7 @@
// This is the minimum claim fee per character in the name of an OP_CLAIM_NAME command that must
// be attached to transactions for it to be accepted into the memory pool.
// Rationale: current implementation of the claim trie uses more memory for longer name claims
// due to the fact that each chracater is assigned a trie node regardless of whether it contains
// due to the fact that each character is assigned a trie node regardless of whether it contains
// any claims or not. In the future, we can switch to a radix tree implementation where
// empty nodes do not take up any memory and the minimum fee can be priced on a per claim
// basis.

View file

@ -204,9 +204,10 @@ public:
ThresholdState VersionBitsState(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos pos, VersionBitsCache& cache)
{
// Check if we've past a hardfork state for segwit.
if ((pos == Consensus::DEPLOYMENT_SEGWIT) && (pindexPrev != nullptr) &&
(pindexPrev->nHeight + 1 >= params.nWitnessForkHeight))
return ThresholdState::ACTIVE;
if (pos == Consensus::DEPLOYMENT_SEGWIT) {
return pindexPrev != nullptr && pindexPrev->nHeight + 1 >= params.nWitnessForkHeight ?
ThresholdState::ACTIVE : ThresholdState::FAILED;
}
return VersionBitsConditionChecker(pos).GetStateFor(pindexPrev, params, cache.caches[pos]);
}

View file

@ -63,6 +63,10 @@ uint256 ClaimAName(const std::string& name, const std::string& data, const std::
UniValue results = rpc_method(req);
auto txid = results.get_str();
uint256 ret;
if (txid.find(' ') != std::string::npos) {
fprintf(stderr, "Error creating claim: %s\n", txid.c_str());
return ret;
}
ret.SetHex(txid);
return ret;
}
@ -468,5 +472,24 @@ BOOST_AUTO_TEST_CASE(can_sign_all_pbst)
BOOST_CHECK_EQUAL(looked.size(), 0U);
}
BOOST_AUTO_TEST_CASE(can_claim_after_each_fork)
{
generateBlock(140);
auto txid = ClaimAName("tester", "deadbeef", "1.0");
BOOST_CHECK(!txid.IsNull());
generateBlock(100);
txid = ClaimAName("tester2", "deadbeef", "1.0");
BOOST_CHECK(!txid.IsNull());
generateBlock(100);
txid = ClaimAName("tester3", "deadbeef", "10.0");
BOOST_CHECK(!txid.IsNull());
generateBlock(15);
txid = ClaimAName("tester4", "deadbeef", "10.0");
BOOST_CHECK(!txid.IsNull());
generateBlock(1);
auto looked = LookupAllNames().get_array();
BOOST_CHECK_EQUAL(looked.size(), 4U);
}
BOOST_AUTO_TEST_SUITE_END()

View file

@ -2985,6 +2985,7 @@ bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CTransac
if (nChangePosInOut == -1 && nSubtractFeeFromAmount == 0 && pick_new_inputs) {
unsigned int tx_size_with_change = nBytes + coin_selection_params.change_output_size + 2; // Add 2 as a buffer in case increasing # of outputs changes compact size
CAmount fee_needed_with_change = GetMinimumFee(*this, tx_size_with_change, coin_control, ::mempool, ::feeEstimator, nullptr);
fee_needed_with_change = std::max(minClaimTrieFee, fee_needed_with_change);
CAmount minimum_value_for_change = GetDustThreshold(change_prototype_txout, discard_rate);
if (nFeeRet >= fee_needed_with_change + minimum_value_for_change) {
pick_new_inputs = false;