Skip to content

Commit 2ce7425

Browse files
committed
Refactor electrum sources into individual files.
1 parent 84a8abf commit 2ce7425

16 files changed

Lines changed: 1309 additions & 1034 deletions

Makefile.am

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,18 @@ src_libbitcoin_server_la_SOURCES = \
4848
src/parsers/native_target.cpp \
4949
src/protocols/protocol_bitcoind_rest.cpp \
5050
src/protocols/protocol_bitcoind_rpc.cpp \
51-
src/protocols/protocol_electrum.cpp \
52-
src/protocols/protocol_electrum_version.cpp \
5351
src/protocols/protocol_html.cpp \
5452
src/protocols/protocol_http.cpp \
5553
src/protocols/protocol_native.cpp \
56-
src/protocols/protocol_stratum_v1.cpp
54+
src/protocols/protocol_stratum_v1.cpp \
55+
src/protocols/electrum/protocol_electrum.cpp \
56+
src/protocols/electrum/protocol_electrum_addresses.cpp \
57+
src/protocols/electrum/protocol_electrum_fees.cpp \
58+
src/protocols/electrum/protocol_electrum_headers.cpp \
59+
src/protocols/electrum/protocol_electrum_mempool.cpp \
60+
src/protocols/electrum/protocol_electrum_server.cpp \
61+
src/protocols/electrum/protocol_electrum_transactions.cpp \
62+
src/protocols/electrum/protocol_electrum_version.cpp
5763

5864
# local: test/libbitcoin-server-test
5965
#------------------------------------------------------------------------------
@@ -84,9 +90,10 @@ test_libbitcoin_server_test_SOURCES = \
8490
test/protocols/electrum/electrum_addresses.cpp \
8591
test/protocols/electrum/electrum_fees.cpp \
8692
test/protocols/electrum/electrum_headers.cpp \
93+
test/protocols/electrum/electrum_mempool.cpp \
8794
test/protocols/electrum/electrum_server.cpp \
88-
test/protocols/electrum/electrum_server_version.cpp \
89-
test/protocols/electrum/electrum_transactions.cpp
95+
test/protocols/electrum/electrum_transactions.cpp \
96+
test/protocols/electrum/electrum_version.cpp
9097

