Skip to content

Commit 63b2036

Browse files
authored
Merge pull request #927 from evoskuil/master
Add bitcoind_rest interface methods, dispatch, a stub hander.
2 parents e728915 + 3932e07 commit 63b2036

29 files changed

+729
-310
lines changed

Makefile.am

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ src_libbitcoin_node_la_SOURCES = \
5353
src/chasers/chaser_template.cpp \
5454
src/chasers/chaser_transaction.cpp \
5555
src/chasers/chaser_validate.cpp \
56-
src/parse/query.cpp \
57-
src/parse/target.cpp \
56+
src/parsers/bitcoind_query.cpp \
57+
src/parsers/bitcoind_target.cpp \
58+
src/parsers/explore_query.cpp \
59+
src/parsers/explore_target.cpp \
5860
src/protocols/protocol.cpp \
5961
src/protocols/protocol_bitcoind_rest.cpp \
6062
src/protocols/protocol_bitcoind_rpc.cpp \
@@ -69,6 +71,7 @@ src_libbitcoin_node_la_SOURCES = \
6971
src/protocols/protocol_header_out_31800.cpp \
7072
src/protocols/protocol_header_out_70012.cpp \
7173
src/protocols/protocol_html.cpp \
74+
src/protocols/protocol_http.cpp \
7275
src/protocols/protocol_observer.cpp \
7376
src/protocols/protocol_peer.cpp \
7477
src/protocols/protocol_performer.cpp \
@@ -108,8 +111,10 @@ test_libbitcoin_node_test_SOURCES = \
108111
test/chasers/chaser_template.cpp \
109112
test/chasers/chaser_transaction.cpp \
110113
test/chasers/chaser_validate.cpp \
111-
test/parse/query.cpp \
112-
test/parse/target.cpp \
114+
test/parsers/bitcoind_query.cpp \
115+
test/parsers/bitcoind_target.cpp \
116+
test/parsers/explore_query.cpp \
117+
test/parsers/explore_target.cpp \
113118
test/protocols/protocol.cpp \
114119
test/sessions/session.cpp
115120

@@ -212,11 +217,13 @@ include_bitcoin_node_interfaces_HEADERS = \
212217
include/bitcoin/node/interfaces/stratum_v2.hpp \
213218
include/bitcoin/node/interfaces/types.hpp
214219

215-
include_bitcoin_node_parsedir = ${includedir}/bitcoin/node/parse
216-
include_bitcoin_node_parse_HEADERS = \
217-
include/bitcoin/node/parse/parse.hpp \
218-
include/bitcoin/node/parse/query.hpp \
219-
include/bitcoin/node/parse/target.hpp
220+
include_bitcoin_node_parsersdir = ${includedir}/bitcoin/node/parsers
221+
include_bitcoin_node_parsers_HEADERS = \
222+
include/bitcoin/node/parsers/bitcoind_query.hpp \
223+
include/bitcoin/node/parsers/bitcoind_target.hpp \
224+
include/bitcoin/node/parsers/explore_query.hpp \
225+
include/bitcoin/node/parsers/explore_target.hpp \
226+
include/bitcoin/node/parsers/parsers.hpp
220227

221228
include_bitcoin_node_protocolsdir = ${includedir}/bitcoin/node/protocols
222229
include_bitcoin_node_protocols_HEADERS = \

