Skip to content

Commit d19e050

Browse files
committed
Fix certified data endpoint name
1 parent a623ece commit d19e050

4 files changed

Lines changed: 43 additions & 54 deletions

File tree

src/ethereum-json-rpc-client/src/lib.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::future::Future;
22
use std::pin::Pin;
33

44
use anyhow::Context;
5+
use did::certified::CertifiedResult;
56
use did::transaction::StorableExecutionResult;
67
use ethers_core::types::{
78
Block, BlockNumber, Log, Transaction, TransactionReceipt, H160, H256, U256, U64,
@@ -30,6 +31,7 @@ const ETH_SEND_RAW_TRANSACTION_METHOD: &str = "eth_sendRawTransaction";
3031
const ETH_GET_LOGS_METHOD: &str = "eth_getLogs";
3132
const IC_GET_TX_EXECUTION_RESULT_BY_HASH_METHOD: &str = "ic_getExeResultByHash";
3233
const IC_GET_GENESIS_BALANCES: &str = "ic_getGenesisBalances";
34+
const IC_GET_LAST_CERTIFIED_BLOCK: &str = "ic_getLastCertifiedBlock";
3335

3436
macro_rules! make_params_array {
3537
($($items:expr),*) => {
@@ -58,7 +60,7 @@ impl<C: Client> EthJsonRpcClient<C> {
5860
ETH_GET_BLOCK_BY_NUMBER_METHOD.to_string(),
5961
make_params_array!(block, false),
6062
// For some reason some JSON RPC services fail to parse requests with null id
61-
Id::Str("get_block_by_number".to_string()),
63+
Id::Str(ETH_GET_BLOCK_BY_NUMBER_METHOD.to_string()),
6264
)
6365
.await
6466
}
@@ -72,7 +74,7 @@ impl<C: Client> EthJsonRpcClient<C> {
7274
ETH_GET_BLOCK_BY_NUMBER_METHOD.to_string(),
7375
make_params_array!(block, true),
7476
// For some reason some JSON RPC services fail to parse requests with null id
75-
Id::Str("get_full_block_by_number".to_string()),
77+
Id::Str(ETH_GET_BLOCK_BY_NUMBER_METHOD.to_string()),
7678
)
7779
.await
7880
}
@@ -133,7 +135,7 @@ impl<C: Client> EthJsonRpcClient<C> {
133135
self.single_request::<U64>(
134136
ETH_BLOCK_NUMBER_METHOD.to_string(),
135137
make_params_array!(),
136-
Id::Str("eth_blockNumber".to_string()),
138+
Id::Str(ETH_BLOCK_NUMBER_METHOD.to_string()),
137139
)
138140
.await
139141
.map(|v| v.as_u64())
@@ -144,7 +146,7 @@ impl<C: Client> EthJsonRpcClient<C> {
144146
self.single_request::<U64>(
145147
ETH_CHAIN_ID_METHOD.to_string(),
146148
Params::Array(vec![]),
147-
Id::Str("eth_chainId".to_string()),
149+
Id::Str(ETH_CHAIN_ID_METHOD.to_string()),
148150
)
149151
.await
150152
.map(|v| v.as_u64())
@@ -155,7 +157,7 @@ impl<C: Client> EthJsonRpcClient<C> {
155157
self.single_request(
156158
ETH_GET_BALANCE_METHOD.to_string(),
157159
make_params_array!(address, block),
158-
Id::Str("eth_getBalance".to_string()),
160+
Id::Str(ETH_GET_BALANCE_METHOD.to_string()),
159161
)
160162
.await
161163
}
@@ -169,7 +171,7 @@ impl<C: Client> EthJsonRpcClient<C> {
169171
self.single_request::<U64>(
170172
ETH_GET_TRANSACTION_COUNT_METHOD.to_string(),
171173
make_params_array!(address, block),
172-
Id::Str("eth_getTransactionCount".to_string()),
174+
Id::Str(ETH_GET_TRANSACTION_COUNT_METHOD.to_string()),
173175
)
174176
.await
175177
.map(|v| v.as_u64())
@@ -183,7 +185,7 @@ impl<C: Client> EthJsonRpcClient<C> {
183185
self.single_request::<H256>(
184186
ETH_SEND_RAW_TRANSACTION_METHOD.to_string(),
185187
make_params_array!(transaction),
186-
Id::Str("send_rawTransaction".to_string()),
188+
Id::Str(ETH_SEND_RAW_TRANSACTION_METHOD.to_string()),
187189
)
188190
.await
189191
}
@@ -193,7 +195,7 @@ impl<C: Client> EthJsonRpcClient<C> {
193195
self.single_request(
194196
ETH_GET_LOGS_METHOD.to_string(),
195197
make_params_array!(params),
196-
Id::Str("ETH_GET_LOGS_METHOD".to_string()),
198+
Id::Str(ETH_GET_LOGS_METHOD.to_string()),
197199
)
198200
.await
199201
}
@@ -251,6 +253,16 @@ impl<C: Client> EthJsonRpcClient<C> {
251253
.await
252254
}
253255

256+
/// Returns the last certified block
257+
pub async fn get_last_certified_block(&self) -> anyhow::Result<CertifiedResult<Block<H256>>> {
258+
self.single_request(
259+
IC_GET_LAST_CERTIFIED_BLOCK.to_string(),
260+
make_params_array!(),
261+
Id::Str(IC_GET_LAST_CERTIFIED_BLOCK.to_string()),
262+
)
263+
.await
264+
}
265+
254266
/// Performs a request.
255267
pub async fn request(&self, request: Request) -> anyhow::Result<Response> {
256268
self.client.send_rpc_request(request).await

src/evm-block-extractor/src/rpc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub trait IC {
4747
#[method(name = "getGenesisBalances")]
4848
async fn get_genesis_balances(&self) -> RpcResult<Vec<(H160, U256)>>;
4949

50-
#[method(name = "getLastBlockCertifiedData")]
50+
#[method(name = "getLastCertifiedBlock")]
5151
async fn get_last_block_certified_data(&self) -> RpcResult<CertifiedBlock>;
5252
}
5353

src/evm-block-extractor/src/task/block_extractor.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,13 @@ impl BlockExtractor {
135135

136136
/// Collects last certified block
137137
async fn collect_last_certified_block(&self) -> anyhow::Result<()> {
138-
const JSON_RPC_METHOD_LAST_CERTIFIED_BLOCK: &str = "ic_getLastCertifiedBlock";
139-
140-
let certified_block = self
141-
.client
142-
.single_request::<CertifiedBlock>(
143-
JSON_RPC_METHOD_LAST_CERTIFIED_BLOCK.to_string(),
144-
jsonrpc_core::Params::Array(vec![]),
145-
jsonrpc_core::Id::Null,
146-
)
147-
.await?;
138+
let certified_block = self.client.get_last_certified_block().await?;
148139
self.blockchain
149-
.insert_certified_block_data(certified_block)
140+
.insert_certified_block_data(CertifiedBlock {
141+
data: certified_block.data.into(),
142+
witness: certified_block.witness,
143+
certificate: certified_block.certificate,
144+
})
150145
.await?;
151146

152147
Ok(())

src/evm-block-extractor/tests/tests/server_it.rs

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,7 @@ async fn with_filled_db<Func: Fn(Arc<dyn DatabaseClient>) -> Fut, Fut: Future<Ou
5353
#[tokio::test]
5454
async fn test_get_blocks() {
5555
with_filled_db(|db_client| async {
56-
let (port, handle) = new_server(db_client).await;
57-
58-
let http_client =
59-
EthJsonRpcClient::new(ReqwestClient::new(format!("http://127.0.0.1:{port}")));
56+
let (http_client, _port, handle) = new_server(db_client).await;
6057

6158
let block_count = http_client.get_block_number().await.unwrap();
6259
assert_eq!(block_count, BLOCK_COUNT - 1);
@@ -88,9 +85,10 @@ async fn test_get_blocks() {
8885
#[tokio::test]
8986
async fn test_get_blocks_rlp() {
9087
with_filled_db(|db_client| async {
91-
let (port, handle) = new_server(db_client).await;
88+
let (_http_client, port, handle) = new_server(db_client).await;
9289

9390
let http_client = ReqwestClient::new(format!("http://127.0.0.1:{port}"));
91+
9492
// Test first five blocks
9593
let request = Request::Single(Call::MethodCall(MethodCall {
9694
jsonrpc: Some(Version::V2),
@@ -144,7 +142,7 @@ async fn test_get_blocks_rlp() {
144142
#[tokio::test]
145143
async fn test_batched_request() {
146144
with_filled_db(|db_client| async {
147-
let (port, handle) = new_server(db_client).await;
145+
let (_http_client, port, handle) = new_server(db_client).await;
148146

149147
let http_client = ReqwestClient::new(format!("http://127.0.0.1:{port}"));
150148
let request = Request::Batch(vec![
@@ -196,10 +194,7 @@ async fn test_get_genesis_accounts() {
196194
// Arrange
197195
db_client.init(None, false).await.unwrap();
198196

199-
let (port, handle) = new_server(db_client.clone()).await;
200-
201-
let http_client =
202-
EthJsonRpcClient::new(ReqwestClient::new(format!("http://127.0.0.1:{port}")));
197+
let (http_client, _port, handle) = new_server(db_client.clone()).await;
203198

204199
// Test on empty database
205200
{
@@ -257,10 +252,7 @@ async fn test_get_chain_id() {
257252
// Arrange
258253
db_client.init(None, false).await.unwrap();
259254

260-
let (port, handle) = new_server(db_client.clone()).await;
261-
262-
let http_client =
263-
EthJsonRpcClient::new(ReqwestClient::new(format!("http://127.0.0.1:{port}")));
255+
let (http_client, _port, handle) = new_server(db_client.clone()).await;
264256

265257
let chain_id: u64 = random();
266258
db_client.insert_chain_id(chain_id).await.unwrap();
@@ -282,7 +274,7 @@ async fn test_get_chain_id() {
282274
#[tokio::test]
283275
async fn test_get_block_by_number_variants() {
284276
with_filled_db(|db_client| async {
285-
let (port, handle) = new_server(db_client).await;
277+
let (_http_client, port, handle) = new_server(db_client).await;
286278

287279
let http_client = ReqwestClient::new(format!("http://127.0.0.1:{port}"));
288280
let request = Request::Batch(vec![
@@ -360,29 +352,15 @@ async fn test_get_last_certified_block() {
360352
.await
361353
.unwrap();
362354

363-
let (port, handle) = new_server(db_client.clone()).await;
364-
365-
let http_client = ReqwestClient::new(format!("http://127.0.0.1:{port}"));
355+
let (http_client, _port, handle) = new_server(db_client.clone()).await;
366356

367357
// Act
368-
let request = Request::Single(Call::MethodCall(MethodCall {
369-
jsonrpc: Some(Version::V2),
370-
method: "ic_getLastBlockCertifiedData".to_string(),
371-
params: Params::Array(vec![]),
372-
id: Id::Null,
373-
}));
374-
375-
let Response::Single(Output::Success(result)) =
376-
http_client.send_rpc_request(request).await.unwrap()
377-
else {
378-
panic!("unexpected return type")
379-
};
358+
let certified_block = http_client.get_last_certified_block().await.unwrap();
380359

381360
// Assert
382-
let certified_block: CertifiedBlock = serde_json::from_value(result.result).unwrap();
383361
assert_eq!(certified_block.certificate, vec![1, 2, 3]);
384362
assert_eq!(certified_block.witness, vec![5, 6, 7]);
385-
assert_eq!(certified_block.data, block);
363+
assert_eq!(certified_block.data, block.into());
386364

387365
{
388366
handle.stop().unwrap();
@@ -392,7 +370,9 @@ async fn test_get_last_certified_block() {
392370
.await
393371
}
394372

395-
async fn new_server(db_client: Arc<dyn DatabaseClient>) -> (u16, ServerHandle) {
373+
async fn new_server(
374+
db_client: Arc<dyn DatabaseClient>,
375+
) -> (EthJsonRpcClient<ReqwestClient>, u16, ServerHandle) {
396376
let eth = EthImpl::new(db_client);
397377
let mut module = RpcModule::new(());
398378
module.merge(EthServer::into_rpc(eth.clone())).unwrap();
@@ -401,7 +381,9 @@ async fn new_server(db_client: Arc<dyn DatabaseClient>) -> (u16, ServerHandle) {
401381
loop {
402382
let port = port_check::free_local_port().unwrap();
403383
if let Ok(server) = Server::builder().build(format!("0.0.0.0:{port}")).await {
404-
return (port, server.start(module));
384+
let client =
385+
EthJsonRpcClient::new(ReqwestClient::new(format!("http://127.0.0.1:{port}")));
386+
return (client, port, server.start(module));
405387
}
406388
}
407389
}

0 commit comments

Comments
 (0)