Skip to content

Commit 378fd21

Browse files
authored
Merge pull request #412 from namada-net/cometbft-service
Cometbft service
2 parents b5d9cbe + 6184115 commit 378fd21

File tree

43 files changed

+920
-401
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+920
-401
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ jobs:
6262
{ image: governance, package: governance },
6363
{ image: pos, package: pos },
6464
{ image: rewards, package: rewards },
65-
{ image: seeder, package: seeder },
6665
{ image: webserver, package: webserver },
6766
{ image: parameters, package: parameters },
6867
{ image: transactions, package: transactions },
68+
{ image: cometbft, package: cometbft },
6969
]
7070

7171
steps:

.github/workflows/queue_and_merge.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,10 @@ jobs:
131131
{ image: governance, package: governance },
132132
{ image: pos, package: pos },
133133
{ image: rewards, package: rewards },
134-
{ image: seeder, package: seeder },
135134
{ image: webserver, package: webserver },
136135
{ image: parameters, package: parameters },
137136
{ image: transactions, package: transactions },
137+
{ image: cometbft, package: cometbft },
138138
]
139139

140140
steps:

Cargo.lock

Lines changed: 28 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ members = [
99
"pos",
1010
"governance",
1111
"webserver",
12-
"seeder",
1312
"parameters",
1413
"transactions",
14+
"cometbft",
1515
"test_helpers",
1616
"utilities"
1717
]
@@ -102,4 +102,5 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
102102
validator = { version = "0.16.0", features = ["derive"] }
103103
vergen = "8.0.0"
104104
bech32 = "0.11.0"
105-
reqwest = { version = "0.11.27", features = ["json", "cookies"] }
105+
reqwest = { version = "0.11.27", features = ["json", "cookies"] }
106+
itertools = "0.14.0"

chain/src/main.rs

