Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add sudo kv result example #ntrn-72 #23

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions artifacts/checksums.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
a1ef441857823ba4f78dfb8546e2aa0d1eb89ae2ea7f5bf03e6b4749415aaabd client_updater-aarch64.wasm
c0190cf28da64b4058da71a9083c187d45f84ee7b9db11a0830025ecb0a687dc client_updater.wasm
7b498111f63e75fd889cb6b5d050fc76b49949ac32448f6142b30490c872eed5 echo-aarch64.wasm
4ee0b1e8a1c39e7a440f236778e76935f29506f354b6a59712d267181da77678 echo.wasm
f9323687ea56c83a064e1d1c846d80681e0f683be8ac3da1b937e696f36e6d23 ibc_transfer-aarch64.wasm
fec7d4b6280569bd4ca428d1f5b52702a3378533f50362e1c3f1c848c4e91303 ibc_transfer.wasm
01b8a5d340cd35fb29f5147419e08f8a3beadf6432a767acd309864743138f5b msg_receiver-aarch64.wasm
af52c56fb25355afa04d86c7d9e867f9db9295a455fb8a89f9cfdbd6374dd1ff msg_receiver.wasm
05e49fb2d0295c9a9e27a0077da856126f8285c2e949cb1f927f08fa8a867c8e neutron_interchain_queries.wasm
19d3ea0f4f0a24d202edbd2a7989dcffa61ba3d6754ff382cbd89d4ecd034a67 neutron_interchain_txs.wasm
4de9175518fe8a977a3d737ab9d24506d8d1091fab21d67a618235ec8e80bf09 neutron_interchain_queries-aarch64.wasm
318e67b0b20dab60d699c7b9f317c75a7faed1f0639a2f8113d8211e5e67fd56 neutron_interchain_queries.wasm
6107ec2613d79567e9c667604edab64b80f092f070b6205e4e6ab663ff3bc6a7 neutron_interchain_txs-aarch64.wasm
a4a791f2586120d0fdb1074917738aea3f12c4fbec97daab0d6002c6f0174a20 neutron_interchain_txs.wasm
39fe35203897b1f596b5b58e49c57561fd755b9528bebe4282af09b5e7e43a48 neutron_price_feed_mock-aarch64.wasm
344ec19c522cc5e6135a77a181345f02a0f65ef19ad919d5236dc16f53d33e76 neutron_price_feed_mock.wasm
d7eb170010a96f240ddb20f0a24384356f13e952a2b31713e4196f0ecdfaf23d neutron_validators_test-aarch64.wasm
4678704ef3ffd9f1240b719991dc629623929fa75499fd6ed9f76eda4c8a556a neutron_validators_test.wasm
56105ea5c68b9831e23f37022d75dbbcfba2d3d562df12749eb842bc9404ea80 reflect-aarch64.wasm
c24970beb5a08bfc73dc422e63207342343802a329f28d527b4accaaf66209f8 reflect.wasm
fb0ba66fd51ea2fce885e97229df1eedf180f483c199f8db06f4475e39d642a6 stargate_querier-aarch64.wasm
e3ab89e1d88381142c6a970daafceda3cb3fde6f8222e450834045d1f7c9f971 stargate_querier.wasm
f55ca14dc212f7e7477966e85d427c1f9e94c9146738e60960ea98728dd4dd82 tokenfactory-aarch64.wasm
a9ee139212dca756adbde1e86723154b1fd79dc96cbc7e4885a851d8c978e946 tokenfactory.wasm
10 changes: 5 additions & 5 deletions artifacts/checksums_intermediate.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
d89ba235e130977d1f79ac4d7f9252f6f6bed3002dfc1d08227ba138acec70b1 target/wasm32-unknown-unknown/release/client_updater.wasm
a67c60c5853497b890d67dd2bfed1caf0984a03af01ec67c877e63688970814e target/wasm32-unknown-unknown/release/echo.wasm
bebad52462ca1ddc557ae7ea3fc09aab0a11dd86497027a473f885bbe0c91d6c target/wasm32-unknown-unknown/release/ibc_transfer.wasm
b09e4f513e19e78b5ea08e10d26dc4d61056a4c6f534e783039f32494c39021b target/wasm32-unknown-unknown/release/neutron_interchain_queries.wasm
43c926644f096ba26d356c34f0f409b94b793d8398b1845e5fe03ffee7400e0c target/wasm32-unknown-unknown/release/neutron_interchain_txs.wasm
f1ec0aa2f9c84a8b0d63d877fb6dcaf2d25c30023740f3ef53072496124c7dce target/wasm32-unknown-unknown/release/msg_receiver.wasm
08936d05b855d169095ba9a1a7aa250813060c279c67aa2521856b7d3f233d99 target/wasm32-unknown-unknown/release/neutron_interchain_queries.wasm
aec49a8db7a72a832743dbcfbd194fec823359a1e92237388455b3d3ebd44e7c target/wasm32-unknown-unknown/release/neutron_interchain_txs.wasm
e947d71ddeb4f6e61d756b48981bedae6973e0b25a9d873c3bba5e9878079d8b target/wasm32-unknown-unknown/release/neutron_price_feed_mock.wasm
8893279611c69a5ca55628f0476e943ca60b8900cb0ae17fefc2f38c4e472215 target/wasm32-unknown-unknown/release/neutron_validators_test.wasm
b260fdda36208b9017f0f142821fa3bb47f3d3dea86901d687cf3d3da00946e0 target/wasm32-unknown-unknown/release/reflect.wasm
fc80abbf059bafa21b25162af22ddb963a1ea1c6ab4dd671855adb3e1f8a8a84 target/wasm32-unknown-unknown/release/tokenfactory.wasm
d89ba235e130977d1f79ac4d7f9252f6f6bed3002dfc1d08227ba138acec70b1 target/wasm32-unknown-unknown/release/client_updater.wasm
f1ec0aa2f9c84a8b0d63d877fb6dcaf2d25c30023740f3ef53072496124c7dce target/wasm32-unknown-unknown/release/msg_receiver.wasm
0cd5cb6ac3532b558fffa62d501936ccbe748cddf465746ad639ac3a166066ce target/wasm32-unknown-unknown/release/stargate_querier.wasm
fc80abbf059bafa21b25162af22ddb963a1ea1c6ab4dd671855adb3e1f8a8a84 target/wasm32-unknown-unknown/release/tokenfactory.wasm
Binary file added artifacts/neutron_interchain_queries.wasm
Binary file not shown.
Binary file modified artifacts/neutron_interchain_txs.wasm
Binary file not shown.
Binary file added artifacts/neutron_validators_test.wasm
Binary file not shown.
Binary file added artifacts/reflect.wasm
Binary file not shown.
64 changes: 48 additions & 16 deletions contracts/neutron_interchain_queries/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,46 @@
// See the License for the specific language governing permissions and
// limitations under the License.

use cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend;
use cosmwasm_std::{
entry_point, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult,
SubMsg,
};
use cw2::set_contract_version;
use prost::Message as ProstMessage;

use crate::integration_tests_mock_handlers::{set_query_mock, unset_query_mock};
use crate::msg::{
ExecuteMsg, GetRecipientTxsResponse, GetTransfersAmountResponse, InstantiateMsg,
KvCallbackStatsResponse, MigrateMsg, QueryMsg,
};
use crate::state::{
IntegrationTestsQueryMock, Transfer, INTEGRATION_TESTS_QUERY_MOCK, KV_CALLBACK_STATS,
RECIPIENT_TXS, TRANSFERS,
IntegrationTestsQueryMock, QueryKind, Transfer, INTEGRATION_TESTS_QUERY_MOCK,
KV_CALLBACK_STATS, KV_QUERY_ID_TO_CALLBACKS, RECIPIENT_TXS, TRANSFERS,
};
use cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend;
use cosmos_sdk_proto::cosmos::tx::v1beta1::{TxBody, TxRaw};
use cosmwasm_std::{
entry_point, to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult,
};
use cw2::set_contract_version;
use neutron_sdk::bindings::msg::NeutronMsg;
use neutron_sdk::bindings::query::{NeutronQuery, QueryRegisteredQueryResponse};
use neutron_sdk::bindings::types::{Height, KVKey};
use neutron_sdk::interchain_queries::get_registered_query;
use neutron_sdk::interchain_queries::types::{
QueryPayload, TransactionFilterItem, TransactionFilterOp, TransactionFilterValue,
};
use neutron_sdk::interchain_queries::v045::queries::{
query_balance, query_bank_total, query_delegations, query_distribution_fee_pool,
query_government_proposals, query_staking_validators,
};
use neutron_sdk::interchain_queries::v045::types::{COSMOS_SDK_TRANSFER_MSG_URL, RECIPIENT_FIELD};
use neutron_sdk::interchain_queries::v045::types::{
Balances, COSMOS_SDK_TRANSFER_MSG_URL, RECIPIENT_FIELD,
};
use neutron_sdk::interchain_queries::v045::{
new_register_balance_query_msg, new_register_bank_total_supply_query_msg,
new_register_delegator_delegations_query_msg, new_register_distribution_fee_pool_query_msg,
new_register_gov_proposal_query_msg, new_register_staking_validators_query_msg,
new_register_transfers_query_msg,
};
use neutron_sdk::interchain_queries::{get_registered_query, query_kv_result};
use neutron_sdk::sudo::msg::SudoMsg;
use neutron_sdk::{NeutronError, NeutronResult};
use prost::Message as ProstMessage;
use serde_json_wasm;

