From a51f3eb553a8dc8192c46c10f5c146d1455cd4aa Mon Sep 17 00:00:00 2001 From: yito88 Date: Thu, 20 Jun 2024 10:15:42 +0200 Subject: [PATCH] refactoring: add trace.rs --- crates/apps_lib/src/cli/context.rs | 3 +- crates/ibc/src/context/common.rs | 4 +- crates/ibc/src/context/nft_transfer.rs | 16 +-- crates/ibc/src/context/token_transfer.rs | 8 +- crates/ibc/src/lib.rs | 44 +------ crates/ibc/src/storage.rs | 114 +----------------- crates/namada/src/ledger/ibc/mod.rs | 2 +- crates/namada/src/ledger/native_vp/ibc/mod.rs | 21 ++-- crates/namada/src/ledger/native_vp/masp.rs | 2 +- .../namada/src/ledger/native_vp/multitoken.rs | 2 +- crates/sdk/src/rpc.rs | 2 +- crates/sdk/src/tx.rs | 5 +- crates/sdk/src/wallet/mod.rs | 2 +- crates/tests/src/vm_host_env/ibc.rs | 5 +- crates/tests/src/vm_host_env/mod.rs | 4 +- crates/tx_prelude/src/ibc.rs | 4 +- 16 files changed, 49 insertions(+), 189 deletions(-) diff --git a/crates/apps_lib/src/cli/context.rs b/crates/apps_lib/src/cli/context.rs index db94b7ad9a1..58b58629602 100644 --- a/crates/apps_lib/src/cli/context.rs +++ b/crates/apps_lib/src/cli/context.rs @@ -11,9 +11,8 @@ use namada::core::chain::ChainId; use namada::core::ethereum_events::EthAddress; use namada::core::key::*; use namada::core::masp::*; -use namada::ibc::{is_ibc_denom, is_nft_trace}; +use namada::ibc::trace::{ibc_token, is_ibc_denom, is_nft_trace}; use namada::io::Io; -use namada::ledger::ibc::storage::ibc_token; use namada_sdk::masp::fs::FsShieldedUtils; use namada_sdk::masp::ShieldedContext; use namada_sdk::wallet::Wallet; diff --git a/crates/ibc/src/context/common.rs b/crates/ibc/src/context/common.rs index dcc14b7049b..cf91029bfbd 100644 --- a/crates/ibc/src/context/common.rs +++ b/crates/ibc/src/context/common.rs @@ -34,7 +34,7 @@ use sha2::Digest; use super::client::{AnyClientState, AnyConsensusState}; use super::storage::IbcStorageContext; -use crate::{storage, NftClass, NftMetadata}; +use crate::{storage, trace, NftClass, NftMetadata}; /// Result of IBC common function call pub type Result = std::result::Result; @@ -716,7 +716,7 @@ pub trait IbcCommonContext: IbcStorageContext { token_id: &TokenId, owner: &Address, ) -> Result { - let ibc_token = storage::ibc_token_for_nft(class_id, token_id); + let ibc_token = trace::ibc_token_for_nft(class_id, token_id); let balance_key = balance_key(&ibc_token, owner); let amount = self.read::(&balance_key)?; Ok(amount == Some(Amount::from_u64(1))) diff --git a/crates/ibc/src/context/nft_transfer.rs b/crates/ibc/src/context/nft_transfer.rs index 85d9aad44ef..e7317ba94ed 100644 --- a/crates/ibc/src/context/nft_transfer.rs +++ b/crates/ibc/src/context/nft_transfer.rs @@ -17,7 +17,7 @@ use namada_core::address::Address; use namada_core::token::Amount; use super::common::IbcCommonContext; -use crate::{storage, NftClass, NftMetadata, IBC_ESCROW_ADDRESS}; +use crate::{trace, NftClass, NftMetadata, IBC_ESCROW_ADDRESS}; /// NFT transfer context to handle tokens #[derive(Debug)] @@ -95,8 +95,8 @@ where class_id: &PrefixedClassId, token_id: &TokenId, ) -> Result<(), NftTransferError> { - let ibc_trace = format!("{class_id}/{token_id}"); - let trace_hash = storage::calc_hash(&ibc_trace); + let ibc_trace = trace::ibc_trace_for_nft(class_id, token_id); + let trace_hash = trace::calc_hash(&ibc_trace); self.inner .borrow_mut() @@ -241,7 +241,7 @@ where class_id: &PrefixedClassId, token_id: &TokenId, ) -> Option { - Some(storage::calc_hash(format!("{class_id}/{token_id}"))) + Some(trace::calc_hash(format!("{class_id}/{token_id}"))) } /// Returns the NFT @@ -300,7 +300,7 @@ where token_id: &TokenId, _memo: &Memo, ) -> Result<(), NftTransferError> { - let ibc_token = storage::ibc_token_for_nft(class_id, token_id); + let ibc_token = trace::ibc_token_for_nft(class_id, token_id); self.add_withdraw(&ibc_token)?; @@ -324,7 +324,7 @@ where class_id: &PrefixedClassId, token_id: &TokenId, ) -> Result<(), NftTransferError> { - let ibc_token = storage::ibc_token_for_nft(class_id, token_id); + let ibc_token = trace::ibc_token_for_nft(class_id, token_id); self.add_deposit(&ibc_token)?; @@ -347,7 +347,7 @@ where token_uri: Option<&TokenUri>, token_data: Option<&TokenData>, ) -> Result<(), NftTransferError> { - let ibc_token = storage::ibc_token_for_nft(class_id, token_id); + let ibc_token = trace::ibc_token_for_nft(class_id, token_id); // create or update the metadata let metadata = NftMetadata { @@ -378,7 +378,7 @@ where token_id: &TokenId, _memo: &Memo, ) -> Result<(), NftTransferError> { - let ibc_token = storage::ibc_token_for_nft(class_id, token_id); + let ibc_token = trace::ibc_token_for_nft(class_id, token_id); self.update_mint_amount(&ibc_token, false)?; self.add_withdraw(&ibc_token)?; diff --git a/crates/ibc/src/context/token_transfer.rs b/crates/ibc/src/context/token_transfer.rs index ca1128ea687..7d0ebee13e2 100644 --- a/crates/ibc/src/context/token_transfer.rs +++ b/crates/ibc/src/context/token_transfer.rs @@ -17,7 +17,7 @@ use namada_core::uint::Uint; use namada_token::Amount; use super::common::IbcCommonContext; -use crate::{storage, IBC_ESCROW_ADDRESS}; +use crate::{trace, IBC_ESCROW_ADDRESS}; /// Token transfer context to handle tokens #[derive(Debug)] @@ -54,7 +54,7 @@ where ) -> Result<(Address, Amount), TokenTransferError> { let token = match Address::decode(coin.denom.base_denom.as_str()) { Ok(token_addr) if coin.denom.trace_path.is_empty() => token_addr, - _ => storage::ibc_token(coin.denom.to_string()), + _ => trace::ibc_token(coin.denom.to_string()), }; // Convert IBC amount to Namada amount for the token @@ -146,7 +146,7 @@ where return Ok(()); } let ibc_denom = coin.denom.to_string(); - let trace_hash = storage::calc_hash(&ibc_denom); + let trace_hash = trace::calc_hash(&ibc_denom); self.inner .borrow_mut() @@ -224,7 +224,7 @@ where } fn denom_hash_string(&self, denom: &PrefixedDenom) -> Option { - Some(storage::calc_hash(denom.to_string())) + Some(trace::calc_hash(denom.to_string())) } } diff --git a/crates/ibc/src/lib.rs b/crates/ibc/src/lib.rs index a52e7f982e9..494cad14205 100644 --- a/crates/ibc/src/lib.rs +++ b/crates/ibc/src/lib.rs @@ -24,12 +24,12 @@ mod msg; mod nft; pub mod parameters; pub mod storage; +pub mod trace; use std::cell::RefCell; use std::collections::BTreeSet; use std::fmt::Debug; use std::rc::Rc; -use std::str::FromStr; pub use actions::transfer_over_ibc; use borsh::BorshDeserialize; @@ -48,16 +48,13 @@ use ibc::apps::nft_transfer::handler::{ use ibc::apps::nft_transfer::types::error::NftTransferError; use ibc::apps::nft_transfer::types::{ ack_success_b64, is_receiver_chain_source as is_nft_receiver_chain_source, - PrefixedClassId, TokenId, TracePath as NftTracePath, - TracePrefix as NftTracePrefix, + PrefixedClassId, TokenId, TracePrefix as NftTracePrefix, }; use ibc::apps::transfer::handler::{ send_transfer_execute, send_transfer_validate, }; use ibc::apps::transfer::types::error::TokenTransferError; -use ibc::apps::transfer::types::{ - is_receiver_chain_source, PrefixedDenom, TracePath, TracePrefix, -}; +use ibc::apps::transfer::types::{is_receiver_chain_source, TracePrefix}; use ibc::core::channel::types::acknowledgement::{ Acknowledgement, AcknowledgementStatus, }; @@ -385,7 +382,7 @@ fn received_ibc_trace( } if let Some((trace_path, base_class_id, token_id)) = - is_nft_trace(&base_trace) + trace::is_nft_trace(&base_trace) { let mut class_id = PrefixedClassId { trace_path, @@ -433,41 +430,10 @@ pub fn received_ibc_token( dest_port_id, dest_channel_id, )?; - storage::convert_to_address(ibc_trace) + trace::convert_to_address(ibc_trace) .map_err(|e| Error::Trace(format!("Invalid base token: {e}"))) } -/// Returns the trace path and the token string if the denom is an IBC -/// denom. -pub fn is_ibc_denom(denom: impl AsRef) -> Option<(TracePath, String)> { - let prefixed_denom = PrefixedDenom::from_str(denom.as_ref()).ok()?; - let base_denom = prefixed_denom.base_denom.to_string(); - if prefixed_denom.trace_path.is_empty() || base_denom.contains('/') { - // The denom is just a token or an NFT trace - return None; - } - // The base token isn't decoded because it could be non Namada token - Some((prefixed_denom.trace_path, base_denom)) -} - -/// Returns the trace path and the token string if the trace is an NFT one -pub fn is_nft_trace( - trace: impl AsRef, -) -> Option<(NftTracePath, String, String)> { - // The trace should be {port}/{channel}/.../{class_id}/{token_id} - if let Some((class_id, token_id)) = trace.as_ref().rsplit_once('/') { - let prefixed_class_id = PrefixedClassId::from_str(class_id).ok()?; - // The base token isn't decoded because it could be non Namada token - Some(( - prefixed_class_id.trace_path, - prefixed_class_id.base_class_id.to_string(), - token_id.to_string(), - )) - } else { - None - } -} - #[cfg(any(test, feature = "testing"))] /// Testing helpers ans strategies for IBC pub mod testing { diff --git a/crates/ibc/src/storage.rs b/crates/ibc/src/storage.rs index 7c02e377026..44b6da1ff03 100644 --- a/crates/ibc/src/storage.rs +++ b/crates/ibc/src/storage.rs @@ -2,10 +2,7 @@ use std::str::FromStr; -use ibc::apps::nft_transfer::types::{ - PrefixedClassId, TokenId, TracePath as NftTracePath, -}; -use ibc::apps::transfer::types::{PrefixedDenom, TracePath}; +use ibc::apps::nft_transfer::types::{PrefixedClassId, TokenId}; use ibc::core::client::types::Height; use ibc::core::host::types::identifiers::{ ChannelId, ClientId, ConnectionId, PortId, Sequence, @@ -15,19 +12,18 @@ use ibc::core::host::types::path::{ ClientStatePath, CommitmentPath, ConnectionPath, Path, PortPath, ReceiptPath, SeqAckPath, SeqRecvPath, SeqSendPath, }; -use namada_core::address::{Address, InternalAddress, HASH_LEN, SHA_HASH_LEN}; -use namada_core::ibc::IbcTokenHash; +use namada_core::address::{Address, InternalAddress}; use namada_core::storage::{DbKeySeg, Key, KeySeg}; use namada_core::token::Amount; use namada_events::{EmitEvents, EventLevel}; use namada_state::{StorageRead, StorageResult, StorageWrite}; use namada_token as token; use namada_token::event::{TokenEvent, TokenOperation, UserAccount}; -use sha2::{Digest, Sha256}; use thiserror::Error; use crate::event::TOKEN_EVENT_DESCRIPTOR; use crate::parameters::IbcParameters; +use crate::trace::{ibc_token, ibc_token_for_nft}; const CLIENTS_COUNTER_PREFIX: &str = "clients"; const CONNECTIONS_COUNTER_PREFIX: &str = "connections"; @@ -483,110 +479,6 @@ pub fn ibc_trace_key( .expect("Cannot obtain a storage key") } -/// Hash the denom -#[inline] -pub fn calc_hash(denom: impl AsRef) -> String { - calc_ibc_token_hash(denom).to_string() -} - -/// Hash the denom -pub fn calc_ibc_token_hash(denom: impl AsRef) -> IbcTokenHash { - let hash = { - let mut hasher = Sha256::new(); - hasher.update(denom.as_ref()); - hasher.finalize() - }; - - let input: &[u8; SHA_HASH_LEN] = hash.as_ref(); - let mut output = [0; HASH_LEN]; - - output.copy_from_slice(&input[..HASH_LEN]); - IbcTokenHash(output) -} - -/// Obtain the IbcToken with the hash from the given denom -pub fn ibc_token(denom: impl AsRef) -> Address { - let hash = calc_ibc_token_hash(&denom); - Address::Internal(InternalAddress::IbcToken(hash)) -} - -/// Obtain the IbcToken with the hash from the given NFT class ID and NFT ID -pub fn ibc_token_for_nft( - class_id: &PrefixedClassId, - token_id: &TokenId, -) -> Address { - ibc_token(ibc_trace_for_nft(class_id, token_id)) -} - -/// Obtain the IBC trace from the given NFT class ID and NFT ID -pub fn ibc_trace_for_nft( - class_id: &PrefixedClassId, - token_id: &TokenId, -) -> String { - format!("{class_id}/{token_id}") -} - -/// Convert the given IBC trace to [`Address`] -pub fn convert_to_address(ibc_trace: impl AsRef) -> Result
{ - // validation - if is_ibc_denom(&ibc_trace).is_none() && is_nft_trace(&ibc_trace).is_none() - { - return Err(Error::InvalidIbcTrace(format!( - "Invalid IBC trace: {}", - ibc_trace.as_ref() - ))); - } - - if ibc_trace.as_ref().contains('/') { - Ok(ibc_token(ibc_trace.as_ref())) - } else { - Address::decode(ibc_trace.as_ref()) - .map_err(|e| Error::InvalidIbcTrace(e.to_string())) - } -} - -/// Returns the trace path and the token string if the denom is an IBC -/// denom. -pub fn is_ibc_denom(denom: impl AsRef) -> Option<(TracePath, String)> { - let prefixed_denom = PrefixedDenom::from_str(denom.as_ref()).ok()?; - let base_denom = prefixed_denom.base_denom.to_string(); - if prefixed_denom.trace_path.is_empty() || base_denom.contains('/') { - // The denom is just a token or an NFT trace - return None; - } - // The base token isn't decoded because it could be non Namada token - Some((prefixed_denom.trace_path, base_denom)) -} - -/// Returns the trace path and the token string if the trace is an NFT one -pub fn is_nft_trace( - trace: impl AsRef, -) -> Option<(NftTracePath, String, String)> { - // The trace should be {port}/{channel}/.../{class_id}/{token_id} - if let Some((class_id, token_id)) = trace.as_ref().rsplit_once('/') { - let prefixed_class_id = PrefixedClassId::from_str(class_id).ok()?; - // The base token isn't decoded because it could be non Namada token - Some(( - prefixed_class_id.trace_path, - prefixed_class_id.base_class_id.to_string(), - token_id.to_string(), - )) - } else { - None - } -} - -/// Return true if the source of the given IBC trace is this chain -pub fn is_sender_chain_source( - trace: impl AsRef, - src_port_id: &PortId, - src_channel_id: &ChannelId, -) -> bool { - !trace - .as_ref() - .starts_with(&format!("{src_port_id}/{src_channel_id}")) -} - /// Returns true if the given key is for IBC pub fn is_ibc_key(key: &Key) -> bool { matches!(&key.segments[0], diff --git a/crates/namada/src/ledger/ibc/mod.rs b/crates/namada/src/ledger/ibc/mod.rs index 4076a1de929..be7f4f5144e 100644 --- a/crates/namada/src/ledger/ibc/mod.rs +++ b/crates/namada/src/ledger/ibc/mod.rs @@ -6,7 +6,7 @@ use namada_ibc::storage::{ channel_counter_key, client_counter_key, connection_counter_key, deposit_prefix, withdraw_prefix, }; -pub use namada_ibc::{parameters, storage}; +pub use namada_ibc::{parameters, storage, trace}; use namada_state::{ DBIter, Key, State, StorageError, StorageHasher, StorageRead, StorageWrite, WlState, DB, diff --git a/crates/namada/src/ledger/native_vp/ibc/mod.rs b/crates/namada/src/ledger/native_vp/ibc/mod.rs index 303e4abcdce..14de956f35a 100644 --- a/crates/namada/src/ledger/native_vp/ibc/mod.rs +++ b/crates/namada/src/ledger/native_vp/ibc/mod.rs @@ -28,9 +28,10 @@ use thiserror::Error; use crate::ibc::core::host::types::identifiers::ChainId as IbcChainId; use crate::ledger::ibc::storage::{ - calc_hash, deposit_key, get_limits, is_ibc_key, is_ibc_trace_key, - mint_amount_key, withdraw_key, + deposit_key, get_limits, is_ibc_key, is_ibc_trace_key, mint_amount_key, + withdraw_key, }; +use crate::ledger::ibc::trace::calc_hash; use crate::ledger::native_vp::{self, Ctx, NativeVp}; use crate::ledger::parameters::read_epoch_duration_parameter; use crate::token::storage_key::is_any_token_balance_key; @@ -506,14 +507,14 @@ mod tests { use crate::ibc::primitives::proto::{Any, Protobuf}; use crate::ibc::primitives::{Timestamp, ToProto}; use crate::ibc::storage::{ - ack_key, calc_hash, channel_counter_key, channel_key, - client_connections_key, client_counter_key, client_state_key, - client_update_height_key, client_update_timestamp_key, commitment_key, - connection_counter_key, connection_key, consensus_state_key, ibc_token, - ibc_trace_key, mint_amount_key, next_sequence_ack_key, - next_sequence_recv_key, next_sequence_send_key, nft_class_key, - nft_metadata_key, receipt_key, + ack_key, channel_counter_key, channel_key, client_connections_key, + client_counter_key, client_state_key, client_update_height_key, + client_update_timestamp_key, commitment_key, connection_counter_key, + connection_key, consensus_state_key, ibc_trace_key, mint_amount_key, + next_sequence_ack_key, next_sequence_recv_key, next_sequence_send_key, + nft_class_key, nft_metadata_key, receipt_key, }; + use crate::ibc::trace::{calc_hash, ibc_token}; use crate::ibc::{MsgNftTransfer, MsgTransfer, NftClass, NftMetadata}; use crate::key::testing::keypair_1; use crate::ledger::gas::VpGasMeter; @@ -3016,7 +3017,7 @@ mod tests { let class_id = get_nft_class_id(); let token_id = get_nft_id(); let sender = established_address_1(); - let ibc_token = ibc::storage::ibc_token_for_nft(&class_id, &token_id); + let ibc_token = ibc::trace::ibc_token_for_nft(&class_id, &token_id); let balance_key = balance_key(&ibc_token, &sender); let amount = Amount::from_u64(1); state diff --git a/crates/namada/src/ledger/native_vp/masp.rs b/crates/namada/src/ledger/native_vp/masp.rs index fe8b88069d0..234531314d1 100644 --- a/crates/namada/src/ledger/native_vp/masp.rs +++ b/crates/namada/src/ledger/native_vp/masp.rs @@ -24,7 +24,7 @@ use namada_gas::GasMetering; use namada_governance::storage::is_proposal_accepted; use namada_ibc::core::channel::types::msgs::MsgRecvPacket as IbcMsgRecvPacket; use namada_ibc::core::host::types::identifiers::{ChannelId, PortId, Sequence}; -use namada_ibc::storage::{ +use namada_ibc::trace::{ convert_to_address, ibc_trace_for_nft, is_sender_chain_source, }; use namada_ibc::IbcMessage; diff --git a/crates/namada/src/ledger/native_vp/multitoken.rs b/crates/namada/src/ledger/native_vp/multitoken.rs index 1d88396dd25..e55df8a9574 100644 --- a/crates/namada/src/ledger/native_vp/multitoken.rs +++ b/crates/namada/src/ledger/native_vp/multitoken.rs @@ -418,7 +418,7 @@ mod tests { }; use crate::key::testing::keypair_1; use crate::ledger::gas::VpGasMeter; - use crate::ledger::ibc::storage::ibc_token; + use crate::ledger::ibc::trace::ibc_token; use crate::storage::TxIndex; use crate::token::storage_key::{balance_key, minted_balance_key}; use crate::vm::wasm::compilation_cache::common::testing::cache as wasm_cache; diff --git a/crates/sdk/src/rpc.rs b/crates/sdk/src/rpc.rs index 8b42fea4110..94b1653698d 100644 --- a/crates/sdk/src/rpc.rs +++ b/crates/sdk/src/rpc.rs @@ -32,10 +32,10 @@ use namada_governance::storage::proposal::StorageProposal; use namada_governance::utils::{ compute_proposal_result, ProposalResult, ProposalVotes, Vote, }; -use namada_ibc::is_ibc_denom; use namada_ibc::storage::{ ibc_trace_key, ibc_trace_key_prefix, is_ibc_trace_key, }; +use namada_ibc::trace::is_ibc_denom; use namada_parameters::{storage as params_storage, EpochDuration}; use namada_proof_of_stake::parameters::PosParams; use namada_proof_of_stake::types::{ diff --git a/crates/sdk/src/tx.rs b/crates/sdk/src/tx.rs index 0c4dd1a6dc2..d123f04456c 100644 --- a/crates/sdk/src/tx.rs +++ b/crates/sdk/src/tx.rs @@ -50,8 +50,9 @@ use namada_governance::storage::proposal::{ InitProposalData, ProposalType, VoteProposalData, }; use namada_governance::storage::vote::ProposalVote; -use namada_ibc::storage::{channel_key, convert_to_address}; -use namada_ibc::{is_nft_trace, MsgNftTransfer, MsgTransfer}; +use namada_ibc::storage::channel_key; +use namada_ibc::trace::{convert_to_address, is_nft_trace}; +use namada_ibc::{MsgNftTransfer, MsgTransfer}; use namada_proof_of_stake::parameters::{ PosParams, MAX_VALIDATOR_METADATA_LEN, }; diff --git a/crates/sdk/src/wallet/mod.rs b/crates/sdk/src/wallet/mod.rs index d071af5ccc6..c05afcda6b9 100644 --- a/crates/sdk/src/wallet/mod.rs +++ b/crates/sdk/src/wallet/mod.rs @@ -22,7 +22,7 @@ use namada_core::masp::{ ExtendedSpendingKey, ExtendedViewingKey, PaymentAddress, }; use namada_core::time::DateTimeUtc; -use namada_ibc::is_ibc_denom; +use namada_ibc::trace::is_ibc_denom; pub use pre_genesis::gen_key_to_store; use rand::CryptoRng; use rand_core::RngCore; diff --git a/crates/tests/src/vm_host_env/ibc.rs b/crates/tests/src/vm_host_env/ibc.rs index d84aa6cd5b7..4baf4dd6d58 100644 --- a/crates/tests/src/vm_host_env/ibc.rs +++ b/crates/tests/src/vm_host_env/ibc.rs @@ -59,9 +59,10 @@ pub use namada::ledger::ibc::storage::{ ack_key, channel_counter_key, channel_key, client_counter_key, client_state_key, client_update_height_key, client_update_timestamp_key, commitment_key, connection_counter_key, connection_key, - consensus_state_key, ibc_token, next_sequence_ack_key, - next_sequence_recv_key, next_sequence_send_key, port_key, receipt_key, + consensus_state_key, next_sequence_ack_key, next_sequence_recv_key, + next_sequence_send_key, port_key, receipt_key, }; +pub use namada::ledger::ibc::trace::ibc_token; use namada::ledger::native_vp::ibc::{ get_dummy_genesis_validator, get_dummy_header as tm_dummy_header, Ibc, }; diff --git a/crates/tests/src/vm_host_env/mod.rs b/crates/tests/src/vm_host_env/mod.rs index 3740ba6ee7c..5a46738f767 100644 --- a/crates/tests/src/vm_host_env/mod.rs +++ b/crates/tests/src/vm_host_env/mod.rs @@ -33,7 +33,7 @@ mod tests { use namada::ibc::context::transfer_mod::testing::DummyTransferModule; use namada::ibc::primitives::ToProto; use namada::ibc::Error as IbcActionError; - use namada::ledger::ibc::storage as ibc_storage; + use namada::ledger::ibc::{storage as ibc_storage, trace as ibc_trace}; use namada::ledger::native_vp::ibc::{ get_dummy_header as tm_dummy_header, Error as IbcError, }; @@ -1281,7 +1281,7 @@ mod tests { writes.extend(channel_writes); // the origin-specific token let denom = format!("{}/{}/{}", port_id, channel_id, token); - let ibc_token = ibc_storage::ibc_token(&denom); + let ibc_token = ibc_trace::ibc_token(&denom); let balance_key = token::storage_key::balance_key(&ibc_token, &sender); let init_bal = Amount::native_whole(100); writes.insert(balance_key.clone(), init_bal.serialize_to_vec()); diff --git a/crates/tx_prelude/src/ibc.rs b/crates/tx_prelude/src/ibc.rs index 678e27ccf8e..b11625656ab 100644 --- a/crates/tx_prelude/src/ibc.rs +++ b/crates/tx_prelude/src/ibc.rs @@ -8,9 +8,9 @@ use namada_core::address::Address; use namada_core::token::Amount; pub use namada_ibc::event::{IbcEvent, IbcEventType}; pub use namada_ibc::storage::{ - burn_tokens, ibc_token, is_ibc_key, mint_limit_key, mint_tokens, - throughput_limit_key, + burn_tokens, is_ibc_key, mint_limit_key, mint_tokens, throughput_limit_key, }; +pub use namada_ibc::trace::ibc_token; pub use namada_ibc::{ IbcActions, IbcCommonContext, IbcStorageContext, NftTransferModule, ProofSpec, TransferModule,