Merge pull request 'upstream' (#479) from wowario/wownero:dns-fix into master
Reviewed-on: https://git.wownero.com/wownero/wownero/pulls/479
This commit is contained in:
commit
e921c3b8a3
|
@ -413,7 +413,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
else()
|
else()
|
||||||
set(DEFAULT_BUILD_DEBUG_UTILITIES OFF)
|
set(DEFAULT_BUILD_DEBUG_UTILITIES OFF)
|
||||||
endif()
|
endif()
|
||||||
option(BUILD_DEBUG_UTILITIES "Build debug utilities." DEFAULT_BUILD_DEBUG_UTILITIES)
|
option(BUILD_DEBUG_UTILITIES "Build debug utilities." ${DEFAULT_BUILD_DEBUG_UTILITIES})
|
||||||
|
|
||||||
if(OSSFUZZ)
|
if(OSSFUZZ)
|
||||||
message(STATUS "Using OSS-Fuzz fuzzing system")
|
message(STATUS "Using OSS-Fuzz fuzzing system")
|
||||||
|
|
|
@ -219,6 +219,19 @@ int main(int argc, char const * argv[])
|
||||||
{
|
{
|
||||||
po::store(po::parse_config_file<char>(config_path.string<std::string>().c_str(), core_settings), vm);
|
po::store(po::parse_config_file<char>(config_path.string<std::string>().c_str(), core_settings), vm);
|
||||||
}
|
}
|
||||||
|
catch (const po::unknown_option &e)
|
||||||
|
{
|
||||||
|
std::string unrecognized_option = e.get_option_name();
|
||||||
|
if (all_options.find_nothrow(unrecognized_option, false))
|
||||||
|
{
|
||||||
|
std::cerr << "Option '" << unrecognized_option << "' is not allowed in the config file, please use it as a command line flag." << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Unrecognized option '" << unrecognized_option << "' in config file." << std::endl;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
{
|
{
|
||||||
// log system isn't initialized yet
|
// log system isn't initialized yet
|
||||||
|
|
|
@ -1251,6 +1251,7 @@ namespace cryptonote
|
||||||
{
|
{
|
||||||
LOG_PRINT_L0("[on_send_raw_tx]: Failed to parse tx from hexbuff: " << req.tx_as_hex);
|
LOG_PRINT_L0("[on_send_raw_tx]: Failed to parse tx from hexbuff: " << req.tx_as_hex);
|
||||||
res.status = "Failed";
|
res.status = "Failed";
|
||||||
|
res.reason = "Hex decoding failed";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3851,7 +3851,7 @@ void wallet2::detach_blockchain(uint64_t height, std::map<std::pair<uint64_t, ui
|
||||||
transfers_detached = std::distance(it, m_transfers.end());
|
transfers_detached = std::distance(it, m_transfers.end());
|
||||||
m_transfers.erase(it, m_transfers.end());
|
m_transfers.erase(it, m_transfers.end());
|
||||||
|
|
||||||
size_t blocks_detached = m_blockchain.size() - height;
|
const uint64_t blocks_detached = m_blockchain.size() - height;
|
||||||
m_blockchain.crop(height);
|
m_blockchain.crop(height);
|
||||||
|
|
||||||
for (auto it = m_payments.begin(); it != m_payments.end(); )
|
for (auto it = m_payments.begin(); it != m_payments.end(); )
|
||||||
|
@ -3870,6 +3870,9 @@ void wallet2::detach_blockchain(uint64_t height, std::map<std::pair<uint64_t, ui
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_callback)
|
||||||
|
m_callback->on_reorg(height, blocks_detached, transfers_detached);
|
||||||
|
|
||||||
LOG_PRINT_L0("Detached blockchain on height " << height << ", transfers detached " << transfers_detached << ", blocks detached " << blocks_detached);
|
LOG_PRINT_L0("Detached blockchain on height " << height << ", transfers detached " << transfers_detached << ", blocks detached " << blocks_detached);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
@ -6930,6 +6933,24 @@ void wallet2::commit_tx(pending_tx& ptx)
|
||||||
crypto::hash txid;
|
crypto::hash txid;
|
||||||
|
|
||||||
txid = get_transaction_hash(ptx.tx);
|
txid = get_transaction_hash(ptx.tx);
|
||||||
|
|
||||||
|
// if it's already processed, bail
|
||||||
|
if (std::find_if(m_transfers.begin(), m_transfers.end(), [&txid](const transfer_details &td) { return td.m_txid == txid; }) != m_transfers.end())
|
||||||
|
{
|
||||||
|
MDEBUG("Transaction " << txid << " already processed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_unconfirmed_txs.find(txid) != m_unconfirmed_txs.end())
|
||||||
|
{
|
||||||
|
MDEBUG("Transaction " << txid << " already processed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_confirmed_txs.find(txid) != m_confirmed_txs.end())
|
||||||
|
{
|
||||||
|
MDEBUG("Transaction " << txid << " already processed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
crypto::hash payment_id = crypto::null_hash;
|
crypto::hash payment_id = crypto::null_hash;
|
||||||
std::vector<cryptonote::tx_destination_entry> dests;
|
std::vector<cryptonote::tx_destination_entry> dests;
|
||||||
uint64_t amount_in = 0;
|
uint64_t amount_in = 0;
|
||||||
|
|
|
@ -138,6 +138,7 @@ private:
|
||||||
public:
|
public:
|
||||||
// Full wallet callbacks
|
// Full wallet callbacks
|
||||||
virtual void on_new_block(uint64_t height, const cryptonote::block& block) {}
|
virtual void on_new_block(uint64_t height, const cryptonote::block& block) {}
|
||||||
|
virtual void on_reorg(uint64_t height, uint64_t blocks_detached, size_t transfers_detached) {}
|
||||||
virtual void on_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount, uint64_t burnt, const cryptonote::subaddress_index& subaddr_index, bool is_change, uint64_t unlock_time) {}
|
virtual void on_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount, uint64_t burnt, const cryptonote::subaddress_index& subaddr_index, bool is_change, uint64_t unlock_time) {}
|
||||||
virtual void on_unconfirmed_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount, const cryptonote::subaddress_index& subaddr_index) {}
|
virtual void on_unconfirmed_money_received(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& tx, uint64_t amount, const cryptonote::subaddress_index& subaddr_index) {}
|
||||||
virtual void on_money_spent(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& in_tx, uint64_t amount, const cryptonote::transaction& spend_tx, const cryptonote::subaddress_index& subaddr_index) {}
|
virtual void on_money_spent(uint64_t height, const crypto::hash &txid, const cryptonote::transaction& in_tx, uint64_t amount, const cryptonote::transaction& spend_tx, const cryptonote::subaddress_index& subaddr_index) {}
|
||||||
|
|
|
@ -576,9 +576,9 @@ namespace tools
|
||||||
if (!m_wallet) return not_open(er);
|
if (!m_wallet) return not_open(er);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (req.count < 1 || req.count > 64) {
|
if (req.count < 1 || req.count > 65536) {
|
||||||
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
||||||
er.message = "Count must be between 1 and 64.";
|
er.message = "Count must be between 1 and 65536.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ class TransferTest():
|
||||||
self.check_tx_notes()
|
self.check_tx_notes()
|
||||||
self.check_rescan()
|
self.check_rescan()
|
||||||
self.check_is_key_image_spent()
|
self.check_is_key_image_spent()
|
||||||
|
self.check_multiple_submissions()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
print('Resetting blockchain')
|
print('Resetting blockchain')
|
||||||
|
@ -829,6 +830,39 @@ class TransferTest():
|
||||||
res = daemon.is_key_image_spent(ki)
|
res = daemon.is_key_image_spent(ki)
|
||||||
assert res.spent_status == expected
|
assert res.spent_status == expected
|
||||||
|
|
||||||
|
def check_multiple_submissions(self):
|
||||||
|
daemon = Daemon()
|
||||||
|
|
||||||
|
print('Testing multiple submissions')
|
||||||
|
|
||||||
|
dst = {'address': '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm', 'amount': 1000000000000}
|
||||||
|
|
||||||
|
self.wallet[0].refresh()
|
||||||
|
res = self.wallet[0].get_balance()
|
||||||
|
balance = res.balance
|
||||||
|
|
||||||
|
res = self.wallet[0].transfer([dst], ring_size = 16, get_tx_key = False, get_tx_hex = False, get_tx_metadata = True)
|
||||||
|
tx_hex = res.tx_metadata
|
||||||
|
tx_fee = res.fee
|
||||||
|
res = self.wallet[0].relay_tx(tx_hex)
|
||||||
|
|
||||||
|
# submit again before mined
|
||||||
|
res = self.wallet[0].relay_tx(tx_hex)
|
||||||
|
daemon.generateblocks('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', 1)
|
||||||
|
|
||||||
|
self.wallet[0].refresh()
|
||||||
|
res = self.wallet[0].get_balance()
|
||||||
|
assert res.balance == balance - tx_fee
|
||||||
|
|
||||||
|
balance = res.balance
|
||||||
|
|
||||||
|
# submit again after mined
|
||||||
|
res = self.wallet[0].relay_tx(tx_hex)
|
||||||
|
daemon.generateblocks('44Kbx4sJ7JDRDV5aAhLJzQCjDz2ViLRduE3ijDZu3osWKBjMGkV1XPk4pfDUMqt1Aiezvephdqm6YD19GKFD9ZcXVUTp6BW', 1)
|
||||||
|
|
||||||
|
self.wallet[0].refresh()
|
||||||
|
res = self.wallet[0].get_balance()
|
||||||
|
assert res.balance == balance
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
TransferTest().run_test()
|
TransferTest().run_test()
|
||||||
|
|
Loading…
Reference in New Issue