mirror of
https://github.com/Cuprate/cuprate.git
synced 2025-02-04 12:16:35 +00:00
generate_blocks
This commit is contained in:
parent
d56477cd61
commit
548639b2f6
3 changed files with 69 additions and 4 deletions
|
@ -23,7 +23,6 @@ use crate::rpc::{bin, json, other};
|
||||||
|
|
||||||
/// TODO: use real type when public.
|
/// TODO: use real type when public.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
#[expect(clippy::large_enum_variant)]
|
|
||||||
pub enum BlockchainManagerRequest {
|
pub enum BlockchainManagerRequest {
|
||||||
/// Pop blocks off the top of the blockchain.
|
/// Pop blocks off the top of the blockchain.
|
||||||
///
|
///
|
||||||
|
@ -72,9 +71,23 @@ pub enum BlockchainManagerRequest {
|
||||||
|
|
||||||
/// TODO
|
/// TODO
|
||||||
AddAuxPow {
|
AddAuxPow {
|
||||||
|
/// TODO
|
||||||
blocktemplate_blob: Vec<u8>,
|
blocktemplate_blob: Vec<u8>,
|
||||||
|
/// TODO
|
||||||
aux_pow: Vec<AuxPow>,
|
aux_pow: Vec<AuxPow>,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// TODO
|
||||||
|
GenerateBlocks {
|
||||||
|
/// TODO
|
||||||
|
amount_of_blocks: u64,
|
||||||
|
/// TODO
|
||||||
|
prev_block: [u8; 32],
|
||||||
|
/// TODO
|
||||||
|
starting_nonce: u32,
|
||||||
|
/// TODO
|
||||||
|
wallet_address: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// TODO: use real type when public.
|
/// TODO: use real type when public.
|
||||||
|
@ -113,6 +126,14 @@ pub enum BlockchainManagerResponse {
|
||||||
|
|
||||||
/// Response to [`BlockchainManagerRequest::AddAuxPow`]
|
/// Response to [`BlockchainManagerRequest::AddAuxPow`]
|
||||||
AddAuxPow(AddAuxPow),
|
AddAuxPow(AddAuxPow),
|
||||||
|
|
||||||
|
/// Response to [`BlockchainManagerRequest::GenerateBlocks`]
|
||||||
|
GenerateBlocks {
|
||||||
|
/// TODO
|
||||||
|
blocks: Vec<[u8; 32]>,
|
||||||
|
/// TODO
|
||||||
|
height: usize,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// TODO: use real type when public.
|
/// TODO: use real type when public.
|
||||||
|
|
|
@ -46,7 +46,7 @@ use cuprate_rpc_types::{
|
||||||
},
|
},
|
||||||
CORE_RPC_VERSION,
|
CORE_RPC_VERSION,
|
||||||
};
|
};
|
||||||
use cuprate_types::HardFork;
|
use cuprate_types::{Chain, HardFork};
|
||||||
|
|
||||||
use crate::rpc::{
|
use crate::rpc::{
|
||||||
helper,
|
helper,
|
||||||
|
@ -161,10 +161,29 @@ async fn generate_blocks(
|
||||||
state: CupratedRpcHandler,
|
state: CupratedRpcHandler,
|
||||||
request: GenerateBlocksRequest,
|
request: GenerateBlocksRequest,
|
||||||
) -> Result<GenerateBlocksResponse, Error> {
|
) -> Result<GenerateBlocksResponse, Error> {
|
||||||
|
if todo!("active cuprated chain") != todo!("regtest chain") {
|
||||||
|
return Err(anyhow!("Regtest required when generating blocks"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: is this value only used as a local variable in the handler?
|
||||||
|
// it may not be needed in the request type.
|
||||||
|
let prev_block = helper::hex_to_hash(request.prev_block)?;
|
||||||
|
|
||||||
|
let (blocks, height) = blockchain_manager::generate_blocks(
|
||||||
|
&mut state.blockchain_manager,
|
||||||
|
request.amount_of_blocks,
|
||||||
|
prev_block,
|
||||||
|
request.starting_nonce,
|
||||||
|
request.wallet_address,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
let blocks = blocks.into_iter().map(hex::encode).collect();
|
||||||
|
|
||||||
Ok(GenerateBlocksResponse {
|
Ok(GenerateBlocksResponse {
|
||||||
base: ResponseBase::OK,
|
base: ResponseBase::OK,
|
||||||
blocks: todo!(),
|
blocks,
|
||||||
height: todo!(),
|
height,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,3 +189,28 @@ pub(crate) async fn add_aux_pow(
|
||||||
|
|
||||||
Ok(response)
|
Ok(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [`BlockchainManagerRequest::GenerateBlocks`]
|
||||||
|
pub(crate) async fn generate_blocks(
|
||||||
|
blockchain_manager: &mut BlockchainManagerHandle,
|
||||||
|
amount_of_blocks: u64,
|
||||||
|
prev_block: [u8; 32],
|
||||||
|
starting_nonce: u32,
|
||||||
|
wallet_address: String,
|
||||||
|
) -> Result<(Vec<[u8; 32]>, u64), Error> {
|
||||||
|
let BlockchainManagerResponse::GenerateBlocks { blocks, height } = blockchain_manager
|
||||||
|
.ready()
|
||||||
|
.await?
|
||||||
|
.call(BlockchainManagerRequest::GenerateBlocks {
|
||||||
|
amount_of_blocks,
|
||||||
|
prev_block,
|
||||||
|
starting_nonce,
|
||||||
|
wallet_address,
|
||||||
|
})
|
||||||
|
.await?
|
||||||
|
else {
|
||||||
|
unreachable!();
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok((blocks, usize_to_u64(height)))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue