Add a full-stack mint and burn test for Bitcoin and Monero

Fixes where ram_scanned is updated in processor. The prior version, while safe,
would redo massive amounts of work during periods of inactivity. It also hit an
undocumented invariant where get_eventuality_completions assumes new blocks,
yet redone work wouldn't have new blocks.

Modifies Monero's generate_blocks to return the hashes of the generated blocks.
This commit is contained in:
Luke Parker
2023-08-28 16:18:11 -04:00
parent 1838c37ecf
commit 285422f71a
9 changed files with 723 additions and 40 deletions

View File

@@ -712,20 +712,32 @@ impl<R: RpcConnection> Rpc<R> {
Ok(())
}
pub async fn generate_blocks(&self, address: &str, block_count: usize) -> Result<(), RpcError> {
self
.rpc_call::<_, EmptyResponse>(
"json_rpc",
// TODO: Take &Address, not &str?
pub async fn generate_blocks(
&self,
address: &str,
block_count: usize,
) -> Result<Vec<[u8; 32]>, RpcError> {
#[derive(Debug, Deserialize)]
struct BlocksResponse {
blocks: Vec<String>,
}
let block_strs = self
.json_rpc_call::<BlocksResponse>(
"generateblocks",
Some(json!({
"method": "generateblocks",
"params": {
"wallet_address": address,
"amount_of_blocks": block_count
},
"wallet_address": address,
"amount_of_blocks": block_count
})),
)
.await?;
.await?
.blocks;
Ok(())
let mut blocks = Vec::with_capacity(block_strs.len());
for block in block_strs {
blocks.push(rpc_hex(&block)?.try_into().map_err(|_| RpcError::InvalidNode)?);
}
Ok(blocks)
}
}