9198
endif WITH_TESTS
9299

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@
124124
<ClCompile Include="..\..\..\..\test\main.cpp" />
125125
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_query.cpp" />
126126
<ClCompile Include="..\..\..\..\test\parsers\bitcoind_target.cpp" />
127-
<ClCompile Include="..\..\..\..\test\parsers\electrum_version.cpp" />
127+
<ClCompile Include="..\..\..\..\test\parsers\electrum_version.cpp">
128+
<ObjectFileName>$(IntDir)test_parsers_electrum_version.obj</ObjectFileName>
129+
</ClCompile>
128130
<ClCompile Include="..\..\..\..\test\parsers\native_query.cpp" />
129131
<ClCompile Include="..\..\..\..\test\parsers\native_target.cpp" />
130132
<ClCompile Include="..\..\..\..\test\protocols\blocks.cpp">
@@ -136,9 +138,12 @@
136138
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_addresses.cpp" />
137139
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_fees.cpp" />
138140
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_headers.cpp" />
141+
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_mempool.cpp" />
139142
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_server.cpp" />
140-
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_server_version.cpp" />
141143
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_transactions.cpp" />
144+
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_version.cpp">
145+
<ObjectFileName>$(IntDir)test_protocols_electrum_electrum_version.obj</ObjectFileName>
146+
</ClCompile>
142147
<ClCompile Include="..\..\..\..\test\settings.cpp" />
143148
<ClCompile Include="..\..\..\..\test\test.cpp">
144149
<ObjectFileName>$(IntDir)test_test.obj</ObjectFileName>

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,18 @@
6363
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_headers.cpp">
6464
<Filter>src\protocols\electrum</Filter>
6565
</ClCompile>
66-
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_server.cpp">
66+
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_mempool.cpp">
6767
<Filter>src\protocols\electrum</Filter>
6868
</ClCompile>
69-
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_server_version.cpp">
69+
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_server.cpp">
7070
<Filter>src\protocols\electrum</Filter>
7171
</ClCompile>
7272
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_transactions.cpp">
7373
<Filter>src\protocols\electrum</Filter>
7474
</ClCompile>
75+
<ClCompile Include="..\..\..\..\test\protocols\electrum\electrum_version.cpp">
76+
<Filter>src\protocols\electrum</Filter>
77+
</ClCompile>
7578
<ClCompile Include="..\..\..\..\test\settings.cpp">
7679
<Filter>src</Filter>
7780
</ClCompile>

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,16 @@
130130
<ClCompile Include="..\..\..\..\src\parsers\electrum_version.cpp" />
131131
<ClCompile Include="..\..\..\..\src\parsers\native_query.cpp" />
132132
<ClCompile Include="..\..\..\..\src\parsers\native_target.cpp" />
133+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum.cpp" />
134+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_addresses.cpp" />
135+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_fees.cpp" />
136+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_headers.cpp" />
137+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_mempool.cpp" />
138+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_server.cpp" />
139+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_transactions.cpp" />
140+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_version.cpp" />
133141
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rest.cpp" />
134142
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rpc.cpp" />
135-
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp" />
136-
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum_version.cpp" />
137143
<ClCompile Include="..\..\..\..\src\protocols\protocol_html.cpp" />
138144
<ClCompile Include="..\..\..\..\src\protocols\protocol_http.cpp" />
139145
<ClCompile Include="..\..\..\..\src\protocols\protocol_native.cpp" />

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

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,37 @@
88
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
99
<ItemGroup>
1010
<Filter Include="include">
11-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000003}</UniqueIdentifier>
11+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000004}</UniqueIdentifier>
1212
</Filter>
1313
<Filter Include="include\bitcoin">
14-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000004}</UniqueIdentifier>
14+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000005}</UniqueIdentifier>
1515
</Filter>
1616
<Filter Include="include\bitcoin\server">
17-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000005}</UniqueIdentifier>
17+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000006}</UniqueIdentifier>
1818
</Filter>
1919
<Filter Include="include\bitcoin\server\channels">
20-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000006}</UniqueIdentifier>
20+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000007}</UniqueIdentifier>
2121
</Filter>
2222
<Filter Include="include\bitcoin\server\impl">
23-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000007}</UniqueIdentifier>
23+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000008}</UniqueIdentifier>
2424
</Filter>
2525
<Filter Include="include\bitcoin\server\impl\protocols">
26-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000C}</UniqueIdentifier>
26+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000D}</UniqueIdentifier>
2727
</Filter>
2828
<Filter Include="include\bitcoin\server\interfaces">
29-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000008}</UniqueIdentifier>
29+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000009}</UniqueIdentifier>
3030
</Filter>
3131
<Filter Include="include\bitcoin\server\parsers">
32-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000009}</UniqueIdentifier>
32+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000A}</UniqueIdentifier>
3333
</Filter>
3434
<Filter Include="include\bitcoin\server\protocols">
35-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000A}</UniqueIdentifier>
35+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000B}</UniqueIdentifier>
3636
</Filter>
3737
<Filter Include="include\bitcoin\server\sessions">
38-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000B}</UniqueIdentifier>
38+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000C}</UniqueIdentifier>
3939
</Filter>
4040
<Filter Include="resource">
41-
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000D}</UniqueIdentifier>
41+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-00000000000E}</UniqueIdentifier>
4242
</Filter>
4343
<Filter Include="src">
4444
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000000}</UniqueIdentifier>
@@ -49,6 +49,9 @@
4949
<Filter Include="src\protocols">
5050
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000002}</UniqueIdentifier>
5151
</Filter>
52+
<Filter Include="src\protocols\electrum">
53+
<UniqueIdentifier>{73CE0AC2-ECB2-4E8D-0000-000000000003}</UniqueIdentifier>
54+
</Filter>
5255
</ItemGroup>
5356
<ItemGroup>
5457
<ClCompile Include="..\..\..\..\src\configuration.cpp">
@@ -78,16 +81,34 @@
7881
<ClCompile Include="..\..\..\..\src\parsers\native_target.cpp">
7982
<Filter>src\parsers</Filter>
8083
</ClCompile>
81-
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rest.cpp">
82-
<Filter>src\protocols</Filter>
84+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum.cpp">
85+
<Filter>src\protocols\electrum</Filter>
8386
</ClCompile>
84-
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rpc.cpp">
85-
<Filter>src\protocols</Filter>
87+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_addresses.cpp">
88+
<Filter>src\protocols\electrum</Filter>
8689
</ClCompile>
87-
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum.cpp">
90+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_fees.cpp">
91+
<Filter>src\protocols\electrum</Filter>
92+
</ClCompile>
93+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_headers.cpp">
94+
<Filter>src\protocols\electrum</Filter>
95+
</ClCompile>
96+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_mempool.cpp">
97+
<Filter>src\protocols\electrum</Filter>
98+
</ClCompile>
99+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_server.cpp">
100+
<Filter>src\protocols\electrum</Filter>
101+
</ClCompile>
102+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_transactions.cpp">
103+
<Filter>src\protocols\electrum</Filter>
104+
</ClCompile>
105+
<ClCompile Include="..\..\..\..\src\protocols\electrum\protocol_electrum_version.cpp">
106+
<Filter>src\protocols\electrum</Filter>
107+
</ClCompile>
108+
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rest.cpp">
88109
<Filter>src\protocols</Filter>
89110
</ClCompile>
90-
<ClCompile Include="..\..\..\..\src\protocols\protocol_electrum_version.cpp">
111+
<ClCompile Include="..\..\..\..\src\protocols\protocol_bitcoind_rpc.cpp">
91112
<Filter>src\protocols</Filter>
92113
</ClCompile>
93114
<ClCompile Include="..\..\..\..\src\protocols\protocol_html.cpp">
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/**
2+
* Copyright (c) 2011-2026 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+
#include <bitcoin/server/protocols/protocol_electrum.hpp>
20+
21+
#include <atomic>
22+
#include <variant>
23+
#include <bitcoin/server/define.hpp>
24+
#include <bitcoin/server/interfaces/interfaces.hpp>
25+
#include <bitcoin/server/protocols/protocol_rpc.hpp>
26+
27+
namespace libbitcoin {
28+
namespace server {
29+
30+
#define CLASS protocol_electrum
31+
32+
using namespace std::placeholders;
33+
34+
// Start.
35+
// ----------------------------------------------------------------------------
36+
// github.com/spesmilo/electrum-protocol/blob/master/docs/protocol-methods.rst
37+
38+
void protocol_electrum::start() NOEXCEPT
39+
{
40+
BC_ASSERT(stranded());
41+
42+
if (started())
43+
return;
44+
45+
// Events subscription is asynchronous, events may be missed.
46+
subscribe_events(BIND(handle_event, _1, _2, _3));
47+
48+
// Blockchain methods.
49+
SUBSCRIBE_RPC(handle_blockchain_block_header, _1, _2, _3, _4);
50+
SUBSCRIBE_RPC(handle_blockchain_block_headers, _1, _2, _3, _4, _5);
51+
SUBSCRIBE_RPC(handle_blockchain_headers_subscribe, _1, _2);
52+
SUBSCRIBE_RPC(handle_blockchain_estimate_fee, _1, _2, _3, _4);
53+
SUBSCRIBE_RPC(handle_blockchain_relay_fee, _1, _2);
54+
SUBSCRIBE_RPC(handle_blockchain_scripthash_get_balance, _1, _2, _3);
55+
SUBSCRIBE_RPC(handle_blockchain_scripthash_get_history, _1, _2, _3);
56+
SUBSCRIBE_RPC(handle_blockchain_scripthash_get_mempool, _1, _2, _3);
57+
SUBSCRIBE_RPC(handle_blockchain_scripthash_list_unspent, _1, _2, _3);
58+
SUBSCRIBE_RPC(handle_blockchain_scripthash_subscribe, _1, _2, _3);
59+
SUBSCRIBE_RPC(handle_blockchain_scripthash_unsubscribe, _1, _2, _3);
60+
SUBSCRIBE_RPC(handle_blockchain_transaction_broadcast, _1, _2, _3);
61+
SUBSCRIBE_RPC(handle_blockchain_transaction_broadcast_package, _1, _2, _3, _4);
62+
SUBSCRIBE_RPC(handle_blockchain_transaction_get, _1, _2, _3, _4);
63+
SUBSCRIBE_RPC(handle_blockchain_transaction_get_merkle, _1, _2, _3, _4);
64+
SUBSCRIBE_RPC(handle_blockchain_transaction_id_from_pos, _1, _2, _3, _4, _5);
65+
66+
// Server methods
67+
SUBSCRIBE_RPC(handle_server_add_peer, _1, _2, _3);
68+
SUBSCRIBE_RPC(handle_server_banner, _1, _2);
69+
SUBSCRIBE_RPC(handle_server_donation_address, _1, _2);
70+
SUBSCRIBE_RPC(handle_server_features, _1, _2);
71+
SUBSCRIBE_RPC(handle_server_peers_subscribe, _1, _2);
72+
SUBSCRIBE_RPC(handle_server_ping, _1, _2);
73+
////SUBSCRIBE_RPC(handle_server_version, _1, _2, _3, _4);
74+
75+
// Mempool methods.
76+
SUBSCRIBE_RPC(handle_mempool_get_fee_histogram, _1, _2);
77+
SUBSCRIBE_RPC(handle_mempool_get_info, _1, _2);
78+
protocol_rpc<channel_electrum>::start();
79+
}
80+
81+
void protocol_electrum::stopping(const code& ec) NOEXCEPT
82+
{
83+
BC_ASSERT(stranded());
84+
85+
// Unsubscription is asynchronous, race is ok.
86+
unsubscribe_events();
87+
protocol_rpc<channel_electrum>::stopping(ec);
88+
}
89+
90+
// Handlers (event subscription).
91+
// ----------------------------------------------------------------------------
92+
93+
bool protocol_electrum::handle_event(const code&, node::chase event_,
94+
node::event_value value) NOEXCEPT
95+
{
96+
// Do not pass ec to stopped as it is not a call status.
97+
if (stopped())
98+
return false;
99+
100+
switch (event_)
101+
{
102+
case node::chase::organized:
103+
{
104+
if (subscribed_.load(std::memory_order_relaxed))
105+
{
106+
BC_ASSERT(std::holds_alternative<node::header_t>(value));
107+
POST(do_header, std::get<node::header_t>(value));
108+
}
109+
110+
break;
111+
}
112+
default:
113+
{
114+
break;
115+
}
116+
}
117+
118+
return true;
119+
}
120+
121+
} // namespace server
122+
} // namespace libbitcoin

0 commit comments

Comments
 (0)