/// defines the incoming transfers limit to make a case of failed callback possible.
Expand All @@ -57,6 +61,8 @@ const MAX_ALLOWED_MESSAGES: usize = 20;
const CONTRACT_NAME: &str = concat!("crates.io:neutron-contracts__", env!("CARGO_PKG_NAME"));
const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION");

const BALANCES_REPLY_ID: u64 = 1;

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut,
Expand Down Expand Up @@ -120,7 +126,7 @@ pub fn execute(
new_update_period,
new_recipient,
} => update_interchain_query(query_id, new_keys, new_update_period, new_recipient),
ExecuteMsg::RemoveInterchainQuery { query_id } => remove_interchain_query(query_id),
ExecuteMsg::RemoveInterchainQuery { query_id } => remove_interchain_query(deps, query_id),
ExecuteMsg::IntegrationTestsSetQueryMock {} => set_query_mock(deps),
ExecuteMsg::IntegrationTestsUnsetQueryMock {} => unset_query_mock(deps),
ExecuteMsg::IntegrationTestsRegisterQueryEmptyId { connection_id } => {
Expand All @@ -142,8 +148,10 @@ pub fn register_balance_query(
update_period: u64,
) -> NeutronResult<Response<NeutronMsg>> {
let msg = new_register_balance_query_msg(connection_id, addr, denom, update_period)?;
// wrap into submessage to save {query_id, query_type} on reply that'll later be used to handle sudo kv callback
let submsg = SubMsg::reply_on_success(msg, BALANCES_REPLY_ID);

Ok(Response::new().add_message(msg))
Ok(Response::default().add_submessage(submsg))
}

pub fn register_bank_total_supply_query(
Expand Down Expand Up @@ -270,8 +278,12 @@ pub fn update_interchain_query(
Ok(Response::new().add_message(update_msg))
}

pub fn remove_interchain_query(query_id: u64) -> NeutronResult<Response<NeutronMsg>> {
pub fn remove_interchain_query(
deps: DepsMut<NeutronQuery>,
query_id: u64,
) -> NeutronResult<Response<NeutronMsg>> {
let remove_msg = NeutronMsg::remove_interchain_query(query_id);
KV_QUERY_ID_TO_CALLBACKS.remove(deps.storage, query_id);
Ok(Response::new().add_message(remove_msg))
}

Expand Down Expand Up @@ -499,8 +511,28 @@ pub fn sudo_kv_query_result(
// store last KV callback update time
KV_CALLBACK_STATS.save(deps.storage, query_id, &env.block.height)?;

// TODO: provide an actual example. Currently to many things are going to change
// after @pro0n00gler's PRs to implement this.

let query_kind = KV_QUERY_ID_TO_CALLBACKS.may_load(deps.storage, query_id)?;
match query_kind {
Some(QueryKind::Balance) => {
let balances: Balances = query_kv_result(deps.as_ref(), query_id)?;
let balances_str = balances
.coins
.iter()
.map(|c| c.amount.to_string() + c.denom.as_str())
.collect::<Vec<String>>()
.join(", ");
deps.api
.debug(format!("WASMDEBUG: sudo callback; balances: {:?}", balances_str).as_str());
}
None => {
deps.api.debug(
format!(
"WASMDEBUG: sudo callback without query kind assigned; query_id: {:?}",
query_id
)
.as_str(),
);
}
}
Ok(Response::default())
}
10 changes: 10 additions & 0 deletions contracts/neutron_interchain_queries/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,13 @@ pub enum IntegrationTestsQueryMock {
}

pub const KV_CALLBACK_STATS: Map<u64, u64> = Map::new("kv_callback_stats");

pub const KV_QUERY_ID_TO_CALLBACKS: Map<u64, QueryKind> = Map::new("kv_query_id_to_callbacks");

// contains query kinds that we expect to handle in `sudo_kv_query_result`
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub enum QueryKind {
// Balance query
Balance,
// You can add your handlers to understand what query to deserialize by query_id in sudo callback
}
Loading