Skip to content

Commit

Permalink
Merge branch 'main' into feat/starknet-gmp
Browse files Browse the repository at this point in the history
  • Loading branch information
ctoyan authored Jan 27, 2025
2 parents 356c990 + f7fb035 commit 7ac3558
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ goldie = { version = "0.5" }
heck = "0.5.0"
hex = "0.4.3"
integration-tests = { version = "^1.0.0", path = "integration-tests" }
interchain-token-service = { version = "^1.0.0", path = "contracts/interchain-token-service" }
interchain-token-service = { version = "^1.1.0", path = "contracts/interchain-token-service" }
into-inner-derive = { version = "^1.0.0", path = "packages/into-inner-derive" }
itertools = "0.11.0"
k256 = { version = "0.13.1", features = ["ecdsa"] }
Expand Down
2 changes: 1 addition & 1 deletion contracts/interchain-token-service/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "interchain-token-service"
version = "1.0.0"
version = "1.1.0"
rust-version = { workspace = true }
edition = { workspace = true }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,28 +299,86 @@ pub fn register_custom_token(
register_token.token_address.clone(),
)
.change_context(Error::State)?;
ensure!(
existing_token.is_none(),
Error::TokenAlreadyRegistered(register_token.token_address)
);

state::save_custom_token_metadata(storage, source_chain, register_token)
.change_context(Error::State)
if let Some(existing_token) = existing_token {
ensure!(
existing_token.decimals == register_token.decimals,
Error::TokenDecimalsMismatch {
token_address: register_token.token_address,
existing_decimals: existing_token.decimals,
new_decimals: register_token.decimals
}
);
} else {
state::save_custom_token_metadata(storage, source_chain, register_token)
.change_context(Error::State)?;
}

Ok(())
}

#[cfg(test)]
mod test {
use assert_ok::assert_ok;
use axelar_wasm_std::assert_err_contains;
use cosmwasm_std::testing::MockStorage;
use cosmwasm_std::Uint256;
use cosmwasm_std::{HexBinary, Uint256};
use router_api::ChainNameRaw;

use super::Error;
use super::{register_custom_token, Error};
use crate::contract::execute::interceptors;
use crate::msg::TruncationConfig;
use crate::state::{self, TokenDeploymentType};
use crate::{msg, DeployInterchainToken, InterchainTransfer, TokenInstance};
use crate::{
msg, DeployInterchainToken, InterchainTransfer, RegisterTokenMetadata, TokenInstance,
};

#[test]
fn register_custom_token_allows_reregistration() {
let mut storage = MockStorage::new();
let source_chain = ChainNameRaw::try_from("source-chain").unwrap();
let register_token_msg = RegisterTokenMetadata {
decimals: 6,
token_address: HexBinary::from([0; 32]).try_into().unwrap(),
};
assert_ok!(register_custom_token(
&mut storage,
source_chain.clone(),
register_token_msg.clone()
));
assert_ok!(register_custom_token(
&mut storage,
source_chain,
register_token_msg
));
}

#[test]
fn register_custom_token_errors_on_decimals_mismatch() {
let mut storage = MockStorage::new();
let source_chain = ChainNameRaw::try_from("source-chain").unwrap();
let register_token_msg = RegisterTokenMetadata {
decimals: 6,
token_address: HexBinary::from([0; 32]).try_into().unwrap(),
};
assert_ok!(register_custom_token(
&mut storage,
source_chain.clone(),
register_token_msg.clone()
));
assert_err_contains!(
register_custom_token(
&mut storage,
source_chain,
RegisterTokenMetadata {
decimals: 12,
..register_token_msg
}
),
Error,
Error::TokenDecimalsMismatch { .. }
);
}

#[test]
fn apply_scaling_factor_to_amount_when_source_decimals_are_bigger() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,12 @@ pub enum Error {
},
#[error("token not registered {0}")]
TokenNotRegistered(nonempty::HexBinary),
#[error("token already registered {0}")]
TokenAlreadyRegistered(nonempty::HexBinary),
#[error("attempted to register token {token_address} with {new_decimals} but already registered with {existing_decimals} decimals")]
TokenDecimalsMismatch {
token_address: nonempty::HexBinary,
existing_decimals: u8,
new_decimals: u8,
},
#[error("failed to query axelarnet gateway for chain name")]
FailedToQueryAxelarnetGateway,
}
Expand Down

0 comments on commit 7ac3558

Please sign in to comment.