Skip to content

Commit 642ca85

Browse files
authored
Merge pull request #944 from evoskuil/master
Stub in electrum and stratum_v1 protocol handlers.
2 parents 1b006ac + 4c9831d commit 642ca85

19 files changed

+200
-125
lines changed

Makefile.am

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ src_libbitcoin_node_la_SOURCES = \
6464
src/protocols/protocol_block_in_31800.cpp \
6565
src/protocols/protocol_block_out_106.cpp \
6666
src/protocols/protocol_block_out_70012.cpp \
67+
src/protocols/protocol_electrum.cpp \
6768
src/protocols/protocol_explore.cpp \
6869
src/protocols/protocol_filter_out_70015.cpp \
6970
src/protocols/protocol_header_in_31800.cpp \
@@ -75,6 +76,7 @@ src_libbitcoin_node_la_SOURCES = \
7576
src/protocols/protocol_observer.cpp \
7677
src/protocols/protocol_peer.cpp \
7778
src/protocols/protocol_performer.cpp \
79+
src/protocols/protocol_stratum_v1.cpp \
7880
src/protocols/protocol_transaction_in_106.cpp \
7981
src/protocols/protocol_transaction_out_106.cpp \
8082
src/sessions/session.cpp \
@@ -184,7 +186,7 @@ include_bitcoin_node_channels_HEADERS = \
184186
include/bitcoin/node/channels/channel_http.hpp \
185187
include/bitcoin/node/channels/channel_peer.hpp \
186188
include/bitcoin/node/channels/channel_rpc.hpp \
187-
include/bitcoin/node/channels/channel_tcp.hpp \
189+
include/bitcoin/node/channels/channel_sv2.hpp \
188190
include/bitcoin/node/channels/channel_ws.hpp \
189191
include/bitcoin/node/channels/channels.hpp
190192

@@ -250,7 +252,6 @@ include_bitcoin_node_protocols_HEADERS = \
250252
include/bitcoin/node/protocols/protocol_rpc.hpp \
251253
include/bitcoin/node/protocols/protocol_stratum_v1.hpp \
252254
include/bitcoin/node/protocols/protocol_stratum_v2.hpp \
253-
include/bitcoin/node/protocols/protocol_tcp.hpp \
254255
include/bitcoin/node/protocols/protocol_transaction_in_106.hpp \
255256
include/bitcoin/node/protocols/protocol_transaction_out_106.hpp \
256257
include/bitcoin/node/protocols/protocol_web.hpp \

