diff --git a/contract/Cargo.lock b/contract/Cargo.lock index 2016245b..2e3ee8e6 100644 --- a/contract/Cargo.lock +++ b/contract/Cargo.lock @@ -105,11 +105,17 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + [[package]] name = "bindgen" -version = "0.68.1" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2" dependencies = [ "bitflags 2.4.0", "cexpr", @@ -280,9 +286,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "coreum-test-tube" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebb23809ce2cfff57b99de62879a8dec69a30ccd6b245f8f9b2080950596b33" +checksum = "dd605c41b1d0d05b54039747b87723345c20779be7c125f8746d83f19a4accb7" dependencies = [ "base64 0.20.0", "bindgen", @@ -298,9 +304,9 @@ dependencies = [ [[package]] name = "coreum-wasm-sdk" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be523a53d7cd0efa94c790bcda6f3e960f816c5db9272e008e9b2fa58ee4f9ad" +checksum = "de2207655b1d9ddbb228d96b9900d8726ebead2d382a893492806230ead2daa0" dependencies = [ "chrono", "cosmwasm-schema", @@ -366,11 +372,12 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6fb22494cf7d23d0c348740e06e5c742070b2991fd41db77bba0bcfbae1a723" +checksum = "d8bb3c77c3b7ce472056968c745eb501c440fbc07be5004eba02782c35bfbbe3" dependencies = [ "digest 0.10.7", + "ecdsa", "ed25519-zebra", "k256", "rand_core 0.6.4", @@ -379,9 +386,9 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e199424486ea97d6b211db6387fd72e26b4a439d40cc23140b2d8305728055b" +checksum = "fea73e9162e6efde00018d55ed0061e93a108b5d6ec4548b4f8ce3c706249687" dependencies = [ "syn 1.0.109", ] @@ -412,11 +419,12 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d89d680fb60439b7c5947b15f9c84b961b88d1f8a3b20c4bd178a3f87db8bae" +checksum = "04d6864742e3a7662d024b51a94ea81c9af21db6faea2f9a6d2232bb97c6e53e" dependencies = [ "base64 0.21.4", + "bech32", "bnum", "cosmwasm-crypto", "cosmwasm-derive", @@ -427,6 +435,7 @@ dependencies = [ "serde", "serde-json-wasm", "sha2 0.10.8", + "static_assertions", "thiserror", ] @@ -1307,9 +1316,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "osmosis-std-derive" -version = "0.16.2" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47f0b2f22adb341bb59e5a3a1b464dde033181954bd055b9ae86d6511ba465b" +checksum = "c5ebdfd1bc8ed04db596e110c6baa9b174b04f6ed1ec22c666ddc5cb3fa91bd7" dependencies = [ "itertools 0.10.5", "proc-macro2", @@ -1765,9 +1774,9 @@ checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] @@ -1801,9 +1810,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", @@ -1823,9 +1832,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -1939,6 +1948,12 @@ dependencies = [ "der", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "subtle" version = "2.5.0" @@ -2116,18 +2131,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", diff --git a/contract/Cargo.toml b/contract/Cargo.toml index 6ac98290..a0060c1c 100644 --- a/contract/Cargo.toml +++ b/contract/Cargo.toml @@ -24,7 +24,7 @@ incremental = false overflow-checks = true [dependencies] -coreum-wasm-sdk = "0.2.0" +coreum-wasm-sdk = "0.2.3" cosmwasm-schema = "1.4.1" cosmwasm-std = { version = "1.4.1", features = ["cosmwasm_1_1"] } cw-ownable = "0.5.1" @@ -37,5 +37,5 @@ sha2 = "0.10.8" thiserror = "1.0.49" [dev-dependencies] -coreum-test-tube = "3.0.0" +coreum-test-tube = "3.0.1" rand = "0.8.5" diff --git a/contract/src/contract.rs b/contract/src/contract.rs index 2739b3c9..64f53c91 100644 --- a/contract/src/contract.rs +++ b/contract/src/contract.rs @@ -26,7 +26,7 @@ use coreum_wasm_sdk::{ core::{CoreumMsg, CoreumQueries, CoreumResult}, }; use cosmwasm_std::{ - coin, coins, entry_point, to_binary, Addr, Binary, CosmosMsg, Deps, DepsMut, Empty, Env, + coin, entry_point, to_json_binary, Addr, Binary, CosmosMsg, Deps, DepsMut, Empty, Env, MessageInfo, Order, Response, StdResult, Uint128, }; use cw2::set_contract_version; @@ -109,8 +109,10 @@ pub fn instantiate( initial_amount: Uint128::zero(), description: None, features: Some(vec![MINTING, BURNING, IBC]), - burn_rate: Some("0.0".to_string()), - send_commission_rate: Some("0.0".to_string()), + burn_rate: "0.0".to_string(), + send_commission_rate: "0.0".to_string(), + uri: None, + uri_hash: None, })); let xrp_in_coreum = format!("{}-{}", XRP_SUBUNIT, env.contract.address).to_lowercase(); @@ -285,8 +287,10 @@ fn register_xrpl_token( initial_amount: Uint128::zero(), description: None, features: Some(vec![MINTING, BURNING, IBC]), - burn_rate: Some("0.0".to_string()), - send_commission_rate: Some("0.0".to_string()), + burn_rate: "0.0".to_string(), + send_commission_rate: "0.0".to_string(), + uri: None, + uri_hash: None, })); // Denom that token will have in Coreum @@ -382,12 +386,12 @@ fn save_evidence(deps: DepsMut, sender: Addr, evidence: Evidence) -> CoreumResul } if threshold_reached { - response = add_mint_and_send( - response, - amount_to_send, - token.coreum_denom, - recipient.clone(), - ); + let mint_msg = CosmosMsg::from(CoreumMsg::AssetFT(assetft::Msg::Mint { + coin: coin(amount_to_send.u128(), token.coreum_denom), + recipient: Some(recipient.to_string()), + })); + + response = response.add_message(mint_msg) } response = response @@ -539,17 +543,17 @@ fn register_signature( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::Config {} => to_binary(&query_config(deps)?), + QueryMsg::Config {} => to_json_binary(&query_config(deps)?), QueryMsg::XRPLTokens { offset, limit } => { - to_binary(&query_xrpl_tokens(deps, offset, limit)?) + to_json_binary(&query_xrpl_tokens(deps, offset, limit)?) } QueryMsg::CoreumTokens { offset, limit } => { - to_binary(&query_coreum_tokens(deps, offset, limit)?) + to_json_binary(&query_coreum_tokens(deps, offset, limit)?) } - QueryMsg::CoreumToken { denom } => to_binary(&query_coreum_token(deps, denom)?), - QueryMsg::Ownership {} => to_binary(&get_ownership(deps.storage)?), - QueryMsg::PendingOperations {} => to_binary(&query_pending_operations(deps)?), - QueryMsg::AvailableTickets {} => to_binary(&query_available_tickets(deps)?), + QueryMsg::CoreumToken { denom } => to_json_binary(&query_coreum_token(deps, denom)?), + QueryMsg::Ownership {} => to_json_binary(&get_ownership(deps.storage)?), + QueryMsg::PendingOperations {} => to_json_binary(&query_pending_operations(deps)?), + QueryMsg::AvailableTickets {} => to_json_binary(&query_available_tickets(deps)?), } } @@ -632,25 +636,6 @@ fn check_issue_fee(deps: &DepsMut, info: &MessageInfo) -> Result< Ok(()) } -// TODO(keyleu): In the future we might have a way to do this in one instruction. -fn add_mint_and_send( - response: Response, - amount: Uint128, - denom: String, - recipient: Addr, -) -> Response { - let mint_msg = CosmosMsg::from(CoreumMsg::AssetFT(assetft::Msg::Mint { - coin: coin(amount.u128(), denom.clone()), - })); - - let send_msg = CosmosMsg::Bank(cosmwasm_std::BankMsg::Send { - to_address: recipient.to_string(), - amount: coins(amount.u128(), denom), - }); - - response.add_messages([mint_msg, send_msg]) -} - pub fn build_xrpl_token_key(issuer: String, currency: String) -> String { // Issuer+currency is the key we use to find an XRPL let mut key = issuer; diff --git a/contract/src/tests.rs b/contract/src/tests.rs index 241cd958..e0bcb58b 100644 --- a/contract/src/tests.rs +++ b/contract/src/tests.rs @@ -333,6 +333,8 @@ mod tests { ], burn_rate: "0".to_string(), send_commission_rate: "0".to_string(), + uri: "".to_string(), + uri_hash: "".to_string(), version: 1 } );