involved addresses

This commit is contained in:
Jędrzej Stuczyński
2025-07-07 15:00:27 +01:00
parent 42c0b69f4d
commit 05f2079b64
5 changed files with 29 additions and 49 deletions
Generated
+3 -45
View File
@@ -1354,7 +1354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e"
dependencies = [
"prost 0.11.9",
"prost-types 0.11.9",
"prost-types",
"tonic 0.9.2",
"tracing-core",
]
@@ -1371,7 +1371,7 @@ dependencies = [
"futures",
"hdrhistogram",
"humantime",
"prost-types 0.11.9",
"prost-types",
"serde",
"serde_json",
"thread_local",
@@ -8112,8 +8112,8 @@ dependencies = [
"async-trait",
"base64 0.22.1",
"cosmrs",
"itertools 0.14.0",
"nyxd-scraper-shared",
"prost-reflect",
"serde",
"serde_json",
"sqlx",
@@ -8845,16 +8845,6 @@ dependencies = [
"prost-derive 0.13.5",
]
[[package]]
name = "prost"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d"
dependencies = [
"bytes",
"prost-derive 0.14.1",
]
[[package]]
name = "prost-derive"
version = "0.11.9"
@@ -8881,29 +8871,6 @@ dependencies = [
"syn 2.0.98",
]
[[package]]
name = "prost-derive"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425"
dependencies = [
"anyhow",
"itertools 0.14.0",
"proc-macro2",
"quote",
"syn 2.0.98",
]
[[package]]
name = "prost-reflect"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e6b545c556471033fc1099868fca468bff8cf034f7bb9153b445f24d00aa28d"
dependencies = [
"prost 0.14.1",
"prost-types 0.14.1",
]
[[package]]
name = "prost-types"
version = "0.11.9"
@@ -8913,15 +8880,6 @@ dependencies = [
"prost 0.11.9",
]
[[package]]
name = "prost-types"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72"
dependencies = [
"prost 0.14.1",
]
[[package]]
name = "protobuf"
version = "3.7.2"
-1
View File
@@ -390,7 +390,6 @@ cosmos-sdk-proto = { version = "0.26.1" }
tendermint = "0.40.4"
tendermint-rpc = "0.40.4"
prost = { version = "0.13", default-features = false }
prost-reflect = { version = "0.16.0" }
# wasm-related dependencies
gloo-utils = "0.2.0"
+1 -1
View File
@@ -13,8 +13,8 @@ readme.workspace = true
[dependencies]
async-trait = { workspace = true }
base64 = { workspace = true }
itertools = { workspace = true }
serde = { workspace = true, features = ["derive"] }
prost-reflect = { workspace = true }
serde_json = { workspace = true }
sqlx = { workspace = true, features = ["runtime-tokio-rustls", "postgres", "macros", "migrate", "time"] }
thiserror = { workspace = true }
@@ -1,7 +1,11 @@
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use cosmrs::AccountId;
use itertools::Itertools;
use nyxd_scraper_shared::ParsedTransactionResponse;
use serde::Serialize;
use std::str::FromStr;
#[derive(Serialize)]
pub(crate) struct PlaceholderStruct {
@@ -17,3 +21,21 @@ impl PlaceholderStruct {
}
}
}
// replicate behaviour of `CosmosMessageAddressesParser` from juno
pub(crate) fn parse_addresses_from_events(tx: &ParsedTransactionResponse) -> Vec<String> {
let mut addresses: Vec<String> = Vec::new();
for event in &tx.tx_result.events {
for attribute in &event.attributes {
let Ok(value) = attribute.value_str() else {
continue;
};
// Try parsing the address as an account address
if let Ok(address) = AccountId::from_str(value) {
addresses.push(address.to_string());
}
}
}
addresses.into_iter().unique().collect()
}
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
use crate::error::PostgresScraperError;
use crate::storage::helpers::PlaceholderStruct;
use crate::storage::helpers::{parse_addresses_from_events, PlaceholderStruct};
use crate::storage::manager::{
insert_block, insert_message, insert_precommit, insert_transaction, insert_validator,
};
@@ -209,13 +209,14 @@ impl PostgresStorageTransaction {
debug!("persisting messages");
for chain_tx in txs {
let involved_addresses = parse_addresses_from_events(chain_tx);
for (index, msg) in chain_tx.tx.body.messages.iter().enumerate() {
insert_message(
chain_tx.hash.to_string(),
index as i64,
msg.type_url.clone(),
serde_json::to_value(self.decode_or_skip(msg))?,
vec!["PLACEHOLDER".to_owned()],
involved_addresses.clone(),
chain_tx.height.into(),
self.inner.as_mut(),
)