builds/cmake/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ add_library( ${CANONICAL_LIB_NAME}
276276
"../../src/protocols/protocol_block_in_31800.cpp"
277277
"../../src/protocols/protocol_block_out_106.cpp"
278278
"../../src/protocols/protocol_block_out_70012.cpp"
279+
"../../src/protocols/protocol_electrum.cpp"
279280
"../../src/protocols/protocol_explore.cpp"
280281
"../../src/protocols/protocol_filter_out_70015.cpp"
281282
"../../src/protocols/protocol_header_in_31800.cpp"
@@ -287,6 +288,7 @@ add_library( ${CANONICAL_LIB_NAME}
287288
"../../src/protocols/protocol_observer.cpp"
288289
"../../src/protocols/protocol_peer.cpp"
289290
"../../src/protocols/protocol_performer.cpp"
291+
"../../src/protocols/protocol_stratum_v1.cpp"
290292
"../../src/protocols/protocol_transaction_in_106.cpp"
291293
"../../src/protocols/protocol_transaction_out_106.cpp"
292294
"../../src/sessions/session.cpp"

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@
149149
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_in_31800.cpp" />
150150
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_out_106.cpp" />
151151
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_out_70012.cpp" />
152+
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp" />
152153
<ClCompile Include="..\..\..\..\src\protocols\protocol_explore.cpp" />
153154
<ClCompile Include="..\..\..\..\src\protocols\protocol_filter_out_70015.cpp" />
154155
<ClCompile Include="..\..\..\..\src\protocols\protocol_header_in_31800.cpp" />
@@ -160,6 +161,7 @@
160161
<ClCompile Include="..\..\..\..\src\protocols\protocol_observer.cpp" />
161162
<ClCompile Include="..\..\..\..\src\protocols\protocol_peer.cpp" />
162163
<ClCompile Include="..\..\..\..\src\protocols\protocol_performer.cpp" />
164+
<ClCompile Include="..\..\..\..\src\protocols\protocol_stratum_v1.cpp" />
163165
<ClCompile Include="..\..\..\..\src\protocols\protocol_transaction_in_106.cpp" />
164166
<ClCompile Include="..\..\..\..\src\protocols\protocol_transaction_out_106.cpp" />
165167
<ClCompile Include="..\..\..\..\src\sessions\session.cpp" />
@@ -176,7 +178,7 @@
176178
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_http.hpp" />
177179
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_peer.hpp" />
178180
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_rpc.hpp" />
179-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_tcp.hpp" />
181+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_sv2.hpp" />
180182
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_ws.hpp" />
181183
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channels.hpp" />
182184
<ClInclude Include="..\..\..\..\include\bitcoin\node\chase.hpp" />
@@ -233,7 +235,6 @@
233235
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_rpc.hpp" />
234236
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_stratum_v1.hpp" />
235237
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_stratum_v2.hpp" />
236-
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_tcp.hpp" />
237238
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_transaction_in_106.hpp" />
238239
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_transaction_out_106.hpp" />
239240
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_web.hpp" />

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@
147147
<ClCompile Include="..\..\..\..\src\protocols\protocol_block_out_70012.cpp">
148148
<Filter>src\protocols</Filter>
149149
</ClCompile>
150+
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp">
151+
<Filter>src\protocols</Filter>
152+
</ClCompile>
150153
<ClCompile Include="..\..\..\..\src\protocols\protocol_explore.cpp">
151154
<Filter>src\protocols</Filter>
152155
</ClCompile>
@@ -180,6 +183,9 @@
180183
<ClCompile Include="..\..\..\..\src\protocols\protocol_performer.cpp">
181184
<Filter>src\protocols</Filter>
182185
</ClCompile>
186+
<ClCompile Include="..\..\..\..\src\protocols\protocol_stratum_v1.cpp">
187+
<Filter>src\protocols</Filter>
188+
</ClCompile>
183189
<ClCompile Include="..\..\..\..\src\protocols\protocol_transaction_in_106.cpp">
184190
<Filter>src\protocols</Filter>
185191
</ClCompile>
@@ -224,7 +230,7 @@
224230
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_rpc.hpp">
225231
<Filter>include\bitcoin\node\channels</Filter>
226232
</ClInclude>
227-
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_tcp.hpp">
233+
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_sv2.hpp">
228234
<Filter>include\bitcoin\node\channels</Filter>
229235
</ClInclude>
230236
<ClInclude Include="..\..\..\..\include\bitcoin\node\channels\channel_ws.hpp">
@@ -395,9 +401,6 @@
395401
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_stratum_v2.hpp">
396402
<Filter>include\bitcoin\node\protocols</Filter>
397403
</ClInclude>
398-
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_tcp.hpp">
399-
<Filter>include\bitcoin\node\protocols</Filter>
400-
</ClInclude>
401404
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_transaction_in_106.hpp">
402405
<Filter>include\bitcoin\node\protocols</Filter>
403406
</ClInclude>

include/bitcoin/node.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include <bitcoin/node/channels/channel_http.hpp>
3232
#include <bitcoin/node/channels/channel_peer.hpp>
3333
#include <bitcoin/node/channels/channel_rpc.hpp>
34-
#include <bitcoin/node/channels/channel_tcp.hpp>
34+
#include <bitcoin/node/channels/channel_sv2.hpp>
3535
#include <bitcoin/node/channels/channel_ws.hpp>
3636
#include <bitcoin/node/channels/channels.hpp>
3737
#include <bitcoin/node/chasers/chaser.hpp>
@@ -81,7 +81,6 @@
8181
#include <bitcoin/node/protocols/protocol_rpc.hpp>
8282
#include <bitcoin/node/protocols/protocol_stratum_v1.hpp>
8383
#include <bitcoin/node/protocols/protocol_stratum_v2.hpp>
84-
#include <bitcoin/node/protocols/protocol_tcp.hpp>
8584
#include <bitcoin/node/protocols/protocol_transaction_in_106.hpp>
8685
#include <bitcoin/node/protocols/protocol_transaction_out_106.hpp>
8786
#include <bitcoin/node/protocols/protocol_web.hpp>

include/bitcoin/node/channels/channel_rpc.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,22 @@ namespace libbitcoin {
2828
namespace node {
2929

3030
/// Channel for electrum and stratum v1 channels (non-http json-rpc).
31+
template <typename Interface>
3132
class BCN_API channel_rpc
3233
: public node::channel,
33-
public network::channel_rpc,
34-
protected network::tracker<channel_rpc>
34+
public network::channel_rpc<Interface>,
35+
protected network::tracker<channel_rpc<Interface>>
3536
{
3637
public:
3738
typedef std::shared_ptr<channel_rpc> ptr;
39+
using options_t = typename network::channel_rpc<Interface>::options_t;
3840

3941
inline channel_rpc(const network::logger& log,
4042
const network::socket::ptr& socket, uint64_t identifier,
4143
const node::configuration& config, const options_t& options) NOEXCEPT
4244
: node::channel(log, socket, identifier, config),
43-
network::channel_rpc(log, socket, identifier, config.network, options),
45+
network::channel_rpc<Interface>(log, socket, identifier,
46+
config.network, options),
4447
network::tracker<channel_rpc>(log)
4548
{
4649
}

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

Lines changed: 8 additions & 9 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_TCP_HPP
20-
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_TCP_HPP
19+
#ifndef LIBBITCOIN_NODE_CHANNELS_CHANNEL_SV2_HPP
20+
#define LIBBITCOIN_NODE_CHANNELS_CHANNEL_SV2_HPP
2121

2222
#include <memory>
2323
#include <bitcoin/node/channels/channel.hpp>
@@ -27,22 +27,21 @@
2727
namespace libbitcoin {
2828
namespace node {
2929

30-
/// Abstract base TCP channel state for the node.
31-
/// This is a placeholder for stratum v2 (any unimplemented).
32-
class BCN_API channel_tcp
30+
/// Channel for stratum v2 (custom protocol, not implemented).
31+
class BCN_API channel_sv2
3332
: public node::channel,
3433
public network::channel,
35-
protected network::tracker<channel_tcp>
34+
protected network::tracker<channel_sv2>
3635
{
3736
public:
38-
typedef std::shared_ptr<channel_tcp> ptr;
37+
typedef std::shared_ptr<channel_sv2> ptr;
3938

40-
inline channel_tcp(const network::logger& log,
39+
inline channel_sv2(const network::logger& log,
4140
const network::socket::ptr& socket, uint64_t identifier,
4241
const node::configuration& config, const options_t& options) NOEXCEPT
4342
: node::channel(log, socket, identifier, config),
4443
network::channel(log, socket, identifier, config.network, options),
45-
network::tracker<channel_tcp>(log)
44+
network::tracker<channel_sv2>(log)
4645
{
4746
}
4847
};

include/bitcoin/node/channels/channels.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include <bitcoin/node/channels/channel_http.hpp>
2424
#include <bitcoin/node/channels/channel_peer.hpp>
2525
#include <bitcoin/node/channels/channel_rpc.hpp>
26-
#include <bitcoin/node/channels/channel_tcp.hpp>
26+
#include <bitcoin/node/channels/channel_sv2.hpp>
2727
#include <bitcoin/node/channels/channel_ws.hpp>
2828

2929
#endif

include/bitcoin/node/interfaces/electrum.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ struct electrum_methods
8686
using server_peers_subscribe = at<19>;
8787
using server_ping = at<20>;
8888
using server_version = at<21>;
89-
90-
////using subscribers = unsubscriber<external_t<decltype(methods)>>;
9189
};
9290

9391
} // namespace interface

include/bitcoin/node/protocols/protocol_electrum.hpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,31 +22,36 @@
2222
#include <memory>
2323
#include <bitcoin/node/channels/channels.hpp>
2424
#include <bitcoin/node/define.hpp>
25+
#include <bitcoin/node/interfaces/interfaces.hpp>
2526
#include <bitcoin/node/protocols/protocol_rpc.hpp>
2627

2728
namespace libbitcoin {
2829
namespace node {
2930

3031
class BCN_API protocol_electrum
31-
: public node::protocol_rpc,
32+
: public node::protocol_rpc<interface::electrum>,
3233
protected network::tracker<protocol_electrum>
3334
{
3435
public:
3536
typedef std::shared_ptr<protocol_electrum> ptr;
37+
using rpc_interface = interface::electrum;
3638

3739
inline protocol_electrum(const auto& session,
3840
const network::channel::ptr& channel,
3941
const options_t& options) NOEXCEPT
40-
: node::protocol_rpc(session, channel, options),
42+
: node::protocol_rpc<rpc_interface>(session, channel, options),
4143
network::tracker<protocol_electrum>(session->log)
4244
{
4345
}
4446

45-
/// Public start is required.
46-
inline void start() NOEXCEPT override
47-
{
48-
node::protocol_rpc::start();
49-
}
47+
void start() NOEXCEPT override;
48+
49+
protected:
50+
/// Handlers.
51+
bool handle_blockchain_headers_subscribe(const code& ec,
52+
rpc_interface::blockchain_headers_subscribe) NOEXCEPT;
53+
bool handle_blockchain_relayfee(const code& ec,
54+
rpc_interface::blockchain_relayfee) NOEXCEPT;
5055
};
5156

5257
} // namespace node

0 commit comments

Comments
 (0)