stellar-interchain-token-service 2.0.0

InterchainTokenService contract, responsible for allowing users/developers to easily create their own token bridge.
Documentation
use stellar_axelar_gas_service::testutils::setup_gas_token;
use stellar_axelar_std::address::AddressExt;
use stellar_axelar_std::testutils::Address as _;
use stellar_axelar_std::traits::BytesExt;
use stellar_axelar_std::{assert_contract_err, Address, Bytes, String};

use super::utils::setup_env;
use crate::error::ContractError;
use crate::testutils::setup_its_token;

#[test]
fn send_directly_to_hub_chain_fails() {
    let (env, client, _gateway_client, _, _) = setup_env();

    let sender: Address = Address::generate(&env);
    let amount = 1;
    let (token_id, _) = setup_its_token(&env, &client, &sender, amount);
    let gas_token = setup_gas_token(&env, &sender);

    assert_contract_err!(
        client.mock_all_auths().try_interchain_transfer(
            &sender,
            &token_id,
            &client.its_hub_chain_name(),
            &Bytes::from_hex(&env, "1234"),
            &amount,
            &None,
            &Some(gas_token),
        ),
        ContractError::UntrustedChain
    );
}

#[test]
fn send_to_untrusted_chain_fails() {
    let (env, client, _gateway_client, _, _) = setup_env();
    client
        .mock_all_auths()
        .set_trusted_chain(&client.its_hub_chain_name());

    let sender: Address = Address::generate(&env);
    let amount = 1;
    let (token_id, _) = setup_its_token(&env, &client, &sender, amount);
    let gas_token = setup_gas_token(&env, &sender);

    assert_contract_err!(
        client.mock_all_auths().try_interchain_transfer(
            &sender,
            &token_id,
            &String::from_str(&env, "untrusted_chain"),
            &Address::generate(&env).to_string_bytes(),
            &amount,
            &None,
            &Some(gas_token),
        ),
        ContractError::UntrustedChain
    );
}