Querying Cosmos States


This section provides guidance on querying state information from the Cosmos ecosystem using a Cosmos SDK-based smart contract. Utilizing the ICosmos interface from the Initia precompiled contracts, developers can access various blockchain states directly through smart contracts.

Sample Contract Implementation

Below is a sample implementation of a smart contract, ContractA, which uses the ICosmos interface to perform state queries within the Cosmos network. This example demonstrates how to query oracle prices from a hypothetical oracle module.

import { ICosmos } from "@initia/evm-precompiles/i_cosmos/ICosmos.sol";

contract ContractA {

    // Function to query whitelisted Cosmos queries
    // Example usage:
    // - path: "/slinky.oracle.v1.Query/GetPrices"
    // - req: JSON string specifying the query parameters
    //   e.g., '{"currency_pair_ids": ["BITCOIN/USD", "ETHEREUM/USD"]}'
    function query_cosmos(
        string memory path, 
        string memory req
    ) external returns (string memory result) {
        // Calls the precompiled contract to query Cosmos state
        return ICosmos.COSMOS_CONTRACT.query_cosmos(path, req);

Usage Scenario

  • This setup is particularly useful for dApps that require access to real-time data from the Cosmos ecosystem, such as oracle prices, blockchain states, or inter-chain data. By integrating such queries within smart contracts, developers can create more dynamic and responsive applications that react to changes across multiple blockchains.


By following these guidelines, developers can effectively query Cosmos states within their smart contracts, leveraging the full capabilities of the Initia platform's integration with the Cosmos ecosystem. This approach not only enhances the functionality of Ethereum-compatible smart contracts but also broadens their applicability within a multi-chain environment.

Last updated


© 2024 Initia Foundation, All rights reserved.