Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions binaries/cuprated/src/rpc/handlers/bin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ use cuprate_rpc_types::{
BinRequest, BinResponse, GetBlocksByHeightRequest, GetBlocksByHeightResponse,
GetBlocksRequest, GetBlocksResponse, GetHashesRequest, GetHashesResponse,
GetOutputIndexesRequest, GetOutputIndexesResponse, GetOutsRequest, GetOutsResponse,
GetTransactionPoolHashesRequest, GetTransactionPoolHashesResponse,
},
json::{GetOutputDistributionRequest, GetOutputDistributionResponse},
misc::RequestedInfo,
Expand Down Expand Up @@ -49,7 +48,6 @@ pub async fn map_request(
Req::GetHashes(r) => Resp::GetHashes(not_available()?),
Req::GetOutputIndexes(r) => Resp::GetOutputIndexes(not_available()?),
Req::GetOuts(r) => Resp::GetOuts(not_available()?),
Req::GetTransactionPoolHashes(r) => Resp::GetTransactionPoolHashes(not_available()?),
Req::GetOutputDistribution(r) => Resp::GetOutputDistribution(not_available()?),
})
}
Expand Down Expand Up @@ -227,19 +225,6 @@ async fn get_outs(
shared::get_outs(state, request).await
}

/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1689-L1711>
async fn get_transaction_pool_hashes(
mut state: CupratedRpcHandler,
_: GetTransactionPoolHashesRequest,
) -> Result<GetTransactionPoolHashesResponse, Error> {
Ok(GetTransactionPoolHashesResponse {
base: helper::access_response_base(false),
tx_hashes: shared::get_transaction_pool_hashes(state)
.await
.map(ByteArrayVec::from)?,
})
}

