mirror of
https://github.com/monero-project/monero.git
synced 2025-11-30 10:06:48 -05:00
Reserve proof
This commit is contained in:
parent
35d5aa36c9
commit
6d40a92026
10 changed files with 580 additions and 0 deletions
|
|
@ -1576,6 +1576,55 @@ bool WalletImpl::checkSpendProof(const std::string &txid_str, const std::string
|
|||
}
|
||||
}
|
||||
|
||||
std::string WalletImpl::getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const {
|
||||
try
|
||||
{
|
||||
m_status = Status_Ok;
|
||||
boost::optional<std::pair<uint32_t, uint64_t>> account_minreserve;
|
||||
if (!all)
|
||||
{
|
||||
account_minreserve = std::make_pair(account_index, amount);
|
||||
}
|
||||
return m_wallet->get_reserve_proof(account_minreserve, message);
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
m_status = Status_Error;
|
||||
m_errorString = e.what();
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
bool WalletImpl::checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const {
|
||||
cryptonote::address_parse_info info;
|
||||
if (!cryptonote::get_account_address_from_str(info, m_wallet->testnet(), address))
|
||||
{
|
||||
m_status = Status_Error;
|
||||
m_errorString = tr("Failed to parse address");
|
||||
return false;
|
||||
}
|
||||
if (info.is_subaddress)
|
||||
{
|
||||
m_status = Status_Error;
|
||||
m_errorString = tr("Address must not be a subaddress");
|
||||
return false;
|
||||
}
|
||||
|
||||
good = false;
|
||||
try
|
||||
{
|
||||
m_status = Status_Ok;
|
||||
good = m_wallet->check_reserve_proof(info.address, message, signature, total, spent);
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
m_status = Status_Error;
|
||||
m_errorString = e.what();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
std::string WalletImpl::signMessage(const std::string &message)
|
||||
{
|
||||
return m_wallet->sign(message);
|
||||
|
|
|
|||
|
|
@ -142,6 +142,8 @@ public:
|
|||
virtual bool checkTxProof(const std::string &txid, const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &received, bool &in_pool, uint64_t &confirmations);
|
||||
virtual std::string getSpendProof(const std::string &txid, const std::string &message) const;
|
||||
virtual bool checkSpendProof(const std::string &txid, const std::string &message, const std::string &signature, bool &good) const;
|
||||
virtual std::string getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const;
|
||||
virtual bool checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const;
|
||||
virtual std::string signMessage(const std::string &message);
|
||||
virtual bool verifySignedMessage(const std::string &message, const std::string &address, const std::string &signature) const;
|
||||
virtual void startRefresh();
|
||||
|
|
|
|||
|
|
@ -706,6 +706,12 @@ struct Wallet
|
|||
virtual bool checkTxProof(const std::string &txid, const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &received, bool &in_pool, uint64_t &confirmations) = 0;
|
||||
virtual std::string getSpendProof(const std::string &txid, const std::string &message) const = 0;
|
||||
virtual bool checkSpendProof(const std::string &txid, const std::string &message, const std::string &signature, bool &good) const = 0;
|
||||
/*!
|
||||
* \brief getReserveProof - Generates a proof that proves the reserve of unspent funds
|
||||
* Parameters `account_index` and `amount` are ignored when `all` is true
|
||||
*/
|
||||
virtual std::string getReserveProof(bool all, uint32_t account_index, uint64_t amount, const std::string &message) const = 0;
|
||||
virtual bool checkReserveProof(const std::string &address, const std::string &message, const std::string &signature, bool &good, uint64_t &total, uint64_t &spent) const = 0;
|
||||
|
||||
/*
|
||||
* \brief signMessage - sign a message with the spend private key
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue