Skip to content

Commit b44ba6a

Browse files
authored
Merge pull request #949 from evoskuil/master
Move electrum version method into its own handshake protocol.
2 parents ff0ab22 + e0f227a commit b44ba6a

23 files changed

Lines changed: 669 additions & 330 deletions

Makefile.am

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ src_libbitcoin_node_la_SOURCES = \
6565
src/protocols/protocol_block_out_106.cpp \
6666
src/protocols/protocol_block_out_70012.cpp \
6767
src/protocols/protocol_electrum.cpp \
68+
src/protocols/protocol_electrum_version.cpp \
6869
src/protocols/protocol_explore.cpp \
6970
src/protocols/protocol_filter_out_70015.cpp \
7071
src/protocols/protocol_header_in_31800.cpp \
@@ -183,10 +184,11 @@ include_bitcoin_node_HEADERS = \
183184
include_bitcoin_node_channelsdir = ${includedir}/bitcoin/node/channels
184185
include_bitcoin_node_channels_HEADERS = \
185186
include/bitcoin/node/channels/channel.hpp \
187+
include/bitcoin/node/channels/channel_electrum.hpp \
186188
include/bitcoin/node/channels/channel_http.hpp \
187189
include/bitcoin/node/channels/channel_peer.hpp \
188-
include/bitcoin/node/channels/channel_rpc.hpp \
189-
include/bitcoin/node/channels/channel_sv2.hpp \
190+
include/bitcoin/node/channels/channel_stratum_v1.hpp \
191+
include/bitcoin/node/channels/channel_stratum_v2.hpp \
190192
include/bitcoin/node/channels/channel_ws.hpp \
191193
include/bitcoin/node/channels/channels.hpp
192194

@@ -224,6 +226,7 @@ include_bitcoin_node_parsersdir = ${includedir}/bitcoin/node/parsers
224226
include_bitcoin_node_parsers_HEADERS = \
225227
include/bitcoin/node/parsers/bitcoind_query.hpp \
226228
include/bitcoin/node/parsers/bitcoind_target.hpp \
229+
include/bitcoin/node/parsers/electrum_version.hpp \
227230
include/bitcoin/node/parsers/explore_query.hpp \
228231
include/bitcoin/node/parsers/explore_target.hpp \
229232
include/bitcoin/node/parsers/parsers.hpp
@@ -238,6 +241,7 @@ include_bitcoin_node_protocols_HEADERS = \
238241
include/bitcoin/node/protocols/protocol_block_out_106.hpp \
239242
include/bitcoin/node/protocols/protocol_block_out_70012.hpp \
240243
include/bitcoin/node/protocols/protocol_electrum.hpp \
244+
include/bitcoin/node/protocols/protocol_electrum_version.hpp \
241245
include/bitcoin/node/protocols/protocol_explore.hpp \
242246
include/bitcoin/node/protocols/protocol_filter_out_70015.hpp \
243247
include/bitcoin/node/protocols/protocol_header_in_31800.hpp \
@@ -260,6 +264,7 @@ include_bitcoin_node_protocols_HEADERS = \
260264
include_bitcoin_node_sessionsdir = ${includedir}/bitcoin/node/sessions
261265
include_bitcoin_node_sessions_HEADERS = \
262266
include/bitcoin/node/sessions/session.hpp \
267+
include/bitcoin/node/sessions/session_handshake.hpp \
263268
include/bitcoin/node/sessions/session_inbound.hpp \
264269
include/bitcoin/node/sessions/session_manual.hpp \
265270
include/bitcoin/node/sessions/session_outbound.hpp \

