lint/todo fixes

This commit is contained in:
hinto.janai 2024-11-26 20:48:53 -05:00
parent 8d5f779ec3
commit 1a079c856e
No known key found for this signature in database
GPG key ID: D47CE05FA175A499
3 changed files with 32 additions and 25 deletions

View file

@ -6,15 +6,13 @@
//! These build on-top of [`crate::rpc::request`] functions. //! These build on-top of [`crate::rpc::request`] functions.
use anyhow::{anyhow, Error}; use anyhow::{anyhow, Error};
use monero_serai::block::Block;
use cuprate_consensus::{BlockChainContext, BlockChainContextService};
use cuprate_helper::{ use cuprate_helper::{
cast::{u64_to_usize, usize_to_u64}, cast::{u64_to_usize, usize_to_u64},
map::split_u128_into_low_high_bits, map::split_u128_into_low_high_bits,
}; };
use cuprate_rpc_types::misc::{BlockHeader, KeyImageSpentStatus}; use cuprate_rpc_types::misc::{BlockHeader, KeyImageSpentStatus};
use cuprate_types::{ExtendedBlockHeader, HardFork}; use cuprate_types::HardFork;
use crate::{ use crate::{
rpc::request::{blockchain, blockchain_context}, rpc::request::{blockchain, blockchain_context},
@ -150,6 +148,7 @@ pub(super) async fn check_height(
} }
/// Parse a hexadecimal [`String`] as a 32-byte hash. /// Parse a hexadecimal [`String`] as a 32-byte hash.
#[expect(clippy::needless_pass_by_value)]
pub(super) fn hex_to_hash(hex: String) -> Result<[u8; 32], Error> { pub(super) fn hex_to_hash(hex: String) -> Result<[u8; 32], Error> {
let error = || anyhow!("Failed to parse hex representation of hash. Hex = {hex}."); let error = || anyhow!("Failed to parse hex representation of hash. Hex = {hex}.");

View file

@ -5,6 +5,7 @@
//! <https://github.com/Cuprate/cuprate/pull/308> //! <https://github.com/Cuprate/cuprate/pull/308>
use std::{ use std::{
net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4},
num::NonZero, num::NonZero,
time::{Duration, Instant}, time::{Duration, Instant},
}; };
@ -12,9 +13,7 @@ use std::{
use anyhow::{anyhow, Error}; use anyhow::{anyhow, Error};
use monero_serai::block::Block; use monero_serai::block::Block;
use strum::{EnumCount, VariantArray}; use strum::{EnumCount, VariantArray};
use tower::{Service, ServiceExt};
use cuprate_consensus::{BlockchainReadRequest, BlockchainResponse};
use cuprate_constants::{ use cuprate_constants::{
build::RELEASE, build::RELEASE,
rpc::{RESTRICTED_BLOCK_COUNT, RESTRICTED_BLOCK_HEADER_RANGE}, rpc::{RESTRICTED_BLOCK_COUNT, RESTRICTED_BLOCK_HEADER_RANGE},
@ -129,7 +128,7 @@ pub(super) async fn map_request(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1790-L1804> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1790-L1804>
async fn get_block_count( async fn get_block_count(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetBlockCountRequest, _: GetBlockCountRequest,
) -> Result<GetBlockCountResponse, Error> { ) -> Result<GetBlockCountResponse, Error> {
Ok(GetBlockCountResponse { Ok(GetBlockCountResponse {
base: ResponseBase::OK, base: ResponseBase::OK,
@ -367,7 +366,7 @@ async fn get_block(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2729-L2738> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2729-L2738>
async fn get_connections( async fn get_connections(
state: CupratedRpcHandler, state: CupratedRpcHandler,
request: GetConnectionsRequest, _: GetConnectionsRequest,
) -> Result<GetConnectionsResponse, Error> { ) -> Result<GetConnectionsResponse, Error> {
let connections = address_book::connection_info::<ClearNet>(&mut DummyAddressBook).await?; let connections = address_book::connection_info::<ClearNet>(&mut DummyAddressBook).await?;
@ -380,7 +379,7 @@ async fn get_connections(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L501-L582> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L501-L582>
async fn get_info( async fn get_info(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetInfoRequest, _: GetInfoRequest,
) -> Result<GetInfoResponse, Error> { ) -> Result<GetInfoResponse, Error> {
let restricted = state.is_restricted(); let restricted = state.is_restricted();
let context = blockchain_context::context(&mut state.blockchain_context).await?; let context = blockchain_context::context(&mut state.blockchain_context).await?;
@ -403,7 +402,7 @@ async fn get_info(
let (bootstrap_daemon_address, was_bootstrap_ever_used) = if restricted { let (bootstrap_daemon_address, was_bootstrap_ever_used) = if restricted {
(String::new(), false) (String::new(), false)
} else { } else {
todo!() todo!("support bootstrap daemon")
}; };
let busy_syncing = blockchain_manager::syncing(&mut state.blockchain_manager).await?; let busy_syncing = blockchain_manager::syncing(&mut state.blockchain_manager).await?;
let (cumulative_difficulty, cumulative_difficulty_top64) = let (cumulative_difficulty, cumulative_difficulty_top64) =
@ -548,7 +547,12 @@ async fn set_bans(
request: SetBansRequest, request: SetBansRequest,
) -> Result<SetBansResponse, Error> { ) -> Result<SetBansResponse, Error> {
for peer in request.bans { for peer in request.bans {
let address = todo!(); // TODO: support non-clearnet addresses.
// <https://architecture.cuprate.org/oddities/le-ipv4.html>
let [a, b, c, d] = peer.ip.to_le_bytes();
let ip = Ipv4Addr::new(a, b, c, d);
let address = SocketAddr::V4(SocketAddrV4::new(ip, todo!("p2p port?")));
let ban = if peer.ban { let ban = if peer.ban {
Some(Duration::from_secs(peer.seconds.into())) Some(Duration::from_secs(peer.seconds.into()))
@ -567,12 +571,11 @@ async fn set_bans(
} }
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2768-L2801> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2768-L2801>
async fn get_bans( async fn get_bans(state: CupratedRpcHandler, _: GetBansRequest) -> Result<GetBansResponse, Error> {
state: CupratedRpcHandler,
request: GetBansRequest,
) -> Result<GetBansResponse, Error> {
let now = Instant::now(); let now = Instant::now();
// TODO: support non-clearnet addresses.
let bans = address_book::get_bans::<ClearNet>(&mut DummyAddressBook) let bans = address_book::get_bans::<ClearNet>(&mut DummyAddressBook)
.await? .await?
.into_iter() .into_iter()
@ -588,9 +591,15 @@ async fn get_bans(
0 0
}; };
// <https://architecture.cuprate.org/oddities/le-ipv4.html>
let ip = match ban.address.ip() {
IpAddr::V4(v4) => u32::from_le_bytes(v4.octets()),
IpAddr::V6(v6) => todo!(),
};
GetBan { GetBan {
host: ban.address.to_string(), host: ban.address.to_string(),
ip: todo!(), ip,
seconds, seconds,
} }
}) })
@ -607,7 +616,7 @@ async fn banned(
state: CupratedRpcHandler, state: CupratedRpcHandler,
request: BannedRequest, request: BannedRequest,
) -> Result<BannedResponse, Error> { ) -> Result<BannedResponse, Error> {
let peer = match request.address.parse::<std::net::SocketAddr>() { let peer = match request.address.parse::<SocketAddr>() {
Ok(p) => p, Ok(p) => p,
Err(e) => { Err(e) => {
return Err(anyhow!( return Err(anyhow!(
@ -716,7 +725,7 @@ async fn get_coinbase_tx_sum(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2981-L2996> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2981-L2996>
async fn get_version( async fn get_version(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetVersionRequest, _: GetVersionRequest,
) -> Result<GetVersionResponse, Error> { ) -> Result<GetVersionResponse, Error> {
let current_height = helper::top_height(&mut state).await?.0; let current_height = helper::top_height(&mut state).await?.0;
let target_height = blockchain_manager::target_height(&mut state.blockchain_manager).await?; let target_height = blockchain_manager::target_height(&mut state.blockchain_manager).await?;
@ -766,7 +775,7 @@ async fn get_fee_estimate(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3033-L3064> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3033-L3064>
async fn get_alternate_chains( async fn get_alternate_chains(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetAlternateChainsRequest, _: GetAlternateChainsRequest,
) -> Result<GetAlternateChainsResponse, Error> { ) -> Result<GetAlternateChainsResponse, Error> {
let chains = blockchain::alt_chains(&mut state.blockchain_read) let chains = blockchain::alt_chains(&mut state.blockchain_read)
.await? .await?
@ -813,7 +822,7 @@ async fn relay_tx(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3306-L3330> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3306-L3330>
async fn sync_info( async fn sync_info(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: SyncInfoRequest, _: SyncInfoRequest,
) -> Result<SyncInfoResponse, Error> { ) -> Result<SyncInfoResponse, Error> {
let height = usize_to_u64( let height = usize_to_u64(
blockchain_context::context(&mut state.blockchain_context) blockchain_context::context(&mut state.blockchain_context)
@ -854,7 +863,7 @@ async fn sync_info(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3332-L3350> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L3332-L3350>
async fn get_transaction_pool_backlog( async fn get_transaction_pool_backlog(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetTransactionPoolBacklogRequest, _: GetTransactionPoolBacklogRequest,
) -> Result<GetTransactionPoolBacklogResponse, Error> { ) -> Result<GetTransactionPoolBacklogResponse, Error> {
let backlog = txpool::backlog(&mut state.txpool_read) let backlog = txpool::backlog(&mut state.txpool_read)
.await? .await?
@ -908,7 +917,7 @@ async fn get_output_distribution(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1998-L2033> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L1998-L2033>
async fn get_miner_data( async fn get_miner_data(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
request: GetMinerDataRequest, _: GetMinerDataRequest,
) -> Result<GetMinerDataResponse, Error> { ) -> Result<GetMinerDataResponse, Error> {
let context = blockchain_context::context(&mut state.blockchain_context).await?; let context = blockchain_context::context(&mut state.blockchain_context).await?;
let c = context.unchecked_blockchain_context(); let c = context.unchecked_blockchain_context();
@ -963,10 +972,10 @@ async fn prune_blockchain(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2035-L2070> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2035-L2070>
async fn calc_pow( async fn calc_pow(
mut state: CupratedRpcHandler, mut state: CupratedRpcHandler,
mut request: CalcPowRequest, request: CalcPowRequest,
) -> Result<CalcPowResponse, Error> { ) -> Result<CalcPowResponse, Error> {
let hardfork = HardFork::from_version(request.major_version)?; let hardfork = HardFork::from_version(request.major_version)?;
let mut block_blob: Vec<u8> = hex::decode(request.block_blob)?; let block_blob: Vec<u8> = hex::decode(request.block_blob)?;
let block = Block::read(&mut block_blob.as_slice())?; let block = Block::read(&mut block_blob.as_slice())?;
let seed_hash = helper::hex_to_hash(request.seed_hash)?; let seed_hash = helper::hex_to_hash(request.seed_hash)?;
@ -1020,7 +1029,7 @@ async fn add_aux_pow(
/// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2072-L2207> /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2072-L2207>
fn add_aux_pow_inner( fn add_aux_pow_inner(
mut state: CupratedRpcHandler, state: CupratedRpcHandler,
request: AddAuxPowRequest, request: AddAuxPowRequest,
) -> Result<AddAuxPowResponse, Error> { ) -> Result<AddAuxPowResponse, Error> {
let Some(non_zero_len) = NonZero::<usize>::new(request.aux_pow.len()) else { let Some(non_zero_len) = NonZero::<usize>::new(request.aux_pow.len()) else {

View file

@ -8,7 +8,6 @@ use cuprate_consensus_context::{
BlockChainContext, BlockChainContextRequest, BlockChainContextResponse, BlockChainContext, BlockChainContextRequest, BlockChainContextResponse,
BlockChainContextService, BlockChainContextService,
}; };
use cuprate_helper::cast::u64_to_usize;
use cuprate_types::{FeeEstimate, HardFork, HardForkInfo}; use cuprate_types::{FeeEstimate, HardFork, HardForkInfo};
// FIXME: use `anyhow::Error` over `tower::BoxError` in blockchain context. // FIXME: use `anyhow::Error` over `tower::BoxError` in blockchain context.