/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3352-L3398>
async fn get_output_distribution(
state: CupratedRpcHandler,
Expand Down
69 changes: 54 additions & 15 deletions binaries/cuprated/src/rpc/handlers/json_rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//! <https://github.com/Cuprate/cuprate/pull/355>

use std::{
borrow::Cow,
collections::HashMap,
net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4},
num::NonZero,
Expand Down Expand Up @@ -32,8 +33,8 @@ use cuprate_rpc_types::{
base::{AccessResponseBase, ResponseBase},
json::{
AddAuxPowRequest, AddAuxPowResponse, BannedRequest, BannedResponse, CalcPowRequest,
CalcPowResponse, FlushCacheRequest, FlushCacheResponse, FlushTransactionPoolRequest,
FlushTransactionPoolResponse, GenerateBlocksRequest, GenerateBlocksResponse,
CalcPowResponse, FlushCacheRequest, FlushCacheResponse, FlushTxpoolRequest,
FlushTxpoolResponse, GenerateBlocksRequest, GenerateBlocksResponse,
GetAlternateChainsRequest, GetAlternateChainsResponse, GetBansRequest, GetBansResponse,
GetBlockCountRequest, GetBlockCountResponse, GetBlockHeaderByHashRequest,
GetBlockHeaderByHashResponse, GetBlockHeaderByHeightRequest,
Expand All @@ -44,12 +45,13 @@ use cuprate_rpc_types::{
GetInfoResponse, GetLastBlockHeaderRequest, GetLastBlockHeaderResponse,
GetMinerDataRequest, GetMinerDataResponse, GetOutputDistributionRequest,
GetOutputDistributionResponse, GetOutputHistogramRequest, GetOutputHistogramResponse,
GetTransactionPoolBacklogRequest, GetTransactionPoolBacklogResponse, GetTxIdsLooseRequest,
GetTxIdsLooseResponse, GetVersionRequest, GetVersionResponse, HardForkInfoRequest,
GetTxIdsLooseRequest, GetTxIdsLooseResponse, GetTxpoolBacklogRequest,
GetTxpoolBacklogResponse, GetVersionRequest, GetVersionResponse, HardForkInfoRequest,
HardForkInfoResponse, JsonRpcRequest, JsonRpcResponse, OnGetBlockHashRequest,
OnGetBlockHashResponse, PruneBlockchainRequest, PruneBlockchainResponse, RelayTxRequest,
RelayTxResponse, SetBansRequest, SetBansResponse, SubmitBlockRequest, SubmitBlockResponse,
SyncInfoRequest, SyncInfoResponse,
RelayTxResponse, RpcAccessInfoResponse, RpcAccessPayResponse, RpcAccessSubmitNonceResponse,
SetBansRequest, SetBansResponse, SubmitBlockRequest, SubmitBlockResponse, SyncInfoRequest,
SyncInfoResponse,
},
misc::{BlockHeader, ChainInfo, Distribution, GetBan, HistogramEntry, Status, SyncInfoPeer},
CORE_RPC_VERSION,
Expand Down Expand Up @@ -104,25 +106,62 @@ pub async fn map_request(
Req::SetBans(r) => Resp::SetBans(not_available()?),
Req::GetBans(r) => Resp::GetBans(not_available()?),
Req::Banned(r) => Resp::Banned(not_available()?),
Req::FlushTransactionPool(r) => Resp::FlushTransactionPool(not_available()?),
Req::FlushTxpool(r) => Resp::FlushTxpool(not_available()?),
Req::GetOutputHistogram(r) => Resp::GetOutputHistogram(not_available()?),
Req::GetCoinbaseTxSum(r) => Resp::GetCoinbaseTxSum(not_available()?),
Req::GetVersion(r) => Resp::GetVersion(not_available()?),
Req::GetFeeEstimate(r) => Resp::GetFeeEstimate(not_available()?),
Req::GetAlternateChains(r) => Resp::GetAlternateChains(not_available()?),
Req::RelayTx(r) => Resp::RelayTx(not_available()?),
Req::SyncInfo(r) => Resp::SyncInfo(not_available()?),
Req::GetTransactionPoolBacklog(r) => Resp::GetTransactionPoolBacklog(not_available()?),
Req::GetTxpoolBacklog(r) => Resp::GetTxpoolBacklog(not_available()?),
Req::GetMinerData(r) => Resp::GetMinerData(not_available()?),
Req::PruneBlockchain(r) => Resp::PruneBlockchain(not_available()?),
Req::CalcPow(r) => Resp::CalcPow(not_available()?),
Req::AddAuxPow(r) => Resp::AddAuxPow(not_available()?),
Req::GetOutputDistribution(_) => Resp::GetOutputDistribution(not_available()?),
Req::RpcAccessInfo(_) => Resp::RpcAccessInfo(RPC_ACCESS_INFO_RESPONSE),
Req::RpcAccessSubmitNonce(_) => Resp::RpcAccessSubmitNonce(RPC_ACCESS_SUBMIT_NONCE),
Req::RpcAccessPay(_) => Resp::RpcAccessPay(RPC_ACCESS_PAY),

// Unsupported RPC calls.
Req::GetTxIdsLoose(_) | Req::FlushCache(_) => return Err(anyhow!(UNSUPPORTED_RPC_CALL)),
Req::GetTxIdsLoose(_)
| Req::FlushCache(_)
| Req::RpcAccessTracking(_)
| Req::RpcAccessData(_)
| Req::RpcAccessAccount(_) => return Err(anyhow!(UNSUPPORTED_RPC_CALL)),
})
}

const RPC_ACCESS_INFO_RESPONSE: RpcAccessInfoResponse = RpcAccessInfoResponse {
base: helper::access_response_base(false),
hashing_blob: String::new(),
seed_height: 0,
seed_hash: String::new(),
next_seed_hash: String::new(),
cookie: 0,
diff: 0,
credits_per_hash_found: 0,
height: 0,
};

const RPC_ACCESS_PAYMENT_NOT_NEEDED_BASE: AccessResponseBase = AccessResponseBase {
response_base: ResponseBase {
status: Status::Other(Cow::Borrowed("Payment not necessary")),
untrusted: false,
},
credits: 0,
top_hash: String::new(),
};

const RPC_ACCESS_SUBMIT_NONCE: RpcAccessSubmitNonceResponse = RpcAccessSubmitNonceResponse {
base: RPC_ACCESS_PAYMENT_NOT_NEEDED_BASE,
};

const RPC_ACCESS_PAY: RpcAccessPayResponse = RpcAccessPayResponse {
base: RPC_ACCESS_PAYMENT_NOT_NEEDED_BASE,
};

/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1911-L2005>
async fn get_block_template(
mut state: CupratedRpcHandler,
Expand Down Expand Up @@ -729,8 +768,8 @@ async fn banned(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2880-L2932>
async fn flush_transaction_pool(
mut state: CupratedRpcHandler,
request: FlushTransactionPoolRequest,
) -> Result<FlushTransactionPoolResponse, Error> {
request: FlushTxpoolRequest,
) -> Result<FlushTxpoolResponse, Error> {
let tx_hashes = request
.txids
.into_iter()
Expand All @@ -739,7 +778,7 @@ async fn flush_transaction_pool(

txpool::flush(todo!(), tx_hashes).await?;

Ok(FlushTransactionPoolResponse { status: Status::Ok })
Ok(FlushTxpoolResponse { status: Status::Ok })
}

/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2934-L2979>
Expand Down Expand Up @@ -922,8 +961,8 @@ async fn sync_info(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3332-L3350>
async fn get_transaction_pool_backlog(
mut state: CupratedRpcHandler,
_: GetTransactionPoolBacklogRequest,
) -> Result<GetTransactionPoolBacklogResponse, Error> {
_: GetTxpoolBacklogRequest,
) -> Result<GetTxpoolBacklogResponse, Error> {
let now = current_unix_timestamp();

let backlog = txpool::backlog(&mut state.txpool_read)
Expand All @@ -936,7 +975,7 @@ async fn get_transaction_pool_backlog(
})
.collect();

Ok(GetTransactionPoolBacklogResponse {
Ok(GetTxpoolBacklogResponse {
base: helper::response_base(false),
backlog,
})
Expand Down
5 changes: 1 addition & 4 deletions binaries/cuprated/src/rpc/handlers/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ use cuprate_helper::cast::usize_to_u64;
use cuprate_hex::Hex;
use cuprate_rpc_interface::RpcHandler;
use cuprate_rpc_types::{
bin::{
GetOutsRequest, GetOutsResponse, GetTransactionPoolHashesRequest,
GetTransactionPoolHashesResponse,
},
bin::{GetOutsRequest, GetOutsResponse},
json::{GetOutputDistributionRequest, GetOutputDistributionResponse},
misc::{Distribution, OutKeyBin},
};
Expand Down
27 changes: 1 addition & 26 deletions rpc/interface/src/route/bin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use cuprate_epee_encoding::from_bytes;
use cuprate_rpc_types::{
bin::{
BinRequest, BinResponse, GetBlocksByHeightRequest, GetBlocksRequest, GetHashesRequest,
GetOutputIndexesRequest, GetOutsRequest, GetTransactionPoolHashesRequest,
GetOutputIndexesRequest, GetOutsRequest,
},
json::GetOutputDistributionRequest,
RpcCall,
Expand Down Expand Up @@ -43,27 +43,6 @@ macro_rules! generate_endpoints_with_input {
}};
}

/// This macro generates route functions that expect _no_ input.
///
/// See below for usage.
macro_rules! generate_endpoints_with_no_input {
($(
// Syntax:
// Function name => Expected input type (that is empty)
$endpoint:ident => $variant:ident
),*) => { paste::paste! {
$(
/// TODO
pub(crate) async fn $endpoint<H: RpcHandler>(
State(handler): State<H>,
) -> Result<Bytes, StatusCode> {
const REQUEST: BinRequest = BinRequest::$variant([<$variant Request>] {});
generate_endpoints_inner!($variant, handler, REQUEST)
}
)*
}};
}

/// De-duplicated inner function body for:
/// - [`generate_endpoints_with_input`]
/// - [`generate_endpoints_with_no_input`]
Expand Down Expand Up @@ -111,10 +90,6 @@ generate_endpoints_with_input! {
get_output_distribution => GetOutputDistribution
}

generate_endpoints_with_no_input! {
get_transaction_pool_hashes => GetTransactionPoolHashes
}

//---------------------------------------------------------------------------------------------------- Tests
#[cfg(test)]
mod test {
Expand Down
2 changes: 1 addition & 1 deletion rpc/interface/src/router_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ generate_router_builder! {
bin_gethashes => "/gethashes.bin" => bin::get_hashes => (get, post),
bin_get_o_indexes => "/get_o_indexes.bin" => bin::get_o_indexes => (get, post),
bin_get_outs => "/get_outs.bin" => bin::get_outs => (get, post),
bin_get_transaction_pool_hashes => "/get_transaction_pool_hashes.bin" => bin::get_transaction_pool_hashes => (get, post),
bin_get_transaction_pool_hashes => "/get_transaction_pool_hashes.bin" => other_json::get_transaction_pool_hashes => (get, post),
bin_get_output_distribution => "/get_output_distribution.bin" => bin::get_output_distribution => (get, post),
}

Expand Down
14 changes: 9 additions & 5 deletions rpc/interface/src/rpc_handler_dummy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,23 +75,28 @@ impl Service<JsonRpcRequest> for RpcHandlerDummy {
Req::SetBans(_) => Resp::SetBans(Default::default()),
Req::GetBans(_) => Resp::GetBans(Default::default()),
Req::Banned(_) => Resp::Banned(Default::default()),
Req::FlushTransactionPool(_) => Resp::FlushTransactionPool(Default::default()),
Req::FlushTxpool(_) => Resp::FlushTxpool(Default::default()),
Req::GetOutputHistogram(_) => Resp::GetOutputHistogram(Default::default()),
Req::GetCoinbaseTxSum(_) => Resp::GetCoinbaseTxSum(Default::default()),
Req::GetVersion(_) => Resp::GetVersion(Default::default()),
Req::GetFeeEstimate(_) => Resp::GetFeeEstimate(Default::default()),
Req::GetAlternateChains(_) => Resp::GetAlternateChains(Default::default()),
Req::RelayTx(_) => Resp::RelayTx(Default::default()),
Req::SyncInfo(_) => Resp::SyncInfo(Default::default()),
Req::GetTransactionPoolBacklog(_) => {
Resp::GetTransactionPoolBacklog(Default::default())
}
Req::GetTxpoolBacklog(_) => Resp::GetTxpoolBacklog(Default::default()),
Req::GetMinerData(_) => Resp::GetMinerData(Default::default()),
Req::PruneBlockchain(_) => Resp::PruneBlockchain(Default::default()),
Req::CalcPow(_) => Resp::CalcPow(Default::default()),
Req::FlushCache(_) => Resp::FlushCache(Default::default()),
Req::AddAuxPow(_) => Resp::AddAuxPow(Default::default()),
Req::GetTxIdsLoose(_) => Resp::GetTxIdsLoose(Default::default()),
Req::GetOutputDistribution(_) => Resp::GetOutputDistribution(Default::default()),
Req::RpcAccessInfo(_) => Resp::RpcAccessInfo(Default::default()),
Req::RpcAccessSubmitNonce(_) => Resp::RpcAccessSubmitNonce(Default::default()),
Req::RpcAccessPay(_) => Resp::RpcAccessPay(Default::default()),
Req::RpcAccessTracking(_) => Resp::RpcAccessTracking(Default::default()),
Req::RpcAccessData(_) => Resp::RpcAccessData(Default::default()),
Req::RpcAccessAccount(_) => Resp::RpcAccessAccount(Default::default()),
};

let (tx, rx) = channel();
Expand Down Expand Up @@ -120,7 +125,6 @@ impl Service<BinRequest> for RpcHandlerDummy {
Req::GetHashes(_) => Resp::GetHashes(Default::default()),
Req::GetOutputIndexes(_) => Resp::GetOutputIndexes(Default::default()),
Req::GetOuts(_) => Resp::GetOuts(Default::default()),
Req::GetTransactionPoolHashes(_) => Resp::GetTransactionPoolHashes(Default::default()),
Req::GetOutputDistribution(_) => Resp::GetOutputDistribution(Default::default()),
};

Expand Down
17 changes: 1 addition & 16 deletions rpc/types/src/bin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,6 @@ define_request_and_response! {
}
}

define_request_and_response! {
get_transaction_pool_hashesbin,
"cc73fe71162d564ffda8e549b79a350bca53c454" =>
core_rpc_server_commands_defs.h => 1593..=1613,
GetTransactionPoolHashes,
Request {},
AccessResponseBase {
tx_hashes: ByteArrayVec<32> = default::<ByteArrayVec<32>>(), "default",
}
}

define_request_and_response! {
get_blocksbin,
"cc73fe71162d564ffda8e549b79a350bca53c454" =>
Expand All @@ -123,7 +112,7 @@ define_request_and_response! {
block_ids: ByteArrayVec<32> = default::<ByteArrayVec<32>>(), "default",
start_height: u64,
prune: bool,
no_miner_tx: bool,
no_miner_tx: bool = default::<bool>(), "default",
pool_info_since: u64 = default::<u64>(), "default",
},

Expand Down Expand Up @@ -154,7 +143,6 @@ pub enum BinRequest {
GetHashes(GetHashesRequest),
GetOutputIndexes(GetOutputIndexesRequest),
GetOuts(GetOutsRequest),
GetTransactionPoolHashes(GetTransactionPoolHashesRequest),
GetOutputDistribution(crate::json::GetOutputDistributionRequest),
}

Expand All @@ -166,7 +154,6 @@ impl RpcCallValue for BinRequest {
Self::GetHashes(x) => x.is_restricted(),
Self::GetOutputIndexes(x) => x.is_restricted(),
Self::GetOuts(x) => x.is_restricted(),
Self::GetTransactionPoolHashes(x) => x.is_restricted(),
Self::GetOutputDistribution(x) => x.is_restricted(),
}
}
Expand All @@ -178,7 +165,6 @@ impl RpcCallValue for BinRequest {
Self::GetHashes(x) => x.is_empty(),
Self::GetOutputIndexes(x) => x.is_empty(),
Self::GetOuts(x) => x.is_empty(),
Self::GetTransactionPoolHashes(x) => x.is_empty(),
Self::GetOutputDistribution(x) => x.is_empty(),
}
}
Expand All @@ -199,7 +185,6 @@ pub enum BinResponse {
GetHashes(GetHashesResponse),
GetOutputIndexes(GetOutputIndexesResponse),
GetOuts(GetOutsResponse),
GetTransactionPoolHashes(GetTransactionPoolHashesResponse),
GetOutputDistribution(crate::json::GetOutputDistributionResponse),
}

Expand Down
Loading
Loading