From dda403426b7c7c9b31e1de124850b2f52bc7f10f Mon Sep 17 00:00:00 2001 From: jose Date: Tue, 3 Mar 2026 17:32:35 +0100 Subject: [PATCH] fix: upgrade stargate-example tests and tooling for chain 1.18 - Pin Rust toolchain to 1.86.0 to avoid bulk-memory wasm-opt failures - Fix spot market query to use ExchangeQuerierV2 (InjectiveQuerier broken in 1.18) - Fix test_query_derivative_market_mid_price_and_tob: switch to v2 query path and update assertions for human-readable price format - Add workspace root build.sh with contract aliases (stargate, mock, atomic, dummy) - Add contract-level build.sh for injective-cosmwasm-stargate-example --- .gitignore | 1 + build.sh | 59 +++++++++++-------- .../build.sh | 13 ++++ .../src/query.rs | 7 +-- .../src/testing/test_exchange_derivative.rs | 19 +++--- rust-toolchain.toml | 2 +- 6 files changed, 63 insertions(+), 38 deletions(-) create mode 100755 contracts/injective-cosmwasm-stargate-example/build.sh diff --git a/.gitignore b/.gitignore index 5b41714c..4ccd04f8 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ tarpaulin-report.* packages/*/schema contracts/*/schema /packages/injective-cosmwasm/Cargo.lock +/CLAUDE.md diff --git a/build.sh b/build.sh index 477e78a5..8928684d 100755 --- a/build.sh +++ b/build.sh @@ -1,42 +1,55 @@ #!/bin/bash -# Usage: ./build.sh [contract-name] -# Purpose: Builds a CosmWasm smart contract using the cosmwasm/optimizer Docker image. -# - Defaults to building the 'injective-cosmwasm-mock' contract if no argument is provided. -# - Specify a contract name (e.g., 'atomic-order-example') to build a different contract. -# - The contract must be a directory in 'contracts/' (e.g., 'contracts/[contract-name]'). -# - Run from the workspace root (e.g., cw-injective) to ensure access to the workspace pCargo.toml. -# Examples: -# ./build.sh # Builds injective-cosmwasm-mock -# ./build.sh atomic-order-example # Builds atomic-order-example -# ./build.sh dummy # Builds dummy -# ./build.sh injective-cosmwasm-stargate-example # Builds injective-cosmwasm-stargate-example -# Output: Produces an optimized .wasm file in target/wasm32-unknown-unknown/release/ +# Usage: ./build.sh +# Aliases: +# stargate -> injective-cosmwasm-stargate-example +# mock -> injective-cosmwasm-mock +# atomic -> atomic-order-example +# dummy -> dummy +# Full contract directory names also accepted. ARCH="" - -# Set architecture suffix for arm64 -if [[ $(arch) = "arm64" ]]; then +if [ "$(arch)" = "arm64" ]; then ARCH=-arm64 fi -# Default contract name -DEFAULT_CONTRACT="injective-cosmwasm-mock" -CONTRACT=${1:-$DEFAULT_CONTRACT} +resolve_alias() { + case "$1" in + stargate) echo "injective-cosmwasm-stargate-example" ;; + mock) echo "injective-cosmwasm-mock" ;; + atomic) echo "atomic-order-example" ;; + dummy) echo "dummy" ;; + *) echo "$1" ;; + esac +} + +if [ -z "$1" ]; then + echo "Usage: ./build.sh " + echo "" + echo "Aliases:" + echo " stargate -> injective-cosmwasm-stargate-example" + echo " mock -> injective-cosmwasm-mock" + echo " atomic -> atomic-order-example" + echo " dummy -> dummy" + echo "" + echo "Available contract directories:" + ls -1 contracts/ + exit 1 +fi + +CONTRACT=$(resolve_alias "$1") -# Validate that the contract directory exists -if [[ ! -d "contracts/$CONTRACT" ]]; then +if [ ! -d "contracts/$CONTRACT" ]; then echo "Error: Contract directory 'contracts/$CONTRACT' does not exist." echo "Available contracts:" ls -1 contracts/ exit 1 fi -# Run the optimizer with the specified or default contract docker run --rm -v "$(pwd)":/code \ -v "$HOME/.cargo/git":/usr/local/cargo/git \ - --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/optimizer${ARCH}:0.16.1 /code/contracts/$CONTRACT + cosmwasm/optimizer${ARCH}:0.17.0 /code/contracts/$CONTRACT diff --git a/contracts/injective-cosmwasm-stargate-example/build.sh b/contracts/injective-cosmwasm-stargate-example/build.sh new file mode 100755 index 00000000..f27953a9 --- /dev/null +++ b/contracts/injective-cosmwasm-stargate-example/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash +ARCH="" + +if [[ $(arch) = "arm64" ]]; then + ARCH=-arm64 +fi + +WORKSPACE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" + +docker run --rm -v "$WORKSPACE_ROOT":/code -v "$HOME/.cargo/git":/usr/local/cargo/git \ + --mount type=volume,source="$(basename "$WORKSPACE_ROOT")_cache",target=/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/optimizer${ARCH}:0.17.0 "./" diff --git a/contracts/injective-cosmwasm-stargate-example/src/query.rs b/contracts/injective-cosmwasm-stargate-example/src/query.rs index 0eb45229..bde2092e 100644 --- a/contracts/injective-cosmwasm-stargate-example/src/query.rs +++ b/contracts/injective-cosmwasm-stargate-example/src/query.rs @@ -3,7 +3,7 @@ use crate::msg::QueryStargateResponse; use base64::engine::general_purpose::STANDARD as BASE64_STANDARD; use base64::Engine as _; use cosmwasm_std::{to_json_binary, to_json_vec, Binary, ContractResult, Deps, QuerierWrapper, QueryRequest, StdError, StdResult, SystemResult}; -use injective_cosmwasm::{InjectiveQuerier, InjectiveQueryWrapper, MarketId}; +use injective_cosmwasm::{InjectiveQueryWrapper, MarketId}; use injective_std::types::{cosmos::bank::v1beta1::BankQuerier, injective::exchange::v2::ExchangeQuerier as ExchangeQuerierV2}; pub fn handle_query_stargate_raw(querier: &QuerierWrapper, path: String, query_request: String) -> StdResult { @@ -27,9 +27,8 @@ pub fn handle_query_stargate_raw(querier: &QuerierWrapper } pub fn handle_query_spot_market(deps: Deps, market_id: &str) -> StdResult { - let querier = InjectiveQuerier::new(&deps.querier); - let market_id = MarketId::new(market_id)?; - to_json_binary(&querier.query_spot_market(&market_id)?) + let querier = ExchangeQuerierV2::new(&deps.querier); + to_json_binary(&querier.spot_market(market_id.to_string())?) } pub fn handle_query_bank_params(deps: Deps) -> StdResult { diff --git a/contracts/injective-cosmwasm-stargate-example/src/testing/test_exchange_derivative.rs b/contracts/injective-cosmwasm-stargate-example/src/testing/test_exchange_derivative.rs index d7939195..73158447 100644 --- a/contracts/injective-cosmwasm-stargate-example/src/testing/test_exchange_derivative.rs +++ b/contracts/injective-cosmwasm-stargate-example/src/testing/test_exchange_derivative.rs @@ -20,9 +20,9 @@ use injective_std::types::injective::exchange::v2::{self, open_notional_cap::Cap use injective_test_tube::{ injective_cosmwasm::get_default_subaccount_id_for_checked_address, injective_std::types::injective::exchange::v1beta1::{ - OrderType, QueryDerivativeMarketRequest, QueryDerivativeMidPriceAndTobRequest, QueryDerivativeOrderbookRequest, - QueryPerpetualMarketFundingRequest, QueryPerpetualMarketInfoRequest, QuerySubaccountEffectivePositionInMarketRequest, - QuerySubaccountPositionInMarketRequest, QueryTraderDerivativeOrdersRequest, + OrderType, QueryDerivativeMarketRequest, QueryDerivativeOrderbookRequest, QueryPerpetualMarketFundingRequest, + QueryPerpetualMarketInfoRequest, QuerySubaccountEffectivePositionInMarketRequest, QuerySubaccountPositionInMarketRequest, + QueryTraderDerivativeOrdersRequest, }, Account, Exchange, Module, Wasm, }; @@ -339,9 +339,8 @@ fn test_query_perpetual_market_funding() { assert_eq!(state.cumulative_price, FPDecimal::ZERO); } -#[ignore = "TODO fix me"] #[test] -//#[cfg_attr(not(feature = "integration"), ignore)] +#[cfg_attr(not(feature = "integration"), ignore)] fn test_query_derivative_market_mid_price_and_tob() { let env = Setup::new(ExchangeType::Derivative); let wasm = Wasm::new(&env.app); @@ -349,15 +348,15 @@ fn test_query_derivative_market_mid_price_and_tob() { add_perp_initial_liquidity(&env.app, market_id.to_owned()); let query_msg = QueryMsg::QueryStargateRaw { - path: "/injective.exchange.v1beta1.Query/DerivativeMidPriceAndTOB".to_string(), - query_request: encode_proto_message(QueryDerivativeMidPriceAndTobRequest { + path: "/injective.exchange.v2.Query/DerivativeMidPriceAndTOB".to_string(), + query_request: encode_proto_message(v2::QueryDerivativeMidPriceAndTobRequest { market_id: market_id.to_owned(), }), }; let res = get_stargate_query_result::(wasm.query(&env.contract_address, &query_msg)).unwrap(); - assert_eq!(res.mid_price, Some(human_to_dec("10", QUOTE_DECIMALS))); - assert_eq!(res.best_buy_price, Some(human_to_dec("9.9", QUOTE_DECIMALS))); - assert_eq!(res.best_sell_price, Some(human_to_dec("10.1", QUOTE_DECIMALS))); + assert_eq!(res.mid_price, Some(FPDecimal::must_from_str("10"))); + assert_eq!(res.best_buy_price, Some(FPDecimal::must_from_str("9.9"))); + assert_eq!(res.best_sell_price, Some(FPDecimal::must_from_str("10.1"))); } #[test] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5f59d4af..47e9ce7b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "1.87.0" +channel = "1.86.0" components = [ "rustfmt" ] profile = "minimal" targets = [ "wasm32-unknown-unknown" ]