Added Bitcoin client support.

This commit is contained in:
Преподобный Ален
2022-04-25 13:42:44 +03:00
parent b56d859792
commit a41422528f
3 changed files with 112 additions and 1 deletions

View File

@@ -16,7 +16,7 @@ set(INSTALL_AS_ROOT ON CACHE BOOL "Install as root")
set(WITH_POSTGRESQL OFF CACHE BOOL "Build with PostgreSQL")
set(WITH_SQLITE3 OFF CACHE BOOL "Build with Sqlite3")
set(WITH_CURL OFF CACHE BOOL "Build with cURL")
set(WITH_BITCOIN_CLIENT OFF CACHE BOOL "Build with libbitcoin-client")
set(WITH_BITCOIN_CLIENT ON CACHE BOOL "Build with libbitcoin-client")
# ----------------------------------------------------------------------------------------------------------------------
if (INSTALL_AS_ROOT)

View File

@@ -0,0 +1,60 @@
###############################################################################
# Copyright (c) 2014-2019 libbitcoin-client developers (see COPYING).
#
# GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY
#
###############################################################################
# FindBitcoin-Client
#
# Use this module by invoking find_package with the form::
#
# find_package( Bitcoin-Client
# [version] # Minimum version
# [REQUIRED] # Fail with error if bitcoin-client is not found
# )
#
# Defines the following for use:
#
# bitcoin_client_FOUND - true if headers and requested libraries were found
# bitcoin_client_INCLUDE_DIRS - include directories for bitcoin-client libraries
# bitcoin_client_LIBRARY_DIRS - link directories for bitcoin-client libraries
# bitcoin_client_LIBRARIES - bitcoin-client libraries to be linked
# bitcoin_client_PKG - bitcoin-client pkg-config package specification.
#
if (MSVC)
if ( Bitcoin-Client_FIND_REQUIRED )
set( _bitcoin_client_MSG_STATUS "SEND_ERROR" )
else ()
set( _bitcoin_client_MSG_STATUS "STATUS" )
endif()
set( bitcoin_client_FOUND false )
message( ${_bitcoin_client_MSG_STATUS} "MSVC environment detection for 'bitcoin-client' not currently supported." )
else ()
# required
if ( Bitcoin-Client_FIND_REQUIRED )
set( _bitcoin_client_REQUIRED "REQUIRED" )
endif()
# quiet
if ( Bitcoin-Client_FIND_QUIETLY )
set( _bitcoin_client_QUIET "QUIET" )
endif()
# modulespec
if ( Bitcoin-Client_FIND_VERSION_COUNT EQUAL 0 )
set( _bitcoin_client_MODULE_SPEC "libbitcoin-client" )
else ()
if ( Bitcoin-Client_FIND_VERSION_EXACT )
set( _bitcoin_client_MODULE_SPEC_OP "=" )
else ()
set( _bitcoin_client_MODULE_SPEC_OP ">=" )
endif()
set( _bitcoin_client_MODULE_SPEC "libbitcoin-client ${_bitcoin_client_MODULE_SPEC_OP} ${Bitcoin-Client_FIND_VERSION}" )
endif()
pkg_check_modules( bitcoin_client ${_bitcoin_client_REQUIRED} ${_bitcoin_client_QUIET} "${_bitcoin_client_MODULE_SPEC}" )
set( bitcoin_client_PKG "${_bitcoin_client_MODULE_SPEC}" )
endif()

View File

@@ -1384,6 +1384,57 @@ namespace Apostol {
RouteDeal(AConnection, "GET", sRoute, caAction);
} else if (caCommand == "bc" && caAction == "history") {
const auto& caAccount = pRequest->Params["account"];
if (caAccount.IsEmpty()) {
AConnection->SendStockReply(CHTTPReply::bad_request);
return;
}
try {
const wallet::payment_address address(std::string(caAccount.c_str()));
CJSON history;
fetch_history(address, history);
pReply->Content = history.ToString();
} catch (Delphi::Exception::Exception &E) {
ExceptionToJson(CHTTPReply::bad_request, E, pReply->Content);
Log()->Error(APP_LOG_EMERG, 0, E.what());
}
AConnection->SendReply(CHTTPReply::ok, nullptr, true);
} else if (caCommand == "bc" && caAction == "header") {
const auto& LHeight = pRequest->Params["height"];
const auto& LHash = pRequest->Params["hash"];
if (LHeight.IsEmpty() && LHash.IsEmpty()) {
AConnection->SendStockReply(CHTTPReply::bad_request);
return;
}
try {
CJSON header;
if (!LHash.IsEmpty()) {
fetch_header(hash256(std::string(LHash.c_str())), header);
} else {
uint32_t height = StrToInt(LHeight.c_str());
fetch_header(height, header);
}
pReply->Content = header.ToString();
} catch (Delphi::Exception::Exception &E) {
ExceptionToJson(CHTTPReply::bad_request, E, pReply->Content);
Log()->Error(APP_LOG_EMERG, 0, E.what());
}
AConnection->SendReply(CHTTPReply::ok, nullptr, true);
} else {
AConnection->SendStockReply(CHTTPReply::not_found);