Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions binaries/cuprated/src/rpc/handlers/bin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,12 @@ async fn get_hashes(

let hashes: Vec<[u8; 32]> = (&block_ids).into();

let (m_blocks_ids, _, current_height) =
let (m_block_ids, _, current_height) =
blockchain::next_chain_entry(&mut state.blockchain_read, hashes, start_height).await?;

Ok(GetHashesResponse {
base: helper::access_response_base(false),
m_blocks_ids: m_blocks_ids.into(),
m_block_ids: m_block_ids.into(),
current_height: usize_to_u64(current_height),
start_height,
})
Expand Down
36 changes: 23 additions & 13 deletions binaries/cuprated/src/rpc/handlers/json_rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,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,8 +44,8 @@ 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,
Expand Down Expand Up @@ -104,22 +104,32 @@ 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(r) => {
Resp::GetOutputDistribution(get_output_distribution(state, r).await?)
}

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

Expand Down Expand Up @@ -729,8 +739,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 +749,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 +932,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 +946,7 @@ async fn get_transaction_pool_backlog(
})
.collect();

Ok(GetTransactionPoolBacklogResponse {
Ok(GetTxpoolBacklogResponse {
base: helper::response_base(false),
backlog,
})
Expand Down
1 change: 1 addition & 0 deletions binaries/cuprated/src/rpc/handlers/other_json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ pub async fn map_request(
Req::PopBlocks(r) => Resp::PopBlocks(not_available()?),
Req::GetTransactionPoolHashes(r) => Resp::GetTransactionPoolHashes(not_available()?),
Req::GetPublicNodes(r) => Resp::GetPublicNodes(not_available()?),
Req::GetInfo(r) => Resp::GetInfo(not_available()?),

// Unsupported requests.
Req::SetBootstrapDaemon(_)
Expand Down
14 changes: 10 additions & 4 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 @@ -172,6 +177,7 @@ impl Service<OtherRequest> for RpcHandlerDummy {
Req::PopBlocks(_) => Resp::PopBlocks(Default::default()),
Req::GetTransactionPoolHashes(_) => Resp::GetTransactionPoolHashes(Default::default()),
Req::GetPublicNodes(_) => Resp::GetPublicNodes(Default::default()),
Req::GetInfo(_) => Resp::GetInfo(Default::default()),
};

let (tx, rx) = channel();
Expand Down
10 changes: 6 additions & 4 deletions rpc/types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ keywords = ["cuprate", "rpc", "types", "monero"]

[features]
default = ["serde", "epee"]
serde = ["dep:serde", "cuprate-fixed-bytes/serde", "cuprate-types/serde"]
serde = ["dep:serde", "dep:serde_json", "cuprate-fixed-bytes/serde", "cuprate-types/serde"]
epee = ["dep:cuprate-epee-encoding", "cuprate-types/epee"]
from = [
"dep:cuprate-helper",
Expand All @@ -29,9 +29,11 @@ cuprate-types = { workspace = true, default-features = false, features =
cuprate-helper = { workspace = true, optional = true, default-features = false }
cuprate-p2p-core = { workspace = true, optional = true, default-features = false }

paste = { workspace = true }
serde = { workspace = true, optional = true }
hex = { workspace = true, optional = true }
monero-oxide = { workspace = true, features = ["std"] }
paste = { workspace = true }
serde = { workspace = true, optional = true }
serde_json = { workspace = true, optional = true, features = ["std"] }
hex = { workspace = true, optional = true }

getrandom = { version = "0.2", optional = true, features = ["js"] }

Expand Down
25 changes: 3 additions & 22 deletions rpc/types/src/bin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ use cuprate_fixed_bytes::ByteArrayVec;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

#[cfg(feature = "epee")]
use cuprate_epee_encoding::container_as_blob::ContainerAsBlob;

use cuprate_types::{
rpc::{BlockOutputIndices, PoolInfo},
BlockCompleteEntry,
Expand All @@ -24,7 +21,7 @@ use crate::{
};

#[cfg(any(feature = "epee", feature = "serde"))]
use crate::defaults::default;
use crate::defaults::{default, default_true};

//---------------------------------------------------------------------------------------------------- Definitions
define_request_and_response! {
Expand All @@ -50,13 +47,12 @@ define_request_and_response! {
start_height: u64,
},
AccessResponseBase {
m_blocks_ids: ByteArrayVec<32> = default::<ByteArrayVec<32>>(), "default",
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo fix The field name in monerod is m_block_ids.

m_block_ids: ByteArrayVec<32> = default::<ByteArrayVec<32>>(), "default",
start_height: u64,
current_height: u64,
}
}

#[cfg(not(feature = "epee"))]
define_request_and_response! {
get_o_indexesbin,
"cc73fe71162d564ffda8e549b79a350bca53c454" =>
Expand All @@ -71,29 +67,14 @@ define_request_and_response! {
}
}

#[cfg(feature = "epee")]
define_request_and_response! {
get_o_indexesbin,
"cc73fe71162d564ffda8e549b79a350bca53c454" =>
core_rpc_server_commands_defs.h => 487..=510,
GetOutputIndexes,
#[derive(Copy)]
Request {
txid: [u8; 32],
},
AccessResponseBase {
o_indexes: Vec<u64> as ContainerAsBlob<u64>,
}
}

Comment on lines -74 to -88
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the duplicate of GetOutputIndexes that wrapped o_indexes in ContainerAsBlob<u64>. monerod uses plain KV_SERIALIZE(o_indexes) for both, not KV_SERIALIZE_CONTAINER_POD_AS_BLOB.

define_request_and_response! {
get_outsbin,
"cc73fe71162d564ffda8e549b79a350bca53c454" =>
core_rpc_server_commands_defs.h => 512..=565,
GetOuts,
Request {
outputs: Vec<GetOutputsOut> = default::<Vec<GetOutputsOut>>(), "default",
get_txid: bool,
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

get_txid: bool = default_true(), "default_true",
},
AccessResponseBase {
outs: Vec<OutKeyBin> = default::<Vec<OutKeyBin>>(), "default",
Expand Down
2 changes: 1 addition & 1 deletion rpc/types/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ pub const CORE_RPC_VERSION_MAJOR: u32 = 3;

#[doc = monero_definition_link!("cc73fe71162d564ffda8e549b79a350bca53c454", "/rpc/core_rpc_server_commands_defs.h", 91)]
/// RPC miror version.
pub const CORE_RPC_VERSION_MINOR: u32 = 14;
pub const CORE_RPC_VERSION_MINOR: u32 = 15;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MINOR bump to 15: the still relevant addition in monerod is monero-project/monero#9383, which adds top_block_hash to /getblocks.bin's response

Should be added with the bump or new issue? theres already a TODO for it fwiw

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah yeah, this PR is split from my wider RPC changes, where this is already done. I'll leave this for now as it'll be ok once the rest is merged.


#[doc = monero_definition_link!("cc73fe71162d564ffda8e549b79a350bca53c454", "/rpc/core_rpc_server_commands_defs.h", 92..=93)]
/// RPC version.
Expand Down
1 change: 0 additions & 1 deletion rpc/types/src/free.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
/// Returns `true` if the input `u` is equal to `0`.
#[inline]
#[expect(clippy::trivially_copy_pass_by_ref, reason = "serde signature")]
#[expect(dead_code, reason = "TODO: see if needed after handlers.")]
pub(crate) const fn is_zero(u: &u64) -> bool {
*u == 0
}
Expand Down
Loading
Loading