builds/cmake/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ add_library( ${CANONICAL_LIB_NAME}
277277
"../../src/protocols/protocol_block_out_106.cpp"
278278
"../../src/protocols/protocol_block_out_70012.cpp"
279279
"../../src/protocols/protocol_electrum.cpp"
280+
"../../src/protocols/protocol_electrum_version.cpp"
280281
"../../src/protocols/protocol_explore.cpp"
281282
"../../src/protocols/protocol_filter_out_70015.cpp"
282283
"../../src/protocols/protocol_header_in_31800.cpp"

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_out_106.cpp" />
151151
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_out_70012.cpp" />
152152
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp" />
153+
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum_version.cpp" />
153154
<ClCompile Include="..\..\..\..\src\protocols\protocol_explore.cpp" />
154155
<ClCompile Include="..\..\..\..\src\protocols\protocol_filter_out_70015.cpp" />
155156
<ClCompile Include="..\..\..\..\src\protocols\protocol_header_in_31800.cpp" />
@@ -175,10 +176,11 @@
175176
<ClInclude Include="..\..\..\..\include\bitcoin\node\block_arena.hpp" />
176177
<ClInclude Include="..\..\..\..\include\bitcoin\node\block_memory.hpp" />
177178
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel.hpp" />
179+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_electrum.hpp" />
178180
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_http.hpp" />
179181
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_peer.hpp" />
180-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_rpc.hpp" />
181-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_sv2.hpp" />
182+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_stratum_v1.hpp" />
183+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_stratum_v2.hpp" />
182184
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_ws.hpp" />
183185
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channels.hpp" />
184186
<ClInclude Include="..\..\..\..\include\bitcoin\node\chase.hpp" />
@@ -210,6 +212,7 @@
210212
<ClInclude Include="..\..\..\..\include\bitcoin\node\parser.hpp" />
211213
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_query.hpp" />
212214
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_target.hpp" />
215+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\electrum_version.hpp" />
213216
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_query.hpp" />
214217
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_target.hpp" />
215218
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\parsers.hpp" />
@@ -221,6 +224,7 @@
221224
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_block_out_106.hpp" />
222225
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_block_out_70012.hpp" />
223226
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_electrum.hpp" />
227+
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_electrum_version.hpp" />
224228
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_explore.hpp" />
225229
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_filter_out_70015.hpp" />
226230
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_header_in_31800.hpp" />
@@ -240,6 +244,7 @@
240244
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_web.hpp" />
241245
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocols.hpp" />
242246
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session.hpp" />
247+
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_handshake.hpp" />
243248
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_inbound.hpp" />
244249
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_manual.hpp" />
245250
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_outbound.hpp" />

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@
150150
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp">
151151
<Filter>src\protocols</Filter>
152152
</ClCompile>
153+
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum_version.cpp">
154+
<Filter>src\protocols</Filter>
155+
</ClCompile>
153156
<ClCompile Include="..\..\..\..\src\protocols\protocol_explore.cpp">
154157
<Filter>src\protocols</Filter>
155158
</ClCompile>
@@ -221,16 +224,19 @@
221224
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel.hpp">
222225
<Filter>include\bitcoin\node\channels</Filter>
223226
</ClInclude>
227+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_electrum.hpp">
228+
<Filter>include\bitcoin\node\channels</Filter>
229+
</ClInclude>
224230
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_http.hpp">
225231
<Filter>include\bitcoin\node\channels</Filter>
226232
</ClInclude>
227233
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_peer.hpp">
228234
<Filter>include\bitcoin\node\channels</Filter>
229235
</ClInclude>
230-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_rpc.hpp">
236+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_stratum_v1.hpp">
231237
<Filter>include\bitcoin\node\channels</Filter>
232238
</ClInclude>
233-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_sv2.hpp">
239+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_stratum_v2.hpp">
234240
<Filter>include\bitcoin\node\channels</Filter>
235241
</ClInclude>
236242
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_ws.hpp">
@@ -326,6 +332,9 @@
326332
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\bitcoind_target.hpp">
327333
<Filter>include\bitcoin\node\parsers</Filter>
328334
</ClInclude>
335+
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\electrum_version.hpp">
336+
<Filter>include\bitcoin\node\parsers</Filter>
337+
</ClInclude>
329338
<ClInclude Include="..\..\..\..\include\bitcoin\node\parsers\explore_query.hpp">
330339
<Filter>include\bitcoin\node\parsers</Filter>
331340
</ClInclude>
@@ -359,6 +368,9 @@
359368
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_electrum.hpp">
360369
<Filter>include\bitcoin\node\protocols</Filter>
361370
</ClInclude>
371+
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_electrum_version.hpp">
372+
<Filter>include\bitcoin\node\protocols</Filter>
373+
</ClInclude>
362374
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_explore.hpp">
363375
<Filter>include\bitcoin\node\protocols</Filter>
364376
</ClInclude>
@@ -416,6 +428,9 @@
416428
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session.hpp">
417429
<Filter>include\bitcoin\node\sessions</Filter>
418430
</ClInclude>
431+
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_handshake.hpp">
432+
<Filter>include\bitcoin\node\sessions</Filter>
433+
</ClInclude>
419434
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_inbound.hpp">
420435
<Filter>include\bitcoin\node\sessions</Filter>
421436
</ClInclude>

include/bitcoin/node.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@
2828
#include <bitcoin/node/settings.hpp>
2929
#include <bitcoin/node/version.hpp>
3030
#include <bitcoin/node/channels/channel.hpp>
31+
#include <bitcoin/node/channels/channel_electrum.hpp>
3132
#include <bitcoin/node/channels/channel_http.hpp>
3233
#include <bitcoin/node/channels/channel_peer.hpp>
33-
#include <bitcoin/node/channels/channel_rpc.hpp>
34-
#include <bitcoin/node/channels/channel_sv2.hpp>
34+
#include <bitcoin/node/channels/channel_stratum_v1.hpp>
35+
#include <bitcoin/node/channels/channel_stratum_v2.hpp>
3536
#include <bitcoin/node/channels/channel_ws.hpp>
3637
#include <bitcoin/node/channels/channels.hpp>
3738
#include <bitcoin/node/chasers/chaser.hpp>
@@ -56,6 +57,7 @@
5657
#include <bitcoin/node/interfaces/types.hpp>
5758
#include <bitcoin/node/parsers/bitcoind_query.hpp>
5859
#include <bitcoin/node/parsers/bitcoind_target.hpp>
60+
#include <bitcoin/node/parsers/electrum_version.hpp>
5961
#include <bitcoin/node/parsers/explore_query.hpp>
6062
#include <bitcoin/node/parsers/explore_target.hpp>
6163
#include <bitcoin/node/parsers/parsers.hpp>
@@ -67,6 +69,7 @@
6769
#include <bitcoin/node/protocols/protocol_block_out_106.hpp>
6870
#include <bitcoin/node/protocols/protocol_block_out_70012.hpp>
6971
#include <bitcoin/node/protocols/protocol_electrum.hpp>
72+
#include <bitcoin/node/protocols/protocol_electrum_version.hpp>
7073
#include <bitcoin/node/protocols/protocol_explore.hpp>
7174
#include <bitcoin/node/protocols/protocol_filter_out_70015.hpp>
7275
#include <bitcoin/node/protocols/protocol_header_in_31800.hpp>
@@ -86,6 +89,7 @@
8689
#include <bitcoin/node/protocols/protocol_web.hpp>
8790
#include <bitcoin/node/protocols/protocols.hpp>
8891
#include <bitcoin/node/sessions/session.hpp>
92+
#include <bitcoin/node/sessions/session_handshake.hpp>
8993
#include <bitcoin/node/sessions/session_inbound.hpp>
9094
#include <bitcoin/node/sessions/session_manual.hpp>
9195
#include <bitcoin/node/sessions/session_outbound.hpp>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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_CHANNELS_CHANNEL_ELECTRUM_HPP
20+
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_ELECTRUM_HPP
21+
22+
#include <memory>
23+
#include <bitcoin/node/channels/channel.hpp>
24+
#include <bitcoin/node/configuration.hpp>
25+
#include <bitcoin/node/define.hpp>
26+
#include <bitcoin/node/interfaces/interfaces.hpp>
27+
28+
namespace libbitcoin {
29+
namespace node {
30+
31+
// TODO: strip extraneous args before electrum version dispatch.
32+
// TODO: move version_ and name_ members into channel with set/get.
33+
// TODO: move to electrum version method to handshake protocol.
34+
/// Channel for electrum channels (non-http json-rpc).
35+
class BCN_API channel_electrum
36+
: public node::channel,
37+
public network::channel_rpc<interface::electrum>,
38+
protected network::tracker<channel_electrum>
39+
{
40+
public:
41+
typedef std::shared_ptr<channel_electrum> ptr;
42+
using interface_t = interface::electrum;
43+
using options_t = typename network::channel_rpc<interface_t>::options_t;
44+
45+
inline channel_electrum(const network::logger& log,
46+
const network::socket::ptr& socket, uint64_t identifier,
47+
const node::configuration& config, const options_t& options) NOEXCEPT
48+
: node::channel(log, socket, identifier, config),
49+
network::channel_rpc<interface::electrum>(log, socket, identifier,
50+
config.network, options),
51+
network::tracker<channel_electrum>(log)
52+
{
53+
}
54+
};
55+
56+
} // namespace node
57+
} // namespace libbitcoin
58+
59+
#endif

include/bitcoin/node/channels/channel_rpc.hpp renamed to include/bitcoin/node/channels/channel_stratum_v1.hpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,36 @@
1616
* You should have received a copy of the GNU Affero General Public License
1717
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
*/
19-
#ifndef LIBBITCOIN_NODE_CHANNELS_CHANNEL_RPC_HPP
20-
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_RPC_HPP
19+
#ifndef LIBBITCOIN_NODE_CHANNELS_CHANNEL_STRATUM_V1_HPP
20+
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_STRATUM_V1_HPP
2121

2222
#include <memory>
2323
#include <bitcoin/node/channels/channel.hpp>
2424
#include <bitcoin/node/configuration.hpp>
2525
#include <bitcoin/node/define.hpp>
26+
#include <bitcoin/node/interfaces/interfaces.hpp>
2627

2728
namespace libbitcoin {
2829
namespace node {
2930

30-
/// Channel for electrum and stratum v1 channels (non-http json-rpc).
31-
template <typename Interface>
32-
class BCN_API channel_rpc
31+
/// Channel for stratum v1 channels (non-http json-rpc).
32+
class BCN_API channel_stratum_v1
3333
: public node::channel,
34-
public network::channel_rpc<Interface>,
35-
protected network::tracker<channel_rpc<Interface>>
34+
public network::channel_rpc<interface::stratum_v1>,
35+
protected network::tracker<channel_stratum_v1>
3636
{
3737
public:
38-
typedef std::shared_ptr<channel_rpc> ptr;
39-
using options_t = typename network::channel_rpc<Interface>::options_t;
38+
typedef std::shared_ptr<channel_stratum_v1> ptr;
39+
using interface_t = interface::stratum_v1;
40+
using options_t = typename network::channel_rpc<interface_t>::options_t;
4041

41-
inline channel_rpc(const network::logger& log,
42+
inline channel_stratum_v1(const network::logger& log,
4243
const network::socket::ptr& socket, uint64_t identifier,
4344
const node::configuration& config, const options_t& options) NOEXCEPT
4445
: node::channel(log, socket, identifier, config),
45-
network::channel_rpc<Interface>(log, socket, identifier,
46+
network::channel_rpc<interface::stratum_v1>(log, socket, identifier,
4647
config.network, options),
47-
network::tracker<channel_rpc>(log)
48+
network::tracker<channel_stratum_v1>(log)
4849
{
4950
}
5051
};

include/bitcoin/node/channels/channel_sv2.hpp renamed to include/bitcoin/node/channels/channel_stratum_v2.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
* You should have received a copy of the GNU Affero General Public License
1717
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
*/
19-
#ifndef LIBBITCOIN_NODE_CHANNELS_CHANNEL_SV2_HPP
20-
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_SV2_HPP
19+
#ifndef LIBBITCOIN_NODE_CHANNELS_CHANNEL_STRATUM_V2_HPP
20+
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_STRATUM_V2_HPP
2121

2222
#include <memory>
2323
#include <bitcoin/node/channels/channel.hpp>
@@ -28,20 +28,20 @@ namespace libbitcoin {
2828
namespace node {
2929

3030
/// Channel for stratum v2 (custom protocol, not implemented).
31-
class BCN_API channel_sv2
31+
class BCN_API channel_stratum_v2
3232
: public node::channel,
3333
public network::channel,
34-
protected network::tracker<channel_sv2>
34+
protected network::tracker<channel_stratum_v2>
3535
{
3636
public:
37-
typedef std::shared_ptr<channel_sv2> ptr;
37+
typedef std::shared_ptr<channel_stratum_v2> ptr;
3838

39-
inline channel_sv2(const network::logger& log,
39+
inline channel_stratum_v2(const network::logger& log,
4040
const network::socket::ptr& socket, uint64_t identifier,
4141
const node::configuration& config, const options_t& options) NOEXCEPT
4242
: node::channel(log, socket, identifier, config),
4343
network::channel(log, socket, identifier, config.network, options),
44-
network::tracker<channel_sv2>(log)
44+
network::tracker<channel_stratum_v2>(log)
4545
{
4646
}
4747
};

include/bitcoin/node/channels/channels.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020
#define LIBBITCOIN_NODE_CHANNELS_CHANNELS_HPP
2121

2222
#include <bitcoin/node/channels/channel.hpp>
23+
#include <bitcoin/node/channels/channel_electrum.hpp>
2324
#include <bitcoin/node/channels/channel_http.hpp>
2425
#include <bitcoin/node/channels/channel_peer.hpp>
25-
#include <bitcoin/node/channels/channel_rpc.hpp>
26-
#include <bitcoin/node/channels/channel_sv2.hpp>
26+
#include <bitcoin/node/channels/channel_stratum_v1.hpp>
27+
#include <bitcoin/node/channels/channel_stratum_v2.hpp>
2728
#include <bitcoin/node/channels/channel_ws.hpp>
2829

2930
#endif

0 commit comments

Comments
 (0)