Skip to content

Commit 12d4ef2

Browse files
committed
fix token supplies
1 parent 630937c commit 12d4ef2

File tree

9 files changed

+65
-53
lines changed

9 files changed

+65
-53
lines changed

chain/src/main.rs

Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use chain::services::{
1717
use chrono::{NaiveDateTime, Utc};
1818
use clap::Parser;
1919
use deadpool_diesel::postgres::Object;
20-
use futures::future::FutureExt;
2120
use futures::stream::StreamExt;
2221
use namada_sdk::time::DateTimeUtc;
2322
use orm::migrations::CustomMigrationSource;
@@ -287,13 +286,14 @@ async fn crawling_fn(
287286
native_token.clone(),
288287
));
289288
let addresses = block.addresses_with_balance_change(&native_token);
289+
let all_changed_tokens_supply = addresses
290+
.iter()
291+
.map(|bc| bc.token.clone())
292+
.collect::<HashSet<_>>();
290293

291-
let token_supplies = first_block_in_epoch
292-
.eq(&block_height)
293-
.then(|| query_token_supplies(&client, &conn, &native_token, epoch))
294-
.future()
295-
.await
296-
.transpose()?;
294+
let token_supplies =
295+
query_token_supplies(&client, &all_changed_tokens_supply, epoch)
296+
.await?;
297297

