Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
41e0ca0
refactor: insert bonds to use col count macro
mateuszjasiuk Dec 5, 2024
2b8fcf5
feat: insert votes in chunks
mateuszjasiuk Dec 5, 2024
fec6b0e
feat: add active at query param to bonds and unbonds (#198)
mateuszjasiuk Dec 13, 2024
68215a7
fetch validators out of consensus set
Fraccaman Dec 9, 2024
dddd8a8
return cargo tag
Fraccaman Dec 13, 2024
365a92b
improve logic
Fraccaman Dec 10, 2024
838dff1
update swagger
Fraccaman Dec 13, 2024
fb31083
feat: add block proposer to addresses_with_balance_change
joel-u410 Dec 12, 2024
f8c8276
Merge pull request #205 from anoma/backport-fix-pos
Fraccaman Dec 16, 2024
3024947
Merge pull request #207 from anoma/add-cargo-version
Fraccaman Dec 16, 2024
8e7893f
fetch rewards in batches
Fraccaman Dec 16, 2024
051b57a
fix: insert rewards in batch
RuslanGlaznyov Dec 16, 2024
a99a85e
minors
Fraccaman Dec 16, 2024
9128561
feat: print processed rewards batch
mateuszjasiuk Dec 16, 2024
cda97c1
Merge pull request #217 from MELLIFERA-Labs/fix/insert-db-rewards-in-…
Fraccaman Dec 16, 2024
e2ab703
Merge pull request #216 from anoma/improve-rewards-fetching
Fraccaman Dec 16, 2024
7cf71cf
Merge pull request #203 from joel-u410/joel/block-proposer-balances
Fraccaman Dec 16, 2024
6588900
enhancement: store blocks while crawling transactions and chain
joel-u410 Dec 9, 2024
daac819
update diesel schema for blocks
joel-u410 Dec 16, 2024
64d042a
upsert block before balances during initial_query
joel-u410 Dec 16, 2024
593ef20
Store the validator namada address on blocks instead of the tendermin…
joel-u410 Dec 16, 2024
e6ec420
Merge pull request #190 from joel-u410/joel/record-block-details
mateuszjasiuk Dec 17, 2024
fe544d5
parsing ack tx
Fraccaman Dec 2, 2024
e790084
parse sequence + ack + tx id
Fraccaman Dec 2, 2024
4d5886f
added handler
Fraccaman Dec 3, 2024
1e15f3b
update swagger
Fraccaman Dec 13, 2024
510b829
minors
Fraccaman Dec 16, 2024
1b91539
minors
Fraccaman Dec 17, 2024
d1eb8df
Merge pull request #219 from anoma/ibc-events
Fraccaman Dec 17, 2024
679b9d7
added gas_used to thw wrapper tx
Fraccaman Dec 17, 2024
321ca54
update endpoint and swagger
Fraccaman Dec 17, 2024
5b30e97
fix ibc_ack migration
Fraccaman Dec 17, 2024
509c992
fix ibc_ack migration
Fraccaman Dec 17, 2024
001e1e0
feat: return blocks by timestamp or height
mateuszjasiuk Dec 17, 2024
fbbd3bd
fmt
Fraccaman Dec 17, 2024
52bc198
Merge pull request #221 from anoma/add-gas
mateuszjasiuk Dec 17, 2024
cc865d9
Merge pull request #222 from anoma/feat/return-block-by-timestamp
mateuszjasiuk Dec 17, 2024
ccc9c61
chore: update version in cargo toml
mateuszjasiuk Dec 17, 2024
59dddc7
Merge pull request #224 from anoma/chore/update-version-in-cargo-toml…
mateuszjasiuk Dec 17, 2024
c45dd8f
fix: fetch ibc balances
Fraccaman Dec 17, 2024
98325e7
Merge remote-tracking branch 'upstream/1.0.0-maint' into joel/1.0.0-m…
joel-u410 Dec 17, 2024
77642c1
added migrations, index history txs source and targets
Fraccaman Dec 17, 2024
a094b0c
added handlers
Fraccaman Dec 18, 2024
35719e1
Merge pull request #225 from anoma/improve-ibc-balances
Fraccaman Dec 18, 2024
2f76bf7
minors
Fraccaman Dec 18, 2024
2983291
minors
Fraccaman Dec 23, 2024
a6f2217
query validators balances at the beginning of each epoch
Fraccaman Dec 23, 2024
5b987c4
add timeout to ibc ack response
Fraccaman Dec 24, 2024
1f8ba17
Merge pull request #236 from anoma/improve-ibc-ack
Fraccaman Dec 24, 2024
3216ef1
Merge pull request #227 from anoma/transaction-history
Fraccaman Dec 24, 2024
38b4223
added gas estimation endpoint
Fraccaman Dec 20, 2024
b23ed1f
wip: improve gas estimate
Fraccaman Dec 20, 2024
c1fbdc1
minors
Fraccaman Dec 20, 2024
9e31f00
wip: improve gas estimate
Fraccaman Dec 23, 2024
99b1363
Merge pull request #231 from anoma/improve-gas-estimation
Fraccaman Dec 24, 2024
604b60a
Merge pull request #237 from anoma/fix-validators-balance
Fraccaman Dec 24, 2024
907fc9d
parse native addresses for balance updates
Fraccaman Dec 23, 2024
2d538d6
Merge pull request #238 from anoma/fix-native-addresses-balance
Fraccaman Dec 24, 2024
00c9498
fix: changing swagger yml to match latest indexer updates on health a…
pedrorezende Dec 26, 2024
cf98c8e
Merge pull request #239 from anoma/pedro/small-swagger-fixes
Fraccaman Dec 27, 2024
da7329d
fix: fetch validators rewards
Fraccaman Jan 3, 2025
2f1d085
Merge pull request #243 from anoma/fix-validator-rewards
Fraccaman Jan 8, 2025
cda0284
improve ci
Fraccaman Jan 8, 2025
ad0a1d2
improve ci
Fraccaman Jan 8, 2025
0b83fa7
improve ci
Fraccaman Jan 8, 2025
d167f82
improve ci
Fraccaman Jan 8, 2025
f06ad09
improve ci
Fraccaman Jan 8, 2025
ca42c7f
improve ci
Fraccaman Jan 9, 2025
bcbc6bc
improve ci
Fraccaman Jan 9, 2025
335b613
wip
Fraccaman Jan 9, 2025
7d1ad97
improve ci
Fraccaman Jan 9, 2025
435f478
feat: increase masp txs gas limit + tx id hashes to lowercase
mateuszjasiuk Jan 9, 2025
30ed7ac
fix: down migrations
mateuszjasiuk Jan 9, 2025
1fde4db
chore: get fmt and fmt-check scripts from main
mateuszjasiuk Jan 9, 2025
73723a9
Merge pull request #244 from anoma/feat/increase-masp-tx-gas-limits
mateuszjasiuk Jan 9, 2025
97749e7
fix governance vote inserting
Fraccaman Jan 13, 2025
32fb47f
update swagger
Fraccaman Jan 13, 2025
7e1e5cc
Merge pull request #248 from anoma/fix-vote-inserting
Fraccaman Jan 14, 2025
dae72e9
Update to 1.1.6
Fraccaman Jan 14, 2025
2858da5
improve block response
Fraccaman Jan 14, 2025
4459f92
Merge pull request #250 from anoma/improve-block-response
Fraccaman Jan 15, 2025
7e39bbb
add latest processed block height
Fraccaman Jan 16, 2025
f5276fb
add amount per gas unit to wrapper response
Fraccaman Jan 16, 2025
c7f8a60
Merge pull request #253 from anoma/add-latest-processed-height
Fraccaman Jan 17, 2025
326d746
bump sdk, bump builder docker image
Fraccaman Jan 20, 2025
8df6845
Merge pull request #255 from anoma/fee-unit
Fraccaman Jan 20, 2025
fa122f7
Merge pull request #256 from anoma/bump
Fraccaman Jan 20, 2025
5ce13a9
ci: improve client generation
Fraccaman Jan 20, 2025
9dbd562
Merge pull request #257 from anoma/update-ci
Fraccaman Jan 20, 2025
fa29923
added better transfer classification
Fraccaman Jan 15, 2025
92aec7b
refactor
Fraccaman Jan 15, 2025
1228efa
added ibc transfers
Fraccaman Jan 16, 2025
de3175f
refactor
Fraccaman Jan 20, 2025
9a9e315
fix ibc acks
Fraccaman Jan 21, 2025
711be21
fix ibc ack
Fraccaman Jan 21, 2025
01fd6b1
Merge pull request #251 from anoma/fix-transparent-tx-kind
Fraccaman Jan 21, 2025
e5de992
Merge remote-tracking branch 'upstream/1.0.0-maint' into joel/1.0.0-m…
joel-u410 Jan 22, 2025
fcc12bc
Merge remote-tracking branch 'upstream/main' into joel/1.0.0-maint-me…
joel-u410 Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .github/workflows/queue_and_merge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ jobs:
docker:
name: Docker
runs-on: ubuntu-latest
if: ${{ github.event_name == 'merge_group' || github.event_name == 'pull_request' }}
# if: ${{ github.event_name == 'merge_group' || github.event_name == 'pull_request' }}
env:
GIT_LFS_SKIP_SMUDGE: 1
REGISTRY_URL: ghcr.io
Expand Down Expand Up @@ -157,7 +157,7 @@ jobs:
context: .
file: Dockerfile
build-args: PACKAGE=${{ matrix.docker.package }}
push: ${{ github.event.pull_request.head.repo.full_name == 'anoma/namada-indexer' }}
push: ${{ github.event.pull_request.head.repo.full_name == 'anoma/namada-indexer' || github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
Expand Down Expand Up @@ -194,5 +194,4 @@ jobs:
run: |
echo "ALL_SUCCESS=$(echo "$NEEDS_JSON" | jq '. | to_entries | map([.value.result == "success", .value.result == "skipped"] | any) | all')" >> $GITHUB_ENV
- name: check outcomes
run: "[ $ALL_SUCCESS == true ]"

run: "[ $ALL_SUCCESS == true ]"
3 changes: 2 additions & 1 deletion .github/workflows/scripts/update-package.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

configuration = {
"npmName": "@namada/indexer-client",
"npmVersion": package_version
"npmVersion": package_version,
"httpUserAgent": ""
}

with open("swagger-codegen.json", 'w+', encoding='utf-8') as f:
Expand Down
18 changes: 9 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ authors = ["Heliax <hello@heliax.dev>"]
edition = "2021"
license = "GPL-3.0"
readme = "README.md"
version = "1.0.0"
version = "1.1.6"

[workspace.dependencies]
clokwerk = "0.4.0"
Expand Down Expand Up @@ -40,14 +40,14 @@ axum-extra = { version = "0.9.3", features = ["query"] }
chrono = { version = "0.4.30", features = ["serde"] }
async-trait = "0.1.73"
anyhow = "1.0.75"
namada_core = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_sdk = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments", default-features = false, features = ["std", "async-send", "download-params"] }
namada_tx = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_governance = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_ibc = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_token = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_parameters = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_proof_of_stake = { git = "https://github.com/anoma/namada", branch = "fraccaman/rpc-pgf-payments" }
namada_core = { git = "https://github.com/anoma/namada", branch = "main" }
namada_sdk = { git = "https://github.com/anoma/namada", branch = "main", default-features = false, features = ["std", "async-send", "download-params"] }
namada_tx = { git = "https://github.com/anoma/namada", branch = "main" }
namada_governance = { git = "https://github.com/anoma/namada", branch = "main" }
namada_ibc = { git = "https://github.com/anoma/namada", branch = "main" }
namada_token = { git = "https://github.com/anoma/namada", branch = "main" }
namada_parameters = { git = "https://github.com/anoma/namada", branch = "main" }
namada_proof_of_stake = { git = "https://github.com/anoma/namada", branch = "main" }
tendermint = "0.38.0"
tendermint-config = "0.38.0"
tendermint-rpc = { version = "0.38.0", features = ["http-client"] }
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM lukemathwalker/cargo-chef:latest-rust-1.79-bookworm AS chef
FROM lukemathwalker/cargo-chef:latest-rust-1.81-bookworm AS chef
RUN apt-get update && apt-get install -y protobuf-compiler build-essential clang-tools-14

FROM chef AS planner
Expand Down
178 changes: 136 additions & 42 deletions chain/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ use shared::crawler_state::ChainCrawlerState;
use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError};
use shared::id::Id;
use shared::token::Token;
use shared::utils::BalanceChange;
use shared::validator::ValidatorSet;
use tendermint_rpc::endpoint::block::Response as TendermintBlockResponse;
use tendermint_rpc::HttpClient;
use tokio_retry::strategy::{jitter, ExponentialBackoff};
use tokio_retry::Retry;
Expand Down Expand Up @@ -140,6 +142,7 @@ async fn main() -> Result<(), MainError> {
initial_query(
&client,
&conn,
checksums.clone(),
config.initial_query_retry_time,
config.initial_query_retry_attempts,
)
Expand Down Expand Up @@ -186,46 +189,15 @@ async fn crawling_fn(
return Err(MainError::NoAction);
}

tracing::debug!(block = block_height, "Query block...");
let tm_block_response =
tendermint_service::query_raw_block_at_height(&client, block_height)
.await
.into_rpc_error()?;
tracing::debug!(
block = block_height,
"Raw block contains {} txs...",
tm_block_response.block.data.len()
);

tracing::debug!(block = block_height, "Query block results...");
let tm_block_results_response =
tendermint_service::query_raw_block_results_at_height(
&client,
block_height,
)
.await
.into_rpc_error()?;
let block_results = BlockResult::from(tm_block_results_response);

tracing::debug!(block = block_height, "Query epoch...");
let epoch =
namada_service::get_epoch_at_block_height(&client, block_height)
.await
.into_rpc_error()?;

tracing::debug!(block = block_height, "Query first block in epoch...");
let first_block_in_epoch =
namada_service::get_first_block_in_epoch(&client)
.await
.into_rpc_error()?;

let block = Block::from(
tm_block_response,
&block_results,
checksums,
epoch,
block_height,
);
let (block, tm_block_response, epoch) =
get_block(block_height, &client, checksums).await?;

tracing::debug!(
block = block_height,
txs = block.transactions.len(),
Expand All @@ -243,8 +215,33 @@ async fn crawling_fn(
.map(Token::Ibc)
.collect::<Vec<Token>>();

let native_addresses =
namada_service::query_native_addresses_balance_change(Token::Native(
native_token.clone(),
));
let addresses = block.addresses_with_balance_change(&native_token);

let validators_addresses = if first_block_in_epoch.eq(&block_height) {
namada_service::get_all_consensus_validators_addresses_at(
&client,
epoch - 1,
native_token.clone(),
)
.await
.into_rpc_error()?
} else {
HashSet::default()
};

let block_proposer_address = block
.header
.proposer_address_namada
.as_ref()
.map(|address| BalanceChange {
address: Id::Account(address.clone()),
token: Token::Native(native_token.clone()),
});

let pgf_receipient_addresses = if first_block_in_epoch.eq(&block_height) {
conn.interact(move |conn| {
namada_pgf_repository::get_pgf_receipients_balance_changes(
Expand All @@ -260,8 +257,12 @@ async fn crawling_fn(
HashSet::default()
};

let all_balance_changed_addresses = pgf_receipient_addresses
.union(&addresses)
let all_balance_changed_addresses = addresses
.iter()
.chain(block_proposer_address.iter())
.chain(pgf_receipient_addresses.iter())
Comment on lines +260 to +263
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was probably the trickiest part of the merge -- given the changes on both sides to this, I had to make sure pgf_recipient_addresses was still accounted for (which it is, as you can see).

.chain(validators_addresses.iter())
.chain(native_addresses.iter())
.cloned()
.collect::<HashSet<_>>();

Expand All @@ -272,7 +273,13 @@ async fn crawling_fn(
)
.await
.into_rpc_error()?;
tracing::info!("Updating balance for {} addresses...", addresses.len());

tracing::debug!(
block = block_height,
addresses = all_balance_changed_addresses.len(),
"Updating balance for {} addresses...",
all_balance_changed_addresses.len()
);

let next_governance_proposal_id =
namada_service::query_next_governance_id(&client, block_height)
Expand All @@ -298,12 +305,18 @@ async fn crawling_fn(
proposals_votes.len()
);

let validators = block.validators();
let validators = block.new_validators();
let validator_set = ValidatorSet {
validators: validators.clone(),
epoch,
};

let validators_state_change = block.update_validators_state();
tracing::debug!(
"Updating {} validators state",
validators_state_change.len()
);

let addresses = block.bond_addresses();
let bonds = query_bonds(&client, addresses).await.into_rpc_error()?;
tracing::debug!(
Expand Down Expand Up @@ -368,6 +381,7 @@ async fn crawling_fn(
withdraws = withdraw_addreses.len(),
claimed_rewards = reward_claimers.len(),
revealed_pks = revealed_pks.len(),
validator_state = validators_state_change.len(),
epoch = epoch,
first_block_in_epoch = first_block_in_epoch,
block = block_height,
Expand All @@ -383,6 +397,12 @@ async fn crawling_fn(
ibc_tokens,
)?;

repository::block::upsert_block(
transaction_conn,
block,
tm_block_response,
)?;

repository::balance::insert_balances(
transaction_conn,
balances,
Expand All @@ -402,6 +422,11 @@ async fn crawling_fn(
validator_set,
)?;

repository::pos::upsert_validator_state(
transaction_conn,
validators_state_change,
)?;

// We first remove all the bonds and then insert the new ones
repository::pos::clear_bonds(
transaction_conn,
Expand Down Expand Up @@ -453,29 +478,35 @@ async fn crawling_fn(
async fn initial_query(
client: &HttpClient,
conn: &Object,
checksums: Checksums,
retry_time: u64,
retry_attempts: usize,
) -> Result<(), MainError> {
let retry_strategy = ExponentialBackoff::from_millis(retry_time)
.map(jitter)
.take(retry_attempts);
Retry::spawn(retry_strategy, || try_initial_query(client, conn)).await
Retry::spawn(retry_strategy, || {
try_initial_query(client, conn, checksums.clone())
})
.await
}

async fn try_initial_query(
client: &HttpClient,
conn: &Object,
checksums: Checksums,
) -> Result<(), MainError> {
tracing::debug!("Querying initial data...");
let block_height =
query_last_block_height(client).await.into_rpc_error()?;
let epoch = namada_service::get_epoch_at_block_height(client, block_height)
.await
.into_rpc_error()?;

let first_block_in_epoch = namada_service::get_first_block_in_epoch(client)
.await
.into_rpc_error()?;

let (block, tm_block_response, epoch) =
get_block(block_height, client, checksums.clone()).await?;

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

// This can sometimes fail if the last block height in the node has moved
Expand Down Expand Up @@ -535,6 +566,12 @@ async fn try_initial_query(
.run(|transaction_conn| {
repository::balance::insert_tokens(transaction_conn, tokens)?;

repository::block::upsert_block(
transaction_conn,
block,
tm_block_response,
)?;

tracing::debug!(
block = block_height,
"Inserting {} balances...",
Expand Down Expand Up @@ -611,3 +648,60 @@ async fn update_crawler_timestamp(
.and_then(identity)
.into_db_error()
}

async fn get_block(
block_height: u32,
client: &HttpClient,
checksums: Checksums,
) -> Result<(Block, TendermintBlockResponse, u32), MainError> {
tracing::debug!(block = block_height, "Query block...");
let tm_block_response =
tendermint_service::query_raw_block_at_height(client, block_height)
.await
.into_rpc_error()?;
tracing::debug!(
block = block_height,
"Raw block contains {} txs...",
tm_block_response.block.data.len()
);

tracing::debug!(block = block_height, "Query block results...");
let tm_block_results_response =
tendermint_service::query_raw_block_results_at_height(
client,
block_height,
)
.await
.into_rpc_error()?;
let block_results = BlockResult::from(tm_block_results_response);

tracing::debug!(block = block_height, "Query epoch...");
let epoch = namada_service::get_epoch_at_block_height(client, block_height)
.await
.into_rpc_error()?;

let proposer_address_namada = namada_service::get_validator_namada_address(
client,
&Id::from(&tm_block_response.block.header.proposer_address),
)
.await
.into_rpc_error()?;

tracing::info!(
block = block_height,
tm_address = tm_block_response.block.header.proposer_address.to_string(),
namada_address = ?proposer_address_namada,
"Got block proposer address"
);

let block = Block::from(
&tm_block_response,
&block_results,
&proposer_address_namada,
checksums,
epoch,
block_height,
);

Ok((block, tm_block_response, epoch))
}
Loading
Loading