|
|
|
@ -762,6 +762,90 @@ namespace tools
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
bool wallet_rpc_server::on_freeze(const wallet_rpc::COMMAND_RPC_FREEZE::request& req, wallet_rpc::COMMAND_RPC_FREEZE::response& res, epee::json_rpc::error& er, const connection_context *ctx)
|
|
|
|
|
{
|
|
|
|
|
if (!m_wallet) return not_open(er);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (req.key_image.empty())
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
|
|
|
|
er.message = std::string("Must specify key image to freeze");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
crypto::key_image ki;
|
|
|
|
|
if (!epee::string_tools::hex_to_pod(req.key_image, ki))
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_WRONG_KEY_IMAGE;
|
|
|
|
|
er.message = "failed to parse key image";
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
m_wallet->freeze(ki);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
bool wallet_rpc_server::on_thaw(const wallet_rpc::COMMAND_RPC_THAW::request& req, wallet_rpc::COMMAND_RPC_THAW::response& res, epee::json_rpc::error& er, const connection_context *ctx)
|
|
|
|
|
{
|
|
|
|
|
if (!m_wallet) return not_open(er);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (req.key_image.empty())
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
|
|
|
|
er.message = std::string("Must specify key image to thaw");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
crypto::key_image ki;
|
|
|
|
|
if (!epee::string_tools::hex_to_pod(req.key_image, ki))
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_WRONG_KEY_IMAGE;
|
|
|
|
|
er.message = "failed to parse key image";
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
m_wallet->thaw(ki);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
bool wallet_rpc_server::on_frozen(const wallet_rpc::COMMAND_RPC_FROZEN::request& req, wallet_rpc::COMMAND_RPC_FROZEN::response& res, epee::json_rpc::error& er, const connection_context *ctx)
|
|
|
|
|
{
|
|
|
|
|
if (!m_wallet) return not_open(er);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (req.key_image.empty())
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
|
|
|
|
er.message = std::string("Must specify key image to check if frozen");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
crypto::key_image ki;
|
|
|
|
|
if (!epee::string_tools::hex_to_pod(req.key_image, ki))
|
|
|
|
|
{
|
|
|
|
|
er.code = WALLET_RPC_ERROR_CODE_WRONG_KEY_IMAGE;
|
|
|
|
|
er.message = "failed to parse key image";
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
res.frozen = m_wallet->frozen(ki);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
handle_rpc_exception(std::current_exception(), er, WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
bool wallet_rpc_server::validate_transfer(const std::list<wallet_rpc::transfer_destination>& destinations, const std::string& payment_id, std::vector<cryptonote::tx_destination_entry>& dsts, std::vector<uint8_t>& extra, bool at_least_one_destination, epee::json_rpc::error& er)
|
|
|
|
|
{
|
|
|
|
|
crypto::hash8 integrated_payment_id = crypto::null_hash8;
|
|
|
|
|