diff --git a/Cargo.lock b/Cargo.lock index ea31203..6328169 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1131,7 +1131,7 @@ dependencies = [ [[package]] name = "neutron-sdk" version = "0.11.0" -source = "git+https://github.com/neutron-org/neutron-sdk?branch=main#e0e697a5c8f2960da1c1e6f4a5fd42b1c0dfb5b7" +source = "git+https://github.com/neutron-org/neutron-sdk?branch=main#8ef5964a964f592feab90389ef6d73bc270113b3" dependencies = [ "bech32 0.9.1", "chrono", @@ -1155,7 +1155,7 @@ dependencies = [ [[package]] name = "neutron-std-derive" version = "0.20.1" -source = "git+https://github.com/neutron-org/neutron-sdk?branch=main#e0e697a5c8f2960da1c1e6f4a5fd42b1c0dfb5b7" +source = "git+https://github.com/neutron-org/neutron-sdk?branch=main#8ef5964a964f592feab90389ef6d73bc270113b3" dependencies = [ "itertools 0.10.5", "proc-macro2", @@ -1380,7 +1380,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.66", diff --git a/contracts/neutron_interchain_txs/schema/execute_msg.json b/contracts/neutron_interchain_txs/schema/execute_msg.json index 6841b02..d80aedf 100644 --- a/contracts/neutron_interchain_txs/schema/execute_msg.json +++ b/contracts/neutron_interchain_txs/schema/execute_msg.json @@ -20,6 +20,16 @@ }, "interchain_account_id": { "type": "string" + }, + "ordering": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelOrdering" + }, + { + "type": "null" + } + ] } }, "additionalProperties": false @@ -242,7 +252,7 @@ "additionalProperties": false }, { - "description": "Used only in integration tests framework to simulate failures. After executing this message, any sudo call to the contract will result in an submessage processing error.", + "description": "Used only in integration tests framework to simulate failures. After executing this message, any sudo call to the contract will result in a submessage processing error.", "type": "object", "required": [ "integration_tests_set_sudo_submsg_failure_mock" @@ -256,7 +266,7 @@ "additionalProperties": false }, { - "description": "Used only in integration tests framework to simulate failures. After executing this message, any sudo call to the contract will result in an submessage reply processing error.", + "description": "Used only in integration tests framework to simulate failures. After executing this message, any sudo call to the contract will result in a submessage reply processing error.", "type": "object", "required": [ "integration_tests_set_sudo_submsg_reply_failure_mock" @@ -299,6 +309,13 @@ } ], "definitions": { + "ChannelOrdering": { + "type": "string", + "enum": [ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + }, "IntegrationTestsSudoFailureMock": { "type": "string", "enum": [ diff --git a/contracts/neutron_interchain_txs/src/contract.rs b/contracts/neutron_interchain_txs/src/contract.rs index efc4660..5efba78 100644 --- a/contracts/neutron_interchain_txs/src/contract.rs +++ b/contracts/neutron_interchain_txs/src/contract.rs @@ -34,7 +34,7 @@ use crate::integration_tests_mock_handlers::{ use crate::msg::{ AcknowledgementResultsResponse, ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, }; -use neutron_sdk::bindings::msg::{IbcFee, NeutronMsg}; +use neutron_sdk::bindings::msg::{ChannelOrdering, IbcFee, NeutronMsg}; use neutron_sdk::bindings::query::{NeutronQuery, QueryInterchainAccountAddressResponse}; use neutron_sdk::bindings::types::ProtobufAny; use neutron_sdk::interchain_txs::helpers::{decode_message_response, get_port_id}; @@ -108,7 +108,8 @@ pub fn execute( ExecuteMsg::Register { connection_id, interchain_account_id, - } => execute_register_ica(deps, env, connection_id, interchain_account_id), + ordering, + } => execute_register_ica(deps, env, connection_id, interchain_account_id, ordering), ExecuteMsg::Delegate { validator, interchain_account_id, @@ -307,12 +308,14 @@ fn execute_register_ica( env: Env, connection_id: String, interchain_account_id: String, + ordering: Option, ) -> StdResult> { let register_fee = REGISTER_FEE.load(deps.storage)?; let register = NeutronMsg::register_interchain_account( connection_id, interchain_account_id.clone(), Option::from(register_fee), + ordering, ); let key = get_port_id(env.contract.address.as_str(), &interchain_account_id); INTERCHAIN_ACCOUNTS.save(deps.storage, key, &None)?; diff --git a/contracts/neutron_interchain_txs/src/msg.rs b/contracts/neutron_interchain_txs/src/msg.rs index 298ba7b..a6ed4b0 100644 --- a/contracts/neutron_interchain_txs/src/msg.rs +++ b/contracts/neutron_interchain_txs/src/msg.rs @@ -1,5 +1,6 @@ use crate::storage::{AcknowledgementResult, IntegrationTestsSudoFailureMock}; use cosmwasm_std::Uint128; +use neutron_sdk::bindings::msg::ChannelOrdering; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -38,6 +39,7 @@ pub enum ExecuteMsg { Register { connection_id: String, interchain_account_id: String, + ordering: Option, }, SetFees { denom: String, @@ -76,11 +78,11 @@ pub enum ExecuteMsg { state: IntegrationTestsSudoFailureMock, }, /// Used only in integration tests framework to simulate failures. - /// After executing this message, any sudo call to the contract will result in an submessage + /// After executing this message, any sudo call to the contract will result in a submessage /// processing error. IntegrationTestsSetSudoSubmsgFailureMock {}, /// Used only in integration tests framework to simulate failures. - /// After executing this message, any sudo call to the contract will result in an submessage + /// After executing this message, any sudo call to the contract will result in a submessage /// reply processing error. IntegrationTestsSetSudoSubmsgReplyFailureMock {}, /// Used only in integration tests framework to simulate failures. diff --git a/contracts/neutron_validator_test/src/contract.rs b/contracts/neutron_validator_test/src/contract.rs index 31ee097..fc1b9d8 100644 --- a/contracts/neutron_validator_test/src/contract.rs +++ b/contracts/neutron_validator_test/src/contract.rs @@ -32,7 +32,7 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; -use neutron_sdk::bindings::msg::{IbcFee, NeutronMsg}; +use neutron_sdk::bindings::msg::{ChannelOrdering, IbcFee, NeutronMsg}; use neutron_sdk::bindings::query::{ NeutronQuery, QueryInterchainAccountAddressResponse, QueryRegisteredQueryResponse, }; @@ -267,8 +267,12 @@ fn execute_register_ica( connection_id: String, interchain_account_id: String, ) -> NeutronResult> { - let register = - NeutronMsg::register_interchain_account(connection_id, interchain_account_id.clone(), None); + let register = NeutronMsg::register_interchain_account( + connection_id, + interchain_account_id.clone(), + None, + Some(ChannelOrdering::OrderOrdered), + ); let key = get_port_id(env.contract.address.as_str(), &interchain_account_id); INTERCHAIN_ACCOUNTS.save(deps.storage, key, &None)?; Ok(Response::new().add_message(register)) diff --git a/contracts/reflect/schema/execute_msg.json b/contracts/reflect/schema/execute_msg.json index ac3033f..b07557b 100644 --- a/contracts/reflect/schema/execute_msg.json +++ b/contracts/reflect/schema/execute_msg.json @@ -310,6 +310,13 @@ }, "additionalProperties": false }, + "ChannelOrdering": { + "type": "string", + "enum": [ + "ORDER_ORDERED", + "ORDER_UNORDERED" + ] + }, "ClearAdminProposal": { "description": "Deprecated. SudoContractProposal defines the struct for clear admin proposal.", "deprecated": true, @@ -1338,6 +1345,17 @@ "description": "**interchain_account_id** is an identifier of your new interchain account. Can be any string. This identifier allows contracts to have multiple interchain accounts on remote chains.", "type": "string" }, + "ordering": { + "description": "**ordering** is an order of channel. Can be ordered or unordered. Set to ordered if not specified.", + "anyOf": [ + { + "$ref": "#/definitions/ChannelOrdering" + }, + { + "type": "null" + } + ] + }, "register_fee": { "description": "*register_fee** is a fees required to be payed to register interchain account", "type": [ @@ -1473,7 +1491,7 @@ ], "properties": { "new_keys": { - "description": "*new_keys** is the new query keys to retrive.", + "description": "*new_keys** is the new query keys to retrieve.", "type": [ "array", "null" diff --git a/contracts/reflect/src/contract.rs b/contracts/reflect/src/contract.rs index f9ebb8b..cf4033c 100644 --- a/contracts/reflect/src/contract.rs +++ b/contracts/reflect/src/contract.rs @@ -74,7 +74,14 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResul pub fn reply(_deps: DepsMut, _env: Env, msg: Reply) -> StdResult { match msg.id { REFLECT_REPLY_ID => { - Ok(Response::default().set_data(msg.result.unwrap().msg_responses[0].clone().value)) + let res = Response::default(); + + let msg_responses = msg.result.unwrap().msg_responses; + if msg_responses.is_empty() { + Ok(res) + } else { + Ok(res.set_data(msg_responses[0].clone().value)) + } } _ => { unimplemented!()