From 012a81857bff3c35fd1323e30473a6771f670efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Mon, 10 Nov 2025 16:01:44 +0000 Subject: [PATCH] included sample contract queries --- Cargo.lock | 11 ++++ Cargo.toml | 2 +- Makefile | 3 +- contracts/example-contract/Makefile | 5 ++ contracts/example-contract/src/contract.rs | 4 +- query-tester/Cargo.toml | 21 ++++++ query-tester/src/main.rs | 76 ++++++++++++++++++++++ 7 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 contracts/example-contract/Makefile create mode 100644 query-tester/Cargo.toml create mode 100644 query-tester/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index e9d1b051cc..3301c28b25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8601,6 +8601,17 @@ dependencies = [ "psl-types", ] +[[package]] +name = "query-tester" +version = "0.1.0" +dependencies = [ + "anyhow", + "nym-network-defaults", + "nym-validator-client", + "serde", + "tokio", +] + [[package]] name = "quick-error" version = "2.0.1" diff --git a/Cargo.toml b/Cargo.toml index c07db1f4ba..bee9539520 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -166,7 +166,7 @@ members = [ "wasm/node-tester", "wasm/zknym-lib", "nym-gateway-probe" -] +, "query-tester"] default-members = [ "clients/native", diff --git a/Makefile b/Makefile index eb58f2ab5c..91081b7191 100644 --- a/Makefile +++ b/Makefile @@ -140,7 +140,8 @@ clippy: sdk-wasm-lint WASM_CONTRACT_DIR := contracts/target/wasm32-unknown-unknown/release # Find every direct contract folder that contains a Cargo.toml -CONTRACT_DIRS := $(shell find contracts -type f -name Cargo.toml \( ! -path "contracts/Cargo.toml" \) | grep -v integration-tests | xargs -n1 dirname | sort -u) +#CONTRACT_DIRS := $(shell find contracts -type f -name Cargo.toml \( ! -path "contracts/Cargo.toml" \) | grep -v integration-tests | xargs -n1 dirname | sort -u) +CONTRACT_DIRS := contracts/example-contract CONTRACTS_OUT_DIR = contracts/artifacts diff --git a/contracts/example-contract/Makefile b/contracts/example-contract/Makefile new file mode 100644 index 0000000000..086fa71ad3 --- /dev/null +++ b/contracts/example-contract/Makefile @@ -0,0 +1,5 @@ +wasm: + RUSTFLAGS='-C link-arg=-s' cargo build --release --target wasm32-unknown-unknown + +generate-schema: + cargo schema diff --git a/contracts/example-contract/src/contract.rs b/contracts/example-contract/src/contract.rs index 07fe8840cf..3145d87195 100644 --- a/contracts/example-contract/src/contract.rs +++ b/contracts/example-contract/src/contract.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use cosmwasm_std::{ - entry_point, to_json_binary, Addr, Coin, Deps, DepsMut, Env, MessageInfo, QueryResponse, + entry_point, to_json_binary, Addr, Coin, Deps, DepsMut, Env, Event, MessageInfo, QueryResponse, Response, }; use cw_storage_plus::Item; @@ -69,7 +69,7 @@ pub fn execute( .map_err(|err| err.to_string())?; } } - Ok(Response::default()) + Ok(Response::new().add_event(Event::new("my-amazing-event").add_attribute("key1", "value1"))) } #[entry_point] diff --git a/query-tester/Cargo.toml b/query-tester/Cargo.toml new file mode 100644 index 0000000000..667d7c5c92 --- /dev/null +++ b/query-tester/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "query-tester" +version = "0.1.0" +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +edition.workspace = true +license.workspace = true +rust-version.workspace = true +readme.workspace = true + +[dependencies] +tokio = { workspace = true, features = ["full"] } +anyhow = { workspace = true } +nym-validator-client = { path = "../common/client-libs/validator-client" } +nym-network-defaults = { path = "../common/network-defaults" } +serde = { workspace = true, features = ["derive"] } + +[lints] +workspace = true diff --git a/query-tester/src/main.rs b/query-tester/src/main.rs new file mode 100644 index 0000000000..09b10937a7 --- /dev/null +++ b/query-tester/src/main.rs @@ -0,0 +1,76 @@ +use nym_network_defaults::NymNetworkDetails; +use nym_network_defaults::setup_env; +use nym_validator_client::nyxd::CosmWasmClient; +use nym_validator_client::nyxd::contract_traits::{DkgQueryClient, GroupSigningClient}; +use nym_validator_client::{Config, DirectSigningHttpRpcNyxdClient, QueryHttpRpcValidatorClient}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub enum QueryMsg { + GetCounter {}, +} + +#[derive(Serialize, Deserialize)] +pub enum ExecuteMsg { + IncrementCounter {}, + DecrementCounter {}, + SetCounter { to: u32 }, +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + /* + theres map + id1 => wasm code 1 + id2 => wasm code 2 + id3 => wasm code 3 + + // + // n1foo => id3 + // n1bar => id2 + // + + + */ + + let contract_address = "n1vwttwvy8e5nqshc35rsn2u88ewfecjwdkmqdwpuqdsfmweans3xs2rjgjx"; + + let mnemonic = "cost truly december route shoulder ostrich upon test test deliver moment tent general clutch manual language antenna curious gate library remember cost kidney proud"; + + let network = "/Users/jedrzej/workspace/nym/envs/canary.env"; + setup_env(Some(network)); + + let nym_network_details = NymNetworkDetails::new_from_env(); + + let signing_client = DirectSigningHttpRpcNyxdClient::connect_with_mnemonic( + nym_validator_client::nyxd::Config::try_from_nym_network_details(&nym_network_details)?, + "https://rpc.canary-validator.performance.nymte.ch", + mnemonic.parse()?, + )?; + + let result = signing_client + .execute( + &contract_address.parse().unwrap(), + &ExecuteMsg::SetCounter { to: 200 }, + None, + "executing example contract", + vec![], + ) + .await?; + println!("transaction got executed at tx {}", result.transaction_hash); + println!("with events: {:?}", result.events); + + // queries: + let client = QueryHttpRpcValidatorClient::new_query(Config::try_from_nym_network_details( + &nym_network_details, + )?)?; + + let response: u32 = client + .nyxd + .query_contract_smart(&contract_address.parse().unwrap(), &QueryMsg::GetCounter {}) + .await?; + + println!("current counter is at {response}"); + println!("Hello, world!"); + Ok(()) +}