builds/cmake/CMakeLists.txt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,10 @@ add_library( ${CANONICAL_LIB_NAME}
265265
"../../src/chasers/chaser_template.cpp"
266266
"../../src/chasers/chaser_transaction.cpp"
267267
"../../src/chasers/chaser_validate.cpp"
268-
"../../src/parse/query.cpp"
269-
"../../src/parse/target.cpp"
268+
"../../src/parsers/bitcoind_query.cpp"
269+
"../../src/parsers/bitcoind_target.cpp"
270+
"../../src/parsers/explore_query.cpp"
271+
"../../src/parsers/explore_target.cpp"
270272
"../../src/protocols/protocol.cpp"
271273
"../../src/protocols/protocol_bitcoind_rest.cpp"
272274
"../../src/protocols/protocol_bitcoind_rpc.cpp"
@@ -281,6 +283,7 @@ add_library( ${CANONICAL_LIB_NAME}
281283
"../../src/protocols/protocol_header_out_31800.cpp"
282284
"../../src/protocols/protocol_header_out_70012.cpp"
283285
"../../src/protocols/protocol_html.cpp"
286+
"../../src/protocols/protocol_http.cpp"
284287
"../../src/protocols/protocol_observer.cpp"
285288
"../../src/protocols/protocol_peer.cpp"
286289
"../../src/protocols/protocol_performer.cpp"
@@ -350,8 +353,10 @@ if (with-tests)
350353
"../../test/chasers/chaser_template.cpp"
351354
"../../test/chasers/chaser_transaction.cpp"
352355
"../../test/chasers/chaser_validate.cpp"
353-
"../../test/parse/query.cpp"
354-
"../../test/parse/target.cpp"
356+
"../../test/parsers/bitcoind_query.cpp"
357+
"../../test/parsers/bitcoind_target.cpp"
358+
"../../test/parsers/explore_query.cpp"
359+
"../../test/parsers/explore_target.cpp"
355360
"../../test/protocols/protocol.cpp"
356361
"../../test/sessions/session.cpp" )
357362

builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,10 @@
134134
<ClCompile Include="..\..\..\..\test\full_node.cpp" />
135135
<ClCompile Include="..\..\..\..\test\main.cpp" />
136136
<ClCompile Include="..\..\..\..\test\node.cpp" />
137-
<ClCompile Include="..\..\..\..\test\parse\query.cpp" />
138-
<ClCompile Include="..\..\..\..\test\parse\target.cpp" />
137+
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_query.cpp" />
138+
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_target.cpp" />
139+
<ClCompile Include="..\..\..\..\test\parsers\explore_query.cpp" />
140+
<ClCompile Include="..\..\..\..\test\parsers\explore_target.cpp" />
139141
<ClCompile Include="..\..\..\..\test\protocols\protocol.cpp" />
140142
<ClCompile Include="..\..\..\..\test\sessions\session.cpp" />
141143
<ClCompile Include="..\..\..\..\test\settings.cpp" />

builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj.filters

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<Filter Include="src\chasers">
1414
<UniqueIdentifier>{4BD50864-D3BC-4F64-0000-000000000001}</UniqueIdentifier>
1515
</Filter>
16-
<Filter Include="src\parse">
16+
<Filter Include="src\parsers">
1717
<UniqueIdentifier>{4BD50864-D3BC-4F64-0000-000000000002}</UniqueIdentifier>
1818
</Filter>
1919
<Filter Include="src\protocols">
@@ -72,11 +72,17 @@
7272
<ClCompile Include="..\..\..\..\test\node.cpp">
7373
<Filter>src</Filter>
7474
</ClCompile>
75-
<ClCompile Include="..\..\..\..\test\parse\query.cpp">
76-
<Filter>src\parse</Filter>
75+
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_query.cpp">
76+
<Filter>src\parsers</Filter>
7777
</ClCompile>
78-
<ClCompile Include="..\..\..\..\test\parse\target.cpp">
79-
<Filter>src\parse</Filter>
78+
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_target.cpp">
79+
<Filter>src\parsers</Filter>
80+
</ClCompile>
81+
<ClCompile Include="..\..\..\..\test\parsers\explore_query.cpp">
82+
<Filter>src\parsers</Filter>
83+
</ClCompile>
84+
<ClCompile Include="..\..\..\..\test\parsers\explore_target.cpp">
85+
<Filter>src\parsers</Filter>
8086
</ClCompile>
8187
<ClCompile Include="..\..\..\..\test\protocols\protocol.cpp">
8288
<Filter>src\protocols</Filter>

builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,11 @@
137137
<ClCompile Include="..\..\..\..\src\configuration.cpp" />
138138
<ClCompile Include="..\..\..\..\src\error.cpp" />
139139
<ClCompile Include="..\..\..\..\src\full_node.cpp" />
140-
<ClCompile Include="..\..\..\..\src\parse\query.cpp" />
141-
<ClCompile Include="..\..\..\..\src\parse\target.cpp" />
142140
<ClCompile Include="..\..\..\..\src\parser.cpp" />
141+
<ClCompile Include="..\..\..\..\src\parsers\bitcoind_query.cpp" />
142+
<ClCompile Include="..\..\..\..\src\parsers\bitcoind_target.cpp" />
143+
<ClCompile Include="..\..\..\..\src\parsers\explore_query.cpp" />
144+
<ClCompile Include="..\..\..\..\src\parsers\explore_target.cpp" />
143145
<ClCompile Include="..\..\..\..\src\protocols\protocol.cpp" />
144146
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rest.cpp" />
145147
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rpc.cpp" />
@@ -154,6 +156,7 @@
154156
<ClCompile Include="..\..\..\..\src\protocols\protocol_header_out_31800.cpp" />
155157
<ClCompile Include="..\..\..\..\src\protocols\protocol_header_out_70012.cpp" />
156158
<ClCompile Include="..\..\..\..\src\protocols\protocol_html.cpp" />
159+
<ClCompile Include="..\..\..\..\src\protocols\protocol_http.cpp" />
157160
<ClCompile Include="..\..\..\..\src\protocols\protocol_observer.cpp" />
158161
<ClCompile Include="..\..\..\..\src\protocols\protocol_peer.cpp" />
159162
<ClCompile Include="..\..\..\..\src\protocols\protocol_performer.cpp" />
@@ -201,10 +204,12 @@
201204
<ClInclude Include="..\..\..\..\include\bitcoin\node\interfaces\stratum_v1.hpp" />
202205
<ClInclude Include="..\..\..\..\include\bitcoin\node\interfaces\stratum_v2.hpp" />
203206
<ClInclude Include="..\..\..\..\include\bitcoin\node\interfaces\types.hpp" />
204-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\parse.hpp" />
205-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\query.hpp" />
206-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\target.hpp" />
207207
<ClInclude Include="..\..\..\..\include\bitcoin\node\parser.hpp" />
208+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_query.hpp" />
209+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_target.hpp" />
210+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_query.hpp" />
211+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_target.hpp" />
212+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\parsers.hpp" />
208213
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol.hpp" />
209214
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_bitcoind_rest.hpp" />
210215
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_bitcoind_rpc.hpp" />

builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<Filter Include="include\bitcoin\node\interfaces">
3232
<UniqueIdentifier>{5FFB5F52-0772-4404-0000-00000000000C}</UniqueIdentifier>
3333
</Filter>
34-
<Filter Include="include\bitcoin\node\parse">
34+
<Filter Include="include\bitcoin\node\parsers">
3535
<UniqueIdentifier>{5FFB5F52-0772-4404-0000-00000000000D}</UniqueIdentifier>
3636
</Filter>
3737
<Filter Include="include\bitcoin\node\protocols">
@@ -52,7 +52,7 @@
5252
<Filter Include="src\chasers">
5353
<UniqueIdentifier>{5FFB5F52-0772-4404-0000-000000000002}</UniqueIdentifier>
5454
</Filter>
55-
<Filter Include="src\parse">
55+
<Filter Include="src\parsers">
5656
<UniqueIdentifier>{5FFB5F52-0772-4404-0000-000000000003}</UniqueIdentifier>
5757
</Filter>
5858
<Filter Include="src\protocols">
@@ -111,15 +111,21 @@
111111
<ClCompile Include="..\..\..\..\src\full_node.cpp">
112112
<Filter>src</Filter>
113113
</ClCompile>
114-
<ClCompile Include="..\..\..\..\src\parse\query.cpp">
115-
<Filter>src\parse</Filter>
116-
</ClCompile>
117-
<ClCompile Include="..\..\..\..\src\parse\target.cpp">
118-
<Filter>src\parse</Filter>
119-
</ClCompile>
120114
<ClCompile Include="..\..\..\..\src\parser.cpp">
121115
<Filter>src</Filter>
122116
</ClCompile>
117+
<ClCompile Include="..\..\..\..\src\parsers\bitcoind_query.cpp">
118+
<Filter>src\parsers</Filter>
119+
</ClCompile>
120+
<ClCompile Include="..\..\..\..\src\parsers\bitcoind_target.cpp">
121+
<Filter>src\parsers</Filter>
122+
</ClCompile>
123+
<ClCompile Include="..\..\..\..\src\parsers\explore_query.cpp">
124+
<Filter>src\parsers</Filter>
125+
</ClCompile>
126+
<ClCompile Include="..\..\..\..\src\parsers\explore_target.cpp">
127+
<Filter>src\parsers</Filter>
128+
</ClCompile>
123129
<ClCompile Include="..\..\..\..\src\protocols\protocol.cpp">
124130
<Filter>src\protocols</Filter>
125131
</ClCompile>
@@ -162,6 +168,9 @@
162168
<ClCompile Include="..\..\..\..\src\protocols\protocol_html.cpp">
163169
<Filter>src\protocols</Filter>
164170
</ClCompile>
171+
<ClCompile Include="..\..\..\..\src\protocols\protocol_http.cpp">
172+
<Filter>src\protocols</Filter>
173+
</ClCompile>
165174
<ClCompile Include="..\..\..\..\src\protocols\protocol_observer.cpp">
166175
<Filter>src\protocols</Filter>
167176
</ClCompile>
@@ -299,17 +308,23 @@
299308
<ClInclude Include="..\..\..\..\include\bitcoin\node\interfaces\types.hpp">
300309
<Filter>include\bitcoin\node\interfaces</Filter>
301310
</ClInclude>
302-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\parse.hpp">
303-
<Filter>include\bitcoin\node\parse</Filter>
311+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parser.hpp">
312+
<Filter>include\bitcoin\node</Filter>
304313
</ClInclude>
305-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\query.hpp">
306-
<Filter>include\bitcoin\node\parse</Filter>
314+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_query.hpp">
315+
<Filter>include\bitcoin\node\parsers</Filter>
307316
</ClInclude>
308-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parse\target.hpp">
309-
<Filter>include\bitcoin\node\parse</Filter>
317+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_target.hpp">
318+
<Filter>include\bitcoin\node\parsers</Filter>
310319
</ClInclude>
311-
<ClInclude Include="..\..\..\..\include\bitcoin\node\parser.hpp">
312-
<Filter>include\bitcoin\node</Filter>
320+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_query.hpp">
321+
<Filter>include\bitcoin\node\parsers</Filter>
322+
</ClInclude>
323+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_target.hpp">
324+
<Filter>include\bitcoin\node\parsers</Filter>
325+
</ClInclude>
326+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\parsers.hpp">
327+
<Filter>include\bitcoin\node\parsers</Filter>
313328
</ClInclude>
314329
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol.hpp">
315330
<Filter>include\bitcoin\node\protocols</Filter>

include/bitcoin/node.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@
5353
#include <bitcoin/node/interfaces/stratum_v1.hpp>
5454
#include <bitcoin/node/interfaces/stratum_v2.hpp>
5555
#include <bitcoin/node/interfaces/types.hpp>
56-
#include <bitcoin/node/parse/parse.hpp>
57-
#include <bitcoin/node/parse/query.hpp>
58-
#include <bitcoin/node/parse/target.hpp>
56+
#include <bitcoin/node/parsers/bitcoind_query.hpp>
57+
#include <bitcoin/node/parsers/bitcoind_target.hpp>
58+
#include <bitcoin/node/parsers/explore_query.hpp>
59+
#include <bitcoin/node/parsers/explore_target.hpp>
60+
#include <bitcoin/node/parsers/parsers.hpp>
5961
#include <bitcoin/node/protocols/protocol.hpp>
6062
#include <bitcoin/node/protocols/protocol_bitcoind_rest.hpp>
6163
#include <bitcoin/node/protocols/protocol_bitcoind_rpc.hpp>

include/bitcoin/node/interfaces/bitcoind_rest.hpp

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,32 @@ namespace interface {
2828

2929
struct bitcoind_rest_methods
3030
{
31+
// github.com/bitcoin/bitcoin/blob/master/doc/REST-interface.md
3132
static constexpr std::tuple methods
3233
{
33-
method<"rest1">{},
34+
// blocks (block_part is bin|hex only)
35+
method<"block", uint8_t, system::hash_cptr>{ "media", "hash" },
36+
method<"block_hash", uint8_t, uint32_t>{ "media", "height" },
37+
method<"block_txs", uint8_t, system::hash_cptr>{ "media", "hash" },
38+
method<"block_headers", uint8_t, system::hash_cptr, uint32_t>{ "media", "hash", "count" },
39+
method<"block_part", uint8_t, system::hash_cptr, uint32_t, uint32_t>{ "media", "hash", "offset", "size" },
40+
method<"block_spent_tx_outputs", uint8_t, system::hash_cptr>{ "media", "hash" },
41+
42+
// client filters
43+
method<"block_filter", uint8_t, system::hash_cptr, uint8_t>{ "media", "hash", "type" },
44+
method<"block_filter_headers", uint8_t, system::hash_cptr, uint8_t>{ "media", "hash", "type" },
45+
46+
// unspent outputs
47+
method<"get_utxos", uint8_t, system::hash_cptr, uint8_t>{ "media", "hash", "type" },
48+
method<"get_utxos_confirmed", uint8_t, system::hash_cptr, uint8_t>{ "media", "hash", "type" },
49+
50+
// mempool (json only)
51+
method<"mempool", optional<true>, optional<false>>{ "verbose", "sequence" },
52+
53+
// info (json only)
54+
method<"chain_information">{},
55+
method<"mempool_information">{},
56+
method<"fork_information", nullable<system::hash_cptr>>{ "hash" }
3457
};
3558

3659
template <typename... Args>
@@ -40,7 +63,20 @@ struct bitcoind_rest_methods
4063
using at = method_at<methods, Index>;
4164

4265
// Derive this from above in c++26 using reflection.
43-
using rest1 = at<0>;
66+
using block = at<0>;
67+
using block_hash = at<1>;
68+
using block_txs = at<2>;
69+
using block_headers = at<3>;
70+
using block_part = at<4>;
71+
using block_spent_tx_outputs = at<5>;
72+
using block_filter = at<6>;
73+
using block_filter_headers = at<7>;
74+
using get_utxos = at<8>;
75+
using get_utxos_confirmed = at<9>;
76+
using mempool = at<10>;
77+
using chain_information = at<11>;
78+
using mempool_information = at<12>;
79+
using fork_information = at<13>;
4480
};
4581

4682
} // namespace interface
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS)
3+
*
4+
* This file is part of libbitcoin.
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU Affero General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU Affero General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Affero General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
#ifndef LIBBITCOIN_NODE_PARSERS_BITCOIND_QUERY_HPP
20+
#define LIBBITCOIN_NODE_PARSERS_BITCOIND_QUERY_HPP
21+
22+
#include <bitcoin/node/define.hpp>
23+
24+
namespace libbitcoin {
25+
namespace node {
26+
27+
BCN_API bool bitcoind_query(network::rpc::request_t& out,
28+
const network::http::request& request) NOEXCEPT;
29+
30+
} // namespace network
31+
} // namespace libbitcoin
32+
33+
#endif
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS)
3+
*
4+
* This file is part of libbitcoin.
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU Affero General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU Affero General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Affero General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
#ifndef LIBBITCOIN_NODE_PARSERS_BITCOIND_TARGET_HPP
20+
#define LIBBITCOIN_NODE_PARSERS_BITCOIND_TARGET_HPP
21+
22+
#include <bitcoin/node/define.hpp>
23+
24+
namespace libbitcoin {
25+
namespace node {
26+
27+
BCN_API code bitcoind_target(network::rpc::request_t& out,
28+
const std::string_view& path) NOEXCEPT;
29+
30+
} // namespace network
31+
} // namespace libbitcoin
32+
33+
#endif

0 commit comments

Comments
 (0)