298298
let validators_addresses = if first_block_in_epoch.eq(&block_height) {
299299
let previous_epoch = epoch.saturating_sub(1);
@@ -492,7 +492,7 @@ async fn crawling_fn(
492492

493493
repository::balance::insert_token_supplies(
494494
transaction_conn,
495-
token_supplies.into_iter().flatten(),
495+
token_supplies,
496496
)?;
497497

498498
repository::balance::insert_ibc_rate_limits(
@@ -641,10 +641,12 @@ async fn try_initial_query(
641641
.into_rpc_error()
642642
};
643643
let token_supplies_fut = async {
644-
let native_token = namada_service::get_native_token(client)
645-
.await
646-
.into_rpc_error()?;
647-
query_token_supplies(client, conn, &native_token, epoch).await
644+
query_token_supplies(
645+
client,
646+
&tokens.iter().cloned().collect::<HashSet<_>>(),
647+
epoch,
648+
)
649+
.await
648650
};
649651

650652
let (rate_limits, token_supplies) =
@@ -874,22 +876,31 @@ async fn get_block(
874876
Ok((block, tm_block_response, epoch))
875877
}
876878

877-
async fn query_non_native_supplies(
879+
async fn query_token_supplies(
878880
client: &HttpClient,
879-
conn: &Object,
881+
tokens: &HashSet<Token>,
880882
epoch: u32,
881883
) -> Result<Vec<TokenSupply>, MainError> {
882-
let token_addresses = db_service::get_non_native_tokens(conn)
883-
.await
884-
.into_db_error()?;
885-
886-
let mut buffer = Vec::with_capacity(1);
887-
888-
let mut stream = futures::stream::iter(token_addresses)
889-
.map(|address| async move {
890-
namada_service::get_token_supply(client, address, epoch)
884+
let mut buffer = Vec::with_capacity(tokens.len());
885+
886+
let mut stream = futures::stream::iter(tokens)
887+
.map(|token| async move {
888+
match token {
889+
Token::Ibc(ibc_token) => namada_service::get_token_supply(
890+
client,
891+
ibc_token.address.to_string(),
892+
epoch,
893+
)
891894
.await
892-
.into_rpc_error()
895+
.into_rpc_error(),
896+
Token::Native(address) => {
897+
namada_service::get_native_token_supply(
898+
client, address, epoch,
899+
)
900+
.await
901+
.into_rpc_error()
902+
}
903+
}
893904
})
894905
.buffer_unordered(32);
895906

@@ -900,23 +911,3 @@ async fn query_non_native_supplies(
900911

901912
Ok(buffer)
902913
}
903-
904-
async fn query_token_supplies(
905-
client: &HttpClient,
906-
conn: &Object,
907-
native_token: &Id,
908-
epoch: u32,
909-
) -> Result<Vec<TokenSupply>, MainError> {
910-
let native_fut =
911-
namada_service::get_native_token_supply(client, native_token, epoch)
912-
.map(|result| result.into_rpc_error());
913-
914-
let non_native_fut = query_non_native_supplies(client, conn, epoch);
915-
916-
let (native, non_native) = futures::try_join!(native_fut, non_native_fut)?;
917-
918-
let mut supplies = non_native;
919-
supplies.push(native);
920-
921-
Ok(supplies)
922-
}

chain/src/repository/balance.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,9 @@ mod tests {
283283
address: Id::Account(
284284
"tnam1q9rhgyv3ydq0zu3whnftvllqnvhvhm270qxay5tn".to_string(),
285285
),
286-
trace: Id::Account(
286+
trace: Some(Id::Account(
287287
"tnam1q9rhgyv3ydq0zu3whnftvllqnvhvhm270qxay5tn".to_string(),
288-
),
288+
)),
289289
});
290290

291291
let new_amount = Amount::from(NamadaAmount::from_u64(200));

chain/src/services/namada.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ async fn query_ibc_tokens(
218218

219219
let token = IbcToken {
220220
address: Id::from(ibc_token_addr),
221-
trace: Id::IbcTrace(ibc_trace.clone()),
221+
trace: Some(Id::IbcTrace(ibc_trace.clone())),
222222
};
223223

224224
tokens.insert(token);

orm/src/token.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl IbcTokenDb {
5151
match token {
5252
Token::Ibc(token) => Some(IbcTokenDb {
5353
address: token.address.to_string(),
54-
ibc_trace: token.trace.to_string(),
54+
ibc_trace: token.clone().trace.unwrap_or_default().to_string(),
5555
}),
5656
Token::Native(_) => None,
5757
}

shared/src/block.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,11 @@ impl Block {
746746
transfer_changes.0.keys().map(|account| {
747747
BalanceChange::new(
748748
Id::Account(account.owner()),
749-
Token::Native(Id::Account(account.token())),
749+
Token::new(
750+
&account.token(),
751+
None,
752+
&native_token.to_string(),
753+
),
750754
)
751755
})
752756
})

shared/src/token.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::id::Id;
88
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize)]
99
pub struct IbcToken {
1010
pub address: Id,
11-
pub trace: Id,
11+
pub trace: Option<Id>,
1212
}
1313

1414
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize)]
@@ -26,6 +26,23 @@ impl Display for Token {
2626
}
2727
}
2828

29+
impl Token {
30+
pub fn new(
31+
token: &str,
32+
ibc_trace: Option<String>,
33+
native_address: &str,
34+
) -> Self {
35+
if !token.eq(native_address) {
36+
Token::Ibc(IbcToken {
37+
address: Id::Account(token.to_string()),
38+
trace: ibc_trace.map(Id::IbcTrace),
39+
})
40+
} else {
41+
Token::Native(Id::Account(token.to_string()))
42+
}
43+
}
44+
}
45+
2946
#[derive(Debug)]
3047
pub struct IbcRateLimit {
3148
/// Address of the token in Namada

shared/src/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ fn get_ibc_token(
440440
token_address.clone(),
441441
crate::token::Token::Ibc(crate::token::IbcToken {
442442
address: token_address.into(),
443-
trace: Id::IbcTrace(ibc_trace),
443+
trace: Some(Id::IbcTrace(ibc_trace)),
444444
}),
445445
)
446446
} else {

webserver/src/response/chain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl From<SharedToken> for Token {
100100
}),
101101
SharedToken::Ibc(token) => Token::Ibc(IbcToken {
102102
address: token.address.to_string(),
103-
trace: token.trace.to_string(),
103+
trace: token.trace.unwrap_or_default().to_string(),
104104
}),
105105
}
106106
}

webserver/src/service/chain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl ChainService {
5959
.map(|(token, ibc_token)| match ibc_token {
6060
Some(ibc_token) => Token::Ibc(IbcToken {
6161
address: Id::Account(ibc_token.address),
62-
trace: Id::IbcTrace(ibc_token.ibc_trace),
62+
trace: Some(Id::IbcTrace(ibc_token.ibc_trace)),
6363
}),
6464
None => Token::Native(Id::Account(token.address)),
6565
})

0 commit comments

Comments
 (0)