diff --git a/Makefile.am b/Makefile.am index 40c9f62bf..45490a1f8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -479,15 +479,10 @@ include_bitcoin_network_rpc_enums_HEADERS = \ include_bitcoin_network_rpc_interfacesdir = ${includedir}/bitcoin/network/rpc/interfaces include_bitcoin_network_rpc_interfaces_HEADERS = \ - include/bitcoin/network/rpc/interfaces/bitcoind.hpp \ - include/bitcoin/network/rpc/interfaces/electrum.hpp \ - include/bitcoin/network/rpc/interfaces/explore.hpp \ include/bitcoin/network/rpc/interfaces/http.hpp \ include/bitcoin/network/rpc/interfaces/interfaces.hpp \ include/bitcoin/network/rpc/interfaces/peer_broadcast.hpp \ - include/bitcoin/network/rpc/interfaces/peer_dispatch.hpp \ - include/bitcoin/network/rpc/interfaces/stratum_v1.hpp \ - include/bitcoin/network/rpc/interfaces/stratum_v2.hpp + include/bitcoin/network/rpc/interfaces/peer_dispatch.hpp include_bitcoin_network_sessionsdir = ${includedir}/bitcoin/network/sessions include_bitcoin_network_sessions_HEADERS = \ diff --git a/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj b/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj index fe39132d0..d52bd34e7 100644 --- a/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj +++ b/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj @@ -353,15 +353,10 @@ - - - - - diff --git a/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj.filters b/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj.filters index dad7a070d..7b07dd50f 100644 --- a/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj.filters +++ b/builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj.filters @@ -815,15 +815,6 @@ include\bitcoin\network\rpc\enums - - include\bitcoin\network\rpc\interfaces - - - include\bitcoin\network\rpc\interfaces - - - include\bitcoin\network\rpc\interfaces - include\bitcoin\network\rpc\interfaces @@ -836,12 +827,6 @@ include\bitcoin\network\rpc\interfaces - - include\bitcoin\network\rpc\interfaces - - - include\bitcoin\network\rpc\interfaces - include\bitcoin\network\rpc diff --git a/include/bitcoin/network.hpp b/include/bitcoin/network.hpp index 28bf1013a..ac0f96f34 100644 --- a/include/bitcoin/network.hpp +++ b/include/bitcoin/network.hpp @@ -151,15 +151,10 @@ #include #include #include -#include -#include -#include #include #include #include #include -#include -#include #include #include #include diff --git a/include/bitcoin/network/rpc/interfaces/bitcoind.hpp b/include/bitcoin/network/rpc/interfaces/bitcoind.hpp deleted file mode 100644 index d8ddaa277..000000000 --- a/include/bitcoin/network/rpc/interfaces/bitcoind.hpp +++ /dev/null @@ -1,264 +0,0 @@ -/** - * Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS) - * - * This file is part of libbitcoin. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -#ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_BITCOIND_HPP -#define LIBBITCOIN_NETWORK_RPC_INTERFACES_BITCOIND_HPP - -#include -#include -#include - -namespace libbitcoin { -namespace network { -namespace rpc { - -struct bitcoind_methods -{ - static constexpr std::tuple methods - { - /// Blockchain methods. - method<"getbestblockhash">{}, - method<"getblock", string_t, optional<0_u32>>{ "blockhash", "verbosity" }, - method<"getblockchaininfo">{}, - method<"getblockcount">{}, - method<"getblockfilter", string_t, optional<"basic"_t>>{ "blockhash", "filtertype" }, - method<"getblockhash", number_t>{ "height" }, - method<"getblockheader", string_t, optional>{ "blockhash", "verbose" }, - method<"getblockstats", string_t, optional>{ "hash_or_height", "stats" }, - method<"getchaintxstats", optional<-1_i32>, optional<""_t>>{ "nblocks", "blockhash" }, - method<"getchainwork">{}, - method<"gettxout", string_t, number_t, optional>{ "txid", "n", "include_mempool" }, - method<"gettxoutsetinfo">{}, - method<"pruneblockchain", number_t>{ "height" }, - method<"savemempool">{}, - method<"scantxoutset", string_t, optional>{ "action", "scanobjects" }, - method<"verifychain", optional<4_u32>, optional<288_u32>>{ "checklevel", "nblocks" }, - method<"verifytxoutset", string_t>{ "input_verify_flag" }, - - /// Control methods. - method<"getmemoryinfo", optional<"stats"_t>>{ "mode" }, - method<"getrpcinfo">{}, - method<"help", optional<""_t>>{ "command" }, - method<"logging", optional<"*"_t>>{ "include" }, - method<"stop">{}, - method<"uptime">{}, - - /// Mining methods. - method<"getblocktemplate", optional>{ "template_request" }, - method<"getmininginfo">{}, - method<"getnetworkhashps", optional<120_u32>, optional<-1_i32>>{ "nblocks", "height" }, - method<"prioritisetransaction", string_t, number_t, number_t>{ "txid", "dummy", "priority_delta" }, - method<"submitblock", string_t, optional<""_t>>{ "block", "parameters" }, - - /// Network methods. - method<"addnode", string_t, string_t>{ "node", "command" }, - method<"clearbanned">{}, - method<"disconnectnode", string_t, optional<-1_i32>>{ "address", "nodeid" }, - method<"getaddednodeinfo", optional, optional, optional<""_t>>{ "include_chain_info", "dns", "addnode" }, - method<"getconnectioncount">{}, - method<"getnetworkinfo">{}, - method<"getpeerinfo">{}, - method<"listbanned">{}, - method<"ping">{}, - method<"setban", string_t, string_t, optional<86400_u32>, optional, optional<""_t>>{ "addr", "command", "bantime", "absolute", "reason" }, - method<"setnetworkactive", boolean_t>{ "state" }, - - /// Rawtransactions methods. - method<"combinerawtransaction", array_t>{ "txs" }, - method<"createrawtransaction", array_t, object_t, optional<0_u32>, optional>{ "inputs", "outputs", "locktime", "replaceable" }, - method<"decoderawtransaction", string_t>{ "hexstring" }, - method<"fundrawtransaction", string_t, optional>{ "rawtx", "options" }, - method<"getrawtransaction", string_t, optional<0_u32>, optional<""_t>>{ "txid", "verbose", "blockhash" }, - method<"sendrawtransaction", string_t, optional<0_u32>>{ "hexstring", "maxfeerate" }, - method<"signrawtransactionwithkey", string_t, optional, optional, optional<"ALL|FORKID"_t>>{ "hexstring", "privkeys", "prevtxs", "sighashtype" }, - method<"testmempoolaccept", array_t, optional<0_u32>>{ "rawtxs", "maxfeerate" }, - method<"testrawtransaction", string_t>{ "rawtx" }, - - /// Util methods (node-related). - method<"createmultisig", number_t, array_t>{ "nrequired", "keys" }, - method<"decodepsbt", string_t>{ "psbt" }, - method<"decodescript", string_t>{ "hex" }, - method<"estimaterawfee", number_t, optional<"unset"_t>>{ "conf_target", "estimate_mode" }, - method<"getdescriptorinfo", string_t>{ "descriptor" }, - method<"validateaddress", string_t>{ "address" }, - - /// Wallet methods (unsupported). - method<"abandontransaction", string_t>{ "txid" }, - method<"addmultisigaddress", number_t, array_t, optional<""_t>, optional<"legacy"_t>>{ "nrequired", "keys", "label", "address_type" }, - method<"backupwallet", string_t>{ "destination" }, - method<"bumpfee", string_t, optional>{ "txid", "options" }, - method<"createwallet", string_t, optional, optional, optional, optional<""_t>, optional, optional, optional, optional<"set"_t>>{ "wallet_name", "disable_private_keys", "blank", "passphrase", "avoid_reuse", "descriptors", "load_on_startup", "external_signer", "change_type" }, - method<"dumpprivkey", string_t>{ "address" }, - method<"dumpwallet", string_t>{ "filename" }, - method<"encryptwallet", string_t>{ "passphrase" }, - method<"getaddressinfo", string_t>{ "address" }, - method<"getbalances">{}, - method<"getnewaddress", optional<""_t>, optional<"legacy"_t>>{ "label", "address_type" }, - method<"getreceivedbyaddress", string_t, optional<0>>{ "address", "minconf" }, - method<"getreceivedbylabel", string_t, optional<0>>{ "label", "minconf" }, - method<"gettransaction", string_t, optional, optional>{ "txid", "include_watchonly", "verbose" }, - method<"getunconfirmedbalance">{}, - method<"getwalletinfo">{}, - method<"importaddress", string_t, optional<""_t>, optional, optional>{ "address", "label", "rescan", "p2sh" }, - method<"importmulti", array_t, optional>{ "requests", "options" }, - method<"importprivkey", string_t, optional<""_t>, optional>{ "privkey", "label", "rescan" }, - method<"importprunedfunds", string_t, string_t>{ "rawtransaction", "txoutproof" }, - method<"importpubkey", string_t, optional<""_t>, optional>{ "pubkey", "label", "rescan" }, - method<"importwallet", string_t>{ "filename" }, - method<"keypoolrefill", optional<100>>{ "newsize" }, - method<"listaddressgroupings", optional<1>, optional>{ "minconf", "include_watchonly" }, - method<"listlabels", optional<"receive"_t>>{ "purpose" }, - method<"listlockunspent">{}, - method<"listreceivedbyaddress", optional<1>, optional, optional, optional<""_t>>{ "minconf", "include_empty", "include_watchonly", "address_filter" }, - method<"listreceivedbylabel", optional<1>, optional, optional>{ "minconf", "include_empty", "include_watchonly" }, - method<"listtransactions", optional<""_t>, optional<10>, optional<0>, optional>{ "label", "count", "skip", "include_watchonly" }, - method<"listunspent", optional<1>, optional, optional, optional>{ "minconf", "addresses", "include_unsafe", "query_options" }, - method<"loadwallet", string_t, optional>{ "filename", "load_on_startup" }, - method<"lockunspent", boolean_t, optional>{ "unlock", "transactions" }, - method<"removeprunedfunds", string_t>{ "txid" }, - method<"rescanblockchain", optional<0>>{ "start_height" }, - method<"send", object_t, optional>{ "outputs", "options" }, - method<"sendmany", string_t, object_t, optional<1>, optional<""_t>, optional<""_t>, optional, optional, optional<25>, optional<"unset"_t>, optional, optional<0>>{ "dummy", "outputs", "minconf", "comment", "comment_to", "subtractfeefrom", "replaceable", "conf_target", "estimate_mode", "avoid_reuse", "fee_rate" }, - method<"sendtoaddress", string_t, number_t, optional<""_t>, optional<""_t>, optional, optional<25>, optional<"unset"_t>, optional, optional<0>, optional>{ "address", "amount", "comment", "comment_to", "subtractfeefromamount", "conf_target", "estimate_mode", "avoid_reuse", "fee_rate", "verbose" }, - method<"setlabel", string_t, string_t>{ "address", "label" }, - method<"settxfee", number_t>{ "amount" }, - method<"signmessage", string_t, string_t>{ "address", "message" }, - method<"signmessagewithprivkey", string_t, string_t>{ "privkey", "message" }, - method<"syncwithvalidationinterfacequeue">{}, - method<"unloadwallet", optional<""_t>, optional>{ "wallet_name", "load_on_startup" }, - method<"walletcreatefundedpsbt", optional, optional, optional<0>, optional>{ "inputs", "outputs", "locktime", "options" }, - method<"walletlock">{}, - method<"walletpassphrase", string_t, number_t>{ "passphrase", "timeout" }, - method<"walletprocesspsbt", string_t, optional, optional, optional>{ "psbt", "sign", "bip32derivs", "complete" } - }; - - template - using subscriber = network::unsubscriber; - - template - using at = method_at; - - // Derive this from above in c++26 using reflection. - using getbestblockhash = at<0>; - using getblock = at<1>; - using getblockchaininfo = at<2>; - using getblockcount = at<3>; - using getblockfilter = at<4>; - using getblockhash = at<5>; - using getblockheader = at<6>; - using getblockstats = at<7>; - using getchaintxstats = at<8>; - using getchainwork = at<9>; - using gettxout = at<10>; - using gettxoutsetinfo = at<11>; - using pruneblockchain = at<12>; - using savemempool = at<13>; - using scantxoutset = at<14>; - using verifychain = at<15>; - using verifytxoutset = at<16>; - using getmemoryinfo = at<17>; - using getrpcinfo = at<18>; - using help = at<19>; - using logging = at<20>; - using stop = at<21>; - using uptime = at<22>; - using getblocktemplate = at<23>; - using getmininginfo = at<24>; - using getnetworkhashps = at<25>; - using prioritisetransaction = at<26>; - using submitblock = at<27>; - using addnode = at<28>; - using clearbanned = at<29>; - using disconnectnode = at<30>; - using getaddednodeinfo = at<31>; - using getconnectioncount = at<32>; - using getnetworkinfo = at<33>; - using getpeerinfo = at<34>; - using listbanned = at<35>; - using ping = at<36>; - using setban = at<37>; - using setnetworkactive = at<38>; - using combinerawtransaction = at<39>; - using createrawtransaction = at<40>; - using decoderawtransaction = at<41>; - using fundrawtransaction = at<42>; - using getrawtransaction = at<43>; - using sendrawtransaction = at<44>; - using signrawtransactionwithkey = at<45>; - using testmempoolaccept = at<46>; - using testrawtransaction = at<47>; - using createmultisig = at<48>; - using decodepsbt = at<49>; - using decodescript = at<50>; - using estimaterawfee = at<51>; - using getdescriptorinfo = at<52>; - using validateaddress = at<53>; - using abandontransaction = at<54>; - using addmultisigaddress = at<55>; - using backupwallet = at<56>; - using bumpfee = at<57>; - using createwallet = at<58>; - using dumpprivkey = at<59>; - using dumpwallet = at<60>; - using encryptwallet = at<61>; - using getaddressinfo = at<62>; - using getbalances = at<63>; - using getnewaddress = at<64>; - using getreceivedbyaddress = at<65>; - using getreceivedbylabel = at<66>; - using gettransaction = at<67>; - using getunconfirmedbalance = at<68>; - using getwalletinfo = at<69>; - using importaddress = at<70>; - using importmulti = at<71>; - using importprivkey = at<72>; - using importprunedfunds = at<73>; - using importpubkey = at<74>; - using importwallet = at<75>; - using keypoolrefill = at<76>; - using listaddressgroupings = at<77>; - using listlabels = at<78>; - using listlockunspent = at<79>; - using listreceivedbyaddress = at<80>; - using listreceivedbylabel = at<81>; - using listtransactions = at<82>; - using listunspent = at<83>; - using loadwallet = at<84>; - using lockunspent = at<85>; - using removeprunedfunds = at<86>; - using rescanblockchain = at<87>; - using send = at<88>; - using sendmany = at<89>; - using sendtoaddress = at<90>; - using setlabel = at<91>; - using settxfee = at<92>; - using signmessage = at<93>; - using signmessagewithprivkey = at<94>; - using syncwithvalidationinterfacequeue = at<95>; - using unloadwallet = at<96>; - using walletcreatefundedpsbt = at<97>; - using walletlock = at<98>; - using walletpassphrase = at<99>; - using walletprocesspsbt = at<100>; -}; - -} // namespace rpc -} // namespace network -} // namespace libbitcoin - -#endif diff --git a/include/bitcoin/network/rpc/interfaces/electrum.hpp b/include/bitcoin/network/rpc/interfaces/electrum.hpp deleted file mode 100644 index e0d6b3a08..000000000 --- a/include/bitcoin/network/rpc/interfaces/electrum.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS) - * - * This file is part of libbitcoin. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -#ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_ELECTRUM_HPP -#define LIBBITCOIN_NETWORK_RPC_INTERFACES_ELECTRUM_HPP - -#include -#include -#include - -namespace libbitcoin { -namespace network { -namespace rpc { - -struct electrum_methods -{ - static constexpr std::tuple methods - { - /// Blockchain methods. - method<"blockchain.block.header", number_t, optional<0>>{ "height", "cp_height" }, - method<"blockchain.block.headers", number_t, number_t, optional<0>>{ "start_height", "count", "cp_height" }, - method<"blockchain.estimatefee", number_t>{ "number" }, - method<"blockchain.headers.subscribe">{}, - method<"blockchain.relayfee">{}, - method<"blockchain.scripthash.get_balance", string_t>{ "scripthash" }, - method<"blockchain.scripthash.get_history", string_t>{ "scripthash" }, - method<"blockchain.scripthash.get_mempool", string_t>{ "scripthash" }, - method<"blockchain.scripthash.listunspent", string_t>{ "scripthash" }, - method<"blockchain.scripthash.subscribe", string_t>{ "scripthash" }, - method<"blockchain.scripthash.unsubscribe", string_t>{ "scripthash" }, - method<"blockchain.transaction.broadcast", string_t>{ "raw_tx" }, - method<"blockchain.transaction.get", string_t, optional>{ "tx_hash", "verbose" }, - method<"blockchain.transaction.get_merkle", string_t, number_t>{ "tx_hash", "height" }, - method<"blockchain.transaction.id_from_pos", number_t, number_t, optional>{ "height", "tx_pos", "merkle" }, - - /// Server methods. - method<"server.add_peer", object_t>{ "features" }, - method<"server.banner">{}, - method<"server.donation_address">{}, - method<"server.features">{}, - method<"server.peers.subscribe">{}, - method<"server.ping">{}, - method<"server.version", optional<""_t>, optional<"1.4"_t>>{ "client_name", "protocol_version" } - }; - - template - using subscriber = network::unsubscriber; - - template - using at = method_at; - - // Derive this from above in c++26 using reflection. - using blockchain_block_header = at<0>; - using blockchain_block_headers = at<1>; - using blockchain_estimatefee = at<2>; - using blockchain_headers_subscribe = at<3>; - using blockchain_relayfee = at<4>; - using blockchain_scripthash_get_balance = at<5>; - using blockchain_scripthash_get_history = at<6>; - using blockchain_scripthash_get_mempool = at<7>; - using blockchain_scripthash_listunspent = at<8>; - using blockchain_scripthash_subscribe = at<9>; - using blockchain_scripthash_unsubscribe = at<10>; - using blockchain_transaction_broadcast = at<11>; - using blockchain_transaction_get = at<12>; - using blockchain_transaction_get_merkle = at<13>; - using blockchain_transaction_id_from_pos = at<14>; - using server_add_peer = at<15>; - using server_banner = at<16>; - using server_donation_address = at<17>; - using server_features = at<18>; - using server_peers_subscribe = at<19>; - using server_ping = at<20>; - using server_version = at<21>; - - ////using subscribers = unsubscriber>; -}; - -} // namespace rpc -} // namespace network -} // namespace libbitcoin - -#endif diff --git a/include/bitcoin/network/rpc/interfaces/explore.hpp b/include/bitcoin/network/rpc/interfaces/explore.hpp deleted file mode 100644 index 62b32adba..000000000 --- a/include/bitcoin/network/rpc/interfaces/explore.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS) - * - * This file is part of libbitcoin. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -#ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_EXPLORE_HPP -#define LIBBITCOIN_NETWORK_RPC_INTERFACES_EXPLORE_HPP - -#include -#include -#include - -namespace libbitcoin { -namespace network { -namespace rpc { - -struct explore_methods -{ - static constexpr std::tuple methods - { - method<"top", uint8_t, uint8_t>{ "version", "media" }, - method<"block", uint8_t, uint8_t, nullable, nullable, optional>{ "version", "media", "hash", "height", "witness" }, - method<"block_header", uint8_t, uint8_t, nullable, nullable>{ "version", "media", "hash", "height" }, - method<"block_txs", uint8_t, uint8_t, nullable, nullable>{ "version", "media", "hash", "height" }, - method<"block_fees", uint8_t, uint8_t, nullable, nullable>{ "version", "media", "hash", "height" }, - method<"block_filter", uint8_t, uint8_t, uint8_t, nullable, nullable>{ "version", "media", "type", "hash", "height" }, - method<"block_filter_hash", uint8_t, uint8_t, uint8_t, nullable, nullable>{ "version", "media", "type", "hash", "height" }, - method<"block_filter_header", uint8_t, uint8_t, uint8_t, nullable, nullable>{ "version", "media", "type", "hash", "height" }, - method<"block_tx", uint8_t, uint8_t, uint32_t, nullable, nullable, optional>{ "version", "media", "position", "hash", "height", "witness" }, - - method<"tx", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "witness" }, - method<"tx_header", uint8_t, uint8_t, system::hash_cptr>{ "version", "media", "hash" }, - method<"tx_fee", uint8_t, uint8_t, system::hash_cptr>{ "version", "media", "hash" }, - - method<"inputs", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "witness" }, - method<"input", uint8_t, uint8_t, system::hash_cptr, uint32_t, optional>{ "version", "media", "hash", "index", "witness" }, - method<"input_script", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - method<"input_witness", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - - method<"outputs", uint8_t, uint8_t, system::hash_cptr>{ "version", "media", "hash" }, - method<"output", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - method<"output_script", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - method<"output_spender", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - method<"output_spenders", uint8_t, uint8_t, system::hash_cptr, uint32_t>{ "version", "media", "hash", "index" }, - - method<"address", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "turbo" }, - method<"address_confirmed", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "turbo" }, - method<"address_unconfirmed", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "turbo" }, - method<"address_balance", uint8_t, uint8_t, system::hash_cptr, optional>{ "version", "media", "hash", "turbo" } - }; - - template - using subscriber = network::unsubscriber; - - template - using at = method_at; - - // Derive this from above in c++26 using reflection. - - using top = at<0>; - - using block = at<1>; - using block_header = at<2>; - using block_txs = at<3>; - using block_fees = at<4>; - using block_filter = at<5>; - using block_filter_hash = at<6>; - using block_filter_header = at<7>; - using block_tx = at<8>; - - using tx = at<9>; - using tx_header = at<10>; - using tx_fee = at<11>; - - using inputs = at<12>; - using input = at<13>; - using input_script = at<14>; - using input_witness = at<15>; - - using outputs = at<16>; - using output = at<17>; - using output_script = at<18>; - using output_spender = at<19>; - using output_spenders = at<20>; - - using address = at<21>; - using address_confirmed = at<22>; - using address_unconfirmed = at<23>; - using address_balance = at<24>; -}; - -/// ?format=data|text|json (via query string). -/// ----------------------------------------------------------------------- - -/// /v1/block/top {1} - -/// /v1/block/hash/[bkhash] {1} -/// /v1/block/height/[height] {1} - -/// /v1/block/hash/[bkhash]/header {1} -/// /v1/block/height/[height]/header {1} - -/// /v1/block/hash/[bkhash]/fees {1} -/// /v1/block/height/[height]/fees {1} - -/// /v1/block/hash/[bkhash]/filter/[type] {1} -/// /v1/block/height/[height]/filter/[type] {1} - -/// /v1/block/hash/[bkhash]/filter/[type]/hash {1} -/// /v1/block/height/[height]/filter/[type]/hash {1} - -/// /v1/block/hash/[bkhash]/filter/[type]/header {1} -/// /v1/block/height/[height]/filter/[type]/header {1} - -/// /v1/block/hash/[bkhash]/txs {all txs in the block} -/// /v1/block/height/[height]/txs {all txs in the block} - -/// /v1/block/hash/[bkhash]/tx/[position] {1} -/// /v1/block/height/[height]/tx/[position] {1} - -/// ----------------------------------------------------------------------- - -/// /v1/tx/[txhash] {1} -/// /v1/tx/[txhash]/header {1 - if confirmed} -/// /v1/tx/[txhash]/fee {1} - -/// ----------------------------------------------------------------------- - -/// /v1/input/[txhash] {all inputs in the tx} -/// /v1/input/[txhash]/[index] {1} -/// /v1/input/[txhash]/[index]/script {1} -/// /v1/input/[txhash]/[index]/witness {1} - -/// ----------------------------------------------------------------------- - -/// /v1/output/[txhash] {all outputs in the tx} -/// /v1/output/[txhash]/[index] {1} -/// /v1/output/[txhash]/[index]/script {1} -/// /v1/output/[txhash]/[index]/spender {1 - if confirmed} -/// /v1/output/[txhash]/[index]/spenders {all} - -/// ----------------------------------------------------------------------- - -/// /v1/address/[output-script-hash] {all} -/// /v1/address/[output-script-hash]/unconfirmed {all unconfirmed} -/// /v1/address/[output-script-hash]/confirmed {all unconfirmed} -/// /v1/address/[output-script-hash]/balance {all confirmed} - -} // namespace rpc -} // namespace network -} // namespace libbitcoin - -#endif diff --git a/include/bitcoin/network/rpc/interfaces/interfaces.hpp b/include/bitcoin/network/rpc/interfaces/interfaces.hpp index f11725d92..051160a4e 100644 --- a/include/bitcoin/network/rpc/interfaces/interfaces.hpp +++ b/include/bitcoin/network/rpc/interfaces/interfaces.hpp @@ -19,33 +19,22 @@ #ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_HPP #define LIBBITCOIN_NETWORK_RPC_INTERFACES_HPP -#include -#include -#include #include #include #include -#include -#include namespace libbitcoin { namespace network { namespace rpc { namespace interface { -using bitcoind = publish; -using electrum = publish; -using explore = publish; -using http = publish; -using stratum_v1 = publish; -using stratum_v2 = publish; +using http = publish; namespace peer { - using dispatch = publish; using broadcast = publish; - } // namespace peer + } // namespace interface } // namespace rpc } // namespace network diff --git a/include/bitcoin/network/rpc/interfaces/stratum_v1.hpp b/include/bitcoin/network/rpc/interfaces/stratum_v1.hpp deleted file mode 100644 index 2718b75c5..000000000 --- a/include/bitcoin/network/rpc/interfaces/stratum_v1.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS) - * - * This file is part of libbitcoin. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -#ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_STRATUM_V1_HPP -#define LIBBITCOIN_NETWORK_RPC_INTERFACES_STRATUM_V1_HPP - -#include -#include -#include - -namespace libbitcoin { -namespace network { -namespace rpc { - -struct stratum_v1_methods -{ - static constexpr std::tuple methods - { - /// Client requests. - method<"mining.subscribe", optional<""_t>, optional<0>>{ "user_agent", "extranonce1_size" }, - method<"mining.authorize", string_t, string_t>{ "username", "password" }, - method<"mining.submit", string_t, string_t, string_t, number_t, string_t>{ "worker_name", "job_id", "extranonce2", "ntime", "nonce" }, - method<"mining.extranonce.subscribe">{}, - method<"mining.extranonce.unsubscribe", number_t>{ "id" }, - - /// Server notifications. - method<"mining.configure", object_t>{ "extensions" }, - method<"mining.set_difficulty", optional<1.0>>{ "difficulty" }, - method<"mining.notify", string_t, string_t, string_t, string_t, array_t, number_t, number_t, number_t, boolean_t, boolean_t, boolean_t>{ "job_id", "prevhash", "coinb1", "coinb2", "merkle_branch", "version", "nbits", "ntime", "clean_jobs", "hash1", "hash2" }, - method<"client.reconnect", string_t, number_t, number_t>{ "url", "port", "id" }, - method<"client.hello", object_t>{ "protocol" }, - method<"client.rejected", string_t, string_t>{ "job_id", "reject_reason" } - }; - - template - using subscriber = network::unsubscriber; - - template - using at = method_at; - - // Derive this from above in c++26 using reflection. - using mining_subscribe = at<0>; - using mining_authorize = at<1>; - using mining_submit = at<2>; - using mining_extranonce_subscribe = at<3>; - using mining_extranonce_unsubscribe = at<4>; - using mining_configure = at<5>; - using mining_set_difficulty = at<6>; - using mining_notify = at<7>; - using client_reconnect = at<8>; - using client_hello = at<9>; - using client_rejected = at<10>; -}; - -} // namespace rpc -} // namespace network -} // namespace libbitcoin - -#endif diff --git a/include/bitcoin/network/rpc/interfaces/stratum_v2.hpp b/include/bitcoin/network/rpc/interfaces/stratum_v2.hpp deleted file mode 100644 index 1b5fec468..000000000 --- a/include/bitcoin/network/rpc/interfaces/stratum_v2.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Copyright (c) 2011-2025 libbitcoin developers (see AUTHORS) - * - * This file is part of libbitcoin. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -#ifndef LIBBITCOIN_NETWORK_RPC_INTERFACES_STRATUM_V2_HPP -#define LIBBITCOIN_NETWORK_RPC_INTERFACES_STRATUM_V2_HPP - -#include -#include -#include - -namespace libbitcoin { -namespace network { -namespace rpc { - -struct stratum_v2_methods -{ - static constexpr std::tuple methods - { - /// Common setup messages. - method<"setup_connection", number_t, number_t, number_t, number_t, string_t, string_t, string_t>{ "min_version", "max_version", "flags", "endpoint_port", "endpoint_host", "vendor", "user_agent" }, - method<"setup_connection_success", number_t, number_t>{ "used_version", "flags" }, - method<"setup_connection_error", string_t>{ "code" }, - - /// Standard mining channel (header-only, primary for devices/firmware). - method<"open_standard_mining_channel", string_t, number_t, string_t, number_t>{ "user_identity", "nominal_hash_rate", "max_target", "min_extranonce_size" }, - method<"open_standard_mining_channel_success", number_t, string_t, string_t, number_t>{ "channel_id", "target", "extranonce_prefix", "extranonce_size" }, - method<"open_standard_mining_channel_error", string_t>{ "code" }, - - /// Extended mining channel. - method<"open_extended_mining_channel", string_t, number_t, string_t, number_t>{ "user_identity", "nominal_hash_rate", "max_target", "min_extranonce_size" }, - method<"open_extended_mining_channel_success", number_t, string_t, string_t, number_t, number_t, number_t>{ "channel_id", "target", "extranonce_prefix", "extranonce_size", "max_coinbase_size", "coinbase_output_max_additional_size" }, - method<"open_extended_mining_channel_error", string_t>{ "code" }, - - /// Channel management. - method<"update_channel", number_t, number_t, optional<""_t>>{ "channel_id", "nominal_hash_rate", "max_target" }, - method<"update_channel_error", number_t, string_t>{ "channel_id", "code" }, - method<"close_channel", number_t, optional<""_t>>{ "channel_id", "reason" }, - method<"set_target", number_t, string_t>{ "channel_id", "maximum_target" }, - - /// Header-only job declaration. - method<"new_mining_job", number_t, boolean_t, number_t, string_t, string_t, number_t>{ "job_id", "future_job", "version", "prev_hash", "merkle_root", "ntime_offset" }, - method<"set_new_prev_hash", number_t, number_t, string_t, number_t, number_t>{ "channel_id", "job_id", "prev_hash", "min_ntime", "nbits" }, - - /// Extended / custom jobs. - method<"new_extended_mining_job", number_t, boolean_t, number_t, string_t, string_t, array_t>{ "job_id", "future_job", "version", "coinbase_prefix", "coinbase_suffix", "merkle_path" }, - method<"set_custom_mining_job", number_t, boolean_t, number_t, string_t, number_t, number_t, array_t, array_t>{ "channel_id", "future_job", "job_id", "prev_hash", "version", "ntime", "merkle_branch", "transactions" }, - method<"set_custom_mining_job_success", number_t>{ "job_id" }, - method<"set_custom_mining_job_error", number_t, string_t>{ "job_id", "code" }, - - /// Share submission. - method<"submit_shares", number_t, number_t, number_t, number_t, number_t, number_t>{ "channel_id", "sequence_number", "job_id", "nonce", "ntime", "version" }, - method<"submit_shares_success", number_t, optional<""_t>>{ "sequence_number", "new_target" }, - method<"submit_shares_error", number_t, string_t>{ "sequence_number", "code" }, - - /// Miscellaneous. - method<"reconnect", string_t, number_t>{ "new_host", "new_port" } - }; - - template - using subscriber = network::unsubscriber; - - template - using at = method_at; - - // Derive this from above in c++26 using reflection. - using setup_connection = at<0>; - using setup_connection_success = at<1>; - using setup_connection_error = at<2>; - using open_standard_mining_channel = at<3>; - using open_standard_mining_channel_success = at<4>; - using open_standard_mining_channel_error = at<5>; - using open_extended_mining_channel = at<6>; - using open_extended_mining_channel_success = at<7>; - using open_extended_mining_channel_error = at<8>; - using update_channel = at<9>; - using update_channel_error = at<10>; - using close_channel = at<11>; - using set_target = at<12>; - using new_mining_job = at<13>; - using set_new_prev_hash = at<14>; - using new_extended_mining_job = at<15>; - using set_custom_mining_job = at<16>; - using set_custom_mining_job_success = at<17>; - using set_custom_mining_job_error = at<18>; - using submit_shares = at<19>; - using submit_shares_success = at<20>; - using submit_shares_error = at<21>; - using reconnect = at<22>; -}; - -} // namespace rpc -} // namespace network -} // namespace libbitcoin - -#endif