Lines changed: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use shared::block::Block;
2929
use shared::block_result::BlockResult;
3030
use shared::checksums::Checksums;
3131
use shared::client::Client;
32+
use shared::cometbft::CometbftBlock;
3233
use shared::crawler::crawl;
3334
use shared::crawler_state::ChainCrawlerState;
3435
use shared::error::{
@@ -277,8 +278,12 @@ async fn crawling_fn(
277278
let native_token_address: namada_sdk::address::Address =
278279
native_token.clone().into();
279280

281+
let cometbft_block =
282+
get_cometbft_block_with_fallback(&conn, &client, block_height)
283+
.await
284+
.into_db_error()?;
280285
let (block, tm_block_response, epoch) =
281-
get_block(block_height, &client, &checksums, &native_token_address)
286+
get_block(cometbft_block, &client, &checksums, &native_token_address)
282287
.await?;
283288

284289
let rate_limits = new_epoch.then(|| {
@@ -654,8 +659,14 @@ async fn try_initial_query(
654659
.await
655660
.into_rpc_error()?
656661
.into();
662+
663+
let cometbft_block =
664+
get_cometbft_block_with_fallback(conn, client, block_height)
665+
.await
666+
.into_db_error()?;
667+
657668
let (block, tm_block_response, epoch) =
658-
get_block(block_height, client, &checksums, &native_token).await?;
669+
get_block(cometbft_block, client, &checksums, &native_token).await?;
659670

660671
let tokens = query_tokens(client).await.into_rpc_error()?;
661672

@@ -846,36 +857,18 @@ async fn update_crawler_timestamp(
846857
}
847858

848859
async fn get_block(
849-
block_height: u32,
860+
block: CometbftBlock,
850861
client: &HttpClient,
851862
checksums: &Checksums,
852863
native_token: &namada_sdk::address::Address,
853864
) -> Result<(Block, TendermintBlockResponse, u32), MainError> {
854-
tracing::debug!(block = block_height, "Query block...");
855-
let tm_block_response =
856-
tendermint_service::query_raw_block_at_height(client, block_height)
857-
.await
858-
.into_rpc_error()?;
859-
tracing::debug!(
860-
block = block_height,
861-
"Raw block contains {} txs...",
862-
tm_block_response.block.data.len()
863-
);
865+
let block_height = block.block_height;
864866

865-
tracing::debug!(block = block_height, "Query block results...");
866-
let tm_block_results_response =
867-
tendermint_service::query_raw_block_results_at_height(
868-
client,
869-
block_height,
870-
)
871-
.await
872-
.into_rpc_error()?;
873-
let block_results = BlockResult::from(tm_block_results_response);
867+
let tm_block_response = block.block;
868+
let tm_block_results_response = block.events;
869+
let epoch = block.epoch;
874870

875-
tracing::debug!(block = block_height, "Query epoch...");
876-
let epoch = namada_service::get_epoch_at_block_height(client, block_height)
877-
.await
878-
.into_rpc_error()?;
871+
let block_results = BlockResult::from(tm_block_results_response);
879872

880873
let proposer_address_namada = namada_service::get_validator_namada_address(
881874
client,
@@ -939,3 +932,46 @@ async fn query_token_supplies(
939932

940933
Ok(buffer)
941934
}
935+
936+
pub async fn get_cometbft_block_with_fallback(
937+
conn: &Object,
938+
client: &HttpClient,
939+
block_height: u32,
940+
) -> anyhow::Result<CometbftBlock> {
941+
let block = repository::cometbft::get_block(conn, block_height)
942+
.await
943+
.context("Failed to get block")?;
944+
945+
let block = match block {
946+
Some(block) => block,
947+
None => {
948+
let block = tendermint_service::query_raw_block_at_height(
949+
client,
950+
block_height,
951+
)
952+
.await
953+
.context("Failed to query block")?;
954+
955+
let events = tendermint_service::query_raw_block_results_at_height(
956+
client,
957+
block_height,
958+
)
959+
.await
960+
.context("Failed to query block results")?;
961+
962+
let epoch =
963+
namada_service::get_epoch_at_block_height(client, block_height)
964+
.await
965+
.context("Failed to query epoch")?;
966+
967+
CometbftBlock {
968+
block_height,
969+
block,
970+
events,
971+
epoch,
972+
}
973+
}
974+
};
975+
976+
Ok(block)
977+
}

chain/src/repository/cometbft.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use deadpool_diesel::postgres::Object;
2+
use diesel::{QueryDsl, RunQueryDsl, SelectableHelper};
3+
use orm::cometbft::CometbftBlock;
4+
use orm::schema::cometbft_block;
5+
use shared::cometbft::CometbftBlock as CometBlock;
6+
7+
pub async fn get_block(
8+
conn: &Object,
9+
block_height: u32,
10+
) -> anyhow::Result<Option<CometBlock>> {
11+
conn.interact(move |conn| {
12+
cometbft_block::table
13+
.find(block_height as i32)
14+
.select(CometbftBlock::as_select())
15+
.first(conn)
16+
.ok()
17+
})
18+
.await
19+
.map(|block| block.map(CometBlock::from))
20+
.map_err(|e| anyhow::anyhow!(e.to_string()))
21+
}

chain/src/repository/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod balance;
22
pub mod block;
3+
pub mod cometbft;
34
pub mod crawler_state;
45
pub mod gov;
56
pub mod pgf;
Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
2-
name = "seeder"
3-
description = "Database seeder."
2+
name = "cometbft"
3+
description = "Namada cometbft crawler."
44
resolver = "2"
55
authors.workspace = true
66
edition.workspace = true
@@ -9,19 +9,33 @@ readme.workspace = true
99
version.workspace = true
1010

1111
[[bin]]
12-
name = "seeder"
12+
name = "cometbft"
1313
path = "src/main.rs"
1414

1515
[dependencies]
1616
anyhow.workspace = true
17+
chrono.workspace = true
1718
clap.workspace = true
1819
deadpool-diesel.workspace = true
1920
diesel.workspace = true
21+
futures.workspace = true
22+
namada_core.workspace = true
23+
namada_governance.workspace = true
24+
namada_sdk.workspace = true
25+
namada_token.workspace = true
2026
orm.workspace = true
21-
rand.workspace = true
27+
rlimit.workspace = true
28+
serde_json.workspace = true
2229
shared.workspace = true
30+
subtle-encoding.workspace = true
31+
tendermint-rpc.workspace = true
2332
tokio.workspace = true
33+
tokio-retry.workspace = true
2434
tracing.workspace = true
35+
itertools.workspace = true
2536

2637
[build-dependencies]
2738
vergen = { workspace = true, features = ["build", "git", "gitcl"] }
39+
40+
[dev-dependencies]
41+
test_helpers.workspace = true
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
. ../.env
22
export TENDERMINT_URL
33
export DATABASE_URL
4-
cargo run -- --cargo-env development
4+
cargo run --release

0 commit comments

Comments
 (0)