Only this pageAll pages
Powered by GitBook
1 of 100

Kiiex, powered by KiiChain

Learn

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

CONNECT TO KIIEX

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

BUILD ON KIICHAIN

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Validate the Network

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

What is Kii?

Kii is a hybrid centralized-decentralized exchange platform designed for 24/7 onchain FX trading for cross-border payments.

What is Kii

Kii is an onchain FX desk powering global payments, trading and finance solutions in an easy-to-use platform designed for everyone. Users, businesses or builders can use Kii by signing up for an account or connecting to APIs. Kii differs from other traditional platforms by its hybrid approach of sourcing liquidity and maintaining balances onchain exposed to local currencies. Kii supports fiat swaps and payins/payouts via the pricing of local, non-dollar stablecoins and other tokenized real-world assets.

Hybrid Matching Engine

At the core of Kii is a hybrid matching engine that is able to source onchain liquidity across any blockchain ecosystem while using centralized pricing to hedge and rebalance onchain positions. The result is an ultra-liquid layer that can operate 24/7 on certain pairs that only have liquidity during traditional business hours.

Ramps

Kii has a full suite of on and off ramps enabling instant payins and payouts from its system. These ramps are both UI and API enabled with the ability to disperse directly or to third-party accounts while remaining 100% compliant.

Connect to APIs

Kii has developed a suite of APIs that embed all centralized and decentralized functionalities into a single set of APIs that any application can use. For more information on the APIs, visit:

KYC / AML

Kii complies fully with regulations in each jurisdiction. Users must adhere to KYC and AML standards and requirements.

What is KiiChain?

KiiChain is an FX layer 1 AppChain built for stablecoins and RWAs. KiiChain empowers users, developers and businesses who are building the future of finance in emerging markets.

What is KiiChain?

KiiChain is a layer 1 blockchain built with the Cosmos SDK. It is an AppChain built as an abstraction layer for utility and liquidity for stablecoins and RWAs. It blends EVM compatibility with multi-chain connectivity to create a network that is highly interoperable, scalable and easy to use. Its design purpose is to onboard the next generation of developers in emerging markets who are building the best use-cases for real-world users.

KiiChain Powers Kii

Kii is a 24/7 onchain FX app designed for cross-border payments and trading, bringing institutional liquidity and immediate settlement to the most popular FX and RWA pairs using non-dollar stablecoins.

Cosmos SDK

The Cosmos SDK is an open-source framework for building multi-asset public Proof-of-Stake (PoS) blockchains, like the Cosmos Hub. The goal of the Cosmos SDK is to allow developers to easily create custom blockchains from scratch that can natively interoperate with other blockchains. SDK-based blockchains are built out of composable modules, most of which are open-source and readily available for any developers to use. The Cosmos SDK is a capabilities-based system that allows developers to better reason about the security of interactions between modules. Learn more about Cosmos .

Comet BFT

Comet BFT (Byzantine Fault Tolerant) is the upgraded version of Tendermint Core, the Interchain's consensus mechanism that powers Cosmos SDK blockchain systems. Comet BFT has a modular architecture that separates the consensus engine from the application layer, allowing developers to build custom blockchain applications easily. It offers fast transaction finality and high throughput, making it ideal for applications that require quick and reliable performance. Learn more about Comet BFT .

Proof-of-Stake

KiiChain is a Proof-of-Stake blockchain. PoS selects validators based on the number of tokens they hold and are willing to "stake" as collateral for servicing and securing the network. Delegators, or individual "stakers", can delegate their tokens to any specific validator that meets the requirements.

EVM Module

The EVM module allows for mirrored EVM compatibility and for smart contracts to be deployed in Solidity to the network. This means it can run all existing Ethereum dApps and smart contracts without needing any changes. It achieves this with a high-performance Ethereum Virtual Machine (EVM) that is optimized for speed and reliability. Thanks to its modular, plugin-based design, it allows any host blockchain to execute Ethereum transactions and smart contracts.

IBC

Inter-Blockchain Communication is a protocol that allows for cross chain communication and data transfers. It connects different blockchain networks to promote high levels of interoperability, scalability and communication. IBC can be implemented to any blockchain network as long as it conforms to its protocol guidelines. Currently, there are over 100 networks integrated into IBC. Read more about IBC .

Kii RWA Protocol

The Kii RWA Protocol sets standardization of Real World Asset (RWA) tokenization through the T-REX (Token for Regulated EXchanges) protocol using CosmWasm smart contracts on KiiChain that are simultaneously mirrored to ERC tokens. The T-REX protocol is designed for compliant issuance and management of security tokens on blockchain networks. Apart from token standards, the protocol defines onchain KYC, KYB and asset verification. The Kii RWA protocol on KiiChain is creating an interoperable unified liquidity layer for RWA tokens.

Kii Payfi Module

The Kii PayFi Module is a gas-optimized payment system for merchant transactions with specialized fee handling along with a Paymaster System to grant gas funds for DeFi actions via protocols. The module is developed for both web3 and web2 companies to incentivize the migration of their revenue and payment models to onchain functions. Included in the module, is a Defi protocol that sets standards for TVL based loans, collateral management, interest models, and liquidity systems. Advanced features include revenue lending, invoicing financing, payment scheduling and TVL based credit card financing through community Payfi pools. This module is still in development and will be deployed in the coming months.

Kii APIs
here
here
here

Whitepaper

The latest version of the KiiChain Whitepaper.

502KB
KiiChain White Paper.pdf
PDF
Open

Tokenomics

Evergreen Model

KiiChain has designed a sustainable rewards model where network participants can reap the rewards of the Kii suite of products.

Kii Global believes in a true non-inflationary environment for Kiichain that does not mint or burn tokens. However, in common PoS blockchains, minting features are popular to be able to cover the staking pool and its rewards.

In order to compensate for this, Kiichain has instituted an "evergreen" model where 5% of the cash flow of Kii Global's overall activity will be diverted to purchase coins in the market to replenish the rewards pool.

This is possible because Kii Global's real world use business model is already functioning, producing positive cash flow as an organization. This feature will be implemented 90 days after launching the token publicly, where earnings from the first 90 days will be sent to the lead market-maker in order to execute the trade and replenish KII into the staking pool.

Get a Wallet

Get a wallet for KiiChain Testnet Oro

Explorer App (best option for builders)

Connect your Keplr or MetaMask wallet to the explorer app to stake KII into a validator or to help launch a full node/validator.

Web Wallets

Connect to our web wallet using Keplr or Metamask.

Kii API's

Comprehensive API reference for Kiiex platform, covering account management, trading operations, and data retrieval endpoints.

Start building with KiiEx 👷🏻‍♂️💻 — explore powerful trading and account APIs to integrate and automate your crypto operations. 💰💸

Endpoints - Cosmos

Endpoints for Testnet Oro

Kiichain

Cosmos

Modules

Description of all the custom modules that makes Kiichain work

EVM

Staking Requirements

Important information for Validators.

To motivate validators on the Kii network to prioritize the network's best interest, they must stake a minimum amount of KII tokens for a set period, typically an epoch. Each epoch is 21 days. This requirement aligns with the proof-of-stake principle, ensuring validators have a vested interest in maintaining the network's integrity.

A node that adheres to the network's rules receives KII tokens as a reward every epoch. However, non-compliance risks a partial or total loss of their stake, a process known as slashing. This policy encourages proper behavior, enhancing overall network security. Currently, there's no upper limit to how much a node can stake. Yet, failure to meet the minimum stake requirement results in exclusion from the upcoming epoch and forfeiture of rewards.

Delegator / Staker - No minimum

Full Node / Validator - 10,000 KII

MasterNode - 150,000 KII

Getting Started

Coin Unlocking Schedule

Intro Coin Details

Coin Details

Detail
Amount

Ticker

KII

Max Supply

No minting or burning.

Upgrade your Account to Enterprise Level

To upgrade your business account, please complete the required forms and contact our Compliance team for further verification and approval.

Requirements:

  • Already have a KIIEX account verified on level 1, the KYC verification needs to be done by the legal representative

EN Form Link

ES Form Link

System

System-level endpoints used by trading and operator roles.

Authentication

Endpoints for user authentication.

Models

VM

ERC20

Cosmwasm

Authz

Bank

Tendermint

Consensus

Feegrant

Gov

Slashing

Staking

Upgrade

KiiChain

A background on why we're relentlessly building every day.

About Kii

A lot has transpired since Satoshi’s whitepaper announcing the arrival of Bitcoin in 2008 as Bitcoin has become the digital gold standard and is positioning itself as the reserve currency of the world. In 2013, Ethereum established itself as the leader in layer 1 infrastructure, initiating the cycle of growth among web3 businesses. Since then, over 1 million tokens have been publicly launched, each with their unique focus.

The growth of each project has a common theme within the technology: Communication. Blockchain infrastructure connects users in ways never before, eliminating a centralized counterparty needed to facilitate that connection, and instead proposes changes to the architecture enabling decentralization as the preferred means of communication. Even though this change has prompted user adoption globally, there remains gaps in the technology that adjust to specific market and cultural conditions in emerging economies.

In developing countries, the current transfer of value mechanisms that connect emerging economies to developed economies are overly centralized, slow and costly. It's determined to be why emerging economies in the last 25 years have yet to “emerge”. These transfer of value networks have failed to improve globalization and local commerce in an efficient way, connecting important economic counterparts in order to create uniformity in how they communicate.

Use Cases

Use cases are economy-centric, real world models currently in use. Kii is developing technological solutions to solve the current problems within each niche.

Stablecoin FX powerhouse

Traditional FX operations are hindered by TradeFi banking hours (often times 8am to 1pm local). Essentially, only 25% of the day, on business banking days, can businesses or users engage in FX operations. Users can now engage in compliant, fast and affordable FX transactions on KiiChain and receive their funds real-time.

Connect Wallet to Explorer App

Connect your wallet to the KII interactive explorer and start staking.

Step 1: Make sure you have installed the MetaMask or Keplr browser extension.

Go to Metamask.io and download and install the web extension browser. Make sure the web extension is from or . During testnet, if you do not have MetaMask installed first, you will receive this error.

User

Endpoints related to user actions.

Developer Hub

Everything you need to know about building on KiiChain. Your hub for connecting to the chain and building applications on the decentralized web.

Testnets

Testnet Oro is our public testnet that is currently active.

Testnet Oro is the permanent testnet with smart contract functionality and EVM compatibility. All Hackathons, Builds, Airdrops, and test deployments should be done on this network. You can find more information such as endpoints, chain data, and general guides here:

FeeMarket

TokenFactory

Auth

Distribution

Evidence

Tx

What is a validator?

Validators power the network.

What is a Kii validator?

KiiChain is a Cosmos-based blockchain powered by CometBFT that relies on a set of validators to secure the network. The role of validators is to run a full node and participate in consensus by broadcasting votes that contain cryptographic signatures signed by the validator's private key. Validators commit new blocks in the blockchain and receive revenue in exchange for their work. Validators must also participate in governance by voting on proposals. Validators are weighted according to their total stake.

Validator minimum: 10,000 KII

Although economically a very large industry, emerging markets don't just thrive on remittances from users aboard. Their economies are normally derived from production locally. Whether its natural resources and commodities, exports of goods, imports for raw materials for production of those goods, the necessity for a dedicated, open-sourced, unified liquidity layer is clear given that the B2B market is 10x+ the size of consumer remittances with higher average volumes and transactions. Faster fiat settlements, safer FX solutions, and access to international credit terms are only a few of the current existing pain-points.

KiiChain is unwaveringly committed to delivering high-performance, interconnected, and ultra-secure blockchain solutions as a driver in economic development in emerging markets in an effort to improve communication and globalization. At the heart of our technological prowess is the CometBFT mechanism, a solution for problems that exist in the economy, particularly emerging economies and Latin America. However, more than just a blockchain, Kii Global has built an infrastructure ecosystem of solutions designed to unify blockchain liquidity and its participants, in an effort to directly solve some of the biggest economic challenges in the region.

Unified Liquidity for Trading and Payments

Liquidity is often fragmented among several different blockchain ecosystems. This causes headaches for users who need to manage different balances and wallets among different ecosystems. Direct bridging from each network can be slow, costly and difficult for users who don’t understand web3 architecture. KiiChain partners with protocols to create an interoperable liquidity layer that can deliver seamless cross-chain experiences to users of all types.

Tokenization of Commodities (RWA)

Commodities are among the most valuable and traded goods in the world with major reserves being mined and developed in emerging countries. Local companies can now tokenize their commodities and contracts, pricing them in Kii or a native asset to their project, and create instant liquidity on a global scale.

Tokenization of Products (RWA)

Imported and exported goods are one of the major drivers of GDP within Latin America and emerging economies. Many multinational companies in the region struggle to process funds and manage liquidity reserves. These products can be tokenized and transacted on the blockchain for users to transact with these goods, and for companies to better manage their reserves.

Tokenization of Real Estate (RWA)

Asset fractionalization and ownership is becoming more imperative than ever before in markets with wealth fragmentation, high inflation and high interest rates. Real estate and asset infrastructure fractionalization allows users to own yield bearing, inflation protected, assets that cannot be owned by these users in whole. By democratizing the ownership process, liquidity can extend to other markets and users who would not otherwise have access prior.

Tokenization of Debt and Equities (RWA)

Public equities, debt instruments, or exchange traded funds that are trading on traditional exchanges can be tokenized to expand, democratize and fractionalize their access cross-border, to individuals who do not have access to these opportunities.

DeFi Lending and Borrowing for Open Credit System

Credit is a huge issue in developing countries with strict underwriting standards, toxic level interest rates and lack of available capital. DeFi lending will provide secure ways for users in developed countries to extend safe credit terms to participants in emerging markets.

Payment Finance

Businesses and users in developing countries lack formal communication with payment processors abroad. Payment finance is a model that allows local businesses to bring their economic activity onchain and receive financing that supports their core businesses, primary payment services activities.

Credit Finance

Emerging markets suffer from a multi-trillion dollar credit gap. When businesses can bring their economic activity onchain, they open themselves up to the world of lending and competitive interest rates. Businesses or users who could not previously receive credit from local institutions, can now communicate with lenders abroad.

Spot and Forward Settlement

The B2B remittance market transacts over hundreds of billions USD annually. These importers and exporters either win or lose on spot or forward contract settlements. By each counterparty posting liquidity via a smart contract on the blockchain, users can eliminate losses by sharing in any FX swings.

\

What is a full node?

A full node is a server running a chain's binary (its software) that fully validates transactions and blocks of a blockchain and keeps a full record of all historic activity. A full node is distinct from a pruned node that processes only block headers and a small subset of transactions. Running a full node requires more resources than a pruned node. Validators can decide to run either a full node or a pruned node, but they need to make sure they retain enough blocks to be able to validate new blocks.

Of course, it is possible and encouraged for users to run full nodes even if they do not plan to be validators.

1,800,000,000

Initial Circulating Supply

180,000,000

Developer Tools

If you are a developer we also have our official SKDs for development:

  • Rust SDK

  • JS/TS SDK

Protocols

Kii protocols can be found at these links:

  • RWA Protocol

Endpoints

Generally, our chains (testnets and mainnet) follow the same set of endpoints. More information about our endpoints can be found here:

  • Endpoints

KiiChain Discord Server

If you would like to connect directly with the community and ask questions related to building on the network, join the discord server where our internal developers are ready to field any questions you have.

  • Discord Kiichain invite

Testnet Oro

Vision of KiiChain

Our vision of what and why we are building relentlessly everyday.

FX settlement layer for Stablecoins and tokenized Real-World Assets

KiiChain is a supercharged unified liquidity network for international trade, finance and payments – specifically built for emerging markets. It seamlessly melds with prevailing payment infrastructures, aiming to alleviate the exorbitant costs and reduce barriers in global economic transactions. Unlike other monolithic blockchain layers, KiiChain is purpose-built for emerging markets and “last mile” integrations into local economies, breathing life into previously liquidity-constrained sectors that cannot financially communicate with the rest of the world.

The blockchain rides on the back of the CometBFT consensus mechanism built with the Cosmos SDK - a testament to its decentralization and commitment to achieve lightning-fast finality and minuscule network fees. Primarily, its design suits the daily exigencies of emerging economies, taking into account the wealth imbalances that exist. KiiChain’s Comet consensus mechanism boasts supercar-fast validators that produce blocks in seconds, allowing for instantaneous cross-chain settlement times and a fee on the network less than one peso.

The Kii blueprint saw expansion within its product and app suite, incorporating custom onchain protocols and modules to allow any user, builder or business to connect directly to the network. KiiChains flagship native app, KIIEX, is a hybrid centralized-decentralized exchange specifically conceptualized for liquidity assimilations in RWA and payment settlement. KiiChain is amplified by a series of protocols and modules that provide interconnectivity between Ethereum, Solana, Cosmos and more – providing unified access to tradeable assets across ecosystems on one network.

The product suite provides institutional infrastructure and liquidity, connecting global players to local operators. KiiChain is EVM compatible and supports smart contracts in both Solidity and Rust. It’s a permissionless ecosystem for open finance, where web2 and web3 developers can build a wide variety of dApps and protocols.

Utility

KII's value is derived from its utility rather than a speculative investment. Here are the utility use cases for KII, outlining its value in the real-world and to the network.

  1. Kii Benefits: KII holders will pay maker/taker fees on kiiex.io in native token and will have reduced trading fees and cash-in/cash-out rates within the ecosystem. Users who remit funds in KII will have priority to liquidity and rates, especially within our ecosystem of partners.

  2. Kii Incentives: KII will be used to create incentives for on-chain PayFi liquidity pools, designed specially to incentivize stablecoin liquidity when creating pools on the less demanded side of the trade. (ie: USDT / COP – higher need for COP liquidity than USDT liquidity, therefore those that create COP liquidity pools will receive KII incentives and greater spreads).

  3. Payment for the use of the KiiChain RWA protocol: Payment for use of the RWA protocol and “unified liquidity” swaps to over 100+ networks will be in KII token relative to bps on total AUM of for permissioned tokens. Example: 10bps of the nominal asset value paid in KII from the liquidity sourced from an RWA purchase.

  4. Pricing of Assets on Kii: Tokenized commodities and products can be priced in KII to create instant/easier liquidity in our hybrid CEX/DEX from native liquidity pools.

  5. Collateral: KII will be used as a collateral on DeFi apps, liquid staking, lending, and futures settlement.

  6. Staking: KII is required for validators and delegators to participate in the network. KII is the only token eligible for validating and delegating in KiiChain.

  7. Rewards: KII is rewarded to validators and delegators for their service to the network.

  8. Gas fees: KII is used for transaction fees. All transactions such as deployment of new smart contracts, creation of user accounts, or token transfer, require the payer to pay transaction fees in KII.

  9. Governance: KII will be used for voting on future protocol and ecosystem development once the blockchain migrates to open governance.

Getting started

Everyone is welcome to launch their own validator. Please review all information carefully.

How to become a validator?

Any participant in the network can signal that they want to become a validator by sending a create-validator transaction, where they must fill out the following parameters:

  • Validator's Pubkey: The private key associated with this Tendermint PubKey is used to sign prevotes and precommits.

  • Validator's Address: Application level address that is used to publicly identify your validator. The private key associated with this address is used to delegate, unbond, claim rewards, and participate in governance.

  • Validator's name

  • Validator's website (Optional)

  • Validator's description (Optional)

  • Initial commission rate: The commission rate on block rewards and fees charged to delegators.

  • Maximum commission: The maximum commission rate that this validator can charge. This parameter is fixed and cannot be changed after the create-validator transaction is processed.

  • Commission max change rate: The maximum daily increase of the validator commission. This parameter is fixed cannot be changed after the create-validator transaction is processed.

After a validator is created, KII holders can delegate KII to them, effectively adding stake to the validator's pool. The total stake of an address is the combination of KII bonded by delegators and KII self-bonded by the validator.

From all validator candidates that signaled themselves, the 100 validators with the most total stake are the designated validators. If a validator's total stake falls below the top 100, then that validator loses its validator privileges. The validator cannot participate in consensus or generate rewards until the stake is high enough to be in the top 100. Over time, the maximum number of validators may be increased via on-chain governance proposal.

APR

Annual percentage rate

Due to the fluctuating characteristics of the rewards formula, it's challenging to forecast a precise weekly or annual return for an individual staker or delegator. Entities interested in understanding potential earnings should apply the formula for some illustrative calculations. However, the actual rewards hinge on the total network stake, a figure that only becomes clear at the start of the epoch during which staking or delegation occurs.

Block Rewards Formula

Calculate rewards at the beginning of each epoch.

Block rewards are distributed proportionally to all validators relative to their voting power. This means that even though each validator gains KII with each reward, all validators maintain equal weight over time.

For example, 10 validators have equal voting power and a commission rate of 1%. For this example, the reward for a block is 1000 KII and each validator has 20% of self-bonded KII. These tokens do not go directly to the proposer. Instead, the tokens are evenly spread among validators. So now each validator's pool has 100 KII. These 100 KII are distributed according to each participant's stake:

  • Commission: 100*80%*1% = 0.8 KII

  • Validator gets: 100\*20% + Commission = 20.8 KII

  • All delegators get: 100\*80% - Commission = 79.2 KII

Then, each delegator can claim their part of the 79.2 KII in proportion to their stake in the validator's staking pool.

Delegator Information

For delegators / stakers.

If you're interested in delegating (staking) your KII to a validator or masternode, the following information is important to review.

Rewards

Kiichain was designed with rewards in mind.

Fifty percent (50%) of the total supply of Kiichain is allocated as rewards to encourage participation from validators and delegators. While the total reward amount for each epoch is fixed, individual staking rewards vary based on several factors.

A validator's income is determined by their proportional share of the total staked amount within their specific role within the open set of Validators. In essence, each participant earns a percentage of the epoch's total rewards, corresponding to their stake relative to the total amount staked by all users in the open set. The open set on compensated Validators is 100. It is important to delegate your coins to a Validator who participates in the open set.

Delegator rewards follow the same calculation principle as those for Validator operators. However, from a delegator's epoch rewards, 10% is deducted as a protocol layer fee and given to the delegated node operator, uniformly applied across all node operators.

Directives of delegators

Delegating / staking KII requires active supervision.

Being a delegator is not a passive task. Here are the main points of consideration of a delegator:

  1. Perform careful due diligence on validators before delegating. If a validator misbehaves, part of their total stake, which includes the stake of their delegators, can be slashed. Delegators should therefore carefully select validators they think will behave correctly.

  2. Actively monitor their validator after having delegated. Delegators should ensure that the validators they delegate to behave correctly, meaning that they have good uptime, do not double sign or get compromised, and participate in governance. They should also monitor the commission rate that is applied. If a delegator is not satisfied with its validator, they can unbond or switch to another validator (Note: Delegators do not have to wait for the unbonding period to switch validators. Rebonding takes effect immediately).

  3. Participate in governance. Delegators can and are expected to actively participate in governance. A delegator's voting power is proportional to the size of their bonded stake. If a delegator does not vote, they will inherit the vote of their validator(s). If they do vote, they override the vote of their validator(s). Delegators therefore act as a counterbalance to their validators.

Developer Tools

Build on the ecosystem.

An overview of developer tools, SDKs and resources for accessing the network.

Delegation / Staking

Stake your KII to Validators or Masternodes and earn rewards without any hassle.

In Kiichain, delegation is the act of allocating one's tokens to Validators that have already met the minimum stake requirement. This option is particularly advantageous for individuals who either lack the technical know-how or sufficient tokens to run a Validator themselves. Delegators earn rewards from their staked tokens, though a portion, currently 10% referred to as the “Operator take-rate,” is deducted by the node operator to offset their operational costs and risks.

Delegators are obliged to stake at least 1 KII and face no upper limit on the amount they can stake. However, they must commit their tokens and choose a Validator operator for delegation before an epoch starts. After the epoch commences, the delegation remains fixed until the next epoch. It's important to note that the choice of node for running or delegation does not influence the reward amount; rather, it's the quantity of staked tokens that determines this.

Step 2: Launch the Explorer App and Connect your Wallet to Testnet Oro.

Go to https://explorer.kiichain.io and make sure you are connected to the "Testnet Oro" network by selecting the dropdown in the top right.

For setting up a web wallet, see "Set Up a Web Wallet". Once your wallet has been created, you can link it to the explorer app by clicking the wallet icon in the top right corner.

If you have the MetaMask extension installed in your web browser, it should automatically connect the RPC endpoints.

It will then ask for approval to switch the network from Ethereum (default) to Kiichain Testnet. Click the "Switch Network" button.

Following, it will ask to link with your new wallet address. Click "Next".

Lastly, it will ask for wallet permissions. Click on "Confirm".

Awesome! Your wallet is now connected to the explorer app! Deposit testnet tokens in your address to delegate to the validator.

Step 3: Get testnet tokens.

Testnet tokens can be found on the faucet page in the explorer or requested in the discord. For more information, see here: Testnet Faucet Commands.

MetaMask
Keplr

Roadmap

Where we've been and where we're going.

2022:

Inception. Internal building. OTC trading.

2023:

Q1: KiiChain Devnet.

Q2: KIIEX build started from our OTC operation to scalable technology ().

Q3: KIIEX Beta was launched, testing trading and payments in mainnet in a whitelist-only environment (over $50m in total volume). Achieved positive EBITDA and net margin.

Q4: Kii Mobile wallet was developed for version 1 of testnet ().

2024:

Q1: KiiChain Testnet V1 was developed and launched with the cosmos SDK ().

Q2: KIIEX left beta and launched mainnet with multi-varied APIs and a suite of other features. KIIEX onboarded over 200 enterprise clients with access to over 200k in users.

Q3: KiiChain Testnet V2 upgrades featuring an EVM module and other tools ).

Q4: Started KiiChain Testnet V3 upgrades with new EVM module, RWA protocol, Oracle and Payfi modules. This is the last version and repo that will be continuously evolving into mainnet ().

2025:

Q1 & Q2:

  • Incentivized testnet, XP and Oro rewards, featuring onchain tasks and partnerships ().

  • KIIEX version 2.0 will be released with new UI/UX and third party ramp features.

  • IBC and Wasm upgrades.

  • EVM upgrades.

Q3:

  • Public sale, listing, and mainnet launch.

  • KIIDEX integration into KIIEX with listing of RWA products.

  • PayFi module integration with mainnet.

  • Kii RWA protocol dApp that lets users manage cross-chain transfers of their RWA tokens.

Q4:

  • Payfi financing protocol (ecosystem partnership) integrated with the Payfi module register profiles to extend credit to web2 and web3 companies and users.

  • PayFi module fiat rail integrations and expansions. Connect to local payment gateways in target markets.

  • Onchain invoice factoring and financing.

  • KIIEX Debit and Credit cards (with lend-borrow financing).

Set Up a Web Wallet

Set up a wallet using MetaMask or Keplr with a web wallet for Testnet Oro. Its important to use a wallet compatible to your browser.

Step 1: Install MetaMask Extension

Go to Metamask.io and download and install the web extension browser. Make sure the web extension is from MetaMask.

Step 2: Create your wallet

Once the download has been completed, a prompt will appear, click "Create a new wallet" to begin.

Create a password that will control access to your account via the extension.

Create, record, and properly store your wallet secret phrase. This step is very important as these 12 words are your secret keys to your wallet.

Awesome, nice work! Your wallet has been created. Make sure you store your keys in a safe place!

Step 3: Link your wallet to the KiiChain Testnet.

Wallets like MetaMask and Keplr can be manually connected to various testnets. MetaMask supports EVM-compatible blockchains, and at default, is set to the Ethereum network. You will need to manually connect to the KiiChain network.

The link can be done through multiple sources:

Manually setting the wallet

Click the "Ethereum Mainnet" dropdown bar on the top left and then click "Add Network" on the pop-up box.

Manually add the following testnet chain ID to add the network.

Subject
Value to Insert

Upon saving and completion, you should be connected to the testnet network!

Now, get some testnet tokens by following the instructions: .

Set up your Kii Account

To start trading on our platform, you'll need to create an account. The registration process is quick and secure, follow this steps are mandatory for Natural users and Enterprises

Click here and go to KiiEx:

Fill up the Signup form and create your user:

Check your e-mail and do your email verification

Log In to your account

At the start your user will be level 0, and to Deposit and Withdraw you'll need to upgrade to level 1, the way to do it it

Configuration -> KYC -> Choose the level 1

Note: For enterprise users, you will also need first the be level 1, the legal representative needs to pass our KYC verification, after that you'll need to fill up one of our forms depending on your needs choose a level, our compliance team will contact you soon

Once you finish, your verification level will be 1 and you'll be able to Deposit and Withdraw

🥳✨ Congrats now you can trade, swap, deposit and withdraw on KIIEX ❤️

Swap USDT to COPM with UI

In this tutorial, you'll learn how to deposit, withdraw or swap any stablecoin on your dashboard step by step though our UI

Prerequisites

  • Have a Kii User and upgrade verification level to 1.

Step by step

  1. To be able to swap, you first need to have funds, and you can get them in two ways:

    1. The first one is creating a Deposit.

    2. The second one is getting credit. To do so, you need to contact our support team.

    To create a deposit ticket, navigate to Deposit and use the QR or wallet address to deposit any cryptocurrency.

  1. Once the deposit is complete, you will see the new balance available in your account and can start swapping on the SWAP page.

    1. On the screen, you will see the cryptocurrency you are going to exchange as options; You can choose which one you want to exchange it for, and the exchange rate.

    Click on confirm, and confirm your swap

You’ll see a confirmation message on your screen, and your balance in the crypto you swapped will be updated.

Now that you have a balance, go to the Deposit/Withdraw page, select 'Withdraw', and choose the cryptocurrency you want to withdraw — in this case, COPM

Fill out the form with the details of the bank account you own and where you want to receive the COPM as COP

Click on confirm, you'll see a confirmation message on top of the page

You'll receive a withdraw confirmation e-mail, click on accept withdrawal ticket

Once you confirm your withdrawal, the payment will be processed. After the money is sent to your bank account, you’ll receive an email confirming the completion of your withdrawal cycle, and your balance will be updated both in your bank account and within the exchange

Withdraw to Wallet account

To make an on-chain withdrawal to a wallet, select the 'Wallet' option.

If the wallet is new, you need to add it to the whitelist by filling out the form.

If it already exists, just select it and confirm the operation.

Congrats 🥳✨

Your withdrawal was successful! The funds have been sent to your wallet, and you’ll receive a confirmation email shortly.

IBC

Kiijs-utils

@kiichain/kiijs-utils

Typescript library containing general utility functions for interacting with Kiichain.

Installation

Bech32 conversion

The package has utils to easen up conversion between hex and bech32 addresses. They can be used like this:

ETHSECP signer

Some wallets do not recognize the ETHSECP256-1 PubKey signatures. We made a couple helpers to utilize it without problems.

Signing a transaction

  1. Create the SigningStargateClient with the correct type

The signing client must use a custom account parser to handle the ethsecp256k1 public key format. This is crucial for correctly signing transactions.

  1. Sign the transaction with a custom pubkey

  1. Broadcast the signed transaction

Precompiled contracts

KiiChain has precompiled smart contracts crafted to allow EVM interaction with the Cosmos SDK functionalities

List of precompiles and their addresses

KiiChain supports both EVM JSON-RPC and Cosmos RPC interfaces. In order to easily interact with certain Cosmos modules, KiiChain has a set of precompiled contracts that can be called from the EVM.

Precompile
Description
Address

Interacting with precompiles

You can utilize direct json-rpc connections to those addresses. We also have to help interact with them.

JS/TS SDK

An SDK written in Javascript/Typescript for KiiChain

Note: This project is still under development, so future changes will be made.

Kiijs-SDK

KiiJS is a monorepo that contains multiple NPM libraries for writing applications that interact with KiiChain. Apart from the built SDK, the chain matches a lot of operability from cosmjs.

Documentation

Each package has its own documentation under its readme file.

Packages

KiiJS consists of smaller NPM packages within the @kiichain namespace. For more detailed documentation on each package, please refer to the table below.

Package
Description

Contributing

All contributions are very welcome! Remember, contribution is not only PRs and code, but any help with docs or helping other developers solve their issues are very appreciated!

Read below to learn how you can take part in the KiiPy project.

Code of Conduct

Please be sure to read and follow our . By participating, you are expected to uphold this code.

Contribution Guidelines

Read our to learn about our issue and pull request submission processes, coding rules, and more.

Issues, Questions and Discussions

We use for tracking requests and bugs, for general questions and discussion.

License

The KiiPy project is licensed under .

Authenticate with API Key

This page explains how to securely connect to our API using an API Key. It outlines the required authentication details and how to generate a digital signature to ensure safe and verified communicatio

Step by step

  1. Create your user API Key and add permissions

Rust SDK

Rust SDK for the RWA Protocol on KiiChain

Note: This project is still under development so future changes will be made.

Important Links

Technical requirements

For hardware and software protocols.

What are hardware requirements?

A modest level of hardware specifications is initially required and rises as network use increases. Participating in the testnet is the best way to learn more.

Validators are recommended to set up sentry nodes to protect your validator node from DDoS attacks.

What is an Oracle?

An oracle is a blockchain component that provides external real-world data and store on the Blockchain

What is the Kii Oracle?

The Kii Oracle is a decentralized price feed system that provides secure and reliable real-world market data (primarily cryptocurrency prices and tokenized assets) to the KiiChain blockchain. Unlike simple data oracles, it implements a robust validator-based consensus mechanism where:

  • Trusted validators independently fetch prices from multiple exchanges

What is a delegator?

A delegator is a person or entity that wants to Stake their tokens without managing a node or full node.

Delegating = Staking

People who cannot or do not want to operate Validators (full nodes) can still participate in the staking process as delegators. Indeed, validators are not chosen based on their self-delegated stake but based on their total stake, which is the sum of their self-delegated stake and of the stake that is delegated to them. This is an important property, as it makes delegators a safeguard against validators who exhibit bad behavior. If a validator misbehaves, their delegators will move their KIIs away from them, thereby reducing their stake. Eventually, if a validator's stake falls under the top 100 addresses with the highest stake, they will exit the validator set.

Delegators share the revenue of their validators, but they also share the risks. In terms of revenue, validators, and delegators differ in that validators can apply a commission on the revenue that goes to their delegator before it is distributed. This commission is known to delegators beforehand and can only change according to predefined constraints (see section below). In terms of risk, delegators' KIIs can be slashed if their validator misbehaves.

Validator Security

Protect your validator from malicious attacks.

Each validator candidate is encouraged to run its operations independently, as diverse setups increase the resilience of the network. Validator candidates should commence their setup phase now in order to be on time for launch.

Key Management - HSM

It is mission critical that an attacker cannot steal a validator's key. If this is possible, it puts the entire stake delegated to the compromised validator at risk. Hardware security modules are an important strategy for mitigating this risk.

HSM modules must support ed25519 signatures for the hub. The YubiHSM2 supports ed25519

Testnet faucet

Join the testnet, set up your wallet, and request KII tokens.

About the Faucet

Testnet participation is a great way to signal to the community that you are ready and able to operate a validator.

Important to create your web wallet first and then link to the explorer app.

Incentive to stake

Staking rewards and validator commissions.

Revenue

Validators and delegators earn revenue in exchange for their services. This revenue is given in two forms:

  1. Block provisions (KIIs): They are paid in newly created KIIs. Block provisions exist to incentivize KII holders to validate and stake the network.

yarn add @kiichain/kiijs-utils @kiichain/kiijs-proto
What are software requirements?

Validators are expected to implement monitoring, alerting, and management solutions. There are several tools that you can use.

What are bandwidth requirements?

Kiichain has the capacity for very high throughput relative to chains like Dash, Ethereum or Bitcoin.

We recommend that the data center nodes connect only to trusted full nodes in the cloud or other validators that know each other socially. This connection strategy relieves the data center node from the burden of mitigating denial-of-service attacks.

Ultimately, as the network becomes more heavily used, multi-gigabyte per day bandwidth is very realistic.

How to handle key management?

Validators are expected to run an HSM that supports ed25519 keys. Here are potential options:

  • YubiHSM 2

  • Ledger Nano S

  • Ledger BOLOS SGX enclave

  • Thales nShield support

Kii Global nor the Interchain Foundation does not recommend one solution above the other. The community is encouraged to bolster the effort to improve HSMs and the security of key management.

What can validators expect in terms of operations?

Running an effective operation is key to avoiding unexpected unbonding or slashing. Operations must be able to respond to attacks and outages, as well as maintain security and isolation in the data center.

What are the maintenance requirements?

Validators are expected to perform regular software updates to accommodate chain upgrades and bug fixes. It is suggested to consider using Cosmovisor (opens new window) to partially automate this process.

During an chain upgrade, progress is discussed in a private channel in the Kii Discord. If your validator is in the active set we encourage you to request access to that channel by contacting a moderator.

How can validators protect themselves from denial-of-service attacks?

Denial-of-service attacks occur when an attacker sends a flood of internet traffic to an IP address to prevent the server at the IP address from connecting to the internet.

An attacker scans the network, tries to learn the IP address of various validator nodes, and disconnects them from communication by flooding them with traffic.

One recommended way to mitigate these risks is for validators to carefully structure their network topology using a sentry node architecture.

Validator nodes are expected to connect only to full nodes they trust because they operate the full nodes themselves or the trust full nodes are run by other validators they know socially. A validator node is typically run in a data center. Most data centers provide direct links to the networks of major cloud providers. The validator can use those links to connect to sentry nodes in the cloud. This mitigation shifts the burden of denial-of-service from the validator's node directly to its sentry nodes, and can require that new sentry nodes are spun up or activated to mitigate attacks on existing ones.

Sentry nodes can be quickly spun up or change their IP addresses. Because the links to the sentry nodes are in private IP space, an internet-based attack cannot disturb them directly. This strategy ensures that validator block proposals and votes have a much higher chance to make it to the rest of the network.

For more sentry node details, see the CometBFT Documentation (opens new window) or the Sentry Node Architecture Overview (opens new window) on the forum.

Submitted prices are aggregated using a weighted median (where voting power corresponds to a validator's stake)

  • Votes that deviate beyond predefined standard deviation thresholds are automatically rejected, preventing price manipulation

  • The final agreed-upon price is recorded on-chain through on-chain Oracle module

  • This dual-layer system (off-chain data collection + on-chain consensus) ensures DeFi applications like stablecoins and lending protocols receive tamper-resistant price data while maintaining full decentralization.

    What kind of information does the Kii Oracle store?

    The Kii Oracle stores and manages:

    • Cryptocurrency price pairs (e.g., BTC/USDT, ETH/USDT) with:

      • Chain-denominated values (e.g., ubtc, uusdt for KiiChain assets).

      • Deviation thresholds to prevent volatile or manipulated data.

      • Provider lists (e.g., Binance, Coinbase) for data aggregation.

    • Validator-submitted prices, aggregated into a consensus value.

    The data is stored on-chain in the Oracle module’s state and updated periodically by the price-feeder to ensure accuracy.

    What is the Purpose of an Oracle in Kiichain?

    An Oracle in Kiichain serves as the essential bridge between blockchain-based financial applications and real-world market data. It provides secure, decentralized, and tamper-proof price feeds that enable smart contracts to interact with external economic information and empowers developers to build financial tools with key requirements such as open, fair, and resilient.

    To become delegators, KII holders need to send a "Delegate transaction" where they specify how many KIIs they want to bond and to which validator. A list of validator candidates will be displayed in KII Explorer. Later, if a delegator wants to unbond part or all of their stake, they needs to send an "Unbond transaction". From there, the delegator will have to wait 21 days to retrieve their KIIs. Delegators can also send a "Rebond Transaction" to switch from one validator to another, without having to go through the 3-week waiting period.

    What is staking?

    Kiichain is a public Proof-Of-Stake (PoS) blockchain, meaning that the weight of validators is determined by the amount of staking tokens (KII) bonded as collateral. These KII tokens can be self-delegated directly by the validator or delegated to the validator by other KII holders.

    Any user in the system can declare their intention to become a validator by sending a create-validator transaction to become validator candidates.

    The weight (i.e. voting power) of a validator determines whether they are an active validator.

    Transaction fees (KIIs): Each transfer on Kiichain comes with transaction fees. These fees can be paid in any currency that is whitelisted by the Hub's governance. Fees are distributed to bonded KII holders in proportion to their stake.

    Each validator receives revenue based on their total stake. Before this revenue is distributed to delegators, the validator can apply a commission. In other words, delegators have to pay a commission to their validators on the revenue they earn. Let us look at a concrete example:

    We consider a validator whose stake (i.e. self-delegated stake + delegated stake) is 10% of the total stake of all validators. This validator has 20% self-delegated stake and applies a commission of 10%. Now let us consider a block with the following revenue.

    Validator Commission

    We can see the validator commission with the following example:

    • 990 KIIs will be rewarded in block provisions

    • 10 KIIs will be rewarded in transaction fees

    • This amounts to a total of 1000 KIIs in rewards

    Our validator's staking pool represents 10% of the total stake, which means the pool obtains 100 KIIs. Now let us look at the internal distribution of revenue:

    • Commission = 10% * 80% * 100 KIIs = 8 KIIs

    • Validator's revenue = 20% * 100 KIIs + Commission = 28 KIIs

    • Delegators' total revenue = 80% * 100 KIIs - Commission = 72 KIIs

    Then, each delegator in the staking pool can claim their portion of the delegators' total revenue.

    Utility rewards module.

    KIIEX API integrations for 30+ countries.

  • DASP license in El Salvador for both KIIEX and KiiChain.

  • EVM gas fee abstraction for stablecoins.

  • https://k
    iiex
    App Store Reference
    kii Github
    (kii2 Github
    kiichain Github
    https://kiichain.io/testnet

    Bank Precompile

    Provides functionalities for checking balances and supply.

    0x0000000000000000000000000000000000000804

    Distribution Precompile

    Deals with reward distribution and related

    0x0000000000000000000000000000000000000801

    Governance Precompile

    Supports actions such as depositing funds into proposals, voting and interacting with proposals.

    0x0000000000000000000000000000000000000805

    IBC Precompile

    Allows ibc transfers

    0x0000000000000000000000000000000000001002

    ICS20 Precompile

    Facilitates usage of ICS20

    0x0000000000000000000000000000000000000802

    Slashing Precompile

    Provides management and query options for penalties

    0x0000000000000000000000000000000000000806

    Staking Precompile

    Enables staking functionalities like delegation and undelegation or obtaining information on validators.

    0x0000000000000000000000000000000000000800

    Wasm Precompile

    Precompile for interacting with wasm contracts

    0x0000000000000000000000000000000000001001

    a TS/JS library

    @kiichain/kiijs-evm

    Typescript library containing helper functions for interacting with the EVM on Kiichain.

    @kiichain/kiijs-proto

    Typescript support for KiiChain protofiles, generated with Telescope

    @kiichain/kiijs-utils

    Typescript support for a few generic Kiichain functions, like address conversion or ethscp256-1 signer

    Code of Conduct
    contribution guidelines
    GitHub Issues
    Apache License 2.0

    Network name

    Kiichain Testnet Oro

    New RPC URL

    https://json-rpc.dos.sentry.testnet.v3.kiivalidator.com/

    Chain ID

    1336

    Currency symbol

    KII

    Block explorer URL

    https://explorer.kiichain.io/testnet

    Kiichain Testnet Page
    Explorer App
    Chain lists
    Testnet Tokens

    Risks to consider

    Staking is not free of risk.

    First, staked KIIs are locked up, and retrieving them requires a 3 week (21 days) waiting period called the “unbonding period”. Additionally, if a validator misbehaves, a portion of their total stake can be slashed (i.e. destroyed). This includes the stake of their delegators.

    There is one main slashing condition:

    Double signing: If someone reports that a validator signed two different blocks with the same chain ID at the same height, this validator will get slashed.

    This is why KII holders should perform careful due diligence on validators before delegating. It is also important that delegators actively monitor the activity of their validators. If a validator behaves suspiciously or is too often offline, delegators can choose to unbond from them or switch to another validator. Delegators can also mitigate risk by distributing their stake across multiple validators.

    Disclaimer

    Please note that this is highly experimental software. In these early days, we can expect to have issues, updates, and bugs. The existing tools require advanced technical skills and involve risks which are outside of the control of Kii Global, or anything published by Cosmos or the Interchain Foundation. Kii Global does not keep a copy of your keys and cannot safeguard your digital assets. Any use of this open source software is done at your own risk and on a "AS IS" basis, without warranties or conditions of any kind, and any and all liability of Kii Global or any of its affiliates or subsidiaries.

    Run a Validator / Full Node

    Initial steps before announcing your entry as a validator

    Introduction

    Kiichain is a cosmos based blockchain that relies on a set of validators that are responsible for committing new blocks in the blockchain. These validators participate in the consensus protocol by broadcasting votes that contain cryptographic signatures signed by each validator's private key.

    Validator candidates can bond their own KII and have KII "delegated", or staked, to them by token holders. Kiichain has an open set of 100 validators who reviews rewards, but over time the number of validators can be increased with governance proposals. The validators are determined by the total number of KII tokens delegated to them — the top 100 validator candidates with the most voting power are the current Kii validators.

    Validators and their delegators earn KII as block provisions and tokens as transaction fees through execution of the Tendermint consensus protocol. Note that validators can set a commission percentage on the fees their delegators receive as additional incentive.

    If validators double sign or are offline for an extended period, their staked KII (including KII of users that delegated to them) can be slashed. The penalty depends on the severity of the violation.

    Hardware

    For validator key management, validators must set up a physical operation that is secured with restricted access. A good starting place, for example, would be co-locating in secure data centers.

    Validators are expected to equip their datacenter location with redundant power, connectivity, and storage backups. Expect to have several redundant networking boxes for fiber, firewall, and switching and then small servers with redundant hard drive and failover.

    As the network grows, bandwidth, CPU, and memory requirements rise. Large hard drives are recommended for storing years of blockchain history, as well as significant RAM to process the increasing amount of transactions.

    Create a Validator Website

    To get started as a validator, create your dedicated validator website and signal your intention to become a validator in the Kii Discord validator channel. Posting your validator website is essential because delegators want to have information about the entity who is receiving their delegated KII.

    Seek Legal and Tax Advice

    As always, do your own research and seek legal advice if you intend to run a validator node.

    Community

    Discuss the finer details of being a validator on our community Discord. Follow Kii Global on all socials and sign up for the Kii newsletter to get regular updates.

    Economics

    Kiichain´s PoS staking model.

    There are three type of important network participants in Kiichain.

    1. MasterNodes: Kii Global will run its own proprietary validators for its corporate partners. Users who commit 150,000 KII as a minimum to these validators will receive the highest tear of rewards compensation.

    2. Validators (full nodes): Validators are the heart of Kiichain that build the blocks and approve transactions. The higher amount of KII staked in the validators, the higher percentage of rewards earned from the rewards pool during each epoch.

    3. Delegators (stakers): Individuals who commit KII to validators in order to participate in staking and earn rewards.

    Rust SDK Repo

    KiiChain RWA SDK

    The RWA (Real World Asset) SDK is a Rust library for interacting with tokenized real-world assets on Cosmos-based blockchains. It provides functionality for token operations, identity management, and compliance handling.

    Features

    • Token transfers and balance checks

    • Identity registration and management

    • Compliance module integration

    • Blockchain interaction via RPC

    Usage Example

    This example demonstrates how to initialize the RwaClient, perform a token transfer, and check an account balance. Error handling and proper setup of the signing key are crucial for production use.

    For more detailed information on each function and module, please refer to their respective documentation.

    Github RWA Repo
    and
    . The YubiHSM can protect a private key but cannot ensure in a secure setting that it won't sign the same block twice.

    Sentry Nodes (DDOS Protection)

    Validators are responsible for ensuring that the network can sustain denial of service attacks.

    One recommended way to mitigate these risks is for validators to carefully structure their network topology in a so-called sentry node architecture.

    Validator nodes should only connect to full-nodes they trust because they operate them themselves or are run by other validators they know socially. A validator node will typically run in a data center. Most data centers provide direct links to the networks of major cloud providers. The validator can use those links to connect to sentry nodes in the cloud. This shifts the burden of denial-of-service from the validator's node directly to its sentry nodes, and may require new sentry nodes be spun up or activated to mitigate attacks on existing ones.

    Sentry nodes can be quickly spun up or change their IP addresses. Because the links to the sentry nodes are in private IP space, an internet-based attack cannot disturb them directly. This will ensure validator block proposals and votes always make it to the rest of the network.

    To setup your sentry node architecture you can follow the instructions below:

    Validators nodes should edit their config.toml:

    Sentry Nodes should edit their config.toml:

    Environment Variables

    By default, uppercase environment variables with the following prefixes will replace lowercase command-line flags:

    • GA (for Gaia flags)

    • TM (for Tendermint/CometBFT flags)

    • BC (for democli or basecli flags)

    For example, the environment variable GA_CHAIN_ID will map to the command line flag --chain-id. Note that while explicit command-line flags will take precedence over environment variables, environment variables will take precedence over any of your configuration files. For this reason, it's imperative that you lock down your environment such that any critical parameters are defined as flags on the CLI or prevent modification of any environment variables.

    this yubikey library is available (opens new window)
    Testnet KII can be found in the faucet in Discord and on our Explorer App. It can be called on every 24 hours.
    • Discord Kiichain Invitation

    Discord Faucet Commands

    Request tokens:

    Example EVM:

    Example CW:

    List of Commands:

    See all available commands:

    Request tokens:

    Query an address balance:

    Query a transaction:

    Query the faucet and node status:

    Query the faucet address:

    Testnet explorer app
    $request {address}
    import { HexToBech32, Bech32ToHex } from '@kiichain/kiijs-utils'
    
    const kiiAddress = HexToBech32("0xyourhex")
    
    const evmAddress = Bech32ToHex("kiiYouraddress)
    import { ethsecpAccountParser, signWithEthsecpSigner } from '@kiichain/kiijs-utils';
    
    // Start the client connection
    // The stargate client must use the custom account parser
    // This is necessary to handle the ethsecp256k1 PubKey format in queries
    const client = await SigningStargateClient.connectWithSigner(
      RPC_ENDPOINT,
      offlineSigner,
      {
        accountParser: ethsecpAccountParser,
      }
    );
    // This is the important bit
    // This signs the transaction using the ethsecp256k1 signer
    // It basically rewrite the Pubkey to the ethsecp256k1 format
    const txRaw = await signWithEthsecpSigner(
      client,
      offlineSigner,
      CHAIN_ID,
      address,
      [msgSend],
      "This is a sample transaction memo",
      KEPLR_CHAIN_INFO.feeCurrencies[0].gasPriceStep.high,
      1.5
    );
    const receipt = await client.broadcastTx(txRaw);
    
    A full example can be found [here](https://github.com/KiiChain/keplr-tx-template/blob/main/src/App.tsx)
    use rwa_sdk::RwaClient;
    use cosmrs::crypto::secp256k1::SigningKey;
    
    #[tokio::main]
    async fn main() -> Result<(), Box<dyn std::error::Error>> {
        // Initialize the client
        let client = RwaClient::new(
            "http://rpc.example.com:26657",
            "my-chain-id",
            "cosmos1token...",
            "cosmos1identity...",
            "cosmos1compliance...",
            "sei",
            "gas_price"
    
        )?;
    
        // Perform a token transfer
        let signer = SigningKey::from_slice(&[/* your private key */])?;
        let transfer_result = client.transfer(TransferMessageRequest {
            from: "cosmos1sender...".to_string(),
            to: "cosmos1recipient...".to_string(),
            amount: 100,
            signer,
            gas_limit
        }).await?;
        println!("Transfer hash: {}", transfer_result.hash);
    
        // Check a balance
        let balance = client.balance(TokenInfoRequest {
            address: "cosmos1address...".to_string(),
        }).await?;
        println!("Balance: {}", balance.balance);
    
        Ok(())
    }
    # Comma separated list of nodes to keep persistent connections to 
    # Do not add private peers to this list if you don't want them advertised 
    persistent_peers =[list of sentry nodes] 
    # Set true to enable the peer-exchange reactor 
    pex = false
    # Comma separated list of peer IDs to keep private (will not be gossiped to other peers) 
    # Example ID: [email protected]:26656 
    private_peer_ids = "node_ids_of_private_peers"
    $request Ox12345abcde…
    $request kii12345abcde…
    $help
    $request [kii address]
    $balance [kii address]
    $tx_info [transaction hash ID]
    $faucet_status [chain ID]
    $faucet_address [chain ID]
    Create API KEY
  • Create a Signature

    1. Create a Signature

  • Authenticate via API

    1. Authenticate via API

  • Create API KEY

    Navigate through the admin UI to your user profile.

    Click on the API KEYS option.

    Click on 'Create your API KEY'. You will see the following:

    Depending on how you plan to use your API KEY, please choose from the available options. If you want to restrict usage by IP address, you can add the allowed IP in the designated field. Remember, you can always modify this later.

    When you click on 'Create API Key', you will see your API KEY, API SECRET, and NONCE displayed on screen only once. You can download them using the 'Export to JSON' button. It's very important to store them in a safe place, as you will need them later.

    To save, click the button confirming that you've securely stored your credentials, then close the modal. Your new API KEY will now appear in the list, and you can edit or delete it as needed.

    Create a Signature

    To generate a signature, you will need the API Secret, Nonce, User ID, and API Key, which are all generated, You can generate a signature by using a tool such as https://codebeautify.org/hmac-generator The algorithm will be SHA256, the Key will be the API Secret, and the plain text message will be composed of a combination the Nonce, User ID, and API key, in that exact order with no spaces. An example is listed below.

    Authenticate via API

    Follow the example in the image, add the APIKEY, Signature, UserId, and Nonce to the request headers, and call the AuthenticateUser endpoint. This will successfully authenticate you.

    In the response, you will receive a session token. Use it in all subsequent requests by including it in the headers as the value of aptoken.

    Getting Started

    An introduction and important links.

    KiiChain Testnet Oro

    Oro Testnet is the final upgraded testnet before mainnet. Users and builders can interact and build with this testnet's latest features. Oro testnet will also run incentivization programs.

    For on-chain activities, activations, airdrops and more, join our open testnet here:

    • Testnet Oro

    Get a wallet in Testnet

    Testnet Oro supports wallet connections with EVM and Cosmos based wallets like MetaMask and Keplr. To set up a wallet, make sure you have the MetaMask or Keplr wallet extension downloaded in your web browser. MetaMask supports extension downloads for the following web browsers: Chrome, Firefox, Brave, Edge and Opera. Keplr supports wallets in Chrome, Firefox and Edge.

    For further explanation of how to set up your wallet, follow the steps or connect your testnet wallet to our explorer app automatically by following the steps .

    Get Testnet tokens

    Testnet Oro tokens are available in our or in the Explorer App. Once you have created a wallet, you can automatically request and receive 2,500 tokens within a 24 hour period. For any developers who would like more tokens, please request a bulk amount in our Discord channels. \

    The command for requesting tokens in our Discord faucet channel is:

    Example EVM:

    Example Cosmos Address:

    The full list of commands are:

    List commands:

    Request tokens:

    Query an address balance:

    Query a transaction:

    Query the faucet and node status:

    Query the faucet address:

    How to stake your tokens

    Tokens can be staked in the Explorer App by connecting your wallet and delegating to an active validator. Make sure the wallet you have connected to the Explorer App is funded with tokens.

    Connect wallet to Explorer App

    The Explorer App can be automatically connected to MetaMask or Keplr via the RPC endpoints. Once you have installed the MetaMask extension, follow the steps to connect your wallet and begin delegating.

    Developer resources

    If you’re a developer and are interested in building with KiiChain, a good place to start is reviewing the introduction information .

    Quick start links:

    Chat with us on Discord

    We’re active on our Discord. Whether you have questions regarding a hackathon or airdrop competition, or simply would just like to chat and build with us, join our discord .

    General customer service and developer support are available in our channel. Get to know us.

    You can find us on Discord:

    How to earn airdrops and rewards

    We’re constantly running localized airdrops, hackathons, and competitions in our community.

    Follow our X account and stay up to date with all announcements. For additional communities, visit our communities at Galxe, Zealy, TaskOn, and QuestN.

    Stablecoin FX Quick Start

    This guide explains how to swap any stablecoin using our Kii API. It covers retrieving balances, checking the current exchange rate, sending the order and verifying execution.

    Requirements to be able to trade stablecoins on Kii, via dashboard or API:

    • Have a user

    • Have an account level 1 at least (to upgrade from level 0 to level 1, you need to complete our KYC verification inside your user settings)

    • Have balances on any stablecoin

    Endpoints

    Staging URL :

    Prod URL :

    Swap Workflow example

    For this example will assume a goal and specify what to do in order, also we'll provide you with all the endpoints related to each step. The goal is:

    • Swap USDT → COPM using a market order.

    Prerequisites

    These are the prerequisites for the step-by-step guide.

    1. Create your Kii account:

      1. Go to and click on login, and create your user

        1. You can also follow our guide on

    2. Update your account from level 0 to level 1 by following our KYC flow to be able to swap

    Step-by-step

    These are the steps to fully create a swap and withdraw it:

    1. Authenticate your user via api

    2. Create a USDT deposit. If you have already created a deposit, check your current balance

    How do I perform the swap workflow using the API?

    API endpoints

    Authenticate your User via API

    Create Deposit

    Get Account Balances

    Get Current Rate

    Create a SWAP

    Get SWAP status

    Create a Withdrawal

    Check Withdrawal status

    Testnet Oro

    Everything you need to know about our Testnet Oro

    KiiChain is a peer-to-peer decentralized EVM-compatible network built with the Cosmos SDK. The public testnet is called KiiChain Testnet Oro.

    Testnet Oro is the permanent testnet with smart contract functionality and EVM compatibility. All Hackathons, Builds, Airdrops, and test deployments should be done on this network.

    Source code

    The source code for the Testnet Oro can be found at:

    Endpoints

    Testnet Oro has the following endpoints open for development purposes:

    Sentry #1:

    • RPC:

    • Rest (LCD):

    • GRPC: grpc.uno.sentry.testnet.v3.kiivalidator.com:443

    • JSON-RPC (EVM):

    Sentry #2:

    • RPC:

    • Rest (LCD):

    • GRPC: grpc.dos.sentry.testnet.v3.kiivalidator.com:443

    • JSON-RPC (EVM):

    Currently, there are no seed nodes or persistent peers available to the public.

    Chain information

    Here you can find further information about Testnet Oro:

    • Chain ID: oro_1336-1

    • Total Supply: 1.8b Kii

    • Token Denom: akii

    How to chain the network

    Instructions on how to join the network can be found at:

    Faucet

    You can get tokens to our Testnet Oro by using our Explorer app:

    Our through our Discord channel:

    More information about how to use our discord Faucet can be found at:

    Explorer

    The testnet Oro also has its own Explorer, it can be found here:

    Developer Tools

    You can find guides to the testnet at our :

    Endpoints

    Rest endpoints for the testnet Oro can be found here:

    EVM / CW Addresses

    KiiChain Testnet Oro features a mirrored EVM - CW smart contract module that replicates EVM compatibility. CW addresses are structured in Bech32 format with a distinctive "kii" prefix, characteristic of Cosmos-based chains. EVM addresses are structured with the hexadecimal format akin to Ethereum addresses. This alteration reflects a strategic adaptation to streamline interoperability with Ethereum-based tools and infrastructure, facilitating a seamless transition for developers and users alike.

    Tokens

    KII serves as the primary utility token within the KiiChain ecosystem, facilitating transactions and powering network operations, notably through the payment of gas fees. Distinguished by its fungibility and interoperability, KII can be seamlessly transferred and utilized across various wallet providers, including popular EVM rpc-based options like MetaMask & Coinbase wallet and cosmos-based wallets like Keplr and Leap. By leveraging KII, users can engage in a diverse array of interactions within the KiiChain network, ranging from simple transactions to more complex smart contract executions, thereby driving the adoption and utility of the native token within the broader blockchain landscape.

    Smart Contracts

    How to deploy smart contracts

    Kiichain supports natively supports both CosmWasm and EVM smart contracts. Developers can choose between any of the two to create amazing dApps.


    Working with Cosmwasm

    Prerequisites

    • Install Rust and CosmWasm toolchain:

    • Create a new CosmWasm contract:

    • Compile the contract:

    Upload and Instantiate the Contract

    1. Store the Contract

    2. Instantiate the Contract

    3. Execute the Contract


    Working with EVM

    Prerequisites

    • Install Node.js and Hardhat:

    • Install dependencies:

    Write and Compile the Smart Contract

    1. Create a Solidity file (MyContract.sol) in contracts/:

    2. Compile the contract:

    Deploy the Smart Contract

    1. Create a deployment script (scripts/deploy.js):

    2. Deploy to Kiichain:

    Interact with the Deployed Contract

    • Using Hardhat Console:


    References

    • CosmWasm Documentation:

    • Ethereum Hardhat Guide:

    Recovering Legacy Addresses

    Legacy addresses can be recovered

    With the upcoming Kiichain upgrade, wallet key handling is changing to support Ethereum-compatible tooling and address formats. This guide explains what's changing and how to recover your old wallets safely.

    What’s Changing?

    1. New Key Type

    • Old Type: secp256k1

    • New Type: eth_secp256k1

    This enables Ethereum-compatible signatures (e.g., MetaMask, Keplr EVM support).

    2. New Coin Type

    • Old Coin Type: 118 (standard Cosmos)

    • New Coin Type: 60 (Ethereum standard)

    This changes the way addresses are derived from your mnemonic.

    Recovering Existing Wallets

    To recover old wallets (e.g., validator rewards wallets or delegator accounts) that were created before the upgrade:

    • Replace <key_name> with your desired key name.

    • Input your existing mnemonic when prompted.

    Need to Check What Type a Key Was Created With?

    Unfortunately, kiichaind keys list does not show the coin type. You’ll need to recall which mnemonic was created with which derivation path. To avoid confusion:

    • Use clear key names like validator_old, wallet_eth.

    • Document the coin type and key type when generating keys.

    Choosing a validator

    Choosing a validator requires due diligence.

    In order to choose their validators, delegators have access to a range of information directly in the Kii block explorer, where all the validators in the active set will be shown.

    • Validator's moniker: Name of the validator candidate.

    • Validator's description: Description provided by the validator operator.

    • Validator's website: Link to the validator's website.

    • Initial commission rate: The commission rate on revenue charged to any delegator by the validator (see below for more detail).

    • Commission max change rate: The maximum daily increase of the validator's commission. This parameter cannot be changed by the validator operator.

    • Maximum commission: The maximum commission rate this validator candidate can charge. This parameter cannot be changed by the validator operator.

    • Validator self-bond amount: A validator with a high amount of self-delegated KIIs has more skin-in-the-game than a validator with a low amount.

    This information can be found at

    EVM

    The EVM Module enables full Ethereum Virtual Machine compatibility within Kiichain, allowing developers to deploy and interact with Ethereum smart contracts using familiar tools like MetaMask, Remix, Hardhat, and Web3 libraries.

    This module is built on top of the .

    Overview

    The evm module provides:

    Becoming a Validator

    How to run your own Kiichain Validator

    The configuration followed before, set your node as a full node, this page will guide you to upgrade your node into a validator.

    Becoming a validator

    Validators are mainly responsible

    • The build must be done on top of the upgrade tag (E.g. v1.0.1, v2.0.0)

    Rewards

    The rewards module adds the distribution of rewards from a specific community pool. Anyone can fund the pool but to change or initiate a reward distribution, a proposal needs to be passed.

    Flow

    1. Fund community pool with reward

    Security considerations

    Protocol for minimizing the risks of attacks.

    Introduction

    Social engineering has existed for about as long as human beings have been on the planet, and in the technical era, it usually takes in the form of phishing or spearphishing. Both of these attacks are wildly successful forms of trickery that are responsible for over 95% of account security breaches, and they don't just happen via email: these days, opportunistic and targeted phishing attempts take place anywhere that you have an inbox. It doesn't matter if you're using Signal, Telegram, SMS, Twitter, or just checking your DMs on forums or social networks, attackers have a plethora of opportunities to gain foothold in your digital life in effort to separate you from valuable information and assets that you most definitely don't want to lose. If an opportunity pops up that sounds too good to be true, or a message shows up asking for information that should never, ever be shared with someone else, you can always verify it before engaging with it by navigating to our official website or an official Kii Global communication channel on your own.

    Be skeptical of unexpected attachments, or emails that ask you to visit a suspicious or unfamiliar website in the context of blockchains or cryptocurrency. An attacker may attempt to lure you to a compromised site designed to steal sensitive information from your computer.

    Do your due diligence before purchasing KII. Neither the Kii Global team nor KIIEX will be selling KII at launch, so if you see social media posts or emails advertising a token sale from us, they're not real and should be dismissed immediately. If you're on the hunt for KII, make sure that you've researched the seller or exchange to confirm that the tokens are coming from a trustworthy source.

    No one from Kii Global or KIIEX will ever send an email that asks for you to share any kind of account credentials or your 12 words with us, and we will always use our official Twitter, Discord, Telegram, Instagram, and Github accounts to communicate important news directly to the Kii Global community.

    If you receive an email or tweet that sounds too good to be true, it is likely to be a scam.

    Keys management

    The best way to minimize the risk of theft or loss of KII is to have a strong storage and backup strategy for your private keys. The safest way to store your keys is offline, either in a cryptocurrency wallet or on a device that you never connect to the internet. The best backup strategy for your keys is to ensure that you have multiple copies of them stored in safe places, and to take specific measures to protect at least one copy of your keys from any kind of natural disaster that is a likely possibility in your part of the world.

    To protect your KII, do not share your 24 words with anyone. The only person who should ever need to know them is you. You do not need to share your private keys if you're delegating KII to a validator on the network or to use custodial services. If anyone asks for your key material, it is most likely a scam.

    Software Vulnerabilities

    To protect yourself and ensure you're using the safest code is to use the latest version of software available, and to update immediately (or as soon as you can) after a security advisory is released. This is important for your laptops, mobile devices, cryptocurrency wallets, and anything else that may be linked to your identity or your cryptocurrency.

    To protect your KII, you should only download software directly from official sources, and make sure that you're always using the latest, most secure versions of Kii Global applications when you're doing anything that involves your 24 words. If you’re building on Kiichain, Cosmos, gaiad, or connecting to the Cosmos Hub, the latest versions of software will always be available from official Github repositories.

    No one from Kii Global, Cosmos, the Tendermint team, the Interchain Foundation, or any affiliated blockchains in Cosmos will ever send an email that asks for you to download a software attachment after sending out a security advisory or making a patch available.

    Verifying Transactions

    Be skeptical of technical advice, especially advice that comes from people you do not know in forums and on group chat channels. Familiarize yourself with important commands, especially those that will help you carry out high-risk actions, and consult our official documentation to make sure that you're not being tricked into doing something that will harm you or your validator.

    When sending transactions or doing anything that may spend coins, you should always verify those transactions before hitting send. While address strings are long, it is important to visually comparing them in blocks of 4 characters at a time to ensure that you are sending them to the right place rather than into oblivion.

    If need be, send smaller “test” transaction amounts before sending larger amounts.

    Account Security

    One of the most important things you can do to protect your cryptocurrency and eliminate risk is to harden all of your critical online accounts. Attackers will try to gain a foothold wherever they can, and will use that foothold to pivot from one place to another. Unprotected accounts like email, social media, your Github account, and anything in between could give an attacker an opportunity to gain a foothold in your online life.

    For people who hold cryptocurrency, there are two specific account security actions that can be taken to eliminate specific risks that come with being part of the blockchain world.

    First, it is important to enable 2-factor authentication everywhere you can (including the Kii Wallet and KIIEX), and to make sure that you are using a code generator or U2F hardware key as a second factor.

    Second, be mindful of account recovery methods used to regain access to your most important accounts and make sure that you do not use SMS as a recovery method. If you haven't done so yet, start using an authenticator app or a hardware key immediately for your personal email account and wherever else you manage your tokens, especially if you use online exchanges.

    Attacks

    Whether you're buying a hardware or a hardware wallet, it is important to purchase whatever you need directly from the supplier or from a trusted source. This is the only way to completely eliminate the risk of a compromised device or chip from stealing your private keys, especially since there are reports of compromised wallets being sold on Amazon and through other popular online marketplaces.

    app.kiiglobal.io
    Example of Staking page
    Example of validator profile
    https://docs.google.com/forms/d/e/1FAIpQLSdugVWI9KSda6x5bQuA3erW_u8s2QDSFc7oNRANQjfVnbqjeg/viewformdocs.google.com
    https://docs.google.com/forms/d/e/1FAIpQLSctquajIpdeaxEgL9oSmFQEpmDs1sNC6ACZUrCxhVdPus8d1w/viewformdocs.google.com
    Testnet faucet
    here
    here
    Discord faucet
    here
    here
    Launch a node/full node/validator
    Blockchain endpoints
    Deploy a smart contract
    dApp development
    here
    Invitation link
    X Link

    Peer: 5b6aa55124c0fd28e47d7da091a69973964a9fe1@uno.sentry.testnet.v3.kiivalidator.com:26656

    Peer: 5e6b283c8879e8d1b0866bda20949f9886aff967@dos.sentry.testnet.v3.kiivalidator.com:26656

    EVM Chain ID: 1336

  • Bench32 Prefix: kii

  • Kiichain
    https://rpc.uno.sentry.testnet.v3.kiivalidator.com/
    https://lcd.uno.sentry.testnet.v3.kiivalidator.com/
    https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/
    https://rpc.dos.sentry.testnet.v3.kiivalidator.com/
    https://lcd.dos.sentry.testnet.v3.kiivalidator.com/
    https://json-rpc.dos.sentry.testnet.v3.kiivalidator.com/
    Step-by-Step Guide
    KiiChain Explorer Faucet
    Discord Kiichain Invitation
    Testnet Faucet
    Testnet Oro Explorer
    Developer Tools
    RWA Protocol
    Deploying a smart contract
    Deploying a dApp
    Endpoints
    CosmWasm Docs
    Hardhat Docs
    EVM Execution Environment within Cosmos-SDK
  • Support for Ethereum JSON-RPC APIs

  • Full Solidity smart contract compatibility

  • Available Messages and Transactions

    The EVM module provides several messages and transactions that users and developers can utilize:​

    Ethereum Transactions

    • Submit Ethereum Transactions: Users can submit Ethereum-formatted transactions (MsgEthereumTx) to Kiichain, which are processed by the EVM module.​

    CLI Commands

    Kiichain offers command-line interface (CLI) commands for interacting with the EVM module:​

    • Query Smart Contract Code:

    • Query Storage:

    • Submit Raw Ethereum Transaction:

    JSON-RPC Support

    Kiichain's EVM module exposes standard Ethereum JSON-RPC endpoints, allowing developers to interact with the blockchain using familiar methods:​

    • eth_sendTransaction: Send a transaction

    • eth_call: Call a smart contract function without making a state-changing transaction

    • eth_estimateGas: Estimate the gas required for a transaction

    • debug_traceTransaction: Trace the execution of a transaction for debugging purposes

    And other general EVM JSON-RPC calls.

    FeeMarket Module

    The x/feemarket module implements a dynamic fee mechanism inspired by Ethereum's EIP-1559, enhancing transaction fee predictability and network efficiency.​

    Key Concepts

    • Base Fee: A global, per-block fee that adjusts based on network demand. It increases when blocks are above the gas target and decreases when below. Unlike Ethereum, where the base fee is burned, Kiichain allocates it for regular Cosmos SDK fee distribution.​

    • Priority Tip: An optional fee that users can include to prioritize their transactions. While Cosmos SDK v0.46 lacks native transaction prioritization, this tip can still influence transaction inclusion.

    • Effective Gas Price: Determined by the minimum of (baseFee + priorityTip) and gasFeeCap, ensuring users don't overpay for transactions.

    • Minimum Gas Prices: Validators can set local minimum gas prices, and a global minimum can be established via governance. Transactions below these thresholds are discarded, mitigating spam

    This module ensures a more stable and predictable fee structure, benefiting both users and validators.

    ERC20

    The x/erc20 module facilitates seamless, trustless conversion between Cosmos-native tokens and ERC-20 tokens, bridging the gap between the Cosmos and Ethereum ecosystems.

    Key Concepts

    • Bidirectional Conversion: Users can convert native Cosmos sdk.Coins to ERC-20 tokens and vice versa, enabling interoperability between different blockchain applications.

    • Token Pair Registration: Mappings between Cosmos denominations and ERC-20 contract addresses, known as TokenPairs, are managed via governance proposals. This ensures controlled and secure token conversions.

    • Use Cases

      • Utilize Cosmos assets (e.g., ATOM, OSMO) in Ethereum-based DeFi protocols.

      • Transfer ERC-20 tokens to Kiichain for use within the Cosmos ecosystem.

      • Enable applications that require ERC-20 standard tokens while leveraging Cosmos SDK features.

    By supporting ERC-20 token standards, Kiichain enhances its interoperability, allowing for a broader range of decentralized applications and services.​

    Cosmos EVM implementation

    Check the section Binary Installation on how to do it

    Make sure that the binary has the correct version with:

    To add a new upgrade you must run the following command on Cosmovisor:

    Where:

    • <upgrade-name> is the on-chain upgrade name

    • <path-to-binary> is the full path for the binary

    Example:

    validating and committing blocks. The main advantages of becoming a validator are:

    • Fees. Each transaction has fees, and validators are the main entry points of fee distribution. And due to his help on decentralization, part of the fee is exclusive for validators.

    Creating a validator

    1. Key creation

    To create a validator, you first must have a key available for transactions. A new key can be created with:

    You will get an output such as:

    1. Transfer funds

    Ensure your account has sufficient funds for fees and self-delegation.

    1. Create the validator

    A validator will be created based on your consensus public key. You can check your current public key using:

    To create a validator, first you will need to create a JSON with your validator information.

    This template can be used when creating the validator:

    Where:

    • pubkey : Validator's public key used for signing blocks (ed25519).

    • amount: Amount of tokens to self-delegate (e.g., 1000 akii with 18 decimals).

    • moniker: Validator's display name.

    • identity (optional): Identity string (e.g., Keybase or UPort for verification).

    • website (optional): Validator’s website URL.

    • security (optional): Security contact email for incident disclosure.

    • details (optional): Additional description of the validator.

    • commission-rate :Initial commission rate (e.g., 0.1 = 10%).

    • commission-max-rate: Maximum commission rate allowed (e.g., 20%).

    • commission-max-change-rate: Max daily change in commission (e.g., 1%).

    • min-self-delegation: Minimum tokens validator must always self-delegate to stay active.

    To apply, you can use the following command:

    The transaction must be done on the machine running the node

    • An additional flag --node can be passed to point to an available RPC node

    Further instructions on how to run a validator can be found at Running a Validator.

    Create and pass a proposal to create a release schedule
  • At the end of every block, a linear % of the reward will be forwarded for distribution

  • When the end time of the release is reached, all rewards will have been given away, and it will go inactive

  • Internal state

    To properly release on time, calculate rewards, and keep track, we have a RewardReleaser with the following internal information:

    At the end of each block, if the releaser is active:

    • It will calculate the amount to be distributed linearly across time based on the last release and the current block time.

    • If the amt to be distributed is zero, it goes inactive

    • It sends the amount from the pool to the fee collector

    • It increases the released amount, the last release time, and the community pool with the changes.

    Messages

    FundPool

    Sends funds to the community pool, to be used in a future release.

    State Modifications:

    • The community pool funds will increase, as well as the module's balance

    ChangeSchedule

    Set the schedule to match what is sent. Only the governor can utilize this call, others need to pass a proposal.

    State Modifications:

    • Safety check the following

      • Denom of the amt must be the one being used

      • End time must be in the future

      • Funds must be available in the pool

    • Changes the reward release schedule to match what is sent

    Update Params

    Changes module params. Only the governor can utilize this call; others need to pass a proposal.

    State Modifications:

    • Changes the token_denom and min deposit

    Other important flows

    The releaser has a few edge cases that happen when it is initializing or going inactive:

    First iteration

    • There is no previous release time, so we cannot calculate a reward distribution

    • Instead of calculating the reward, we just set the last release as the block time

    • Next iteration will cover it well

    Last iteration

    • As the first release is delayed, so will be the last one

    • Once the EndTime is passed, all the remaining rewards will be distributed

    • The releaser will just go inactive a block after, when there is no amount to distribute

    $request {address}
    $request Ox12345abcde…
    $request kii12345abcde…
    $help
    $request [kii address]
    $balance [kii address]
    $tx_info [transaction hash ID]
    $faucet_status
    $faucet_address
    // CosmWasm based addresses
    kii123abc...
    
    // EVM based addresses
    0x123abc...
    rustup default stable
    rustup target add wasm32-unknown-unknown
    cargo install cargo-generate --features vendored-openssl
    cargo install cargo-run-script
    cargo generate --git https://github.com/CosmWasm/cosmwasm-template.git --name my-contract
    cd my-contract
    cargo wasm
    cargo schema
    kiichaind wasmd tx wasm store artifacts/my_contract.wasm --from my-key --gas auto --gas-adjustment 1.2 --node <KIICHAIN_NODE> --chain-id <KIICHAIN_CHAIN_ID>
    kiichaind wasmd tx wasm instantiate <CONTRACT_CODE_ID> '{}' --from my-key --label "My Contract" --gas auto --gas-adjustment 1.2 --node <KIICHAIN_NODE> --chain-id <KIICHAIN_CHAIN_ID>
    kiichaind wasmd tx wasm execute <CONTRACT_ADDRESS> '{"your_method": {}}' --from my-key --gas auto --gas-adjustment 1.2 --node <KIICHAIN_NODE> --chain-id <KIICHAIN_CHAIN_ID>
    npm install -g hardhat
    mkdir my-evm-contract && cd my-evm-contract
    npx hardhat
    npm install --save-dev @nomicfoundation/hardhat-toolbox
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.19;
    
    contract MyContract {
        string public message;
    
        constructor(string memory _message) {
            message = _message;
        }
    
        function setMessage(string memory _newMessage) public {
            message = _newMessage;
        }
    }
    npx hardhat compile
    const hre = require("hardhat");
    
    async function main() {
        const MyContract = await hre.ethers.getContractFactory("MyContract");
        const contract = await MyContract.deploy("Hello, Kiichain!");
        await contract.deployed();
        console.log("Contract deployed at:", contract.address);
    }
    
    main().catch((error) => {
        console.error(error);
        process.exitCode = 1;
    });
    npx hardhat run scripts/deploy.js --network kiichain
    npx hardhat console --network kiichain
    const contract = await ethers.getContractAt("MyContract", "<DEPLOYED_CONTRACT_ADDRESS>");
    await contract.setMessage("New Message");
    kiichaind keys add <key_name> \
      --keyring-backend test \
      --recover \
      --coin-type 118 \
      --key-type secp256k1
    kiichaind query evm code [address]
    # Example:
    kiichaind query evm code 0x7bf7b17da59880d9bcca24915679668db75f9397
    kiichaind query evm storage [address] [key] [flags]
    # Example:
    kiichaind query evm storage 0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0 0 --height 0
    kiichaind tx evm raw [tx_hex]
    # Example:
    kiichaind tx evm raw 0xf9ff74c86aefeb5f6019d77280bbb44fb695b4d45cfe97e6eed7acd62905f4a85034d5c68ed25a2e7a8eeb9baf1b84
    kiichaind version
    cosmovisor add-upgrade <upgrade-name> <path-to-binary>
    cosmovisor add-upgrade 1.3.0 /home/ubuntu/kiichain/build/kiichaind
    kiichaind keys add $VALIDATOR_KEY_NAME
    - name: asd
      type: local
      address: kii1507zhg2k7al477zqarzru7n4566lvcp9xnsxll
      evm_address: ""
      pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ak5kTpx4OIzXYWAOPjEVNFnn/9O+6BUgSbYCYpnUpRU5"}'
      mnemonic: ""
    
    **Important** write this mnemonic phrase in a safe place.
    It is the only way to recover your account if you ever forget your password.
    
    invite hollow salon dutch since six embrace squeeze label other pass bean size public lazy scissors spare blood safe nothing rapid list ritual license
    kiichaind tendermint show-validator
    {
        "pubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"C2xVqc+u101PQShdTJxGOF2HFCtYWwMDYLl4r2swiGE="},
        "amount": "1000000000000000000000akii",
        "moniker": "MY VALIDATOR",
        "identity": "optional identity signature (ex. UPort or Keybase)",
        "website": "validator's (optional) website",
        "security": "validator's (optional) security contact email",
        "details": "validator's (optional) details",
        "commission-rate": "0.1",
        "commission-max-rate": "0.2",
        "commission-max-change-rate": "0.01",
        "min-self-delegation": "1"
    }
    # Basic chain information
    CHAIN_ID="oro_1336-1"
    VALIDATOR_KEY_NAME=<my-validator-key>
    
    # Apply the create validator transaction
    kiichaind tx staking create-validator /
      ./validator.json /
      --chain-id=$CHAIN_ID /
      --gas="auto" /
      --gas-adjustment 1.3 /
      --gas-prices="1000000000akii" /
      --from=$VALIDATOR_KEY_NAME
    type RewardReleaser struct {
        // Total amount to be rewarded
        TotalAmount types.Coin `protobuf:"bytes,1,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount" yaml:"total_amount"`
        // Amount released
        ReleasedAmount types.Coin `protobuf:"bytes,2,opt,name=released_amount,json=releasedAmount,proto3" json:"released_amount" yaml:"released_amount"`
        // Timestamp of end of release
        EndTime time.Time `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3,stdtime" json:"end_time" yaml:"end_time"`
        // Last height released
        LastReleaseTime time.Time `protobuf:"bytes,5,opt,name=last_release_time,json=lastReleaseTime,proto3,stdtime" json:"last_release_time" yaml:"last_release_time"`
        // If reward pool is active
        Active bool `protobuf:"varint,6,opt,name=active,proto3" json:"active,omitempty" yaml:"active"`
    }
    message MsgFundPool {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      cosmos.base.v1beta1.Coin amount = 2 [
        (gogoproto.moretags) = "yaml:\"amount\"",
        (amino.encoding) = "legacy_coin"
      ];
    }
    message MsgChangeSchedule {
      // authority is the address of the governance account.
      string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
    
    
      // New information for the schedule
      ReleaseSchedule schedule = 2 [ (gogoproto.nullable) = false ];
    }
    
    message ReleaseSchedule {
      // Total amount to be rewarded
      cosmos.base.v1beta1.Coin total_amount = 1 [
        (gogoproto.moretags) = "yaml:\"total_amount\""
      ];
      // Amount released
      cosmos.base.v1beta1.Coin released_amount = 2 [
        (gogoproto.moretags) = "yaml:\"released_amount\""
      ];
      // Timestamp of end of release
      google.protobuf.Timestamp end_time = 3 [
        (gogoproto.stdtime) = true,
        (gogoproto.moretags) = "yaml:\"end_time\""
      ];
      // Last height released
      google.protobuf.Timestamp last_release_time = 5 [
        (gogoproto.stdtime) = true,
        (gogoproto.moretags) = "yaml:\"last_release_time\""
      ];
      // If reward pool is active
      bool active = 6 [
        (gogoproto.moretags) = "yaml:\"active\""
      ];
    }
    message MsgUpdateParams {
      // authority is the address of the governance account.
      string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
    
      // params defines the x/rewards parameters to update.
      //
      // NOTE: All parameters must be supplied.
      Params params = 2 [ (gogoproto.nullable) = false ];
    }
    message Params {
      // Minimal deposit
      string governance_min_deposit = 1;
    
      // Denom used
      string token_denom = 2;
    }

    Create your trader API Key on our panel to follow the next steps

    POST /GetAccountPositions

  • Get the current COPM/USDT rate

    1. Get Current Rate

  • Create market order (buy COPM)

    1. Create a SWAP

  • Verify order was filled

    1. Get SWAP status

  • Get trade details (swap info)

    1. POST /GetTradesHistory

  • Confirm the new COPM balance using the get account positions endpoint

    1. Get Account Balances

  • Create a COPM withdrawal, it could be to another wallet or to your bank account

    1. Create a Withdrawal

  • Check your COPM withdrawal status

    1. Check Withdrawal status

  • https://kiiex.io/
    Set up your Kii Account
    Authenticate your User via API
    Create Deposit

    Kii Ambassadors

    Become a Kii Ambassador

    What does it mean to become a KiiAmbassador?

    Welcome to the KiiAmbassadors Program, our exclusive initiative to spotlight and reward the most committed voices in the KiiChain community.

    This is not just a title — it's a role of influence and responsibility, for those who believe in our vision and want to help us grow the project both on-chain and online.

    All information, tasks, and rewards are shared through the Private Ambassadors Channel on our official Discord.

    You can apply to join the Ambassadors Program through the official KiiChain Discord (Official Links Channel): https://discord.gg/kiichain

    KiiAmbassadors are selected community members who:

    • Amplify our core messages on Twitter and other platforms.

    • Stay active and helpful in Discord.

    • Help bring new users to the chain and nurture the community spirit.

    • Represent the KiiChain brand publicly, respectfully and consistently.

    To be accepted into the program, you must:

    • Have a good follower base and engagement level on social media.

    • Follow KiiChain on X and be registered on the ORO Testnet.

    Your core responsibilities

    To maintain your role, we expect:

    • Engage weekly in the Kii Discord, especially in public channels.

    • React, share, and comment on KiiChain’s official posts on X.

    • Participate in the weekly tasks, shared in the Ambassadors Channel.

    • Help grow the community by inviting new users or explaining Kii to newcomers.

    Participation perks

    Ambassadors who complete tasks consistently and with high quality may receive:

    • Rewards in $ORO and $KII.

    • Monthly raffles for top ambassadors with USDT prizes.

    • Shoutouts on our official socials and Discord.

    • Access to exclusive giveaways.

    Points system and performance

    To ensure fairness and reward real contribution, we have created a Points System to track all ambassador activities. Each action, such as retweeting, commenting, participating in Discord, creating original content, or attending events, will earn you points.

    At the end of each month, top-performing ambassadors will be rewarded based on their accumulated points.

    Our mod team will also share a weekly form where you can submit proof of your participation and activities, ensuring your points are correctly assigned.

    In the table below, you can see how the points system is structured.

    Rewards

    Monthly Reward

    • 2,000 USDT in Rewards for the Top Contributors of the Month. Climb the leaderboard and secure your reward.

    • Every active ambassador is eligible to receive $300 USD worth of $KII per month, subject to the following conditions:

      • Publish at least 1 original post per week (e.g., thread, infographic, video).

      • Engage (like, retweet, and comment) with every official Kii post shared in the ambassador group.

    Rewards are vested with a 3-month cliff followed by 18-month linear vesting, and are based on a $100M fully diluted valuation (FDV) for $KII.

    Ambassador Incentives & Referral-Based Role System

    The KiiAmbassadors program rewards not only consistency and engagement, but also your ability to grow the community by bringing in other qualified contributors.

    We’ve created a referral-based role progression system, designed to reward ambassadors who actively expand the program with high-quality participants.

    Role Progression Based on Referrals

    For every 3 new KOLs (Key Opinion Leaders) you refer who are accepted into the program, your role is upgraded and you receive a bonus of $200 USD worth of $KII. This structure incentivizes high-quality referrals and gives ambassadors recognition as they grow the program. All bonuses follow the same vesting schedule as the base incentive (3-month cliff, 18-month linear vesting).

    To remain active in the program, ambassadors are also required to publish at least 4 pieces of original content per month.

    How to Qualify a Referral

    To count as a valid referral:

    • The referred KOL must follow KiiChain on X.

    • They must join and be approved into the official Ambassador Discord server.

    • The referral must be reported and verified by the Kii team.

    How to lose the role

    We reserve the right to revoke the role if:

    • You spread FUD or attack the KiiChain project or team.

    • You share scam links or break Discord’s rules.

    • You leak confidential information or early announcements.

    • You remain inactive without justification for a prolonged period.

    Evaluation process

    Every 30 days, the KiiChain team will evaluate ambassador activity based on:

    • Task completion

    • Quality of participation

    • Alignment with community values

    Members who don’t meet the standards may be removed from the program to make room for new voices.

    This program will evolve over time with new challenges, perks and surprises. Stay active, stay curious, and keep pushing KiiChain to new frontiers.

    Incentive

    Incentives for validating the network.

    What is the incentive to stake?

    Each member of a validator's staking pool earns different types of revenue:

    • Block rewards: Native tokens of applications (eg. KII) run by validators are inflated to produce block provisions. These provisions exist to incentivize KII holders to bond their stake. Non-bonded KII are diluted over time.

    • Transaction fees: The only fee token of Kiichain is the KII.

    This total revenue is divided among validators' staking pools according to each validator's weight. Then, within each validator's staking pool the revenue is divided among delegators in proportion to each delegator's stake. A commission on delegators' revenue is applied by the validator before it is distributed.

    What is a validator commission?

    Revenue received by a validator's pool is split between the validator and their delegators. The validator can apply a commission on the part of the revenue that goes to their delegators. This commission is set as a percentage. Each validator is free to set their initial commission, maximum daily commission change rate, and maximum commission. Kii Global enforces the parameter that each validator sets. The maximum commission rate is fixed and cannot be changed. However, the commission rate itself can be changed after the validator is created as long as it does not exceed the maximum commission.

    What is the incentive to run a validator?

    Validators earn proportionally more revenue than their delegators because of the commission they take on the staking rewards from their delegators.

    Validators also play a major role in governance. If a delegator does not vote, they inherit the vote from their validator. This voting inheritance gives validators a major responsibility in the ecosystem. Kiichain will migrate to open governance after launch.

    How are block rewards distributed?

    Block rewards are distributed proportionally to all validators relative to their voting power. This means that even though each validator gains ATOM with each reward, all validators maintain equal weight over time.

    For example, 10 validators have equal voting power and a commission rate of 1%. For this example, the reward for a block is 1000 KII and each validator has 20% of self-bonded KII. These tokens do not go directly to the proposer. Instead, the tokens are evenly spread among validators. So now each validator's pool has 100 KII. These 100 KII are distributed according to each participant's stake:

    • Commission: 100*80%*1% = 0.8 KII

    • Validator gets: 100\*20% + Commission = 20.8 KII

    • All delegators get: 100\*80% - Commission = 79.2 KII

    Then, each delegator can claim their part of the 79.2 KII in proportion to their stake in the validator's staking pool.

    How are fees distributed?

    Fees are similarly distributed with the exception that the block proposer can get a bonus on the fees of the block they propose if the proposer includes more than the strict minimum of required precommits.

    When a validator is selected to propose the next block, the validator must include at least 2/3 precommits of the previous block. However, an incentive to include more than 2/3 precommits is a bonus. The bonus is linear: it ranges from 1% if the proposer includes 2/3rd precommits (minimum for the block to be valid) to 5% if the proposer includes 100% precommits. Of course the proposer must not wait too long or other validators may timeout and move on to the next proposer. As such, validators have to find a balance between wait-time to get the most signatures and risk of losing out on proposing the next block. This mechanism aims to incentivize non-empty block proposals, better networking between validators, and mitigates censorship.

    For a concrete example to illustrate the aforementioned concept, there are 10 validators with equal stake. Each validator applies a 1% commission rate and has 20% of self-delegated KII. Now comes a successful block that collects a total of 1025.51020408 KII in fees.

    First, a 2% tax is applied. The corresponding KII go to the reserve pool. The reserve pool's funds can be allocated through governance to fund bounties and upgrades.

    • 2% * 1025.51020408 = 20.51020408 KII go to the reserve pool.

    1005 KII now remain. For this example, the proposer included 100% of the signatures in its block so the proposer obtains the full bonus of 5%.

    To solve this simple equation to find the reward R for each validator:

    9*R + R + R*5% = 1005 ⇔ R = 1005/10.05 = 100

    • For the proposer validator:

      • The pool obtains R + R * 5%: 105 KII

      • Commission: 105 * 80% * 1% = 0.84 KII

    What are the slashing conditions?

    If a validator misbehaves, their delegated stake is partially slashed. Two faults can result in slashing of funds for a validator and their delegators:

    • Double signing: If someone reports on chain A that a validator signed two blocks at the same height on chain A and chain B, and if chain A and chain B share a common ancestor, then this validator gets slashed by 5% on chain A.

    • Downtime: If a validator misses more than 95% of the last 10,000 blocks (roughly ~19 hours), they are slashed by 0.01%.

    Are validators required to self-delegate KII?

    No, they do not need to self-delegate. Even though there is no obligation for validators to self-delegate, delegators may want their validator to have self-delegated KII in their staking pool. In other words, validators share the risk.

    Note however that it's possible that some validators decide to self-delegate via a different address for security reasons.

    How to prevent concentration of stake in the hands of a few top validators?

    The community is expected to behave in a smart and self-preserving way. When a mining pool in Bitcoin gets too much mining power the community usually stops contributing to that pool. Kiichain relies on the same effect. Additionally, when delegators switch to another validator, they are not subject to the unbonding period, which removes any barrier to quickly redelegating tokens in service of improving decentralization.

    TokenFactory

    Token Factory

    The tokenfactory module allows any account to create a new token with the name factory/{creator address}/{subdenom}. Because tokens are namespaced by creator address, this allows token minting to be permissionless, due to not needing to resolve name collisions. A single account can create multiple denoms, by providing a unique subdenom for each created denom. Once a denom is created, the original creator is given "admin" privileges over the asset.

    This allows them to:

    • Mint their denom to any account

    • Burn their denom from any account

    • Create a transfer of their denom between any two accounts

    • Change the admin. In the future, more admin capabilities may be added. Admins can choose to share admin privileges with other accounts using the authz module. The ChangeAdmin functionality, allows changing the master admin account, or even setting it to "", meaning no account has admin privileges for the asset.

    Messages

    CreateDenom

    Creates a denom factory/{creator address}/{subdenom} given the denom creator address and the subdenom. Subdenoms can contain [a-zA-Z0-9./].

    State Modifications:

    • Fund the community pool with the denom creation fee from the creator address, set in Params.

    • Set DenomMetaData via the bank keeper.

    • Set AuthorityMetadata for the given denom to store the admin for the created denom factory/{creator address}/{subdenom}. Admin is automatically set as the Msg sender.

    Mint

    Minting of a specific denom is only allowed for the current admin. Note, the current admin is defaulted to the creator of the denom.

    State Modifications:

    • Safety check the following

      • Check that the denom minting is created via tokenfactory module

      • Check that the sender of the message is the admin of the denom

    • Mint a designated amount of tokens for the denom via

    Burn

    Burning of a specific denom is only allowed for the current admin. Note, the current admin is defaulted to the creator of the denom.

    State Modifications:

    • Safety check the following

      • Check that the denom minting is created via tokenfactory module

      • Check that the sender of the message is the admin of the denom

    • Burn a designated amount of tokens for the denom via

    ChangeAdmin

    Change the admin of a denom. Note, this is only allowed to be called by the current admin of the denom.

    SetDenomMetadata

    Setting of metadata for a specific denom is only allowed for the admin of the denom. It allows the overwriting of the denom metadata in the bank module.

    State Modifications:

    • Check that the sender of the message is the admin of the denom

    • Modify AuthorityMetadata state entry to change the admin of the denom

    Kiijs-proto

    @kiichain/kiijs-evm

    install

    https://apstage.proxy.kiiex.io/ap
    https://alphaprod.proxy.kiiex.io/ap

    Validator's reward: 105 * 20% + Commission = 21.84 KII

  • Delegators' rewards: 105 * 80% - Commission = 83.16 KII (each delegator is able to claim its portion of these rewards in proportion to their stake)

  • For each non-proposer validator:

    • The pool obtains R: 100 KII

    • Commission: 100 * 80% * 1% = 0.8 KII

    • Validator's reward: 100 * 20% + Commission = 20.8 KII

    • Delegators' rewards: 100 * 80% - Commission = 79.2 KII (each delegator is able to claim their portion of these rewards in proportion to their stake)

  • Suggest strong candidates who could join the program in the future.

    Special Q&A sessions with the KiiChain Core Team.
  • Early access to new features, tools, and campaigns.

  • Be active in public Discord channels with at least 3 helpful messages per week.

  • Complete and submit weekly tasks through our tracking system

  • You repeatedly ignore or skip assigned tasks.

    Add denom to the CreatorPrefixStore, where a state of denoms created per creator is kept.

    bank
    module
    bank
    module
    Usage

    You can utilize the types to build and send messages. To query, you can utilize an RPC query client, while for transactions you will need a wallet client paired with composing a message and then broadcasting it.

    RPC Clients

    To create an RPC client you can import the following helper and utilize it:

    Explore the types to find out what types of queries are available and how to utilized them.

    Composing Messages

    To compose messages, you can utilize the message composer of the respective type you want to build. For instance, tokenfactory messages can be found like this:

    We have a small section with a few more examples.

    Cosmos Messages

    Connecting with Wallets and Signing Messages

    ⚡️ For web interfaces, we recommend using cosmos-kit. Continue below to see how to manually construct signers and clients.

    Here are the docs on creating signers in cosmos-kit that can be used with Keplr and other wallets.

    Initializing the Stargate Client

    Use getSigningKiiChainClient to get your SigningStargateClient, with the proto/amino messages full-loaded. No need to manually add amino types, just require and initialize the client:

    Creating Signers

    To broadcast messages, you can create signers with a variety of options:

    • cosmos-kit (recommended)

    • keplr

    • cosmjs

    Amino Signer

    Likely you'll want to use the Amino, so unless you need proto, you should use this one:

    Proto Signer

    WARNING: NOT RECOMMENDED TO USE PLAIN-TEXT MNEMONICS. Please take care of your security and use best practices such as AES encryption and/or methods from 12factor applications.

    Broadcasting Messages

    Now that you have your stargateClient, you can broadcast messages:

    Converting from Hex to Bech32 and vice-versa

    We have a few helper functions for converting Hex to Bech32 and vice versa on the @kiichain/kiijs-evm. We did not import them over here since the proto files are all generated.

    Advanced Usage

    If you want to manually construct a stargate client

    message MsgCreateDenom {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      string subdenom = 2 [ (gogoproto.moretags) = "yaml:\"subdenom\"" ];
    }
    message MsgMint {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      cosmos.base.v1beta1.Coin amount = 2 [
        (gogoproto.moretags) = "yaml:\"amount\"",
        (gogoproto.nullable) = false
      ];
    }
    message MsgBurn {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      cosmos.base.v1beta1.Coin amount = 2 [
        (gogoproto.moretags) = "yaml:\"amount\"",
        (gogoproto.nullable) = false
      ];
    }
    message MsgChangeAdmin {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      string denom = 2 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
      string newAdmin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ];
    }
    message MsgChangeAdmin {
      string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
      cosmos.bank.v1beta1.Metadata metadata = 2 [ (gogoproto.moretags) = "yaml:\"metadata\"", (gogoproto.nullable)   = false ];
    }
    npm install @kiichain/kiijs-proto
    import { kiichain } from '@kiichain/kiijs-proto';
    
    const { createRPCQueryClient } = kiichain.ClientFactory; 
    const client = await createRPCQueryClient({ rpcEndpoint: RPC_ENDPOINT });
    
    // now you can query the cosmos modules
    const balance = await client.cosmos.bank.v1beta1
        .balance({ address: 'kiichain1addresshere', denom: 'akii' });
    
    import { kiichain } from '@kiichain/kiijs-proto';
    
    const {
        createDenom,
        mint,
        burn,
        changeAdmin,
        setDenomMetadata,
        forceTransfer,
        updateParams
    } = kiichain.tokenfactory.v1beta1.MessageComposer.withTypeUrl;
    import { cosmos } from '@kiichain/kiijs-proto';
    
    const {
        fundCommunityPool,
        setWithdrawAddress,
        withdrawDelegatorReward,
        withdrawValidatorCommission
    } = cosmos.distribution.v1beta1.MessageComposer.fromPartial;
    
    const {
        multiSend,
        send
    } = cosmos.bank.v1beta1.MessageComposer.fromPartial;
    
    const {
        beginRedelegate,
        createValidator,
        delegate,
        editValidator,
        undelegate
    } = cosmos.staking.v1beta1.MessageComposer.fromPartial;
    
    const {
        deposit,
        submitProposal,
        vote,
        voteWeighted
    } = cosmos.gov.v1beta1.MessageComposer.fromPartial;
    import { getSigningKiiChainClient } from '@kiichain/kiijs-proto';
    
    const stargateClient = await getSigningKiiChainClient({
      rpcEndpoint,
      signer // OfflineSigner
    });
    import { getOfflineSignerAmino as getOfflineSigner } from 'cosmjs-utils';
    import { getOfflineSignerProto as getOfflineSigner } from 'cosmjs-utils';
    import { chains } from 'chain-registry';
    
    const mnemonic =
      'unfold client turtle either pilot stock floor glow toward bullet car science';
      const chain = chains.find(({ chain_name }) => chain_name === 'kiichain');
      const signer = await getOfflineSigner({
        mnemonic,
        chain
      });
    import { cosmos } from '@kiichain/kiijs-proto'
    
    const { send } = cosmos.bank.v1beta1.MessageComposer.withTypeUrl;
    
    const msg = send({
        amount: [
        {
            denom: 'akii',
            amount: '10000000000000000'
        }
        ],
        toAddress: address,
        fromAddress: address
    });
    
    const fee: StdFee = {
        amount: [
        {
            denom: 'akii',
            amount: '10000000000000000'
        }
        ],
        gas: '86364'
    };
    const response = await stargateClient.signAndBroadcast(address, [msg], fee);
    import { HexToBech32, Bech32ToHex } from '@kiichain/kiijs-evm'
    
    const kiiAddress = HexToBech32("0xyourhex")
    
    const evmAddress = Bech32ToHex("kiiYouraddress)
    import { OfflineSigner, GeneratedType, Registry } from "@cosmjs/proto-signing";
    import { AminoTypes, SigningStargateClient } from "@cosmjs/stargate";
    
    import { 
        cosmosAminoConverters,
        cosmosProtoRegistry,
        cosmwasmAminoConverters,
        cosmwasmProtoRegistry,
        ibcProtoRegistry,
        ibcAminoConverters,
        kiichainAminoConverters,
        kiichainProtoRegistry
    } from '@kiichain/kiijs-proto';
    
    const signer: OfflineSigner = /* create your signer (see above)  */
    const rpcEndpoint = 'https://rpc.dos.sentry.testnet.v3.kiivalidator.com/'; // or another URL
    
    const protoRegistry: ReadonlyArray<[string, GeneratedType]> = [
        ...cosmosProtoRegistry,
        ...cosmwasmProtoRegistry,
        ...ibcProtoRegistry,
        ...kiichainProtoRegistry
    ];
    
    const aminoConverters = {
        ...cosmosAminoConverters,
        ...cosmwasmAminoConverters,
        ...ibcAminoConverters,
        ...kiichainAminoConverters
    };
    
    const registry = new Registry(protoRegistry);
    const aminoTypes = new AminoTypes(aminoConverters);
    
    const stargateClient = await SigningStargateClient.connectWithSigner(rpcEndpoint, signer, {
        registry,
        aminoTypes
    });

    Maintaining a validator

    How to update and maintain a validator on the Kii network

    This will guide you through basic operations on how to maintain a validator.

    What is a validator?

    Validators are the ones responsible for committing blocks. Due to this responsibility, validators must run their own nodes and will be slashed if they become unavailable or sign blocks at the same height. Validators will also receive rewards for each block signed from fees.

    Creating a validator

    1. Key creation

    To create a validator, you first must have a key available for transactions. A new key can be created with:

    You will get an output such as:

    1. Transfer funds

    Ensure your account has sufficient funds for fees and self-delegation.

    1. Create the validator

    A validator will be created based on your consensus public key. You can check your current public key using:

    To create a validator you can use the following command:

    The transaction must be done on the machine running the node

    • An additional flag --node can be passed to point to an available RPC node

    Further instructions on how to run a validator can be found at .

    Edit validator description

    At any moment, you can update your validator public description. This description is public and is what will be shown on block explorers.

    To update your delegator information you can use:

    Where:

    • --from must be the operator of the validator

    • --identity can be used as to verify identity with systems like Keybase or UPort

    • --commission-ratemust follow these rules:

    Neither commission-max-rate and commission-max-change-rate can be changed after validator creation.

    Unjail Validator

    Your validator may get jailed for downtime. To unjail your validator you must use the following transaction:

    Halting Your Validator

    You may want to halt your validator for maintenance or a coordinated upgrade. You can gracefully halt your validator by setting it halt-heightto the height you want to pause your validator. The node will shutdown with a zero exit code at that given height after committing the block.

    Kii | Crypto Exchangeexchange.kiiex.io

    Deploy a smart contract

    Overview for deploying a smart contract with Hardhat, Remix, Foundry, and Thirdweb.

    Chain Information

    Oracle

    The Oracle module brings up price feeds and exchange rates to Kiichain.

    • It allows validators to submit price data, which can be used by other modules or smart contracts (EVM and Wasm).

    • It supports multiple price feeds, allowing for a diverse set of data sources

    • It provides a mechanism for price data to be aggregated and made available on-chain

    Must be between 0 and the validator's commission-max-rate

  • Must not exceed the validator's commission-max-change-rate which is maximum % point change rate per day.

  • Running a Validator
    Price feeder

    Our official implementation for the price feeder is available at Kiichain Price Feeder.

    • The price must be ran by a validator or a delegated address

    • The price feeder is responsible for submitting the price data to the Oracle module

    • More information can be found at the project readme

    Core functionality

    The Oracle module works as follows:

    • Validators submit price data for arbitrary assets, which are defined in the module params

    • The module aggregates the price data submitted by validators and calculates a final exchange rate for each asset

    • The final exchange rate is stored on-chain and can be queried by other modules or smart contracts

    The Exchange Vote is done as following:

    1. A new block is created

    2. Validators submit their votes for the price of each asset in the whitelist through the MsgExchangeRateVote message

    • This message is feeless as long as its the first vote for the validator in the current voting period

    • The vote can be submitted by the validator itself or a delegated address (feeder address)

      • By using a delegated address, validators can separate their voting actions from their staking address

    1. The module aggregates the votes and calculates the final exchange rate for each asset

    2. If no vote is submitted by a validator in the current voting period, the module will slash the validator's stake according to the slash_fraction parameter

    3. The final exchange rate is stored on-chain and can be queried by other modules or smart contracts

    State

    These are the most important state types used by the Oracle module:

    Params

    Params stores the module wide configuration. Its defined as:

    Exchange Rates

    Exchange rates are the single entry for a price data on the chain. Its stored as a Key-Value pair in the store, where the key is the asset denom and the value is the price data.

    The price data is defined as:

    FeederDelegation

    Feeder delegations is the correlation between a validator and a feeder address. It allows validators to use a different address to submit votes.

    The FeederDelegation is defined as:

    Messages

    The Oracle module expose the following messages:

    AggregateExchangeRateVote

    The MsgAggregateExchangeRateVote message is used by validators to submit their votes for the price of each asset in the whitelist. It contains the following fields:

    DelegateFeedConsent

    The MsgDelegateFeedConsent message is used to delegate the right to submit votes to a different address. The message contains the following fields:

    UpdateParams

    The MsgUpdateParams message is used to update the module parameters. Only the governance module can call the message. It contains the following fields:

    Begin block

    On each ABCI call, the Oracle module performs the following actions:

    1. Check if we are under a new slash window

    2. Check the slash counters for validators and slash them if they didn't submit enough votes in the previous voting period

    3. Remove the excess feeds

    End block

    At the end of each block, the Oracle module performs the following actions:

    1. Check if we are under a new voting period

    2. Iterate the votes

    3. Calculate the final exchange rate for each asset in the whitelist

    4. Store the final exchange rate on-chain

    Ante handler

    The Oracle module ignores fees from validators on their first vote in the current voting period. The following is done:

    1. Check if the message is a MsgAggregateExchangeRateVote

    2. Check the validator/feeder relationship

    3. If the validator is voting for the first time in the current voting period, ignore the fees

    Acknowledgments

    Special thanks to the SEI team. Your contributions to the Cosmos SDK ecosystem are greatly appreciated. The original implementation of the Oracle module can be found in the SEI repository

    kiichaind keys add $VALIDATOR_KEY_NAME
    - address: kii105xft78q4wm565sn62chq4dxxvzq6uhqu0dawp
      name: "1234"
      pubkey: '{"@type":"/cosmos.evm.crypto.v1.ethsecp256k1.PubKey","key":"AxA37KswOGRQJ7R4JsDMbglhqh0TcPoiPEq/GCNZ1AJx"}'
      type: local
    
    
    **Important** write this mnemonic phrase in a safe place.
    It is the only way to recover your account if you ever forget your password.
    
    mom half sting horn fashion pizza citizen lonely random february knee miss vibrant peasant among pool suffer street alert eager notable net leave wrestle
    kiichaind tendermint show-validator
    # Basic chain information
    CHAIN_ID="oro_1336-1"
    
    # Define the validator information
    MONIKER=<my-moniker>
    AMOUNT=1000000000000000000000akii # 1000 kii as self delegation
    COMMISSION_MAX_CHANGE_RATE=0.1
    COMMISSION_MAX_RATE=0.1
    COMMISSION_RATE=0.1
    MIN_SELF_DELEGATION_AMOUNT=1000000000000000000
    
    kiichaind tx staking create-validator \
      --amount=$AMOUNT \
      --pubkey=$(kiichaind tendermint show-validator) \
      --moniker=$MONIKER \
      --chain-id=$CHAIN_ID \
      --commission-rate=$COMMISSION_RATE \
      --commission-max-rate=$COMMISSION_MAX_RATE \
      --commission-max-change-rate=$COMMISSION_MAX_CHANGE_RATE \
      --min-self-delegation=$MIN_SELF_DELEGATION_AMOUNT \
      --gas="auto" \
      --gas-adjustment 1.3 \
      --gas-prices="1000000000akii" \
      --from=$VALIDATOR_KEY_NAME
    kiichaind tx staking edit-validator
      --moniker="Any moniker" \
      --website="https://kii.network" \
      --identity=6A0D65E29A4CBC8E \
      --details="Delegate on my awesome kii validator!" \
      --chain-id=<chain_id> \
      --gas="auto" \
      --gas-adjustment 1.3 \
      --gas-prices="1000000000akii" \
      --from=<key_name> \
      --commission-rate="0.10"
    kiichaind tx slashing unjail \
     --from=<key_name> \
     --chain-id=<chain_id>
     --gas="auto" \
     --gas-prices="1000000000akii"
    // Params defines the parameters for the module
    message Params {
        option (gogoproto.equal)            = true;
        option (gogoproto.goproto_stringer) = false; // Allow custom logs
    
        // The number of blocks per voting
        uint64 vote_period =1 [(gogoproto.moretags) = "yaml:\"vote_period\""];
    
        // Minimum percentage of validators required to approve a price. For instance, if vote_threshold = "0.5" at least 50% of validators must submit votes
        // "cosmossdk.io/math.LegacyDec" = Cosmos SDK decimal data type
        string vote_threshold = 2 [
            (gogoproto.moretags) = "yaml:\"vote_threshold\"",
            (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
            (gogoproto.nullable) = false
        ];
    
        // Acceptable deviation from the media price (higher and lower)
        // "cosmossdk.io/math.LegacyDec" = Cosmos SDK decimal data type
        string reward_band = 3 [
            (gogoproto.moretags) = "yaml:\"reward_band\"",
            (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
            (gogoproto.nullable) = false
        ];
    
        // List of allowed assets
        // DenomList is a custom data type, defined on x/oracle/types/denom.go
        repeated Denom whitelist = 4 [
            (gogoproto.moretags) = "yaml:\"whitelist\"",
            (gogoproto.castrepeated) = "DenomList",
            (gogoproto.nullable) = false
        ];
    
        // How much stake is slashed if a validator fails to submit votes
        // "cosmossdk.io/math.LegacyDec" = Cosmos SDK decimal data type
        string slash_fraction = 5 [
            (gogoproto.moretags) = "yaml:\"slash_fraction\"",
            (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
            (gogoproto.nullable) = false
        ];
    
        // Define the window (in blocks) to vote, if not receive penalties due to bad performance
        uint64 slash_window = 6 [(gogoproto.moretags) = "yaml:\"slash_window\""];
    
        // Minimum percentage of voting on windows to avoid slashing. For instance, if min_valid_per_window = 0.8, then a validator must submit votes in 80% of windows to avoid slashing
        // "cosmossdk.io/math.LegacyDec" = Cosmos SDK decimal data type
        string min_valid_per_window = 7 [
            (gogoproto.moretags) = "yaml:\"min_valid_per_window\"",
            (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
            (gogoproto.nullable) = false
        ];
    
        // How far back (in blocks) the module can compute historical price metrics
        uint64 lookback_duration = 9 [(gogoproto.moretags) = "yaml:\"lookback_duration\""];
    }
    // Data type that stores the final calculated exchange rate after all votes were
    // aggregated to that single exchange, record the last block height and timestamp when rate was updated
    message OracleExchangeRate {
        option (gogoproto.equal)            = false;
        option (gogoproto.goproto_getters)  = false;
        option (gogoproto.goproto_stringer) = false;
    
        string exchange_rate = 1 [
            (gogoproto.moretags)   = "yaml:\"exchange_rate\"",
            (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
            (gogoproto.nullable)   = false
        ];
    
        string last_update = 2 [
            (gogoproto.moretags)   = "yaml:\"last_update\"",
            (gogoproto.customtype) = "cosmossdk.io/math.Int",
            (gogoproto.nullable)   = false
        ];
    
        int64 last_update_timestamp = 3 [(gogoproto.moretags)   = "yaml:\"last_update_timestamp\""];
    }
    // FeederDelegation is the structure on the genesis regarding the delegation process
    message FeederDelegation {
      // feeder_address is the address delegated
      string feeder_address    = 1;
    
      // validator_address is the validator's address who delegate its voting action
      string validator_address = 2;
    }
    // MsgAggregateExchangeRateVote represent the message to submit
    // an aggregate exchange rate vote
    message MsgAggregateExchangeRateVote{
      option (gogoproto.equal)           = false;
      option (gogoproto.goproto_getters) = false;
    
      option (cosmos.msg.v1.signer) = "feeder";
      option (amino.name) = "oracle/aggregate-exchange-rate-vote";
    
      string exchange_rates = 1 [(gogoproto.moretags) = "yaml:\"exchange_rates\""];
      string feeder = 2 [(gogoproto.moretags) = "yaml:\"feeder\""];
      string validator = 3 [(gogoproto.moretags) = "yaml:\"validator\""];
    }
    // MsgDelegateFeedConsent represents a message to delegate oracle voting
    // rights to another address
    message MsgDelegateFeedConsent{
      option (gogoproto.equal)           = false;
      option (gogoproto.goproto_getters) = false;
    
      option (cosmos.msg.v1.signer) = "validator_owner";
      option (amino.name) = "oracle/delegate-feed-consent";
    
      string validator_owner = 1 [(gogoproto.moretags) = "yaml:\"validator_owner\""];
      string delegate = 2 [(gogoproto.moretags) = "yaml:\"delegate\""];
    }
    // MsgUpdateParams is the Msg/UpdateParams request type
    message MsgUpdateParams {
      option (cosmos.msg.v1.signer) = "authority";
    
      // authority is the address that controls the module (defaults to x/gov)
      string authority    = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
      option (amino.name) = "kiichain/x/oracle/MsgUpdateParams";
    
      // params defines the x/oracle parameters to update
      //
      // NOTE: All parameters must be supplied.
      Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
    }
    Deploy with Hardhat

    1. Install Hardhat

    Install the hardhat framework in your project, by typing the following command:

    2. Create a hardhat project

    After installing Hardhat, create a project. You can create it using typescript or javascript in the following screen:

    3. Create a Smart contract and Compile project

    After creating the smart contract in the “Contracts” folder, run the following command to check your code.

    4. Set the hardhat configuration file and deploy the smart contract

    After creating the ignition deploy file, let's set the blockchain information into the hardhat.config file, with the following information:

    Deploy with Remix

    Remix is a web compiler page where you can write smart contracts, scripts and deploy using your wallet from Metamask. You can enter Remix here.

    In the Workspace create the file which contains the Smart contract with the .sol extension.

    After writing the smart contract, go to the Solidity Compiler section and select your compiler version, is recommended to use the most recent one.

    Then press “Compile” button under the Compiler selector.

    3. Select your Metamask wallet as Deploy environment

    In the “Deploy and Run Transactions” section, move to the Environment and select your Metamask Provider, remember you must be connected to KiiChain Testnet

    4. Deploy Smart contract

    Select the smart contract to be deployed and write the Constructor parameters if Remix detects them

    Finally, you can interact with the different functions in the same section above the Deploy button.

    Deploy with Foundry

    1. Create a project and installation

    Run the following commands in your terminal in order to start the foundry’s installation.

    then run the following command in another terminal or restart the current one for finishing the installation process.

    After finishing the foundry’s installation let’s create a new project, run the following commands for starting the new project and then move to it’s folder:

    2. Write and build a contract

    Write your smart contract in ‘/src/smartContractName.sol’ and the script in ‘/script/smartContractName.s.sol’, here is an example of that:

    This contract will be placed in the path: /src/Counter.sol

    This is the script and will be placed in /script/Counter.s.sol remember to add the .s before the .sol extension.

    then run the following command for build and check that everything is correct.

    3. Deploy

    First, you need to run a simulation.

    The simulation will be complete after that, and you can run with broadcast.

    A success message should appear.

    Troubleshooting — Remix on Oro (Testnet, Chain ID 1336)

    If a Remix deploy shows “Transaction mined but execution failed (status 0x0)”, set:

    • Solidity Compiler → EVM Version = london

    • Optimizer: enabled (200 runs)

    • Disable viaIR (if it was enabled)

    Re-compile, then deploy again on KiiChain Testnet (Oro, chainId 1336). This avoids newer EVM opcodes not yet supported by Oro.

    Hardhat — KiiChain Oro Network

    RPC URL:

    https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/

    Chain Id:

    1336

    RWA Protocol

    T-REX Protocol on KiiChain

    Note: This project is still under development so future changes will be made.

    Overview

    This document outlines the detailed implementation plan for the T-REX (Token for Regulated EXchanges) protocol using CosmWasm smart contracts on KiiChain. The T-REX protocol is designed for compliant issuance and management of security tokens on blockchain networks.

    Step-by-Step Guide

    Onboarding for validators

    It's always nice to see new users onboarding into the Testnet Oro.

    This will guide you through the process of running your own full node, then and finally running

    Install

    kiichaind is the command-line interface (CLI) for interacting with the Kiichain blockchain. This section covers the installation of the necessary binaries to run a Kiichain node.

    $ npm install --save-dev hardhat
    $ npx hardhat init
    888    888                      888 888               888
    888    888                      888 888               888
    888    888                      888 888               888
    8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
    888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
    888    888 .d888888 888    888  888 888  888 .d888888 888
    888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
    888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
    
    Welcome to Hardhat v2.22.8 
    
    ? What do you want to do? …
    ❯ Create a JavaScript project
      Create a TypeScript project
      Create a TypeScript project (with Viem)
      Create an empty hardhat.config.js
      Quit
    $ npx hardhat compile 
    import { HardhatUserConfig } from "hardhat/config";
    import "@nomicfoundation/hardhat-toolbox";
    
    const config: HardhatUserConfig = {
      solidity: "0.8.20", // Solidity Version
      networks: {
        kiichain: {
          url: "https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/",
          chainId: 1336,
          accounts: [`0x${yourPrivateKey}`],
        },
      },
    };
    
    export default config;
    
    $ npx hardhat ignition deploy ignition/modules/<contractName>.ts --network kiichain
    curl -L https://foundry.paradigm.xyz | bash
    foundryup
    forge init projectName
    cd projectName
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.13;
    
    contract Counter {
        uint256 public number;
    
        function setNumber(uint256 newNumber) public {
            number = newNumber;
        }
    
        function increment() public {
            number++;
        }
        
        
        function getCounter() public view returns (uint256) {
            return number;
        }
    }
    
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.13;
    
    import {Script, console} from "forge-std/Script.sol";
    import {Counter} from "../src/Counter.sol";
    
    contract CounterScript is Script {
        Counter public counter;
    
        function setUp() public {}
    
        function run() public {
            vm.startBroadcast();
    
            counter = new Counter();
    
            vm.stopBroadcast();
        }
    }
    
    forge build
    forge script script/Counter.s.sol:CounterScript --fork-url https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/ --private-key yourPrivateKey
    forge script script/Counter.s.sol:CounterScript --fork-url https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/ --private-key yourPrivateKey --broadcast
    // hardhat.config.ts
    import { HardhatUserConfig } from "hardhat/config";
    import "@nomicfoundation/hardhat-toolbox";
    
    const config: HardhatUserConfig = {
      solidity: { version: "0.8.20", settings: { optimizer: { enabled: true, runs: 200 } } },
      networks: {
        kiichain: {
          url: "https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/",
          chainId: 1336,
          // accounts: [process.env.PRIVATE_KEY!], // use .env, never hardcode keys
        },
      },
    };
    export default config;
    
    Important Links
    • GitHub Repo

    • Rust SDK

    Contracts and Their Methods

    1. CW20 T-REX Token

    Extends the CW20 standard with T-REX functionalities and implements permissioned transfers.

    Storage

    • token_info: TokenInfo

    • balances: Map<Addr, Uint128>

    • allowances: Map<(Addr, Addr), AllowanceInfo>

    • identity_registry: Addr

    • compliance: Addr

    Execute

    • transfer(recipient: Addr, amount: Uint128) -> Result<Response>

      • Description: Transfers tokens to a recipient if they are verified and compliant.

      • Interaction: Calls is_verified on Identity Registry and can_transfer on Modular Compliance.

    • transfer_from(owner: Addr, recipient: Addr, amount: Uint128) -> Result<Response>

      • Description: Transfers tokens on behalf of the owner if the recipient is verified and compliant.

      • Interaction: Similar to transfer, but checks allowances first.

    Query

    • balance(address: Addr) -> BalanceResponse

    • token_info() -> TokenInfoResponse

    • is_verified_transfer(from: Addr, to: Addr, amount: Uint128) -> IsVerifiedTransferResponse

      • Description: Checks if a transfer would be valid without executing it.

      • Interaction: Calls Identity Registry and Modular Compliance.

    2. Identity Registry

    Manages investor identities and eligibility.

    Storage

    • identity_storage: Addr

    • trusted_issuers_registry: Addr

    • claim_topics_registry: Addr

    • agents: Vec

    Execute

    • register_identity(address: Addr, identity: Addr) -> Result<Response>

      • Description: Registers a new identity for an address.

      • Interaction: Calls Identity Registry Storage to store the mapping.

    • update_identity(address: Addr, identity: Addr) -> Result<Response>

      • Description: Updates an existing identity for an address.

    • remove_identity(address: Addr) -> Result<Response>

      • Description: Removes an identity for an address.

    Query

    • is_verified(address: Addr) -> IsVerifiedResponse

      • Description: Checks if an address is verified (has required claims).

      • Interaction: Queries Identity Registry Storage, Trusted Issuers Registry, and Claim Topics Registry.

    3. Identity Registry Storage

    Stores the mapping of wallet addresses to identity contracts.

    Storage

    • identities: Map<Addr, Addr>

    Execute

    • add_identity(address: Addr, identity: Addr) -> Result<Response>

    • remove_identity(address: Addr) -> Result<Response>

    Query

    • get_identity(address: Addr) -> GetIdentityResponse

    4. Trusted Issuers Registry

    Manages the list of trusted claim issuers.

    Storage

    • trusted_issuers: Map<Addr, TrustedIssuer>

    Execute

    • add_trusted_issuer(issuer: Addr, claim_topics: Vec<u32>) -> Result<Response>

    • remove_trusted_issuer(issuer: Addr) -> Result<Response>

    Query

    • is_trusted_issuer(issuer: Addr) -> IsTrustedIssuerResponse

    • get_trusted_issuers() -> GetTrustedIssuersResponse

    5. Claim Topics Registry

    Stores the required claim topics for token eligibility.

    Storage

    • required_claim_topics: Vec

    Execute

    • add_claim_topic(topic: u32) -> Result<Response>

    • remove_claim_topic(topic: u32) -> Result<Response>

    Query

    • get_required_claim_topics() -> GetRequiredClaimTopicsResponse

    6. Modular Compliance

    Implements transfer restriction rules.

    Storage

    • modules: Vec

    • bound_tokens: Vec

    Execute

    • add_module(module: Addr) -> Result<Response>

    • remove_module(module: Addr) -> Result<Response>

    • bind_token(token: Addr) -> Result<Response>

    Query

    • can_transfer(from: Addr, to: Addr, amount: Uint128) -> CanTransferResponse

      • Description: Checks if a transfer complies with all modules.

      • Interaction: Calls check_transfer on each compliance module.

    7. ONCHAINID

    Represents user identities (similar to ERC-734/735).

    Storage

    • keys: Map<bytes32, Key>

    • claims: Map<bytes32, Claim>

    Execute

    • add_key(key: bytes32, purpose: u32, key_type: u32) -> Result<Response>

    • remove_key(key: bytes32) -> Result<Response>

    • add_claim(topic: u32, scheme: u32, issuer: Addr, signature: Vec<u8>, data: Vec<u8>, uri: String) -> Result<Response>

    • remove_claim(topic: u32) -> Result<Response>

    Query

    • get_key(key: bytes32) -> GetKeyResponse

    • get_claim(topic: u32) -> GetClaimResponse

    8. T-REX Factory

    Deploys and configures T-REX token suites.

    Storage

    • implementation_authority: Addr

    • deployed_tokens: Vec

    Execute

    • deploy_token_suite(token_info: TokenInfo, compliance_info: ComplianceInfo, identity_info: IdentityInfo) -> Result<Response>

      • Description: Deploys a new T-REX token suite.

      • Interaction: Instantiates all necessary contracts and configures them.

    Query

    • get_deployed_tokens() -> GetDeployedTokensResponse

    9. Implementation Authority

    Manages contract upgrades and versioning.

    Storage

    • versions: Map<String, ContractVersion>

    • current_version: String

    Execute

    • add_version(name: String, contracts: Vec<(String, Addr)>) -> Result<Response>

    • set_current_version(name: String) -> Result<Response>

    Query

    • get_current_version() -> GetCurrentVersionResponse

    • get_version(name: String) -> GetVersionResponse

    Implementation Roadmap

    1. Implement CW20 T-REX Token

    2. Implement Identity Registry and Identity Registry Storage

    3. Implement Trusted Issuers Registry and Claim Topics Registry

    4. Implement Modular Compliance

    5. Implement ONCHAINID

    6. Implement T-REX Factory

    7. Implement Implementation Authority

    8. Integrate all contracts and perform thorough testing

    9. Conduct security audit

    10. Deploy to Kii-Chain testnet

    11. Final testing and adjustments

    12. Deploy to Kii-Chain mainnet

    Testing Strategy

    • Implement unit tests for each contract function

    • Develop integration tests for contract interactions

    • Create end-to-end scenarios to test the entire T-REX suite

    • Perform fuzz testing to uncover edge cases

    • Conduct governance testing to ensure proper access control

    Requirements
    • Golang version: v1.23.x

    • Build tools: build-essential package (Linux)

    Binary installation

    To install Kiichain, download the pre-built binaries:

    Verify the installation by checking the version of kiichaind:

    Joining the Testnet

    To join the Testnet Oro, you must have the daemon kiichaind installed in your machine.

    Recommended configuration

    For optimal performance, we recommend:

    • 4 vCPU x86_64

    • 8 GB RAM

    • 1 TB NVME SSD

    Quick bootstrap

    The easiest way to prepare a node is by using our provided scripts.

    These scripts are designed for systems running Ubuntu 20.04 or Ubuntu 22.04. Ensure your operating system matches this requirement before proceeding.

    • Join Testnet Oro Script: Use this script to bootstrap a full node quickly.

    • Join Testnet with Cosmosvisor Script: Use this script to set up a full node with Cosmosvisor for automated upgrades

    Running your node

    Prepare your system by backing up and removing old configurations:

    Connect to the testnet with the following commands:

    (Optional but recommended): Before running the chain you can also check the SHA256:

    The expected SHA256 checksum is: 2805ae1752dc8c3435afd6bdceea929b3bbd2883606f3f3589f4d62c99156d2d

    This configuration runs a full node. For validators, update the configuration accordingly!

    Cosmosvisor

    Cosmosvisor is a process manager for handling chain upgrades. It enables low maintenance and automatic updates for nodes.

    • If an upgrade is scheduled, cosmosvisor has the capability of automatically downloading binaries and restarting any Kiichain processes

    • This gives the node low maintenance and auto updates capabilities

    A version of our node bootstrapper can install cosmosvisor for you:

    More information about cosmovision can be found at Cosmosvisor Quick Start.

    Preparing cosmosvisor upgrade

    First, you need to compile new binaries:

    • A new Kiichaind binary must be compiled with the target OS in mind

    • Ideally, you should compile all binaries on it’s own machines

    • The build must be done on top of the upgrade tag (E.g. v1.0.1, v2.0.0)

    • Check the section Binary Installation on how to do it

    Make sure that the binary has the correct version with:

    To add a new upgrade you must run the following command on Cosmovisor:

    Where:

    • <upgrade-name> is the on-chain upgrade name

    • <path-to-binary> is the full path for the binary

    Example:

    Configure state sync

    State sync significantly reduces the time required to synchronize a node by downloading and verifying state data from trusted peers rather than replaying every historical block. This is particularly beneficial for nodes joining the network late or recovering from a significant downtime.

    Follow these steps to configure state sync for your Kiichain node:

    1. Set Trust Height Delta and Fetch Block Information

    Define a height delta and retrieve the latest block height and block hash from the primary RPC endpoint.

    1. Enable State Sync in Configuration

    Modify the config.toml file to enable state sync and set the required parameters.

    Turning your node into an archival node

    Newly created nodes have the pruning option configured as default. If you desire to turn your node into an archival node, the following flag must be changed:

    1. Go to $NODE_HOME/config/app.tomland update the following flag:

    Other options available as default for pruning are:

    • default: Keep the recent 362880 blocks and prune is triggered every 10 blocks

    • nothing: all historic states will be saved, and nothing will be deleted (i.e. archiving node)

    • everything: all saved states will be deleted, storing only the recent 2 blocks; pruning at every block

    • custom: allow pruning options to be manually specified through 'pruning-keep-recent' and 'pruning-interval'

    Node Architecture for Validators

    Further instructions on how to build a great node architecture can be found on:

    • Playbook For Cosmos Validators: Node Architecture Choices

    References

    • Running a Validator

    • Playbook For Cosmos Validators: Node Architecture Choices

    • Cosmosvisor Quick Start

    • Join Testnet Oro

    becoming a validator
    the price feeder

    Fee Abstraction

    The Fee Abstraction module allows the payment of transaction fees in other arbitrary tokens different from the native token of the chain. This allows users to pay for fees in a more flexible way, using stablecoins, for example.

    The functionality of the module allows:

    • Pricing of transaction fees in arbitrary tokens.

    • Payment through native token (unwrapped) or through ERC20 tokens (wrapped).

    • Pricing of tokens is defined by the oracle module, which provides the exchange rates for the tokens.

      • This allows the use of stablecoins as fee tokens.

    • Applies safety mechanisms to prevent price manipulation:

      • Uses TWAP (Time-Weighted Average Price) instead of spot prices.

      • Applies a clamp factor to limit extreme price deviations.

      • Disables tokens with missing or zero prices.

    Core functionality

    In its code, the module changes the fee-paying ante handlers to allow payment of fees with tokens different from the native gas token.

    • This is done through both EVM and cosmos SDK ante handlers.

    • The pricing of tokens is done with the following logic:

      • The price of the token is defined by the oracle module in USD

      • The module then stores the price of the token per gas token

    Price calculation

    The price calculation happens at the beginning of each block:

    • We query the oracle module for the Twap (Time Weighted Average Price) of all available tokens in USD

    • Then we iterate over all the possible fee tokens and calculate the price of the token in gas tokens

      • The formula is:

    • During this calculation, we don't consider decimals, and all prices are in the same unit

    • The final pricing is stored in the module state

    We have a few safety mechanisms to ensure the prices are valid:

    • If the oracle module can't provide a price, the fee token is disabled

    • If prices go to zero, the fee token is disabled

    • The Twap of the token is used to avoid sudden price changes

    • Price changes are clamped to avoid extreme values

    Fee payment

    The module by itself does not handle the fee payment:

    • It returns available assets to each ante handler to process the deduct fee

    The following is the process to check for possible fee tokens:

    1. Ante handler receives and calculates the fee for the native gas token

    2. The fee goes to the fee abstraction module and is validated

      • The module ignores zero tokens, tokens different from the native fee token, and fees with multiple tokens

      • Due to the chain EVM nature, fees with multiple tokens are not supported

    State

    The most important state types used by the Fee Abstraction module are:

    Params

    Params stores the module wide configuration. It is defined as:

    FeeToken

    FeeToken stores the information about a fee token. It is defined as:

    Messages

    The module defines the following messages:

    MsgUpdateParams

    MsgUpdateParams is used to update the module parameters. Only the governance account can update the parameters, and it requires a valid signature. It is defined as:

    MsgUpdateFeeTokens

    The MsgUpdateFeeTokens message is used to update the fee tokens metadata. Only the governance account can update the fee tokens, and it requires a valid signature. On each update, all fee tokens must be provided, even if they are not changed:

    • Ordering is important, since the balance will be calculated based on the order of the fee tokens.

    It is defined as:

    Queries

    The module provides the following queries:

    QueryParams

    The QueryParams query is used to retrieve the current module parameters. It does not require any input and returns the current parameters.

    QueryFeeTokens

    The QueryFeeTokens query is used to retrieve the current fee tokens metadata. It does not require any input and returns the current fee tokens.

    Begin block

    On each ABCI call, the Fee Abstraction module performs the following actions:

    1. Check the current Twap for each fee token against the oracle module.

    2. Update the price of each fee token based on the Twap.

    3. Clamp the price of each fee token to avoid extreme values.

    4. Disable fee tokens that have no valid price or have a price of zero.

    Ante Handlers

    The Fee Abstraction module provides custom ante handlers to handle fee payments in the specified fee tokens.

    fee.go (Cosmos Ante Handler)

    This is the Cosmos SDK ante handler:

    • Has the same implementation as the .

    • The main difference is that the fees goes though the Fee Abstraction module before fee deduction.

    mono_decorator.go (EVM Ante Handler)

    This is the EVM ante handler:

    • Since the EVM module has a coupled implementation of the ante handler, the whole ante had to be migrated

    • The implementation is mostly the same as the

    The following was required to be changed:

    • Balance checks were broken down into different steps:

      • Check if the user has enough balance to pay for fees

      • Check if the user has enough balance to pay for TX value

    • Account creation was moved up to allow accounts to exist before the fee deduction

    Limitation

    A limitation happens with fresh wallets (wallets that have never executed a transaction):

    • Scenario 1: Fresh wallet with ERC20 (wrapped) fee tokens

      • If the first transaction attempted is a Cosmos SDK transaction using only ERC20 fee tokens:

        • The transaction will fail with an “account doesn’t exist” error.

    Implication

    Users must perform one of the following actions before attempting a Cosmos SDK transaction using ERC20 fee tokens:

    • Fund the wallet with any amount of the native (unwrapped) token and execute a small Cosmos transaction to create the account.

    • Or perform an EVM transaction first which also creates the account record.

    Deploy a dApp

    Deploy a decentralized application on KiiChain.

    Introduction

    In this tutorial, you will learn how to create a simple decentralized application (dApp) built on KiiChain. We will use tools such as React, TypeScript, and Ethers.js to build a basic wallet management system.

    Project setup

    Tools

    We will be using the following tools:

    • npx for managing Node.js packages and running commands.

    • ethers for interacting with the Ethereum blockchain and other compatible chains like KiiChain.

    • React for building the user interface.

    Create project

    First, navigate to your working directory, open a terminal, and run the following commands to create a new React project with TypeScript:

    After the project is set up, open the code in your preferred editor. If you are using Visual Studio Code, you can do this with:

    You should now see the following project structure:

    Install dependencies

    Next, you need to install the ethers library. Run the following command in the terminal within your project directory:

    The version used in this tutorial is .

    Coding the dApp

    Create the Repository

    Create a new file at src/repository/kiichain.repository.ts. The directory needs to be created.

    This repository file contains functions for basic operations like creating a wallet, connecting to a wallet using a seed phrase, and getting the balance of a wallet.

    What is a Signer and a Provider?

    In decentralized application (dApp) development, especially when interacting with blockchains like KiiChain, it's essential to understand the concepts of Provider and Signer. These components play crucial roles in communicating with and managing transactions on the blockchain.

    Provider

    A Provider is a component that allows your dApp to connect to and interact with the blockchain. It provides methods to read data from the blockchain, such as transaction statuses, account balances, and other network details. The provider does not have access to private keys and therefore cannot sign transactions.

    Signer

    A Signer is a component that represents an entity capable of making transactions on the blockchain, meaning it can sign them. A signer has access to the private keys necessary to authorize and send transactions, allowing you to modify the blockchain state, such as transferring tokens or interacting with smart contracts.

    Create the Wallet Manager Component

    Create a new file at src/components/WalletManager.tsx . The directory needs to be created

    This component implements the functions from the repository and displays the relevant information, such as the wallet address and balance.

    Run the dApp

    To check if everything is working correctly, you need to run the project. Open your terminal in the project directory and execute the following command:

    If everything is set up properly, your application should start, and the following screen will appear:

    Testing the Wallet Functionality

    1. Create a New Wallet: Click the "Create New Wallet" button. A new wallet will be generated, and the address along with the seed phrase will be displayed in the console.

    2. Access the Developer Console:

      • Right-click anywhere on the page and select "Inspect" to open the Developer Tools.

      • Navigate to the "Console" tab to see the output.

    By following these steps, you can confirm that the dApp is functioning as expected.

    Deploying the dApp Using Firebase

    To deploy your decentralized application (dApp) using Firebase Hosting, follow these steps:

    Step 1: Set Up a Firebase Project

    1. Create a Project in Firebase:

      • Visit the .

      • Click on "Create a project".

    Step 2: Initialize Firebase Hosting

    1. Install Firebase CLI:

      • Open your terminal and install Firebase CLI globally

    2. Login and Initialize Firebase:

      • Inside your project directory, run

    Step 3: Build and Deploy Your dApp

    1. Build the project:

      • Run the following command to generate the production-ready files

    2. Deploy to Firebase

      • Deploy your built project to Firebase Hosting

    Once the deployment is complete, the URL of your live dApp will be shown in the terminal.

    Running the Price feeder

    How to run your own Oracle and price feeder

    is an application used by validators to easily provide price feeds to the oracle module. The application abstracts away all the Oracle module requirements to the validators.

    Only validators are required to run the price-feeder. The module doesn't affect full nodes.

    • Validators who don't provide feeds for the oracle module will be slashed.

    git clone https://github.com/KiiChain/kiichain.git
    cd kiichain
    make install
    kiichaind version
    curl -O https://raw.githubusercontent.com/KiiChain/testnets/refs/heads/main/testnet_oro/join_oro.sh
    chmod +x join_oro.sh
    ./join_oro.sh
    curl -O https://raw.githubusercontent.com/KiiChain/testnets/refs/heads/main/testnet_oro/join_oro_cv.sh
    chmod +x join_oro_cv.sh
    ./join_oro_cv.sh
    # Backup old configuration
    cp -r $HOME/.kiichain $HOME/.kiichain-bk
    # Clean any old configuration
    rm -r $HOME/.kiichain
    # Variables used during the configuration
    PERSISTENT_PEERS="5b6aa55124c0fd28e47d7da091a69973964a9fe1@uno.sentry.testnet.v3.kiivalidator.com:26656,5e6b283c8879e8d1b0866bda20949f9886aff967@dos.sentry.testnet.v3.kiivalidator.com:26656"
    CHAIN_ID="oro_1336-1"
    NODE_HOME=~/.kiichain
    NODE_MONIKER=testnet_oro
    GENESIS_URL=https://raw.githubusercontent.com/KiiChain/testnets/refs/heads/main/testnet_oro/genesis.json
    MINIMUM_GAS_PRICES="1000000000akii"
    
    # Initialize the chain
    kiichaind init $NODE_MONIKER --chain-id $CHAIN_ID --home $NODE_HOME
    
    # Set the persistent-peers
    sed -i -e "/persistent-peers =/ s^= .*^= \"$PERSISTENT_PEERS\"^" $NODE_HOME/config/config.toml
    # Set the min gas price
    sed -i -e "/minimum-gas-prices =/ s^= .*^= \"$MINIMUM_GAS_PRICES\"^" $NODE_HOME/config/app.toml
    
    # Set the genesis
    wget $GENESIS_URL -O genesis.json
    mv genesis.json $NODE_HOME/config/genesis.json
    
    # Start the chain
    kiichaind start --home $NODE_HOME
    sha256sum $NODE_HOME/config/genesis.json
    curl -O https://raw.githubusercontent.com/KiiChain/testnets/refs/heads/main/testnet_oro/join_oro_cv.sh
    chmod +x join_oro_cv.sh
    ./join_oro_cv.sh
    kiichaind version
    cosmovisor add-upgrade <upgrade-name> <path-to-binary>
    cosmovisor add-upgrade 1.3.0 /home/ubuntu/kiichain/build/kiichaind
    # Configure state-sync
    TRUST_HEIGHT_DELTA=500
    LATEST_HEIGHT=$(curl -s https://rpc.uno.sentry.testnet.v3.kiivalidator.com/block | jq -r ".block.header.height")
    if [[ "$LATEST_HEIGHT" -gt "$TRUST_HEIGHT_DELTA" ]]; then
    SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - $TRUST_HEIGHT_DELTA))
    else
    SYNC_BLOCK_HEIGHT=$LATEST_HEIGHT
    fi
    
    # Get the sync block hash
    SYNC_BLOCK_HASH=$(curl -s "https://rpc.uno.sentry.testnet.v3.kiivalidator.com/block?height=$SYNC_BLOCK_HEIGHT" | jq -r ".block_id.hash")
    sed -i.bak -e "s|^enable *=.*|enable = true|" $NODE_HOME/config/config.toml
    sed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \"$PRIMARY_ENDPOINT,$SECONDARY_ENDPOINT\"|" $NODE_HOME/config/config.toml
    sed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" $NODE_HOME/config/config.toml
    sed -i.bak -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" $NODE_HOME/config/config.toml
    pruning = "nothing"
    Join Testnet Oro CV

    This allows for easy conversion when paying fees

  • And allows for easy querying

  • The user's balance is checked for the fee token

    • If the user has enough balance, the fee is returned as it is

  • If the user does not have enough balance, the module checks for available fee tokens

    • The available fee tokens are those that have a valid price and are not disabled

  • The module then calculates the fee in the available fee tokens

    • The fee is calculated using the price stored in the module state

  • If not available through the unwrapped native token, the module checks for wrapped ERC20 tokens

    • If the user has enough balance in the wrapped token, the token is unwrapped

    • This makes the token available for the fee payment

  • The fee is returned from the module to the ante handler

  • The ante handler then deducts the fee from the user's balance

  • Update the module state with the new prices and enabled status of the fee tokens.

  • If the module is disabled, it will not perform any of the above actions and will not allow fee abstraction.

  • At the end of the ante handler, the fee is registered on the context

    • This allows fee refunds to be processed correctly

    This is because the Cosmos SDK requires an on-chain account to exist prior to executing any Cosmos transaction, and ERC20 balances alone do not create the account record.
  • Scenario 2: Fresh wallet with native (unwrapped) fee tokens

    • If the first transaction attempted is a Cosmos SDK transaction using native fee tokens:

      • The transaction will succeed, as the presence of the native asset allows account creation during the transaction flow, and the fee abstraction module can process the fees normally.

  • Scenario 3: Fresh wallet with either ERC20 or native fee tokens, performing EVM transactions

    • If the first transaction attempted is an EVM transaction:

      • The transaction will succeed, regardless of whether the wallet holds ERC20 or native tokens, as the EVM module internally handles account creation differently.

  • original fee ante handler
    original EVM ante handler
    price_in_gas_token = price_in_usd / gas_price_in_usd
    // Params defines the parameters for the fee abstraction module
    message Params {
      // Native denom
      string native_denom = 1;
      // Oracle module identifier
      string native_oracle_denom = 2;
      // Enabled indicates if the fee abstraction module is enabled
      bool enabled = 3;
      // ClampFactor is the factor to clamp the price deviation
      string clamp_factor = 4 [
        (gogoproto.moretags) = "yaml:\"clamp_factor\"",
        (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
        (gogoproto.nullable) = false
      ];
      // TwapLookbackWindow is the lookback window for calculating TWAPs
      uint64 twap_lookback_window = 5;
      // FallbackNativePrice is the fallback price for the native token if the
      // oracle price is not available (in USD)
      string fallback_native_price = 6 [
        (gogoproto.moretags) = "yaml:\"fallback_native_price\"",
        (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
        (gogoproto.nullable) = false
      ];
    }
    // FeeTokenMetadata defines the metadata for a fee token
    message FeeTokenMetadata {
      // Denom is the token denom
      string denom = 1;
      // Identifier on the oracle module
      string oracle_denom = 2;
      // Decimals is the number of decimals for the token
      uint32 decimals = 3;
      // Price is the price of the token in the native denom
      // This price is paired against the native denom
      // So, this equals to the token/native denom
      string price = 4 [
        (gogoproto.moretags) = "yaml:\"price\"",
        (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
        (gogoproto.nullable) = false
      ];
      // Enabled indicates if the token is enabled for fee abstraction
      bool enabled = 6;
    }
    
    // Defines a collection of fee token metadata
    message FeeTokenMetadataCollection {
      // Items is a repeated field of FeeTokenMetadata
      repeated FeeTokenMetadata items = 1 [ (gogoproto.nullable) = false ];
    }
    // MsgUpdateParams is the Msg/UpdateParams request type.
    message MsgUpdateParams {
      option (cosmos.msg.v1.signer) = "authority";
      option (amino.name) = "feeabstraction/update-params";
    
      // authority is the address of the governance account.
      string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
    
      // params defines the x/feeabstraction parameters to update.
      Params params = 2 [ (gogoproto.nullable) = false ];
    }
    // MsgUpdateFeeTokens is the Msg/UpdateFeeTokens request type.
    message MsgUpdateFeeTokens {
      option (cosmos.msg.v1.signer) = "authority";
      option (amino.name) = "feeabstraction/update-fee-tokens";
    
      // authority is the address of the governance account.
      string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
    
      // fee_tokens defines the fee tokens to update.
      FeeTokenMetadataCollection fee_tokens = 2 [ (gogoproto.nullable) = false ];
    }
    // QueryParamsResponse is the response type for the Query/Params RPC method.
    message QueryParamsResponse {
      // params defines the parameters of the module.
      Params params = 1 [ (gogoproto.nullable) = false ];
    }
    // QueryFeeTokensResponse is the response type for the Query/FeeTokens RPC
    // method
    message QueryFeeTokensResponse {
      // fee_tokens defines the fee tokens registered in the module.
      FeeTokenMetadataCollection fee_tokens = 1;
    }
    TypeScript for adding static types to JavaScript.
  • Connect to the Wallet: Copy the seed phrase from the console, paste it into the input field under "Enter your seed phrase," and click "Connect Wallet via Seed Phrase."

  • View Wallet Balance: If connected successfully, the wallet's balance should be displayed on the screen.

  • Name your project and disable Google Analytics (optional for this tutorial).
    • Click "Continue" once the project is ready.

  • Access Firebase Hosting:

    • In the left menu, go to Build → Hosting.

    • Click "Get started" to begin setting up Firebase Hosting.

  • During initialization, select the following options:

    • Features: Hosting: Configure files for Firebase Hosting

    • Project Setup: Use an existing project

    • Public Directory: ‘build’

    • Single-page App: No

    • Automatic Builds/Deploys: No

    Ethers.js v6
    Firebase Console
    Price feeder details

    The Price Feeder is an essential component for validators added to Kiichain since version v3.0.0 to provide accurate cryptocurrency price data to the Kiichain network using the Oracle module.

    Prerequisites

    • A running Kiichain validator node

    • At least 1000000000000000000akii (1 Kii) in your validator account for feeder delegation

    There are no fees to run the price feeder:

    • As long as it's voting once per voting period

    • And the voter is the expected address for each validator

    Exchange Rates and Providers

    These are the prices stored on the blockchain (represented in USD).

    • $BTC

    • $ETC

    • $SOL

    • $XRP

    • $BNB

    • $USDT

    • $USDC

    • $TRX

    These are the providers by default on the price feeder:

    • Binance

    • MEXC

    • Coinbase

    • Gate

    Feeder account

    One important concept about the Oracle module and price-feeder is the feeder account.

    The feeder is an account that:

    • Separates your validator address from the account handling oracle feeds

      • This increases the security of your validator's main address

      • Keeps the validator’s signing key offline

    We highly recommend using a feeder account for the price-feeder:

    • Make sure that the feeder or any other accounts used on the price-feeder will not be used anywhere else:

      • Changes in account sequence may make the price-feeder fail to send TXs

    Feeder account setup

    To set up or update your feeder account, you can use the following TX:

    Upon TX success, the FEEDER_ADDR can then be used to provide price feeds for the Oracle module.

    Make sure that the feeder address has some Kii in its balance:

    • Although providing feeds is free, the account must exist on the chain and have a balance available

    Installation Steps

    The price feeder can be easily installed with our bootstrap script:

    • Run price feeder

    The script will automatically:

    • Build and install the price-feeder

    • Create a dedicated feeder account

    • Delegate price reporting rights

    • Fund the feeder account

    • Configure the systemd service

    To execute it, just run:

    We highly recommend using this bootstrap script to setup the price-feeder.

    You can also use it as a reference when preparing your own deployment.

    Manual installation

    You can also install the price-feeder manually by following these steps:

    1. Build and install the price feeder

    2. Configure the price-feeder

    Download our example config with:

    Now read the file and update all the main configurations based on our next section:

    • Price feeder configuration

    1. Test your configuration

    You can always test your configuration using:

    • Pay attention to the logs and errors

    • After running for a few seconds, all errors should clear out

    • If errors persist, your feeder address may be configured incorrectly

    1. Create the systemctl service

    Upon confirmation that the price feeder is correctly configured, you can turn it into a service with this example systemd service file:

    Don't forget to check:

    • Your user is not root

    • The path for the price-feeder and the path for the configuration file

    • Your keyring password

    1. Verify Operation

    Check the service logs:

    Price feeder configuration

    There are multiple configurations that are important when managing the price feeder:

    • The main template for configuration can be found here

    Some important configurations are:

    Here you should set up the details of your account:

    • address: This is the feeder address used on the price-feeder

    • validator: This is your validator address. This is important when sending the feeds to the Oracle module

    The above defines your RPC configuration:

    • It's highly recommended to point the endpoints to local nodes, but pointing to remote nodes is also possible

    This defines your keyring configuration:

    • We highly recommend using OS as your keyring for the feeder key

    • The Keyring password should be provided with the environment key PRICE_FEEDER_PASS

    Important Note: Oracle Voting Performance Requirements

    Validators running the Price Feeder must maintain a high success rate when submitting price votes. The Oracle module enforces this through a slashing mechanism:

    • MinValidPerWindow Parameter: This governance-defined threshold (5%) sets the minimum percentage of successful votes a validator must submit per voting window (3600 blocks).

    • Penalty for Underperformance: If a validator’s ratio of successful votes / total votes falls below MinValidPerWindow:

      • The validator is automatically jailed

      • It cannot participate in consensus or earn staking rewards

      • Manual unjailing requires a governance proposal or fixed downtime duration

    • Recommendations for Validators:

      • Monitor your feeder’s logs (journalctl -fu price_feeder.service)

      • Ensure stable API connections to price providers

      • Maintain sufficient gas fees for timely transactions

    If you are using os as KEYRING_BACKEND make sure you have set the env variable PRICE_FEEDER_PASS with your keyring password. If not, the script run_price_feeder.sh will ask you to type your keyring password using the CLI.

    References

    • Oracle definition by Kii team

    • Oracle definition by Cosmos

    • Run the price feeder

    • Price feeder README

    Acknowledgment

    This is the Kiichain version of the incredible work of SEI on the price feeder module. The original implementation is available at SEI's price-feeder.

    The Price Feeder

    Authenticate user session

    post
    /AuthenticateUser

    Authenticate user session

    post
    /AuthenticateUser
    Body
    anyOptional
    Responses
    200

    Authentication result

    application/json
    post
    /AuthenticateUser

    Create a new deposit ticket

    post
    /CreateDepositTicket
    Body
    assetManagerIdintegerOptional
    accountIdintegerOptional
    assetIdintegerOptional
    assetNamestring | nullableOptional
    amountnumberOptional
    omsIdintegerOptional
    requestCodestring | nullableOptional
    requestIPstring | nullableOptional
    requestUserintegerOptional
    requestUserNamestring | nullableOptional
    operatorIdintegerOptional
    StatusintegerOptional
    feeAmtnumberOptional
    updatedByUserintegerOptional
    updatedByUserNamestring | nullableOptional
    ticketNumberintegerOptional
    depositInfostring | nullableOptional
    createdTimestampstring · date-timeOptional
    lastUpdateTimestampstring · date-timeOptional
    commentsstring | nullableOptional
    attachmentsstring | nullableOptional

    Get account positions (balances)

    post
    /GetAccountPositions
    Body
    AccountIdintegerOptional
    OMSIdintegerOptional
    IncludePendingbooleanOptional
    Responses
    200

    Account balances

    application/json
    post
    /GetAccountPositions

    Get market snapshot

    post
    /GetLevel1SummaryMin
    Body
    OMSIdintegerOptional
    BaseCurrencystringOptional
    QuoteCurrencystringOptional
    InstrumentIdsstringOptional
    Responses
    200

    Market data snapshot

    application/json
    post
    /GetLevel1SummaryMin

    Create a new order

    post
    /SendOrder
    Body
    InstrumentIdintegerOptional
    OMSIdintegerOptional
    AccountIdintegerOptional
    TimeInForceintegerOptional
    ClientOrderIdintegerOptional
    OrderIdOCOintegerOptional
    UseDisplayQuantitybooleanOptional
    SideintegerOptional
    quantitynumberOptional
    OrderTypeintegerOptional
    PegPriceTypeintegerOptional
    LimitPricenumberOptional
    PostOnlybooleanOptional
    Responses
    200

    Order status

    application/json
    post
    /SendOrder

    Get single order status

    post
    /GetOrderStatus
    Body
    omsIdintegerOptional
    accountIdintegerOptional
    orderIdintegerOptional
    Responses
    200

    Order status details

    application/json
    post
    /GetOrderStatus

    Get trades history

    post
    /GetTradesHistory
    Body
    omsIdintegerOptional
    accountIdintegerOptional
    instrumentIdintegerOptional
    tradeIdintegerOptional
    orderIdintegerOptional
    userIdintegerOptional
    startTimestampintegerOptional
    endTimestampintegerOptional
    depthintegerOptional
    startIndexintegerOptional
    executionIdintegerOptional
    Responses
    200

    List of executed trades

    application/json
    post
    /GetTradesHistory

    Initiates the withdrawal of funds from an account

    post
    /CreateWithdrawTicket
    Body
    OMSIdintegerOptional
    AccountIdintegerOptional
    ProductIdintegerOptional
    AmountnumberOptional
    feeAmountnumberOptional
    TemplateFormobjectOptional
    TemplateTypestringOptional
    Responses
    200

    Withdrawal request result

    application/json
    post
    /CreateWithdrawTicket

    Returns an array of withdraw tickets from the specified OMS and Account

    post
    /GetWithdrawTickets
    Body
    OMSIdintegerOptional
    AccountIdintegerOptional
    StartIndexintegerOptional
    LimitintegerOptional
    Responses
    200

    List of withdraw tickets

    application/json
    npx create-react-app kii-dapp --template typescript
    cd kii-dapp
    code .
    npm i ethers
    import { ethers } from 'ethers';
    
    export function getProvider(): ethers.JsonRpcProvider {
        const url = "<https://a.sentry.testnet.kiivalidator.com:8645/>";
        const provider = new ethers.JsonRpcProvider(url, {
            chainId: 123454321,
            name: "kiichaind",
        });
        return provider;
    }
    
    export function getSigner(
        wallet: ethers.Wallet,
        provider: ethers.JsonRpcProvider
    ): ethers.Wallet {
        return wallet.connect(provider);
    }
    
    export function createWallet(
        provider: ethers.JsonRpcProvider
    ): ethers.HDNodeWallet {
        return ethers.Wallet.createRandom(provider);
    }
    
    export function getWalletFromPhrase(
        Phrase: string,
        provider: ethers.JsonRpcProvider
    ): ethers.HDNodeWallet {
        return ethers.Wallet.fromPhrase(Phrase!).connect(provider);
    }
    import React, { useEffect, useState } from 'react';
    import { ethers } from 'ethers';
    import { createWallet, getProvider, getWalletFromPhrase } from '../repository/kiichain.repository';
    
    const WalletManager: React.FC = () => {
        const [wallet, setWallet] = useState<ethers.HDNodeWallet | null>(null);
        const [balance, setBalance] = useState<string | null>(null);
        const [mnemonic, setMnemonic] = useState<string>(''); // Estado para la seed phrase
    
        const provider = getProvider();
    
        // Handle wallet creation
        const handleCreateWallet = (): void => {
            const newWallet = createWallet(provider);
            setWallet(newWallet);
            console.log('New Wallet Address:', newWallet.address);
            console.log('Seed Phrase:', newWallet.mnemonic?.phrase);
        };
    
        // Handle connecting to a wallet via a mnemonic phrase
        const handleConnectWallet = (): void => {
            if (!mnemonic) {
                console.error('Mnemonic is empty');
                return;
            }
            const existingWallet = getWalletFromPhrase(mnemonic, provider);
            setWallet(existingWallet);
            console.log('Connected Wallet Address:', existingWallet.address);
        };
    
        // Fetch and display wallet balance
        const handleGetBalance = async (): Promise<void> => {
            if (wallet) {
                const balance: bigint = await provider.getBalance(wallet.address);
                setBalance(ethers.formatEther(balance));
            } else {
                console.error('No wallet connected');
            }
        };
    
        useEffect(() => {
            if (wallet) {
                handleGetBalance();
            }
        }, [wallet]);
        return (
            <div>
                <h1>Kiichain Wallet Manager</h1>
                <button onClick={handleCreateWallet}>Create New Wallet</button>
    
                <div>
                    <input
                        type="password"
                        value={mnemonic}
                        onChange={(e) => setMnemonic(e.target.value)}
                        placeholder="Enter your seed phrase"
                    />
                    <button onClick={handleConnectWallet}>Connect Wallet via Seed Phrase</button>
                </div>
    
                {wallet && <p>Wallet Address: {wallet.address}</p>}
                {balance && <p>Wallet Balance: {balance} Kii</p>}
            </div>
        );
    };
    
    export default WalletManager;
    
    npm run start
    npm install -g firebase-tools
    firebase login
    firebase init
    npm run build
    firebase deploy
    === Deploying to 'kii-dapp-test'...
    
    i  deploying hosting
    i  hosting[kii-dapp-test]: beginning deploy...
    i  hosting[kii-dapp-test]: found 14 files in build
    +  hosting[kii-dapp-test]: file upload complete
    i  hosting[kii-dapp-test]: finalizing version...
    +  hosting[kii-dapp-test]: version finalized
    i  hosting[kii-dapp-test]: releasing new version...
    +  hosting[kii-dapp-test]: release complete
    
    +  Deploy complete!
    
    Project Console: <https://console.firebase.google.com/project/kii-dapp-test/overview>
    Hosting URL: <https://kii-dapp-test.web.app>
    ? Are you ready to proceed? Yes
    ? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices. Hosting: Configure files  
    for Firebase Hosting and (optionally) set up GitHub Action deploys
    
    === Project Setup
    
    First, let's associate this project directory with a Firebase project.
    You can create multiple project aliases by running firebase use --add,
    but for now we'll just set up a default project.
    
    ? Please select an option: Use an existing project
    ? Select a default Firebase project for this directory: kii-dapp-test (kii-dapp-test)
    i  Using project kii-dapp-test (kii-dapp-test)
    
    === Hosting Setup
    
    Your public directory is the folder (relative to your project directory) that
    will contain Hosting assets to be uploaded with firebase deploy. If you
    have a build process for your assets, use your build's output directory.
    
    ? What do you want to use as your public directory? build
    ? Configure as a single-page app (rewrite all urls to /index.html)? No
    ? Set up automatic builds and deploys with GitHub? No
    +  Wrote build/404.html
    +  Wrote build/index.html
    
    i  Writing configuration info to firebase.json...
    i  Writing project information to .firebaserc...
    
    +  Firebase initialization complete!
    # Set the variables for the transaction
    FEEDER_ADDR=kii1... # Update with your feeder address
    # The key name of the signer
    # Should be the same as the one used to manage your validator
    FROM_KEY_NAME=<key_name>
    
    # Create the feeder
    kiichaind tx oracle set-feeder $FEEDER_ADDR \
        --from $FROM_KEY_NAME --keyring-backend test \
        --gas auto --gas-adjustment 1.5 --gas-prices 100000000000akii \
        --node https://rpc.uno.sentry.testnet.v3.kiivalidator.com --chain-id oro_1336-1
        
    # Fund feeder account
    kiichaind tx bank send <validator-wallet> $FEEDER_ADDR 1000000000000000000akii \
        --from $FROM_KEY_NAME --keyring-backend test \
        --gas auto --gas-adjustment 1.5 --gas-prices 100000000000akii \
        --node https://rpc.uno.sentry.testnet.v3.kiivalidator.com --chain-id oro_1336-1
    wget https://raw.githubusercontent.com/KiiChain/testnets/main/testnet_oro/run_price_feeder.sh
    chmod +x run_price_feeder.sh
    ./run_price_feeder.sh
    # Clone the price feeder
    git clone https://github.com/KiiChain/price-feeder.git
    
    # Install the application
    cd price-feeder
    make install
    
    # Test if the binary was installed correctly
    price-feeder version
    wget https://raw.githubusercontent.com/KiiChain/price-feeder/refs/heads/main/config.example.toml
    mv config.example.toml price-feeder.config
    # Export your feeder private key
    export PRICE_FEEDER_PASS=<my_keyring_pass>
    
    # Run the price feeder
    # You may also provide the argument --skip-password if your keyring is test
    # or has no password
    price-feeder start price-feeder.config
    [Unit]
    Description=Price Feeder
    After=network-online.target
     
    [Service]
    User=root
    Type=simple
    Environment="PRICE_FEEDER_PASS=YOUR_KEYRING_PASSWORD"
    ExecStart=/usr/bin/price-feeder start /price_feeder_config.toml
    Restart=on-failure
    RestartSec=3
    LimitNOFILE=6553500
     
    [Install]
    WantedBy=multi-user.target
    journalctl -fu price_feeder.service
    [account]
    # The account name to use for signing transactions
    # Can be the validator master account or a feeder account
    address = "kii1..."
    # The validator who is voting
    validator = "kiivaloper1..."
    # The prefix for the keys
    prefix = "kii"
    # The chain ID for signatures
    chain_id = "oro_1336-1"
    [rpc]
    # The RPC endpoint for the node that will send transactions
    grpc_endpoint = "localhost:9090"
    # The timeout for RPC calls
    rpc_timeout = "500ms"
    # The Tendermint RPC endpoint for querying the blockchain
    tmrpc_endpoint = "http://localhost:26657"
    [keyring]
    # The keyring backend to use for storing keys
    backend = "os"
    # The keyring directory where keys are stored
    dir = "~/.kiichain"
    Huobi
    Kraken
    Okx
    Oracle module details
    Logo
    Body
    anyOptional
    Responses
    200

    Authentication result

    application/json
    post
    /AuthenticateUser
    200

    Authentication result

    200

    Authentication result

    Responses
    200

    Deposit ticket creation result

    application/json
    post
    /CreateDepositTicket
    200

    Deposit ticket creation result

    200

    Account balances

    200

    Market data snapshot

    200

    Order status

    200

    Order status details

    200

    List of executed trades

    200

    Withdrawal request result

    post
    /GetWithdrawTickets
    200

    List of withdraw tickets

    Get a specific deposit ticket

    post
    /GetDepositTicket

    Get a list of deposit tickets for a specific account

    post
    /GetDepositTickets

    Get all deposit tickets for a given OMS, operator, and account

    Get a specific withdraw ticket

    post
    /GetWithdrawTicket

    Create a new deposit ticket

    post
    /CreateDepositTicket

    Creates a deposit ticket used to fund an account.

    Authorizations

    Returns a single withdraw ticket by Verify Code

    post
    /GetWithdrawTicketByVerifyCode

    Returns a single withdraw ticket from OMS, trading venue operator, and account that matches the current Verify Code for confirmation.

    Authenticates a user for the current websocket session

    post
    /AuthenticateUser

    Retrieves Open Trade Reports for a specific account

    get
    /GetOpenTradeReports

    Retrieves Open Trade Reports for a specific instrument

    get
    /GetAllOpenTradeReports

    Retrieves the Open Trade Reports, only Block Trades, for the given instrumentId. Identifying information of counterparty is removed.

    Cancel and Replace Order

    post
    /CancelReplaceOrder

    Cancels and replaces an order with a new order in a single call.

    Authorizations

    Modify Order Quantity

    post
    /ModifyOrder

    Reduces an order’s quantity without affecting its position in the book.

    Authorizations

    Cancel Order

    post
    /CancelOrder

    Cancels an order using OrderId or ClientOrderId.

    Authorizations

    Cancel All Orders

    post
    /CancelAllOrders

    Cancels all active orders for a specified account and OMS.

    Creates an order

    post
    /SendOrder

    Submits a new order with the specified parameters.

    Authorizations

    Get a fee estimate for a withdrawal

    post
    /GetWithdrawFee
    Authorizations
    Authorization

    Gets a list of deposits for an Account

    post
    /GetAccountDepositTransactions
    Authorizations
    Authorization

    Gets a list of transactions for an Account

    post
    /GetAccountTransactions
    Authorizations

    Retrieves a list of orders for an account

    post
    /GetOrderHistory

    ReceiveTime in POSIX format X 1000 (milliseconds since 1 January 1970)

    Retrieves a list of Positions (Balances) on a specific account.

    post
    /GetAccountPositions
    Authorizations

    Retrieves Trade History for a specific account.

    post
    /GetAccountTrades
    POST /ap/AuthenticateUser HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 85
    
    {
      "APIKey": "text",
      "Signature": "text",
      "UserId": "text",
      "UserName": "text",
      "Nonce": "text"
    }
    {
      "authenticated": true,
      "user": {
        "userId": 1,
        "userName": "text",
        "email": "text",
        "emailVerified": true,
        "accountId": 1,
        "omsId": 1,
        "use2FA": true
      }
    }
    POST /ap/CreateDepositTicket HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 421
    
    {
      "assetManagerId": 1,
      "accountId": 1,
      "assetId": 1,
      "assetName": "text",
      "amount": 1,
      "omsId": 1,
      "requestCode": "text",
      "requestIP": "text",
      "requestUser": 1,
      "requestUserName": "text",
      "operatorId": 1,
      "Status": 1,
      "feeAmt": 1,
      "updatedByUser": 1,
      "updatedByUserName": "text",
      "ticketNumber": 1,
      "depositInfo": "text",
      "createdTimestamp": "2025-12-10T00:33:44.342Z",
      "lastUpdateTimestamp": "2025-12-10T00:33:44.342Z",
      "comments": "text",
      "attachments": "text"
    }
    [
      {
        "omsId": 1,
        "accountId": 1,
        "productSymbol": "text",
        "productId": 1,
        "amount": 1,
        "hold": 1
      }
    ]
    [
      [
        "text"
      ]
    ]
    POST /ap/SendOrder HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 201
    
    {
      "InstrumentId": 1,
      "OMSId": 1,
      "AccountId": 1,
      "TimeInForce": 1,
      "ClientOrderId": 1,
      "OrderIdOCO": 1,
      "UseDisplayQuantity": true,
      "Side": 1,
      "quantity": 1,
      "OrderType": 1,
      "PegPriceType": 1,
      "LimitPrice": 1,
      "PostOnly": true
    }
    {
      "status": "text",
      "errormsg": "text",
      "OrderId": 1
    }
    {
      "OrderId": 1,
      "OrderState": "text",
      "QuantityExecuted": 1,
      "AvgPrice": 1
    }
    POST /ap/GetTradesHistory HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 154
    
    {
      "omsId": 1,
      "accountId": 1,
      "instrumentId": 1,
      "tradeId": 1,
      "orderId": 1,
      "userId": 1,
      "startTimestamp": 1,
      "endTimestamp": 1,
      "depth": 1,
      "startIndex": 1,
      "executionId": 1
    }
    [
      {
        "tradeId": 1,
        "orderId": 1,
        "quantity": 1,
        "price": 1
      }
    ]
    {
      "result": true,
      "errormsg": "text",
      "errorcode": 1,
      "detail": "text"
    }
    POST /ap/GetWithdrawTickets HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 50
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "StartIndex": 1,
      "Limit": 1
    }
    POST /ap/AuthenticateUser HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 85
    
    {
      "APIKey": "text",
      "Signature": "text",
      "UserId": "text",
      "UserName": "text",
      "Nonce": "text"
    }
    POST /ap/GetAccountPositions HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 47
    
    {
      "AccountId": 1,
      "OMSId": 1,
      "IncludePending": true
    }
    POST /ap/GetLevel1SummaryMin HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 79
    
    {
      "OMSId": 1,
      "BaseCurrency": "text",
      "QuoteCurrency": "text",
      "InstrumentIds": "text"
    }
    POST /ap/GetOrderStatus HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 37
    
    {
      "omsId": 1,
      "accountId": 1,
      "orderId": 1
    }
    POST /ap/CreateWithdrawTicket HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Content-Type: application/json
    Accept: */*
    Content-Length: 104
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "ProductId": 1,
      "Amount": 1,
      "feeAmount": 1,
      "TemplateForm": {},
      "TemplateType": "text"
    }
    {
      "authenticated": true,
      "user": {
        "userId": 1,
        "userName": "text",
        "email": "text",
        "emailVerified": true,
        "accountId": 1,
        "omsId": 1,
        "use2FA": true
      }
    }
    {
      "success": true,
      "requestcode": "text"
    }
    [
      {
        "assetManagerId": 1,
        "accountId": 1,
        "assetId": 1,
        "assetName": "text",
        "amount": 1,
        "templateForm": "text",
        "templateFormType": "text",
        "omsId": 1,
        "requestCode": "text",
        "requestIP": "text",
        "requestUserId": 1,
        "requestUserName": "text",
        "operatorId": 1,
        "Status": 1,
        "feeAmt": 1,
        "updatedByUser": 1,
        "updatedByUserName": "text",
        "ticketNumber": 1,
        "createdTimestamp": "2025-12-10T00:33:44.342Z",
        "lastUpdateTimestamp": "2025-12-10T00:33:44.342Z",
        "Comments": "text",
        "Attachments": "text",
        "AuditLog": "text"
      }
    ]

    Get a deposit ticket by OMS ID, account, request code, and ticket ID

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    AccountIdintegerRequired
    RequestCodestringRequired
    TicketIdintegerRequired
    Responses
    200

    A deposit ticket object

    application/json
    400

    Invalid input parameters

    401

    Unauthorized access

    404

    Deposit ticket not found

    post
    /GetDepositTicket
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    OperatorIdintegerRequired
    AccountIdintegerRequired
    Responses
    200

    List of deposit tickets

    application/json
    400

    Invalid input parameters

    401

    Unauthorized access

    404

    No deposit tickets found for given criteria

    post
    /GetDepositTickets

    Retrieve a withdraw ticket based on OMS ID, account, request code, and ticket ID

    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    AccountIdintegerRequired
    RequestCodestringRequired
    TicketIdintegerRequired
    Responses
    200

    A withdraw ticket object

    application/json
    400

    Invalid input parameters

    401

    Unauthorized access

    404

    Withdraw ticket not found

    post
    /GetWithdrawTicket
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    assetManagerIdintegerOptional
    accountIdintegerOptional
    assetIdintegerOptional
    assetNamestring | nullableOptional
    amountnumberOptional
    omsIdintegerOptional
    requestCodestring | nullableOptional
    requestIPstring | nullableOptional
    requestUserintegerOptional
    requestUserNamestring | nullableOptional
    operatorIdintegerOptional
    StatusintegerOptional
    feeAmtnumberOptional
    updatedByUserintegerOptional
    updatedByUserNamestring | nullableOptional
    ticketNumberintegerOptional
    depositInfoobject | nullableOptional
    createdTimestampstring · date-timeOptional
    lastUpdateTimeStampstring · date-timeOptional
    commentsobject | nullableOptional
    attachmentsobject | nullableOptional
    Responses
    200

    Result of the creation

    application/json
    400

    Invalid deposit ticket data

    401

    Unauthorized request

    post
    /CreateDepositTicket
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    VerifyCodestringRequired
    Responses
    200

    A withdraw ticket object

    application/json
    400

    Bad request

    post
    /GetWithdrawTicketByVerifyCode
    Authenticates using either username/password or API key method.
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    objectOptional
    Responses
    200

    Authentication result

    application/json
    400

    Invalid authentication request format

    401

    Invalid credentials or token

    post
    /AuthenticateUser
    Retrieves the Open Trade Reports, only Block Trades, for the given accountId. ReceiveTime in POSIX format × 1000 (milliseconds since 1 January 1970).
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerOptional
    AccountIdintegerOptional
    Responses
    200

    A list of open trade reports

    application/json
    400

    Invalid request parameters

    401

    Unauthorized access

    get
    /GetOpenTradeReports
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerOptional
    InstrumentIdintegerOptional
    Responses
    200

    A list of open trade reports

    application/json
    400

    Invalid request parameters

    401

    Unauthorized access

    get
    /GetAllOpenTradeReports
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    omsIdintegerRequired
    orderIdToReplaceintegerRequired
    clientOrdIdintegerRequired
    orderTypeintegerOptional
    sideintegerRequired
    accountIdintegerRequired
    instrumentIdintegerRequired
    useDisplayQuantitybooleanOptional
    displayQuantitynumberOptional
    limitPricenumberOptional
    stopPricenumberOptional
    referencePricenumberOptional
    pegPriceTypeintegerOptional
    timeInForceintegerOptional
    orderIdOCOintegerOptional
    quantitynumberRequired
    Responses
    200

    Replacement order created successfully.

    application/json
    400

    Invalid request or order cannot be replaced.

    application/json
    post
    /CancelReplaceOrder
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    OrderIdintegerRequired
    InstrumentIdintegerRequired
    PreviousOrderRevisionintegerRequired
    QuantitynumberRequired
    AccountIdintegerRequired
    Responses
    200

    Order modified successfully.

    application/json
    400

    Modification failed due to validation or order state.

    application/json
    post
    /ModifyOrder
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    AccountIdintegerRequired
    OrderIdintegerOptional
    ClorderIdintegerOptional
    Responses
    200

    Order cancelled successfully.

    application/json
    400

    Order cancellation failed due to invalid input or state.

    application/json
    post
    /CancelOrder
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    AccountIdintegerRequired
    OMSIdintegerRequired
    Responses
    200

    All orders cancelled successfully.

    application/json
    400

    One or more orders could not be cancelled due to validation or status.

    application/json
    post
    /CancelAllOrders
    Authorization
    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Body
    InstrumentIdintegerRequired
    OMSIdintegerRequired
    AccountIdintegerRequired
    TimeInForceintegerRequired
    ClientOrderIdintegerRequired
    OrderIdOCOintegerOptional
    UseDisplayQuantitybooleanOptional
    SideintegerRequired
    quantitynumberRequired
    OrderTypeintegerRequired
    PegPriceTypeintegerOptional
    LimitPricenumberOptional
    PostOnlybooleanOptional
    Responses
    200

    Order submission response

    application/json
    400

    Bad request

    post
    /SendOrder
    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerOptional
    AccountIdintegerOptional
    ProductIdintegerOptional
    Amountnumber · floatOptional
    AccountProviderIdintegerOptional
    Responses
    200

    Withdrawal fee estimate

    application/json
    400

    Bad request - invalid or missing parameters

    application/json
    401

    Unauthorized - authentication required

    application/json
    post
    /GetWithdrawFee
    string
    Required
    Bearer authentication header of the form Bearer <token>.
    Body
    OMSIdintegerRequired
    AccountIdintegerRequired
    DepthintegerOptional
    Responses
    200

    A list of account deposit transactions

    application/json
    400

    Bad Request

    401

    Unauthorized

    post
    /GetAccountDepositTransactions
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    startIndexintegerOptional
    depthintegerOptional
    transactionIdintegerOptional
    referenceIdintegerOptional
    omsIdintegerRequired
    accountIdintegerRequired
    counterPartyintegerOptional
    productIdintegerOptional
    userIdintegerOptional
    startTimestampintegerOptional
    endTimestampintegerOptional
    transactionTypesinteger[]Optional
    transactionReferenceTypesinteger[]Optional
    Responses
    200

    A list of account transactions

    application/json
    400

    Bad Request

    401

    Unauthorized

    post
    /GetAccountTransactions
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    omsIdintegerRequired
    accountIdintegerRequired
    OrderIdintegerOptional
    clientOrderIdintegerOptional
    originalOrderIdintegerOptional
    originalClientOrderIdintegerOptional
    userIdintegerOptional
    instrumentIdintegerOptional
    startTimestampintegerRequired
    endTimestampintegerRequired
    depthintegerOptional
    startIndexintegerOptional
    Responses
    200

    A list of orders

    application/json
    400

    Bad Request

    401

    Unauthorized

    post
    /GetOrderHistory
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    AccountIdintegerOptional
    OMSIdintegerOptional
    IncludePendingbooleanOptional
    Responses
    200

    A list of account positions

    application/json
    400

    Bad Request

    401

    Unauthorized

    post
    /GetAccountPositions
    Authorizations
    AuthorizationstringRequired
    Bearer authentication header of the form Bearer <token>.
    Body
    omsIdintegerOptional
    accountIdintegerOptional
    instrumentIdintegerOptional
    tradeIdintegerOptional
    orderIdintegerOptional
    userIdintegerOptional
    startTimestampintegerOptional
    endTimestampintegerOptional
    depthintegerOptional
    startIndexintegerOptional
    executionIdintegerOptional
    Responses
    200

    A list of account trades

    application/json
    400

    Bad Request

    401

    Unauthorized

    post
    /GetAccountTrades
    POST /ap/GetDepositTicket HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 59
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "RequestCode": "text",
      "TicketId": 1
    }
    POST /ap/GetDepositTickets HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 40
    
    {
      "OMSId": 1,
      "OperatorId": 1,
      "AccountId": 1
    }
    POST /ap/GetWithdrawTicket HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 59
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "RequestCode": "text",
      "TicketId": 1
    }
    POST /ap/CreateDepositTicket HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 409
    
    {
      "assetManagerId": 1,
      "accountId": 1,
      "assetId": 1,
      "assetName": "text",
      "amount": 1,
      "omsId": 1,
      "requestCode": "text",
      "requestIP": "text",
      "requestUser": 1,
      "requestUserName": "text",
      "operatorId": 1,
      "Status": 1,
      "feeAmt": 1,
      "updatedByUser": 1,
      "updatedByUserName": "text",
      "ticketNumber": 1,
      "depositInfo": {},
      "createdTimestamp": "2025-12-10T00:33:44.342Z",
      "lastUpdateTimeStamp": "2025-12-10T00:33:44.342Z",
      "comments": {},
      "attachments": {}
    }
    POST /ap/GetWithdrawTicketByVerifyCode HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 31
    
    {
      "OMSId": 1,
      "VerifyCode": "text"
    }
    POST /ap/AuthenticateUser HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 85
    
    {
      "APIKey": "text",
      "Signature": "text",
      "UserId": "text",
      "UserName": "text",
      "Nonce": "text"
    }
    GET /ap/GetOpenTradeReports HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 25
    
    {
      "OMSId": 1,
      "AccountId": 1
    }
    GET /ap/GetAllOpenTradeReports HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 28
    
    {
      "OMSId": 1,
      "InstrumentId": 1
    }
    POST /ap/CancelReplaceOrder HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 257
    
    {
      "omsId": 1,
      "orderIdToReplace": 1,
      "clientOrdId": 1,
      "orderType": 1,
      "side": 1,
      "accountId": 1,
      "instrumentId": 1,
      "useDisplayQuantity": true,
      "displayQuantity": 1,
      "limitPrice": 1,
      "stopPrice": 1,
      "referencePrice": 1,
      "pegPriceType": 1,
      "timeInForce": 1,
      "orderIdOCO": 1,
      "quantity": 1
    }
    POST /ap/ModifyOrder HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 93
    
    {
      "OMSId": 1,
      "OrderId": 1,
      "InstrumentId": 1,
      "PreviousOrderRevision": 1,
      "Quantity": 1,
      "AccountId": 1
    }
    POST /ap/CancelOrder HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 51
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "OrderId": 1,
      "ClorderId": 1
    }
    POST /ap/CancelAllOrders HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 25
    
    {
      "AccountId": 1,
      "OMSId": 1
    }
    POST /ap/SendOrder HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 201
    
    {
      "InstrumentId": 1,
      "OMSId": 1,
      "AccountId": 1,
      "TimeInForce": 1,
      "ClientOrderId": 1,
      "OrderIdOCO": 1,
      "UseDisplayQuantity": true,
      "Side": 1,
      "quantity": 1,
      "OrderType": 1,
      "PegPriceType": 1,
      "LimitPrice": 1,
      "PostOnly": true
    }
    POST /ap/GetWithdrawFee HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 72
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "ProductId": 1,
      "Amount": 1,
      "AccountProviderId": 1
    }
    POST /ap/GetAccountDepositTransactions HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 35
    
    {
      "OMSId": 1,
      "AccountId": 1,
      "Depth": 1
    }
    POST /ap/GetAccountTransactions HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 217
    
    {
      "startIndex": 1,
      "depth": 1,
      "transactionId": 1,
      "referenceId": 1,
      "omsId": 1,
      "accountId": 1,
      "counterParty": 1,
      "productId": 1,
      "userId": 1,
      "startTimestamp": 1,
      "endTimestamp": 1,
      "transactionTypes": [
        1
      ],
      "transactionReferenceTypes": [
        1
      ]
    }
    POST /ap/GetOrderHistory HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 190
    
    {
      "omsId": 1,
      "accountId": 1,
      "OrderId": 1,
      "clientOrderId": 1,
      "originalOrderId": 1,
      "originalClientOrderId": 1,
      "userId": 1,
      "instrumentId": 1,
      "startTimestamp": 1,
      "endTimestamp": 1,
      "depth": 1,
      "startIndex": 1
    }
    POST /ap/GetAccountPositions HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 47
    
    {
      "AccountId": 1,
      "OMSId": 1,
      "IncludePending": true
    }
    POST /ap/GetAccountTrades HTTP/1.1
    Host: https:/stage.proxy.kiiex.io
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 154
    
    {
      "omsId": 1,
      "accountId": 1,
      "instrumentId": 1,
      "tradeId": 1,
      "orderId": 1,
      "userId": 1,
      "startTimestamp": 1,
      "endTimestamp": 1,
      "depth": 1,
      "startIndex": 1,
      "executionId": 1
    }
    {
      "assetManagerId": 1,
      "accountId": 1,
      "assetId": 1,
      "assetName": "text",
      "amount": 1,
      "omsId": 1,
      "requestCode": "text",
      "requestIP": "text",
      "requestUser": 1,
      "requestUserName": "text",
      "operatorId": 1,
      "Status": 1,
      "feeAmt": 1,
      "updatedByUser": 1,
      "updatedByUserName": "text",
      "ticketNumber": 1,
      "depositInfo": {},
      "createdTimestamp": "2025-12-10T00:33:44.342Z",
      "lastUpdateTimeStamp": "2025-12-10T00:33:44.342Z",
      "comments": {},
      "attachments": {}
    }
    [
      {
        "assetManagerId": 1,
        "accountId": 1,
        "assetId": 1,
        "assetName": "text",
        "amount": 1,
        "omsId": 1,
        "requestCode": "text",
        "requestIP": "text",
        "requestUser": 1,
        "requestUserName": "text",
        "operatorId": 1,
        "Status": 1,
        "feeAmt": 1,
        "updatedByUser": 1,
        "updatedByUserName": "text",
        "ticketNumber": 1,
        "depositInfo": {},
        "createdTimestamp": "2025-12-10T00:33:44.342Z",
        "lastUpdateTimeStamp": "2025-12-10T00:33:44.342Z",
        "comments": {},
        "attachments": {}
      }
    ]
    {
      "assetManagerId": 1,
      "accountId": 1,
      "assetId": 1,
      "assetName": "text",
      "amount": 1,
      "templateForm": "text",
      "templateFormType": "text",
      "omsId": 1,
      "requestCode": "text",
      "requestIP": "text",
      "requestUserId": 1,
      "requestUserName": "text",
      "operatorId": 1,
      "Status": 1,
      "feeAmt": 1,
      "updatedByUser": 1,
      "updatedByUserName": "text",
      "ticketNumber": 1,
      "createdTimestamp": "2025-12-10T00:33:44.342Z",
      "lastUpdateTimestamp": "2025-12-10T00:33:44.342Z",
      "Comments": [
        {
          "commentId": 1,
          "enteredBy": 1,
          "enteredDateTime": "2025-12-10T00:33:44.342Z",
          "comment": "text",
          "operatorId": 1,
          "omsId": 1,
          "ticketCode": "text",
          "ticketId": 1
        }
      ],
      "Attachments": [
        {
          "attachmentId": 1,
          "submittedByUserId": 1,
          "submittedByUserName": "text",
          "uploadDate": "2025-12-10T00:33:44.342Z",
          "uploadIP": "text",
          "ticketNumber": 1
        }
      ],
      "AuditLog": [
        {}
      ]
    }
    {
      "success": true,
      "requestcode": "text"
    }
    {
      "assetManagerId": 1,
      "accountId": 1,
      "assetId": 1,
      "assetName": "text",
      "amount": 1,
      "templateForm": "text",
      "templateFormType": "text",
      "omsId": 1,
      "requestCode": "text",
      "requestIP": "text",
      "requestUserId": 1,
      "requestUserName": "text",
      "operatorId": 1,
      "Status": 1,
      "feeAmt": 1,
      "updatedByUser": 1,
      "updatedByUserName": "text",
      "ticketNumber": 1,
      "createdTimestamp": "2025-12-10T00:33:44.342Z",
      "lastUpdateTimestamp": "2025-12-10T00:33:44.342Z",
      "Comments": [
        {
          "commentId": 1,
          "enteredBy": 1,
          "enteredDateTime": "2025-12-10T00:33:44.342Z",
          "comment": "text",
          "operatorId": 1,
          "omsId": 1,
          "ticketCode": "text",
          "ticketId": 1
        }
      ],
      "Attachments": [
        {
          "attachmentId": 1,
          "submittedByUserId": 1,
          "submittedByUserName": "text",
          "uploadDate": "2025-12-10T00:33:44.342Z",
          "uploadIP": "text",
          "ticketNumber": 1
        }
      ],
      "AuditLog": [
        {}
      ]
    }
    {
      "user": {
        "userId": 1,
        "userName": "text",
        "email": "text",
        "emailVerified": true,
        "accountId": 1,
        "omsId": 1,
        "use2FA": true
      },
      "authenticated": true,
      "locked": true,
      "requires2FA": true,
      "twoFAType": "text",
      "twoFAToken": "text"
    }
    [
      {
        "Side": "text",
        "OrderId": 1,
        "Price": 1,
        "Quantity": 1,
        "DisplayQuantity": 1,
        "Instrument": 1,
        "Account": 1,
        "OrderType": "text",
        "ClientOrderId": 1,
        "OrderState": "text",
        "ReceiveTime": 1,
        "ReceiveTimeTicks": 1,
        "OrigQuantity": 1,
        "QuantityExecuted": 1,
        "AvgPrice": 1,
        "CounterPartyId": 1,
        "ChangeReason": "text",
        "OrigOrderId": 1,
        "OrigClOrdId": 1,
        "EnteredBy": 1,
        "IsQuote": true,
        "InsideAsk": 1,
        "InsideAskSize": 1,
        "InsideBid": 1,
        "InsideBidSize": 1,
        "LastTradePrice": 1,
        "RejectReason": "text",
        "IsLockedIn": true,
        "CancelReason": "text",
        "OMSId": 1
      }
    ]
    [
      {
        "Side": "text",
        "OrderId": 1,
        "Price": 1,
        "Quantity": 1,
        "DisplayQuantity": 1,
        "Instrument": 1,
        "Account": 1,
        "OrderType": "text",
        "ClientOrderId": 1,
        "OrderState": "text",
        "ReceiveTime": 1,
        "ReceiveTimeTicks": 1,
        "OrigQuantity": 1,
        "QuantityExecuted": 1,
        "AvgPrice": 1,
        "CounterPartyId": 1,
        "ChangeReason": "text",
        "OrigOrderId": 1,
        "OrigClOrdId": 1,
        "EnteredBy": 1,
        "IsQuote": true,
        "InsideAsk": 1,
        "InsideAskSize": 1,
        "InsideBid": 1,
        "InsideBidSize": 1,
        "LastTradePrice": 1,
        "RejectReason": "text",
        "IsLockedIn": true,
        "CancelReason": "text",
        "OMSId": 1
      }
    ]
    {
      "replacementOrderId": 1,
      "replacementClOrdId": 1,
      "origOrderId": 1,
      "origClOrdId": 1
    }
    {
      "success": true,
      "requestcode": "text"
    }
    {
      "success": true,
      "requestcode": "text"
    }
    {
      "success": true,
      "requestcode": "text"
    }
    {
      "status": "text",
      "errormsg": "text",
      "OrderId": 1
    }
    {
      "FeeAmount": 1,
      "TicketAmount": 1
    }
    [
      {
        "transactionId": 1,
        "omsId": 1,
        "accountId": 1,
        "cr": 1,
        "dr": 1,
        "counterparty": 1,
        "transactionType": 1,
        "referenceId": 1,
        "referenceType": 1,
        "productId": 1,
        "balance": 1,
        "timeStamp": 1
      }
    ]
    [
      {
        "transactionId": 1,
        "omsId": 1,
        "accountId": 1,
        "cr": 1,
        "dr": 1,
        "counterparty": 1,
        "transactionType": 1,
        "referenceId": 1,
        "referenceType": 1,
        "productId": 1,
        "balance": 1,
        "timeStamp": 1
      }
    ]
    [
      {
        "Side": "text",
        "OrderId": 1,
        "Price": 1,
        "Quantity": 1,
        "DisplayQuantity": 1,
        "Instrument": 1,
        "Account": 1,
        "OrderType": "text",
        "ClientOrderId": 1,
        "OrderState": "text",
        "ReceiveTime": 1,
        "ReceiveTimeTicks": 1,
        "OrigQuantity": 1,
        "QuantityExecuted": 1,
        "AvgPrice": 1,
        "CounterPartyId": 1,
        "ChangeReason": "text",
        "OrigOrderId": 1,
        "OrigClOrdId": 1,
        "EnteredBy": 1,
        "IsQuote": true,
        "InsideAsk": 1,
        "InsideAskSize": 1,
        "InsideBid": 1,
        "InsideBidSize": 1,
        "LastTradePrice": 1,
        "RejectReason": "text",
        "IsLockedIn": true,
        "CancelReason": "text",
        "OMSId": 1
      }
    ]
    [
      {
        "omsId": 1,
        "accountId": 1,
        "productSymbol": "text",
        "productId": 1,
        "amount": 1,
        "hold": 1,
        "pendingDeposits": 1,
        "pendingWithdraws": 1,
        "totalDayDeposits": 1,
        "totalMonthDeposits": 1,
        "totalYearDeposits": 1,
        "totalYearDepositNotional": 1,
        "totalDayWithdraws": 1,
        "totalMonthWithdraws": 1,
        "totalYearWithdraws": 1,
        "totalYearWithdrawNotional": 1
      }
    ]
    [
      {
        "omsId": 1,
        "executionId": 1,
        "tradeId": 1,
        "orderId": 1,
        "accountId": 1,
        "subAccountId": 1,
        "clientOrderId": 1,
        "instrumentId": 1,
        "side": 1,
        "quantity": 1,
        "remainingQuantity": 1,
        "price": 1,
        "value": 1,
        "tradeTime": 1,
        "counterParty": "text",
        "orderTradeRevision": 1,
        "direction": 1,
        "isBlockTrade": true,
        "tradeTimeMS": 1,
        "fee": 1,
        "feeProductId": 1,
        "orderOriginator": 1
      }
    ]

    Kiijs-evm

    @kiichain/kiijs-evm

    Typescript library containing helper functions for interacting with the EVM on KiiChain. The full code can be found here: https://github.com/KiiChain/kiijs-sdk/tree/main/packages/evm

    Installation

    Wallet Connection

    This package provides exports for easily interacting with viem, and ethers.js. You can interact with the KiiChain EVM using all the same hooks and helper functions these tools offer. Read the viem and ethers v6 documentation for more information on how to use these tools.

    Wallet network setup

    Ensure that your EVM wallet has the KiiChain network enabled.

    Connection with ethers v6

    The 'ethers' package is a popular library for interacting with the Ethereum blockchain. This package provides a helper function for creating an ethers provider that is connected to the KiiChain EVM.

    An alternative without the popup is to directly use your private key to connect.

    Usage with viem

    This package exports viem Chains and precompile ABI's for KiiChain. The ABI used in the ethers example above is a viem ABI instance and the ARCTIC_1_VIEM_CHAIN is a viem Chain instance.

    Interoperability with Cosmos

    KiiChain supports both EVM JSON-RPC and Cosmos RPC interfaces. In order to easily interact with certain Cosmos modules, KiiChain has a set of precompiled contracts that can be called from the EVM.

    Precompile
    Description

    Interoperability using Wagmi, viem, and ethers

    Each precompile has contract exports a typed 'ethers' contracts and provides the ABI and contract addresses for each precompile for usage with Wagmi and viem.

    Bank Precompile

    The Bank precompile contract provides functionalities for managing balances, supply, symbols, and more.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x000000000000000000000000000000000000080

    Bech32 Precompile

    The bech32 precompile contract provides ways to turn a hex address to bech32 and vice-versa. There is also functions in the library under the precompile to do the same without using the contract.

    Distribution Precompile

    The Distribution precompile contract facilitates operations related to rewards withdrawal and distribution.

    Functions

    Here's the table representation of your Distribution ABI:

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000801

    Evidence Precompile

    The Evidence precompile contract provides functionalities for dealing with evidences.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000807

    Governance Precompile

    The Governance precompile contract supports actions to deposit funds into proposals, view them and interact with them.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000805

    IBC Precompile

    Enables cross-chain token transfers via IBC with simplified parameters

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000001002

    ICS20 Precompile

    Enables cross-chain token transfers via IBC with granular permission control over channels and denominations.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000802

    Slashing Precompile

    Enables query, interaction and management of validator penalties.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000806

    Staking Precompile

    The Staking precompile manages validator operations, delegations, and governance permissions in a Cosmos-based blockchain with EVM compatibility.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000000800

    Wasm Precompile

    The wasm precompile makes wasm contracts available to being used via evm, with instantiate, query and execute.

    Functions

    Function Name
    Input Parameters
    Return Value
    Description

    Precompile Addresses

    0x0000000000000000000000000000000000001001

    yarn add @kiichain/kiijs-evm ethers viem

    Provides management and query options for penalties

    Enables staking functionalities like delegation and undelegation or obtaining information on validators.

    Precompile for interacting with wasm contracts

    delegatorValidators

    delegatorAddress: string (address)

    validators: string[]

    Lists all validators a delegator is staked with

    delegatorWithdrawAddress

    delegatorAddress: string (address)

    withdrawAddress: string

    Gets the withdrawal address for a delegator

    fundCommunityPool

    depositor: string (address) amount: string (uint256)

    success: boolean

    Funds the community pool

    setWithdrawAddress

    delegatorAddress: string (address) withdrawerAddress: string

    success: boolean

    Sets the withdrawal address for rewards

    validatorCommission

    validatorAddress: string

    commission: [{ denom: string, amount: string, precision: number }]

    Gets commission rewards for a validator

    validatorDistributionInfo

    validatorAddress: string

    distributionInfo: { operatorAddress: string, selfBondRewards: [{ denom: string, amount: string, precision: number }], commission: [{ denom: string, amount: string, precision: number }] }

    Gets full distribution info for a validator

    validatorOutstandingRewards

    validatorAddress: string

    rewards: [{ denom: string, amount: string, precision: number }]

    Gets outstanding rewards for a validator

    validatorSlashes

    validatorAddress: string startingHeight: number (uint64) endingHeight: number (uint64) pageRequest: { key: bytes, offset: number, limit: number, countTotal: boolean, reverse: boolean }

    slashes: [{ validatorPeriod: number, fraction: { value: string, precision: number } }] pageResponse: { nextKey: bytes, total: number }

    Gets slash events for a validator with pagination

    withdrawDelegatorRewards

    delegatorAddress: string (address) validatorAddress: string

    amount: [{ denom: string, amount: string }]

    Withdraws delegator's rewards from a validator

    withdrawValidatorCommission

    validatorAddress: string

    amount: [{ denom: string, amount: string }]

    Withdraws validator's commission rewards

    getProposal

    proposalId: number (uint64)

    proposal: { id: number, messages: string[], status: number, finalTallyResult: { yes: string, abstain: string, no: string, noWithVeto: string }, submitTime: number, ... }

    Gets full proposal details

    getProposals

    proposalStatus: number (uint32) voter: string (address) depositor: string (address) pagination: { ... }

    proposals: [{ id: number, messages: string[], status: number, finalTallyResult: { ... }, ... }] pageResponse: { nextKey: bytes, total: number }

    Lists proposals with filters and pagination

    getTallyResult

    proposalId: number (uint64)

    tallyResult: { yes: string, abstain: string, no: string, noWithVeto: string }

    Gets current tally results for a proposal

    getVote

    proposalId: number (uint64) voter: string (address)

    vote: { proposalId: number, voter: string, options: [{ option: number, weight: string }], metadata: string }

    Gets an individual vote

    getVotes

    proposalId: number (uint64) pagination: { ... }

    votes: [{ proposalId: number, voter: string, options: [{ option: number, weight: string }], metadata: string }] pageResponse: { nextKey: bytes, total: number }

    Gets all votes for a proposal with pagination

    vote

    voter: string (address) proposalId: number (uint64) option: number (uint8) metadata: string

    success: boolean

    Submits a vote on a proposal

    voteWeighted

    voter: string (address) proposalId: number (uint64) options: [{ option: number, weight: string }] metadata: string

    success: boolean

    Submits a weighted vote on a proposal

    denomHash

    trace: string (e.g., "transfer/channel-1/uatom")

    hash: string (IBC denom hash)

    Converts IBC denom trace to hash (e.g., ibc/27394FB092...)

    denomTrace

    hash: string (IBC denom hash)

    denomTrace: { path: string, baseDenom: string }

    Decodes IBC hash to original trace (e.g., path: "transfer/channel-1", baseDenom: "uatom")

    denomTraces

    pageRequest: { key: bytes, offset: number, limit: number, ... }

    denomTraces: [{ path: string, baseDenom: string }] pageResponse: { nextKey: bytes, total: number }

    Lists all registered denom traces with pagination

    increaseAllowance

    grantee: string (address) sourcePort: string sourceChannel: string denom: string amount: string (uint256)

    approved: boolean

    Increases spend limit for a specific channel/denom

    revoke

    grantee: string (address)

    revoked: boolean

    Revokes all IBC transfer permissions for a grantee

    transfer

    sourcePort: string sourceChannel: string denom: string amount: string (uint256) sender: string (address) receiver: string timeoutHeight: { revisionNumber: number, revisionHeight: number } timeoutTimestamp: number memo: string

    nextSequence: number (uint64)

    Initiates an IBC token transfer

    unjail

    validatorAddress: string (address)

    success: boolean

    Releases a validator from jail status

    createValidator

    description: { moniker: string, identity: string, ... } commissionRates: { rate: string, maxRate: string, ... } minSelfDelegation: string validatorAddress: string (address) pubkey: string value: string (uint256)

    success: boolean

    Registers a new validator

    decreaseAllowance

    grantee: string (address) amount: string (uint256) methods: string[]

    approved: boolean

    Reduces staking permissions for a grantee

    delegate

    delegatorAddress: string (address) validatorAddress: string amount: string (uint256)

    success: boolean

    Delegates tokens to a validator

    delegation

    delegatorAddress: string (address) validatorAddress: string

    shares: string (uint256) balance: { denom: string, amount: string }

    Returns delegation details between a delegator and validator

    editValidator

    description: { moniker: string, ... } validatorAddress: string (address) commissionRate: number (int256) minSelfDelegation: number (int256)

    success: boolean

    Modifies validator metadata/parameters

    increaseAllowance

    grantee: string (address) amount: string (uint256) methods: string[]

    approved: boolean

    Increases staking permissions for a grantee

    redelegate

    delegatorAddress: string (address) srcValidatorAddress: string dstValidatorAddress: string amount: string (uint256)

    completionTime: number (int64)

    Transfers delegation between validators (with unbonding period)

    redelegation

    delegatorAddress: string (address) srcValidatorAddress: string dstValidatorAddress: string

    redelegation: { entries: [{ creationHeight: number, completionTime: number, ... }] }

    Returns redelegation details

    redelegations

    delegatorAddress: string (address) srcValidatorAddress: string dstValidatorAddress: string pageRequest: { key: bytes, ... }

    response: [{ redelegation: { ... } }] pageResponse: { nextKey: bytes, total: number }

    Paginated redelegation history

    revoke

    grantee: string (address) methods: string[]

    revoked: boolean

    Revokes all staking permissions for a grantee

    unbondingDelegation

    delegatorAddress: string (address) validatorAddress: string

    unbondingDelegation: { entries: [{ creationHeight: number, completionTime: number, ... }] }

    Returns active unbonding delegations

    undelegate

    delegatorAddress: string (address) validatorAddress: string amount: string (uint256)

    completionTime: number (int64)

    Initiates token unbonding from a validator

    validator

    validatorAddress: string (address)

    validator: { operatorAddress: string, jailed: boolean, tokens: string, ... }

    Returns validator details by address

    validators

    status: string pageRequest: { key: bytes, ... }

    validators: [{ operatorAddress: string, jailed: boolean, ... }] pageResponse: { ... }

    Lists validators (filtered by status) with pagination

    querySmart

    contractAddress: string msg: bytes (JSON-encoded query)

    data: bytes (JSON response)

    Smart query (parses input/output as JSON)

    Bank Precompile

    Provides functionalities for checking balances and supply.

    Bech32 Precompile

    Facilitates conversion between hex address and bech32

    Distribution Precompile

    Deals with reward distribution and related

    Governance Precompile

    Supports actions such as depositing funds into proposals, voting and interacting with proposals.

    IBC Precompile

    Allows IBC transfers

    ICS20 Precompile

    Facilitates conversion between hex address and bech32

    balances

    acc: string

    balances : [{ denom: string, amount: string }]

    Retrieves the balances of a given address

    supplyOf

    denom: string

    { response: string }

    Retrieves the total supply of tokens for the specified denomination.

    totalSupply

    -

    balances : [{ denom: string, amount: string }]

    claimRewards

    delegatorAddress: string (address) maxRetrieve: number (uint32)

    success: boolean

    Claims rewards for a delegator (up to maxRetrieve)

    delegationRewards

    delegatorAddress: string (address) validatorAddress: string

    rewards: [{ denom: string, amount: string, precision: number }]

    Gets rewards for a specific delegation

    delegationTotalRewards

    delegatorAddress: string (address)

    rewards: [{ validatorAddress: string, reward: [{ denom: string, amount: string, precision: number }] }] total: [{ denom: string, amount: string, precision: number }]

    evidence

    evidenceHash: bytes

    evidence: { height: number, time: number, power: number, consensusAddress: string }

    Retrieves evidence by its hash

    getAllEvidence

    pageRequest: { key: bytes, offset: number, limit: number, countTotal: boolean, reverse: boolean }

    evidence: [{ height: number, time: number, power: number, consensusAddress: string }] pageResponse: { nextKey: bytes, total: number }

    Retrieves all evidence with pagination support

    submitEvidence

    evidence: { height: number, time: number, power: number, consensusAddress: string }

    success: boolean

    getDeposit

    proposalId: number (uint64) depositor: string (address)

    deposit: { proposalId: number, depositor: string, amount: [{ denom: string, amount: string }] }

    Gets a specific deposit for a proposal

    getDeposits

    proposalId: number (uint64) pagination: { key: bytes, offset: number, limit: number, countTotal: boolean, reverse: boolean }

    deposits: [{ proposalId: number, depositor: string, amount: [{ denom: string, amount: string }] }] pageResponse: { nextKey: bytes, total: number }

    Gets all deposits for a proposal with pagination

    getParams

    -

    params: { votingPeriod: number, minDeposit: [{ denom: string, amount: string }], maxDepositPeriod: number, quorum: string, threshold: string, vetoThreshold: string, ... }

    transfer

    receiver: string (address) port: string channel: string denom: string amount: string (uint256) revisionNumber: number (uint64) revisionHeight: number (uint64) timeoutTimestamp: number (uint64) memo: string

    success: boolean

    Initiates an IBC token transfer with full timeout control (both height and timestamp)

    transferWithDefaultTimeout

    receiver: string (address) port: string channel: string denom: string amount: string (uint256) memo: string

    success: boolean

    Initiates an IBC transfer using default timeout values (simplified interface)

    allowance

    grantee: string (address) granter: string (address)

    allocations: [{ sourcePort: string, sourceChannel: string, spendLimit: [{ denom: string, amount: string }], allowList: string[], allowedPacketData: string[] }]

    Checks granted IBC transfer permissions

    approve

    grantee: string (address) allocations: [{ sourcePort: string, sourceChannel: string, spendLimit: [{ denom: string, amount: string }], ... }]

    approved: boolean

    Grants IBC transfer permissions

    decreaseAllowance

    grantee: string (address) sourcePort: string sourceChannel: string denom: string amount: string (uint256)

    approved: boolean

    getParams

    -

    params: { signedBlocksWindow: number, minSignedPerWindow: string, downtimeJailDuration: number, slashFractionDoubleSign: string, slashFractionDowntime: string }

    Returns slashing module parameters

    getSigningInfo

    consAddress: string (address)

    signingInfo: { validatorAddress: string, startHeight: number, indexOffset: number, jailedUntil: number, tombstoned: boolean, missedBlocksCounter: number }

    Gets signing info for a validator

    getSigningInfos

    pagination: { key: bytes, offset: number, limit: number, countTotal: boolean, reverse: boolean }

    signingInfos: [{ validatorAddress: string, startHeight: number, indexOffset: number, jailedUntil: number, tombstoned: boolean, missedBlocksCounter: number }] pageResponse: { nextKey: bytes, total: number }

    allowance

    grantee: string (address) granter: string (address) method: string

    remaining: string (uint256)

    Checks remaining allowance for a grantee's staking actions

    approve

    grantee: string (address) amount: string (uint256) methods: string[]

    approved: boolean

    Grants staking permissions to another address

    cancelUnbondingDelegation

    delegatorAddress: string (address) validatorAddress: string amount: string (uint256) creationHeight: string (uint256)

    success: boolean

    execute

    contractAddress: string msg: bytes (JSON-encoded) coins: [{ denom: string, amount: string }]

    success: boolean

    Executes a contract method with optional token transfer

    instantiate

    admin: string (address) codeID: number (uint64) label: string msg: bytes (init msg) coins: [{ denom: string, amount: string }]

    success: boolean

    Deploys a new contract instance from stored code

    queryRaw

    contractAddress: string queryData: bytes (raw query)

    data: bytes (raw response)

    Retrieves all the supplies from the chain

    Gets all rewards for a delegator with totals

    Submits new evidence of validator equivocation

    Returns governance parameters

    Reduces spend limit for a specific channel/denom

    Gets all validator signing info with pagination

    Cancels an unbonding delegation before completion

    Low-level contract query (returns raw bytes)

    import { getBankPrecompileEthersV6Contract } from '@kiichain/kiijs-evm';
    import { ethers } from 'ethers';
    
    const provider = new ethers.BrowserProvider(window.ethereum); // or any other provider
    const signer = await provider.getSigner();
    
    const accounts = await provider.send('eth_requestAccounts', []);
    
    const contract = getBankPrecompileEthersV6Contract(signer);
    
    const cosmosAddress = await contract.balances("yourAddress");
    import { ethers } from 'ethers';
    
    const provider = new ethers.JsonRpcProvider('https://json-rpc.dos.sentry.testnet.v3.kiivalidator.com/');
    const wallet = new ethers.Wallet("0xyourprivatekey", provider);
    import { HexToBech32, Bech32ToHex } from '@kiichain/kiijs-evm'
    
    const kiiAddress = HexToBech32("0xyourhex")
    
    const evmAddress = Bech32ToHex("kiiYouraddress)
    Slashing Precompile
    Staking Precompile
    Wasm Precompile

    Params queries the parameters of x/vm module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/params

    Account queries an Ethereum account.

    get
    Path parameters
    addressanyRequired

    address is the ethereum hex address to query the account for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/account/{address}

    Balance queries the balance of a the EVM denomination for a single account.

    get
    Path parameters
    addressanyRequired

    address is the ethereum hex address to query the balance for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/balances/{address}

    BaseFee queries the base fee of the parent block of the current block, it's similar to feemarket module's method, but also checks london hardfork status.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/base_fee

    Code queries the balance of all coins for a single account.

    get
    Path parameters
    addressanyRequired

    address is the ethereum hex address to query the code for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/codes/{address}

    Config queries the EVM configuration

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/config

    CosmosAccount queries an Ethereum account's Cosmos Address.

    get
    Path parameters
    addressanyRequired

    address is the ethereum hex address to query the account for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/cosmos_account/{address}

    EstimateGas implements the `eth_estimateGas` rpc api

    get
    Query parameters
    argsanyOptional

    args uses the same json format as the json rpc api.

    gas_capanyOptional

    gas_cap defines the default gas cap to be used.

    proposer_addressanyOptional

    proposer_address of the requested block in hex format.

    chain_idanyOptional

    chain_id is the eip155 chain id parsed from the requested block header.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/estimate_gas

    EthCall implements the `eth_call` rpc api

    get
    Query parameters
    argsanyOptional

    args uses the same json format as the json rpc api.

    gas_capanyOptional

    gas_cap defines the default gas cap to be used.

    proposer_addressanyOptional

    proposer_address of the requested block in hex format.

    chain_idanyOptional

    chain_id is the eip155 chain id parsed from the requested block header.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/eth_call

    GlobalMinGasPrice queries the MinGasPrice it's similar to feemarket module's method, but makes the conversion to 18 decimals when the evm denom is represented with a different precision.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/min_gas_price

    Storage queries the balance of all coins for a single account.

    get
    Path parameters
    addressanyRequired

    address is the ethereum hex address to query the storage state for.

    keyanyRequired

    key defines the key of the storage state

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/storage/{address}/{key}

    TraceBlock implements the `debug_traceBlockByNumber` and `debug_traceBlockByHash` rpc api

    get
    Query parameters
    trace_config.traceranyOptional

    tracer is a custom javascript tracer.

    trace_config.timeoutanyOptional

    timeout overrides the default timeout of 5 seconds for JavaScript-based tracing calls.

    trace_config.reexecanyOptional

    reexec defines the number of blocks the tracer is willing to go back.

    trace_config.disable_stackanyOptional

    disable_stack switches stack capture.

    trace_config.disable_storageanyOptional

    disable_storage switches storage capture.

    trace_config.debuganyOptional

    debug can be used to print output during capture end.

    trace_config.limitanyOptional

    limit defines the maximum length of output, but zero means unlimited.

    trace_config.overrides.homestead_blockanyOptional

    homestead_block switch (nil no fork, 0 = already homestead).

    trace_config.overrides.dao_fork_blockanyOptional

    dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork).

    trace_config.overrides.dao_fork_supportanyOptional

    dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork.

    trace_config.overrides.eip150_blockanyOptional

    eip150_block: EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork).

    trace_config.overrides.eip150_hashanyOptional

    eip150_hash: EIP150 HF hash (needed for header only clients as only gas pricing changed).

    trace_config.overrides.eip155_blockanyOptional

    eip155_block: EIP155Block HF block.

    trace_config.overrides.eip158_blockanyOptional

    eip158_block: EIP158 HF block.

    trace_config.overrides.byzantium_blockanyOptional

    byzantium_block: Byzantium switch block (nil no fork, 0 = already on byzantium).

    trace_config.overrides.constantinople_blockanyOptional

    constantinople_block: Constantinople switch block (nil no fork, 0 = already activated).

    trace_config.overrides.petersburg_blockanyOptional

    petersburg_block: Petersburg switch block (nil same as Constantinople).

    trace_config.overrides.istanbul_blockanyOptional

    istanbul_block: Istanbul switch block (nil no fork, 0 = already on istanbul).

    trace_config.overrides.muir_glacier_blockanyOptional

    muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 = already activated).

    trace_config.overrides.berlin_blockanyOptional

    berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin).

    trace_config.overrides.london_blockanyOptional

    london_block: London switch block (nil = no fork, 0 = already on london).

    trace_config.overrides.arrow_glacier_blockanyOptional

    arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated).

    trace_config.overrides.gray_glacier_blockanyOptional

    gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 = already activated).

    trace_config.overrides.merge_netsplit_blockanyOptional

    merge_netsplit_block: Virtual fork after The Merge to use as a network splitter.

    trace_config.overrides.shanghai_blockanyOptional

    shanghai_block switch block (nil = no fork, 0 = already on shanghai).

    trace_config.overrides.cancun_blockanyOptional

    cancun_block switch block (nil = no fork, 0 = already on cancun).

    trace_config.overrides.chain_idanyOptional

    chain_id is the id of the chain (EIP-155).

    trace_config.overrides.denomanyOptional

    denom is the denomination used on the EVM.

    trace_config.overrides.decimalsanyOptional

    decimals is the real decimal precision of the denomination used on the EVM.

    trace_config.enable_memoryanyOptional

    enable_memory switches memory capture.

    trace_config.enable_return_dataanyOptional

    enable_return_data switches the capture of return data.

    trace_config.tracer_json_configanyOptional

    tracer_json_config configures the tracer using a JSON string.

    block_numberanyOptional

    block_number of the traced block.

    block_hashanyOptional

    block_hash (hex) of the traced block.

    block_timeanyOptional

    block_time of the traced block.

    proposer_addressanyOptional

    proposer_address is the address of the requested block.

    chain_idanyOptional

    chain_id is the eip155 chain id parsed from the requested block header.

    block_max_gasanyOptional

    block_max_gas of the traced block.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/trace_block

    TraceTx implements the `debug_traceTransaction` rpc api

    get
    Query parameters
    msg.data.type_urlanyOptional

    A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one "/" character. The last segment of the URL's path must represent the fully qualified name of the type (as in path/google.protobuf.Duration). The name should be in a canonical form (e.g., leading "." is not accepted).

    In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme http, https, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows:

    • If no scheme is provided, https is assumed.
    • An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
    • Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)

    Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com.

    Schemes other than http, https (or the empty scheme) might be used with implementation specific semantics.

    msg.data.valueanyOptional

    Must be a valid serialized protocol buffer of the above specified type.

    msg.sizeanyOptional

    size is the encoded storage size of the transaction (DEPRECATED).

    msg.hashanyOptional

    hash of the transaction in hex format.

    msg.fromanyOptional

    from is the ethereum signer address in hex format. This address value is checked against the address derived from the signature (V, R, S) using the secp256k1 elliptic curve.

    trace_config.traceranyOptional

    tracer is a custom javascript tracer.

    trace_config.timeoutanyOptional

    timeout overrides the default timeout of 5 seconds for JavaScript-based tracing calls.

    trace_config.reexecanyOptional

    reexec defines the number of blocks the tracer is willing to go back.

    trace_config.disable_stackanyOptional

    disable_stack switches stack capture.

    trace_config.disable_storageanyOptional

    disable_storage switches storage capture.

    trace_config.debuganyOptional

    debug can be used to print output during capture end.

    trace_config.limitanyOptional

    limit defines the maximum length of output, but zero means unlimited.

    trace_config.overrides.homestead_blockanyOptional

    homestead_block switch (nil no fork, 0 = already homestead).

    trace_config.overrides.dao_fork_blockanyOptional

    dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork).

    trace_config.overrides.dao_fork_supportanyOptional

    dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork.

    trace_config.overrides.eip150_blockanyOptional

    eip150_block: EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork).

    trace_config.overrides.eip150_hashanyOptional

    eip150_hash: EIP150 HF hash (needed for header only clients as only gas pricing changed).

    trace_config.overrides.eip155_blockanyOptional

    eip155_block: EIP155Block HF block.

    trace_config.overrides.eip158_blockanyOptional

    eip158_block: EIP158 HF block.

    trace_config.overrides.byzantium_blockanyOptional

    byzantium_block: Byzantium switch block (nil no fork, 0 = already on byzantium).

    trace_config.overrides.constantinople_blockanyOptional

    constantinople_block: Constantinople switch block (nil no fork, 0 = already activated).

    trace_config.overrides.petersburg_blockanyOptional

    petersburg_block: Petersburg switch block (nil same as Constantinople).

    trace_config.overrides.istanbul_blockanyOptional

    istanbul_block: Istanbul switch block (nil no fork, 0 = already on istanbul).

    trace_config.overrides.muir_glacier_blockanyOptional

    muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 = already activated).

    trace_config.overrides.berlin_blockanyOptional

    berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin).

    trace_config.overrides.london_blockanyOptional

    london_block: London switch block (nil = no fork, 0 = already on london).

    trace_config.overrides.arrow_glacier_blockanyOptional

    arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated).

    trace_config.overrides.gray_glacier_blockanyOptional

    gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 = already activated).

    trace_config.overrides.merge_netsplit_blockanyOptional

    merge_netsplit_block: Virtual fork after The Merge to use as a network splitter.

    trace_config.overrides.shanghai_blockanyOptional

    shanghai_block switch block (nil = no fork, 0 = already on shanghai).

    trace_config.overrides.cancun_blockanyOptional

    cancun_block switch block (nil = no fork, 0 = already on cancun).

    trace_config.overrides.chain_idanyOptional

    chain_id is the id of the chain (EIP-155).

    trace_config.overrides.denomanyOptional

    denom is the denomination used on the EVM.

    trace_config.overrides.decimalsanyOptional

    decimals is the real decimal precision of the denomination used on the EVM.

    trace_config.enable_memoryanyOptional

    enable_memory switches memory capture.

    trace_config.enable_return_dataanyOptional

    enable_return_data switches the capture of return data.

    trace_config.tracer_json_configanyOptional

    tracer_json_config configures the tracer using a JSON string.

    block_numberanyOptional

    block_number of requested transaction.

    block_hashanyOptional

    block_hash of requested transaction.

    block_timeanyOptional

    block_time of requested transaction.

    proposer_addressanyOptional

    proposer_address is the proposer of the requested block.

    chain_idanyOptional

    chain_id is the eip155 chain id parsed from the requested block header.

    block_max_gasanyOptional

    block_max_gas of the block of the requested transaction.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/trace_tx

    ValidatorAccount queries an Ethereum account's from a validator consensus Address.

    get
    Path parameters
    cons_addressanyRequired

    cons_address is the validator cons address to query the account for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/vm/v1/validator_account/{cons_address}

    Params retrieves the erc20 module params

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/erc20/v1/params

    TokenPairs retrieves registered token pairs

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/erc20/v1/token_pairs

    TokenPair retrieves a registered token pair

    get
    Path parameters
    tokenanyRequired

    token identifier can be either the hex contract address of the ERC20 or the Cosmos base denomination

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/erc20/v1/token_pairs/{token}

    Codes gets the metadata for all stored wasm codes

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/code

    Code gets the binary code and metadata for a singe wasm code

    get
    Path parameters
    code_idanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/code/{code_id}

    ContractsByCode lists all smart contracts for a code id

    get
    Path parameters
    code_idanyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/code/{code_id}/contracts

    Params gets the module params

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/codes/params

    PinnedCodes gets the pinned code ids

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/codes/pinned

    BuildAddress builds a contract address

    get
    Query parameters
    code_hashanyOptional

    CodeHash is the hash of the code.

    creator_addressanyOptional

    CreatorAddress is the address of the contract instantiator.

    saltanyOptional

    Salt is a hex encoded salt.

    init_argsanyOptional

    InitArgs are optional json encoded init args to be used in contract address building if provided.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/build_address

    ContractInfo gets the contract meta data

    get
    Path parameters
    addressanyRequired

    address is the address of the contract to query

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/{address}

    ContractHistory gets the contract code history

    get
    Path parameters
    addressanyRequired

    address is the address of the contract to query

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/{address}/history

    RawContractState gets single key from the raw store data of a contract

    get
    Path parameters
    addressanyRequired

    address is the address of the contract

    query_dataanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/{address}/raw/{query_data}

    SmartContractState get smart query result from the contract

    get
    Path parameters
    addressanyRequired

    address is the address of the contract

    query_dataanyRequired

    QueryData contains the query data passed to the contract

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/{address}/smart/{query_data}

    AllContractState gets all raw store data for a single contract

    get
    Path parameters
    addressanyRequired

    address is the address of the contract

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contract/{address}/state

    ContractsByCreator gets the contracts by creator

    get
    Path parameters
    creator_addressanyRequired

    CreatorAddress is the address of contract creator

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmwasm/wasm/v1/contracts/creator/{creator_address}

    Returns list of `Authorization`, granted to the grantee by the granter.

    get
    Query parameters
    granteranyOptional
    granteeanyOptional
    msg_type_urlanyOptional

    Optional, msg_type_url, when set, will query only grants matching given msg type.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/authz/v1beta1/grants

    GranteeGrants returns a list of `GrantAuthorization` by grantee.

    get

    Since: cosmos-sdk 0.46

    Path parameters
    granteeanyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/authz/v1beta1/grants/grantee/{grantee}

    GranterGrants returns list of `GrantAuthorization`, granted by granter.

    get

    Since: cosmos-sdk 0.46

    Path parameters
    granteranyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/authz/v1beta1/grants/granter/{granter}

    AllBalances queries the balance of all coins for a single account.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    addressanyRequired

    address is the address to query balances for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    resolve_denomanyOptional

    resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.

    Since: cosmos-sdk 0.50

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/balances/{address}

    Balance queries the balance of a single coin for a single account.

    get
    Path parameters
    addressanyRequired

    address is the address to query balances for.

    Query parameters
    denomanyOptional

    denom is the coin denom to query balances for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/balances/{address}/by_denom

    DenomOwners queries for all account addresses that own a particular token denomination.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Since: cosmos-sdk 0.46

    Path parameters
    denomanyRequired

    denom defines the coin denomination to query all account holders for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/denom_owners/{denom}

    DenomOwnersByQuery queries for all account addresses that own a particular token denomination.

    get

    Since: cosmos-sdk 0.50.3

    Query parameters
    denomanyOptional

    denom defines the coin denomination to query all account holders for.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/denom_owners_by_query

    DenomsMetadata queries the client metadata for all registered coin denominations.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/denoms_metadata

    DenomMetadata queries the client metadata of a given coin denomination.

    get
    Path parameters
    denomanyRequired

    denom is the coin denom to query the metadata for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/denoms_metadata/{denom}

    DenomMetadataByQueryString queries the client metadata of a given coin denomination.

    get
    Query parameters
    denomanyOptional

    denom is the coin denom to query the metadata for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/denoms_metadata_by_query_string

    Params queries the parameters of x/bank module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/params

    SendEnabled queries for SendEnabled entries.

    get

    This query only returns denominations that have specific SendEnabled settings. Any denomination that does not have a specific setting will use the default params.default_send_enabled, and will not be returned by this query.

    Since: cosmos-sdk 0.47

    Query parameters
    denomsanyOptional

    denoms is the specific denoms you want look up. Leave empty to get all entries.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/send_enabled

    SpendableBalances queries the spendable balance of all coins for a single account.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Since: cosmos-sdk 0.46

    Path parameters
    addressanyRequired

    address is the address to query spendable balances for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/spendable_balances/{address}

    SpendableBalanceByDenom queries the spendable balance of a single denom for a single account.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Since: cosmos-sdk 0.47

    Path parameters
    addressanyRequired

    address is the address to query balances for.

    Query parameters
    denomanyOptional

    denom is the coin denom to query balances for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom

    TotalSupply queries the total supply of all coins.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/supply

    SupplyOf queries the supply of a single coin.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Query parameters
    denomanyOptional

    denom is the coin denom to query balances for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/bank/v1beta1/supply/by_denom

    ABCIQuery defines a query handler that supports ABCI queries directly to the application, bypassing Tendermint completely. The ABCI query must contain a valid and supported path, including app, custom, p2p, and store.

    get

    Since: cosmos-sdk 0.46

    Query parameters
    dataanyOptional
    pathanyOptional
    heightanyOptional
    proveanyOptional
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/abci_query

    GetLatestBlock returns the latest block.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/blocks/latest

    GetBlockByHeight queries block for given height.

    get
    Path parameters
    heightanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/blocks/{height}

    GetNodeInfo queries the current node info.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/node_info

    GetSyncing queries node syncing.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/syncing

    GetLatestValidatorSet queries latest validator-set.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/validatorsets/latest

    GetValidatorSetByHeight queries validator-set at a given height.

    get
    Path parameters
    heightanyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/tendermint/v1beta1/validatorsets/{height}

    Config queries for the operator configuration.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/node/v1beta1/config

    Status queries for the node status.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/base/node/v1beta1/status

    Params queries the parameters of x/consensus module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/consensus/v1/params

    AllowancesByGranter returns all the grants given by an address

    get

    Since: cosmos-sdk 0.46

    Path parameters
    granteranyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/feegrant/v1beta1/issued/{granter}

    Allowance returns granted allwance to the grantee by the granter.

    get
    Path parameters
    granteranyRequired

    granter is the address of the user granting an allowance of their funds.

    granteeanyRequired

    grantee is the address of the user being granted an allowance of another user's funds.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}

    Allowances returns all the grants for the given grantee address.

    get
    Path parameters
    granteeanyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/feegrant/v1beta1/allowances/{grantee}

    Params queries all parameters of the gov module.

    get
    Path parameters
    params_typeanyRequired

    params_type defines which parameters to query for, can be one of "voting", "tallying" or "deposit".

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/params/{params_type}

    Params queries all parameters of the gov module.

    get
    Path parameters
    params_typeanyRequired

    params_type defines which parameters to query for, can be one of "voting", "tallying" or "deposit".

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/params/{params_type}

    Proposals queries all proposals based on given status.

    get
    Query parameters
    proposal_statusanyOptional

    proposal_status defines the status of the proposals.

    • PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.
    • PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit period.
    • PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting period.
    • PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has passed.
    • PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has been rejected.
    • PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has failed.
    voteranyOptional

    voter defines the voter address for the proposals.

    depositoranyOptional

    depositor defines the deposit addresses from the proposals.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals

    Proposal queries proposal details based on ProposalID.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}

    Deposits queries all deposits of a single proposal.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}/deposits

    Deposit queries single deposit information based on proposalID, depositAddr.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    depositoranyRequired

    depositor defines the deposit addresses from the proposals.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}

    TallyResult queries the tally of a proposal vote.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}/tally

    Votes queries votes of a given proposal.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}/votes

    Vote queries voted information based on proposalID, voterAddr.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    voteranyRequired

    voter defines the voter address for the proposals.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}

    Proposals queries all proposals based on given status.

    get
    Query parameters
    proposal_statusanyOptional

    proposal_status defines the status of the proposals.

    • PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.
    • PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit period.
    • PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting period.
    • PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has passed.
    • PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has been rejected.
    • PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has failed.
    voteranyOptional

    voter defines the voter address for the proposals.

    depositoranyOptional

    depositor defines the deposit addresses from the proposals.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals

    Proposal queries proposal details based on ProposalID.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}

    Deposits queries all deposits of a single proposal.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits

    Deposit queries single deposit information based on proposalID, depositor address.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    depositoranyRequired

    depositor defines the deposit addresses from the proposals.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}

    TallyResult queries the tally of a proposal vote.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}/tally

    Votes queries votes of a given proposal.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}/votes

    Vote queries voted information based on proposalID, voterAddr.

    get
    Path parameters
    proposal_idanyRequired

    proposal_id defines the unique id of the proposal.

    voteranyRequired

    voter defines the voter address for the proposals.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}

    Constitution queries the chain's constitution.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/gov/v1/constitution

    Params queries the parameters of slashing module

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/slashing/v1beta1/params

    SigningInfos queries signing info of all validators

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/slashing/v1beta1/signing_infos

    SigningInfo queries the signing info of given cons address

    get
    Path parameters
    cons_addressanyRequired

    cons_address is the address to query signing info of

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/slashing/v1beta1/signing_infos/{cons_address}

    Parameters queries the staking parameters.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/params

    DelegatorDelegations queries all delegations of a given delegator address.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/delegations/{delegator_addr}

    Redelegations queries redelegations of given address.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Query parameters
    src_validator_addranyOptional

    src_validator_addr defines the validator address to redelegate from.

    dst_validator_addranyOptional

    dst_validator_addr defines the validator address to redelegate to.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations

    DelegatorUnbondingDelegations queries all unbonding delegations of a given delegator address.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations

    DelegatorValidators queries all validators info for given delegator address.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators

    DelegatorValidator queries validator info for given delegator validator pair.

    get
    Path parameters
    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    validator_addranyRequired

    validator_addr defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}

    HistoricalInfo queries the historical info for given height.

    get
    Path parameters
    heightanyRequired

    height defines at which height to query the historical info.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/historical_info/{height}

    Pool queries the pool info.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/pool

    Validators queries all validators that match the given status.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Query parameters
    statusanyOptional

    status enables to query for validators matching a given status.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators

    Validator queries validator info for given validator address.

    get
    Path parameters
    validator_addranyRequired

    validator_addr defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators/{validator_addr}

    ValidatorDelegations queries delegate info for given validator.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    validator_addranyRequired

    validator_addr defines the validator address to query for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators/{validator_addr}/delegations

    Delegation queries delegate info for given validator delegator pair.

    get
    Path parameters
    validator_addranyRequired

    validator_addr defines the validator address to query for.

    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}

    UnbondingDelegation queries unbonding info for given validator delegator pair.

    get
    Path parameters
    validator_addranyRequired

    validator_addr defines the validator address to query for.

    delegator_addranyRequired

    delegator_addr defines the delegator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation

    ValidatorUnbondingDelegations queries unbonding delegations of a validator.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Path parameters
    validator_addranyRequired

    validator_addr defines the validator address to query for.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations

    UpgradedConsensusState queries the consensus state that will serve as a trusted kernel for the next version of this chain. It will only be stored at the last height of this chain. UpgradedConsensusState RPC not supported with legacy querier This rpc is deprecated now that IBC has its own replacement (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)

    get
    Path parameters
    last_heightanyRequired

    last height of the current chain must be sent in request as this is the height under which next consensus state is stored

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}

    AppliedPlan queries a previously applied upgrade plan by its name.

    get
    Path parameters
    nameanyRequired

    name is the name of the applied plan to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/upgrade/v1beta1/applied_plan/{name}

    Returns the account with authority to conduct upgrades

    get

    Since: cosmos-sdk 0.46

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/upgrade/v1beta1/authority

    CurrentPlan queries the current upgrade plan.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/upgrade/v1beta1/current_plan

    ModuleVersions queries the list of module versions from state.

    get

    Since: cosmos-sdk 0.43

    Query parameters
    module_nameanyOptional

    module_name is a field to query a specific module consensus version from state. Leaving this empty will fetch the full list of module versions from state.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/upgrade/v1beta1/module_versions

    Params queries the parameters of x/feemarket module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/feemarket/v1/params

    BaseFee queries the base fee of the parent block of the current block.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/feemarket/v1/base_fee

    BlockGas queries the gas used at a given block height

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evm/feemarket/v1/block_gas

    Params defines a gRPC query method that returns the tokenfactory module's parameters.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /kiichain/tokenfactory/v1beta1/params

    DenomAuthorityMetadata defines a gRPC query method for fetching DenomAuthorityMetadata for a particular denom.

    get
    Path parameters
    denomanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /kiichain/tokenfactory/v1beta1/denoms/{denom}/authority_metadata

    DenomsFromAdmin defines a gRPC query method for fetching all denominations owned by a specific admin.

    get
    Path parameters
    adminanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /kiichain/tokenfactory/v1beta1/denoms_from_admin/{admin}

    DenomsFromCreator defines a gRPC query method for fetching all denominations created by a specific admin/creator.

    get
    Path parameters
    creatoranyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /kiichain/tokenfactory/v1beta1/denoms_from_creator/{creator}

    Params queries all parameters.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/params

    AccountInfo queries account info which is common to all account types.

    get

    Since: cosmos-sdk 0.47

    Path parameters
    addressanyRequired

    address is the account address string.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/account_info/{address}

    Accounts returns all the existing accounts.

    get

    When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.

    Since: cosmos-sdk 0.43

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/accounts

    Account returns account details based on address.

    get
    Path parameters
    addressanyRequired

    address defines the address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/accounts/{address}

    AccountAddressByID returns account address based on account number.

    get

    Since: cosmos-sdk 0.46.2

    Path parameters
    idanyRequired

    Deprecated, use account_id instead

    id is the account number of the address to be queried. This field should have been an uint64 (like all account numbers), and will be updated to uint64 in a future version of the auth query.

    Query parameters
    account_idanyOptional

    account_id is the account number of the address to be queried.

    Since: cosmos-sdk 0.47

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/address_by_id/{id}

    Bech32Prefix queries bech32Prefix

    get

    Since: cosmos-sdk 0.46

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/bech32

    AddressBytesToString converts Account Address bytes to string

    get

    Since: cosmos-sdk 0.46

    Path parameters
    address_bytesanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/bech32/{address_bytes}

    AddressStringToBytes converts Address string to bytes

    get

    Since: cosmos-sdk 0.46

    Path parameters
    address_stringanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/bech32/{address_string}

    ModuleAccounts returns all the existing module accounts.

    get

    Since: cosmos-sdk 0.46

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/module_accounts

    ModuleAccountByName returns the module account info by module name

    get
    Path parameters
    nameanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/auth/v1beta1/module_accounts/{name}

    Params queries params of the distribution module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/params

    DelegatorValidators queries the validators of a delegator.

    get
    Path parameters
    delegator_addressanyRequired

    delegator_address defines the delegator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators

    ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator

    get
    Path parameters
    validator_addressanyRequired

    validator_address defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/validators/{validator_address}

    CommunityPool queries the community pool coins.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/community_pool

    DelegationTotalRewards queries the total rewards accrued by each validator.

    get
    Path parameters
    delegator_addressanyRequired

    delegator_address defines the delegator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards

    DelegationRewards queries the total rewards accrued by a delegation.

    get
    Path parameters
    delegator_addressanyRequired

    delegator_address defines the delegator address to query for.

    validator_addressanyRequired

    validator_address defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}

    DelegatorWithdrawAddress queries withdraw address of a delegator.

    get
    Path parameters
    delegator_addressanyRequired

    delegator_address defines the delegator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address

    ValidatorCommission queries accumulated commission for a validator.

    get
    Path parameters
    validator_addressanyRequired

    validator_address defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/validators/{validator_address}/commission

    ValidatorOutstandingRewards queries rewards of a validator address.

    get
    Path parameters
    validator_addressanyRequired

    validator_address defines the validator address to query for.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards

    ValidatorSlashes queries slash events of a validator.

    get
    Path parameters
    validator_addressanyRequired

    validator_address defines the validator address to query for.

    Query parameters
    starting_heightanyOptional

    starting_height defines the optional starting height to query the slashes.

    ending_heightanyOptional

    starting_height defines the optional ending height to query the slashes.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/distribution/v1beta1/validators/{validator_address}/slashes

    Evidence queries evidence based on evidence hash.

    get
    Path parameters
    hashanyRequired

    hash defines the evidence hash of the requested evidence.

    Since: cosmos-sdk 0.47

    Query parameters
    evidence_hashanyOptional

    evidence_hash defines the hash of the requested evidence. Deprecated: Use hash, a HEX encoded string, instead.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evidence/v1beta1/evidence/{hash}

    AllEvidence queries all evidence.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/evidence/v1beta1/evidence

    TxDecode decodes the transaction.

    post

    Since: cosmos-sdk 0.47

    Body

    TxDecodeRequest is the request type for the Service.TxDecode RPC method.

    Since: cosmos-sdk 0.47

    tx_bytesstring · byteOptional

    tx_bytes is the raw transaction.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/decode

    TxEncode encodes the transaction.

    post

    Since: cosmos-sdk 0.47

    Body

    TxEncodeRequest is the request type for the Service.TxEncode RPC method.

    Since: cosmos-sdk 0.47

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/encode

    TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.

    post

    Since: cosmos-sdk 0.47

    Body

    TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino RPC method.

    Since: cosmos-sdk 0.47

    amino_binarystring · byteOptional
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/decode/amino

    TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.

    post

    Since: cosmos-sdk 0.47

    Body

    TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino RPC method.

    Since: cosmos-sdk 0.47

    amino_jsonstringOptional
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/encode/amino

    GetTxsEvent fetches txs by event.

    get
    Query parameters
    eventsanyOptional

    events is the list of transaction event type. Deprecated post v0.47.x: use query instead, which should contain a valid events query.

    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    order_byanyOptional
    • ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case.
    • ORDER_BY_ASC: ORDER_BY_ASC defines ascending order
    • ORDER_BY_DESC: ORDER_BY_DESC defines descending order
    pageanyOptional

    page is the page number to query, starts at 1. If not provided, will default to first page.

    limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    queryanyOptional

    query defines the transaction event query that is proxied to Tendermint's TxSearch RPC method. The query must be valid.

    Since cosmos-sdk 0.50

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/tx/v1beta1/txs

    GetTx fetches a tx by hash.

    get
    Path parameters
    hashanyRequired

    hash is the tx hash to query, encoded as a hex string.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/tx/v1beta1/txs/{hash}

    BroadcastTx broadcast transaction.

    post
    Body

    BroadcastTxRequest is the request type for the Service.BroadcastTxRequest RPC method.

    tx_bytesstring · byteOptional

    tx_bytes is the raw transaction.

    modestring · enumOptional

    BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC method.

    • BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering
    • BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead, BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.
    • BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for a CheckTx execution response only.
    • BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns immediately.
    Default: BROADCAST_MODE_UNSPECIFIEDPossible values:
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/txs

    GetBlockWithTxs fetches a block with decoded txs.

    get

    Since: cosmos-sdk 0.45.2

    Path parameters
    heightanyRequired

    height is the height of the block to query.

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /cosmos/tx/v1beta1/txs/block/{height}

    Simulate simulates executing a transaction for estimating gas usage.

    post
    Body

    SimulateRequest is the request type for the Service.Simulate RPC method.

    tx_bytesstring · byteOptional

    tx_bytes is the raw transaction.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /cosmos/tx/v1beta1/simulate

    IncentivizedPackets returns all incentivized packets and their associated fees

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    query_heightanyOptional

    block height at which to query.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/incentivized_packets

    IncentivizedPacket returns all packet fees for a packet given its identifier

    get
    Path parameters
    packet_id.channel_idanyRequired

    channel unique identifier

    packet_id.port_idanyRequired

    channel port identifier

    packet_id.sequenceanyRequired

    packet sequence

    Query parameters
    query_heightanyOptional

    block height at which to query.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/incentivized_packet

    Gets all incentivized packets for a specific channel

    get
    Path parameters
    channel_idanyRequired
    port_idanyRequired
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    query_heightanyOptional

    Height to query at.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets

    Channel queries an IBC Channel.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}

    Connection queries an IBC connection end.

    get
    Path parameters
    connection_idanyRequired

    connection unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/connections/{connection_id}

    ClientState queries an IBC light client.

    get
    Path parameters
    client_idanyRequired

    client state unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/client_states/{client_id}

    Channels queries all the IBC channels of a chain.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels

    Connections queries all the IBC connections of a chain.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/connections

    Status queries the status of an IBC client.

    get
    Path parameters
    client_idanyRequired

    client unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/client_status/{client_id}

    ClientStates queries all the IBC light clients of a chain.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/client_states

    VerifyMembership queries an IBC light client for proof verification of a value at a given key path.

    post
    Body
    client_idstringOptional

    client unique identifier.

    proofstring · byteOptional

    the proof to be verified by the client.

    valuestring · byteOptional

    the value which is proven.

    time_delaystring · uint64Optional
    block_delaystring · uint64Optional
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    post
    /ibc/core/client/v1/verify_membership

    EscrowAddress returns the escrow address for a particular port and channel id.

    get
    Path parameters
    channel_idanyRequired

    unique channel identifier

    port_idanyRequired

    unique port identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address

    DenomHash queries a denomination hash information.

    get
    Path parameters
    traceanyRequired

    The denomination trace ([port_id]/[channel_id])+/[denom]

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/denom_hashes/{trace}

    DenomTraces queries all denomination traces.

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/denom_traces

    DenomTrace queries a denomination trace information.

    get
    Path parameters
    hashanyRequired

    hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/denom_traces/{hash}

    Params queries all parameters of the ibc-transfer module.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/params

    FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel

    get
    Path parameters
    channel_idanyRequired

    unique channel identifier

    port_idanyRequired

    unique port identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled

    TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.

    get
    Path parameters
    denomanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/transfer/v1/denoms/{denom}/total_escrow

    CounterpartyPayee returns the registered counterparty payee for forward relaying

    get
    Path parameters
    channel_idanyRequired

    unique channel identifier

    relayeranyRequired

    the relayer address to which the counterparty is registered

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee

    Payee returns the registered payee address for a specific channel given the relayer address

    get
    Path parameters
    channel_idanyRequired

    unique channel identifier

    relayeranyRequired

    the relayer address to which the distribution address is registered

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee

    TotalAckFees returns the total acknowledgement fees for a packet given its identifier

    get
    Path parameters
    packet_id.channel_idanyRequired

    channel unique identifier

    packet_id.port_idanyRequired

    channel port identifier

    packet_id.sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_ack_fees

    TotalRecvFees returns the total receive fees for a packet given its identifier

    get
    Path parameters
    packet_id.channel_idanyRequired

    channel unique identifier

    packet_id.port_idanyRequired

    channel port identifier

    packet_id.sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_recv_fees

    TotalTimeoutFees returns the total timeout fees for a packet given its identifier

    get
    Path parameters
    packet_id.channel_idanyRequired

    channel unique identifier

    packet_id.port_idanyRequired

    channel port identifier

    packet_id.sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_timeout_fees

    FeeEnabledChannels returns a list of all fee enabled channels

    get
    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    query_heightanyOptional

    block height at which to query.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/fee/v1/fee_enabled

    InterchainAccount returns the interchain account address for a given owner address on a given connection

    get
    Path parameters
    owneranyRequired
    connection_idanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}

    Params queries all parameters of the ICA controller submodule.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/interchain_accounts/controller/v1/params

    Params queries all parameters of the ICA host submodule.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/apps/interchain_accounts/host/v1/params

    ChannelConsensusState queries for the consensus state for the channel associated with the provided channel identifiers.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    revision_numberanyRequired

    revision number of the consensus state

    revision_heightanyRequired

    revision height of the consensus state

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}

    NextSequenceReceive returns the next receive sequence for a given channel.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence

    ChannelClientState queries for the client state for the channel associated with the provided channel identifiers.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state

    NextSequenceSend returns the next send sequence for a given channel.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send

    PacketAcknowledgements returns all the packet acknowledgements associated with a channel.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    packet_commitment_sequencesanyOptional

    list of packet sequences.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements

    PacketAcknowledgement queries a stored packet acknowledgement hash.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}

    PacketCommitments returns all the packet commitments hashes associated with a channel.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments

    UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    packet_ack_sequencesanyRequired

    list of acknowledgement sequences

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks

    UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    packet_commitment_sequencesanyRequired

    list of packet sequences

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets

    PacketCommitment queries a stored packet commitment hash.

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}

    PacketReceipt queries if a given packet sequence has been received on the queried chain

    get
    Path parameters
    channel_idanyRequired

    channel unique identifier

    port_idanyRequired

    port unique identifier

    sequenceanyRequired

    packet sequence

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}

    Upgrade returns the upgrade for a given port and channel id.

    get
    Path parameters
    channel_idanyRequired
    port_idanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade

    UpgradeError returns the error receipt if the upgrade handshake failed.

    get
    Path parameters
    channel_idanyRequired
    port_idanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade_error

    ConnectionChannels queries all the channels associated with a connection end.

    get
    Path parameters
    connectionanyRequired

    connection unique identifier

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/connections/{connection}/channels

    ChannelParams queries all parameters of the ibc channel submodule.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/channel/v1/params

    ClientConnections queries the connection paths associated with a client state.

    get
    Path parameters
    client_idanyRequired

    client identifier associated with a connection

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/client_connections/{client_id}

    ConnectionClientState queries the client state associated with the connection.

    get
    Path parameters
    connection_idanyRequired

    connection identifier

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/connections/{connection_id}/client_state

    ConnectionConsensusState queries the consensus state associated with the connection.

    get
    Path parameters
    connection_idanyRequired

    connection identifier

    revision_numberanyRequired
    revision_heightanyRequired
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}

    ConnectionParams queries all parameters of the ibc connection submodule.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/connection/v1/params

    ConsensusStates queries all the consensus state associated with a given client.

    get
    Path parameters
    client_idanyRequired

    client identifier

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/consensus_states/{client_id}

    ConsensusStateHeights queries the height of every consensus states associated with a given client.

    get
    Path parameters
    client_idanyRequired

    client identifier

    Query parameters
    pagination.keyanyOptional

    key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key should be set.

    pagination.offsetanyOptional

    offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should be set.

    pagination.limitanyOptional

    limit is the total number of results to be returned in the result page. If left empty it will default to a value to be set by each app.

    pagination.count_totalanyOptional

    count_total is set to true to indicate that the result set should include a count of the total number of items available for pagination in UIs. count_total is only respected when offset is used. It is ignored when key is set.

    pagination.reverseanyOptional

    reverse is set to true if results are to be returned in the descending order.

    Since: cosmos-sdk 0.43

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/consensus_states/{client_id}/heights

    ConsensusState queries a consensus state associated with a client state at a given height.

    get
    Path parameters
    client_idanyRequired

    client identifier

    revision_numberanyRequired

    consensus state revision number

    revision_heightanyRequired

    consensus state revision height

    Query parameters
    latest_heightanyOptional

    latest_height overrrides the height field and queries the latest stored ConsensusState.

    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}

    ClientParams queries all parameters of the ibc client submodule.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/params

    UpgradedClientState queries an Upgraded IBC light client.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/upgraded_client_states

    UpgradedConsensusState queries an Upgraded IBC consensus state.

    get
    Responses
    200

    A successful response.

    application/json
    default

    An unexpected error response.

    application/json
    get
    /ibc/core/client/v1/upgraded_consensus_states
    {
      "params": {
        "enable_erc20": true,
        "native_precompiles": [
          "text"
        ],
        "dynamic_precompiles": [
          "text"
        ]
      }
    }
    {
      "token_pairs": [
        {
          "erc20_address": "text",
          "denom": "text",
          "enabled": true,
          "contract_owner": "OWNER_UNSPECIFIED"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "token_pair": {
        "erc20_address": "text",
        "denom": "text",
        "enabled": true,
        "contract_owner": "OWNER_UNSPECIFIED"
      }
    }
    GET /cosmos/evm/erc20/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/erc20/v1/token_pairs HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/erc20/v1/token_pairs/{token} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "code_infos": [
        {
          "code_id": "text",
          "creator": "text",
          "data_hash": "Ynl0ZXM=",
          "instantiate_permission": {
            "permission": "ACCESS_TYPE_UNSPECIFIED",
            "addresses": [
              "text"
            ]
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "code_info": {
        "code_id": "text",
        "creator": "text",
        "data_hash": "Ynl0ZXM=",
        "instantiate_permission": {
          "permission": "ACCESS_TYPE_UNSPECIFIED",
          "addresses": [
            "text"
          ]
        }
      },
      "data": "Ynl0ZXM="
    }
    {
      "contracts": [
        "text"
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "params": {
        "code_upload_access": {
          "permission": "ACCESS_TYPE_UNSPECIFIED",
          "addresses": [
            "text"
          ]
        },
        "instantiate_default_permission": "ACCESS_TYPE_UNSPECIFIED"
      }
    }
    {
      "code_ids": [
        "text"
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "address": "text"
    }
    {
      "address": "text",
      "contract_info": {
        "code_id": "text",
        "creator": "text",
        "admin": "text",
        "label": "text",
        "created": {
          "block_height": "text",
          "tx_index": "text"
        },
        "ibc_port_id": "text",
        "extension": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      }
    }
    {
      "entries": [
        {
          "operation": "CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED",
          "code_id": "text",
          "updated": {
            "block_height": "text",
            "tx_index": "text"
          },
          "msg": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "data": "Ynl0ZXM="
    }
    {
      "data": "Ynl0ZXM="
    }
    {
      "models": [
        {
          "key": "Ynl0ZXM=",
          "value": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "contract_addresses": [
        "text"
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmwasm/wasm/v1/code HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/code/{code_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/code/{code_id}/contracts HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/codes/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/codes/pinned HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/build_address HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/{address}/history HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/{address}/raw/{query_data} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/{address}/smart/{query_data} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contract/{address}/state HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmwasm/wasm/v1/contracts/creator/{creator_address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "grants": [
        {
          "authorization": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "expiration": "2025-12-10T00:33:44.342Z"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "grants": [
        {
          "granter": "text",
          "grantee": "text",
          "authorization": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "expiration": "2025-12-10T00:33:44.342Z"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "grants": [
        {
          "granter": "text",
          "grantee": "text",
          "authorization": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "expiration": "2025-12-10T00:33:44.342Z"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/authz/v1beta1/grants HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/authz/v1beta1/grants/grantee/{grantee} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/authz/v1beta1/grants/granter/{granter} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "code": 1,
      "log": "text",
      "info": "text",
      "index": "text",
      "key": "Ynl0ZXM=",
      "value": "Ynl0ZXM=",
      "proof_ops": {
        "ops": [
          {
            "type": "text",
            "key": "Ynl0ZXM=",
            "data": "Ynl0ZXM="
          }
        ]
      },
      "height": "text",
      "codespace": "text"
    }
    {
      "block_id": {
        "hash": "Ynl0ZXM=",
        "part_set_header": {
          "total": 1,
          "hash": "Ynl0ZXM="
        }
      },
      "block": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "Ynl0ZXM="
        },
        "data": {
          "txs": [
            "Ynl0ZXM="
          ]
        },
        "evidence": {
          "evidence": [
            {
              "duplicate_vote_evidence": {
                "vote_a": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "vote_b": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "total_voting_power": "text",
                "validator_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              },
              "light_client_attack_evidence": {
                "conflicting_block": {
                  "signed_header": {
                    "header": {
                      "version": {
                        "block": "text",
                        "app": "text"
                      },
                      "chain_id": "text",
                      "height": "text",
                      "time": "2025-12-10T00:33:44.342Z",
                      "last_block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "last_commit_hash": "Ynl0ZXM=",
                      "data_hash": "Ynl0ZXM=",
                      "validators_hash": "Ynl0ZXM=",
                      "next_validators_hash": "Ynl0ZXM=",
                      "consensus_hash": "Ynl0ZXM=",
                      "app_hash": "Ynl0ZXM=",
                      "last_results_hash": "Ynl0ZXM=",
                      "evidence_hash": "Ynl0ZXM=",
                      "proposer_address": "Ynl0ZXM="
                    },
                    "commit": {
                      "height": "text",
                      "round": 1,
                      "block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "signatures": [
                        {
                          "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
                          "validator_address": "Ynl0ZXM=",
                          "timestamp": "2025-12-10T00:33:44.342Z",
                          "signature": "Ynl0ZXM="
                        }
                      ]
                    }
                  },
                  "validator_set": {
                    "validators": [
                      {
                        "address": "Ynl0ZXM=",
                        "pub_key": {
                          "ed25519": "Ynl0ZXM=",
                          "secp256k1": "Ynl0ZXM="
                        },
                        "voting_power": "text",
                        "proposer_priority": "text"
                      }
                    ],
                    "proposer": {
                      "address": "Ynl0ZXM=",
                      "pub_key": {
                        "ed25519": "Ynl0ZXM=",
                        "secp256k1": "Ynl0ZXM="
                      },
                      "voting_power": "text",
                      "proposer_priority": "text"
                    },
                    "total_voting_power": "text"
                  }
                },
                "common_height": "text",
                "byzantine_validators": [
                  {
                    "address": "Ynl0ZXM=",
                    "pub_key": {
                      "ed25519": "Ynl0ZXM=",
                      "secp256k1": "Ynl0ZXM="
                    },
                    "voting_power": "text",
                    "proposer_priority": "text"
                  }
                ],
                "total_voting_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              }
            }
          ]
        },
        "last_commit": {
          "height": "text",
          "round": 1,
          "block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "signatures": [
            {
              "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
              "validator_address": "Ynl0ZXM=",
              "timestamp": "2025-12-10T00:33:44.342Z",
              "signature": "Ynl0ZXM="
            }
          ]
        }
      },
      "sdk_block": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "text"
        },
        "data": {
          "txs": [
            "Ynl0ZXM="
          ]
        },
        "evidence": {
          "evidence": [
            {
              "duplicate_vote_evidence": {
                "vote_a": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "vote_b": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "total_voting_power": "text",
                "validator_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              },
              "light_client_attack_evidence": {
                "conflicting_block": {
                  "signed_header": {
                    "header": {
                      "version": {
                        "block": "text",
                        "app": "text"
                      },
                      "chain_id": "text",
                      "height": "text",
                      "time": "2025-12-10T00:33:44.342Z",
                      "last_block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "last_commit_hash": "Ynl0ZXM=",
                      "data_hash": "Ynl0ZXM=",
                      "validators_hash": "Ynl0ZXM=",
                      "next_validators_hash": "Ynl0ZXM=",
                      "consensus_hash": "Ynl0ZXM=",
                      "app_hash": "Ynl0ZXM=",
                      "last_results_hash": "Ynl0ZXM=",
                      "evidence_hash": "Ynl0ZXM=",
                      "proposer_address": "Ynl0ZXM="
                    },
                    "commit": {
                      "height": "text",
                      "round": 1,
                      "block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "signatures": [
                        {
                          "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
                          "validator_address": "Ynl0ZXM=",
                          "timestamp": "2025-12-10T00:33:44.342Z",
                          "signature": "Ynl0ZXM="
                        }
                      ]
                    }
                  },
                  "validator_set": {
                    "validators": [
                      {
                        "address": "Ynl0ZXM=",
                        "pub_key": {
                          "ed25519": "Ynl0ZXM=",
                          "secp256k1": "Ynl0ZXM="
                        },
                        "voting_power": "text",
                        "proposer_priority": "text"
                      }
                    ],
                    "proposer": {
                      "address": "Ynl0ZXM=",
                      "pub_key": {
                        "ed25519": "Ynl0ZXM=",
                        "secp256k1": "Ynl0ZXM="
                      },
                      "voting_power": "text",
                      "proposer_priority": "text"
                    },
                    "total_voting_power": "text"
                  }
                },
                "common_height": "text",
                "byzantine_validators": [
                  {
                    "address": "Ynl0ZXM=",
                    "pub_key": {
                      "ed25519": "Ynl0ZXM=",
                      "secp256k1": "Ynl0ZXM="
                    },
                    "voting_power": "text",
                    "proposer_priority": "text"
                  }
                ],
                "total_voting_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              }
            }
          ]
        },
        "last_commit": {
          "height": "text",
          "round": 1,
          "block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "signatures": [
            {
              "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
              "validator_address": "Ynl0ZXM=",
              "timestamp": "2025-12-10T00:33:44.342Z",
              "signature": "Ynl0ZXM="
            }
          ]
        }
      }
    }
    {
      "block_id": {
        "hash": "Ynl0ZXM=",
        "part_set_header": {
          "total": 1,
          "hash": "Ynl0ZXM="
        }
      },
      "block": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "Ynl0ZXM="
        },
        "data": {
          "txs": [
            "Ynl0ZXM="
          ]
        },
        "evidence": {
          "evidence": [
            {
              "duplicate_vote_evidence": {
                "vote_a": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "vote_b": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "total_voting_power": "text",
                "validator_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              },
              "light_client_attack_evidence": {
                "conflicting_block": {
                  "signed_header": {
                    "header": {
                      "version": {
                        "block": "text",
                        "app": "text"
                      },
                      "chain_id": "text",
                      "height": "text",
                      "time": "2025-12-10T00:33:44.342Z",
                      "last_block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "last_commit_hash": "Ynl0ZXM=",
                      "data_hash": "Ynl0ZXM=",
                      "validators_hash": "Ynl0ZXM=",
                      "next_validators_hash": "Ynl0ZXM=",
                      "consensus_hash": "Ynl0ZXM=",
                      "app_hash": "Ynl0ZXM=",
                      "last_results_hash": "Ynl0ZXM=",
                      "evidence_hash": "Ynl0ZXM=",
                      "proposer_address": "Ynl0ZXM="
                    },
                    "commit": {
                      "height": "text",
                      "round": 1,
                      "block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "signatures": [
                        {
                          "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
                          "validator_address": "Ynl0ZXM=",
                          "timestamp": "2025-12-10T00:33:44.342Z",
                          "signature": "Ynl0ZXM="
                        }
                      ]
                    }
                  },
                  "validator_set": {
                    "validators": [
                      {
                        "address": "Ynl0ZXM=",
                        "pub_key": {
                          "ed25519": "Ynl0ZXM=",
                          "secp256k1": "Ynl0ZXM="
                        },
                        "voting_power": "text",
                        "proposer_priority": "text"
                      }
                    ],
                    "proposer": {
                      "address": "Ynl0ZXM=",
                      "pub_key": {
                        "ed25519": "Ynl0ZXM=",
                        "secp256k1": "Ynl0ZXM="
                      },
                      "voting_power": "text",
                      "proposer_priority": "text"
                    },
                    "total_voting_power": "text"
                  }
                },
                "common_height": "text",
                "byzantine_validators": [
                  {
                    "address": "Ynl0ZXM=",
                    "pub_key": {
                      "ed25519": "Ynl0ZXM=",
                      "secp256k1": "Ynl0ZXM="
                    },
                    "voting_power": "text",
                    "proposer_priority": "text"
                  }
                ],
                "total_voting_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              }
            }
          ]
        },
        "last_commit": {
          "height": "text",
          "round": 1,
          "block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "signatures": [
            {
              "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
              "validator_address": "Ynl0ZXM=",
              "timestamp": "2025-12-10T00:33:44.342Z",
              "signature": "Ynl0ZXM="
            }
          ]
        }
      },
      "sdk_block": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "text"
        },
        "data": {
          "txs": [
            "Ynl0ZXM="
          ]
        },
        "evidence": {
          "evidence": [
            {
              "duplicate_vote_evidence": {
                "vote_a": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "vote_b": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "total_voting_power": "text",
                "validator_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              },
              "light_client_attack_evidence": {
                "conflicting_block": {
                  "signed_header": {
                    "header": {
                      "version": {
                        "block": "text",
                        "app": "text"
                      },
                      "chain_id": "text",
                      "height": "text",
                      "time": "2025-12-10T00:33:44.342Z",
                      "last_block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "last_commit_hash": "Ynl0ZXM=",
                      "data_hash": "Ynl0ZXM=",
                      "validators_hash": "Ynl0ZXM=",
                      "next_validators_hash": "Ynl0ZXM=",
                      "consensus_hash": "Ynl0ZXM=",
                      "app_hash": "Ynl0ZXM=",
                      "last_results_hash": "Ynl0ZXM=",
                      "evidence_hash": "Ynl0ZXM=",
                      "proposer_address": "Ynl0ZXM="
                    },
                    "commit": {
                      "height": "text",
                      "round": 1,
                      "block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "signatures": [
                        {
                          "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
                          "validator_address": "Ynl0ZXM=",
                          "timestamp": "2025-12-10T00:33:44.342Z",
                          "signature": "Ynl0ZXM="
                        }
                      ]
                    }
                  },
                  "validator_set": {
                    "validators": [
                      {
                        "address": "Ynl0ZXM=",
                        "pub_key": {
                          "ed25519": "Ynl0ZXM=",
                          "secp256k1": "Ynl0ZXM="
                        },
                        "voting_power": "text",
                        "proposer_priority": "text"
                      }
                    ],
                    "proposer": {
                      "address": "Ynl0ZXM=",
                      "pub_key": {
                        "ed25519": "Ynl0ZXM=",
                        "secp256k1": "Ynl0ZXM="
                      },
                      "voting_power": "text",
                      "proposer_priority": "text"
                    },
                    "total_voting_power": "text"
                  }
                },
                "common_height": "text",
                "byzantine_validators": [
                  {
                    "address": "Ynl0ZXM=",
                    "pub_key": {
                      "ed25519": "Ynl0ZXM=",
                      "secp256k1": "Ynl0ZXM="
                    },
                    "voting_power": "text",
                    "proposer_priority": "text"
                  }
                ],
                "total_voting_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              }
            }
          ]
        },
        "last_commit": {
          "height": "text",
          "round": 1,
          "block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "signatures": [
            {
              "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
              "validator_address": "Ynl0ZXM=",
              "timestamp": "2025-12-10T00:33:44.342Z",
              "signature": "Ynl0ZXM="
            }
          ]
        }
      }
    }
    {
      "default_node_info": {
        "protocol_version": {
          "p2p": "text",
          "block": "text",
          "app": "text"
        },
        "default_node_id": "text",
        "listen_addr": "text",
        "network": "text",
        "version": "text",
        "channels": "Ynl0ZXM=",
        "moniker": "text",
        "other": {
          "tx_index": "text",
          "rpc_address": "text"
        }
      },
      "application_version": {
        "name": "text",
        "app_name": "text",
        "version": "text",
        "git_commit": "text",
        "build_tags": "text",
        "go_version": "text",
        "build_deps": [
          {
            "path": "text",
            "version": "text",
            "sum": "text"
          }
        ],
        "cosmos_sdk_version": "text"
      }
    }
    {
      "syncing": true
    }
    {
      "block_height": "text",
      "validators": [
        {
          "address": "text",
          "pub_key": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "voting_power": "text",
          "proposer_priority": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "block_height": "text",
      "validators": [
        {
          "address": "text",
          "pub_key": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "voting_power": "text",
          "proposer_priority": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/base/tendermint/v1beta1/abci_query HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/blocks/latest HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/blocks/{height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/node_info HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/syncing HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/validatorsets/latest HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/tendermint/v1beta1/validatorsets/{height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/base/node/v1beta1/config HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "minimum_gas_price": "text",
      "pruning_keep_recent": "text",
      "pruning_interval": "text",
      "halt_height": "text"
    }
    GET /cosmos/base/node/v1beta1/status HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "earliest_store_height": "text",
      "height": "text",
      "timestamp": "2025-12-10T00:33:44.342Z",
      "app_hash": "Ynl0ZXM=",
      "validator_hash": "Ynl0ZXM="
    }
    {
      "params": {
        "block": {
          "max_bytes": "text",
          "max_gas": "text"
        },
        "evidence": {
          "max_age_num_blocks": "text",
          "max_age_duration": "text",
          "max_bytes": "text"
        },
        "validator": {
          "pub_key_types": [
            "text"
          ]
        },
        "version": {
          "app": "text"
        },
        "abci": {
          "vote_extensions_enable_height": "text"
        }
      }
    }
    GET /cosmos/consensus/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "allowances": [
        {
          "granter": "text",
          "grantee": "text",
          "allowance": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "allowance": {
        "granter": "text",
        "grantee": "text",
        "allowance": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      }
    }
    {
      "allowances": [
        {
          "granter": "text",
          "grantee": "text",
          "allowance": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/feegrant/v1beta1/issued/{granter} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/feegrant/v1beta1/allowances/{grantee} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "info": [
        {
          "address": "text",
          "start_height": "text",
          "index_offset": "text",
          "jailed_until": "2025-12-10T00:33:44.342Z",
          "tombstoned": true,
          "missed_blocks_counter": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "val_signing_info": {
        "address": "text",
        "start_height": "text",
        "index_offset": "text",
        "jailed_until": "2025-12-10T00:33:44.342Z",
        "tombstoned": true,
        "missed_blocks_counter": "text"
      }
    }
    GET /cosmos/slashing/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "signed_blocks_window": "text",
        "min_signed_per_window": "Ynl0ZXM=",
        "downtime_jail_duration": "text",
        "slash_fraction_double_sign": "Ynl0ZXM=",
        "slash_fraction_downtime": "Ynl0ZXM="
      }
    }
    GET /cosmos/slashing/v1beta1/signing_infos HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/slashing/v1beta1/signing_infos/{cons_address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "upgraded_consensus_state": "Ynl0ZXM="
    }
    {
      "height": "text"
    }
    {
      "address": "text"
    }
    {
      "plan": {
        "name": "text",
        "time": "2025-12-10T00:33:44.342Z",
        "height": "text",
        "info": "text",
        "upgraded_client_state": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      }
    }
    {
      "module_versions": [
        {
          "name": "text",
          "version": "text"
        }
      ]
    }
    GET /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/upgrade/v1beta1/applied_plan/{name} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/upgrade/v1beta1/authority HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/upgrade/v1beta1/current_plan HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/upgrade/v1beta1/module_versions HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "no_base_fee": true,
        "base_fee_change_denominator": 1,
        "elasticity_multiplier": 1,
        "enable_height": "text",
        "base_fee": "text",
        "min_gas_price": "text",
        "min_gas_multiplier": "text"
      }
    }
    GET /cosmos/evm/feemarket/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/feemarket/v1/base_fee HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "base_fee": "text"
    }
    GET /cosmos/evm/feemarket/v1/block_gas HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "gas": "text"
    }
    {
      "params": {
        "denom_creation_fee": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "denom_creation_gas_consume": "text"
      }
    }
    {
      "authority_metadata": {
        "admin": "text"
      }
    }
    {
      "denoms": [
        "text"
      ]
    }
    {
      "denoms": [
        "text"
      ]
    }
    GET /kiichain/tokenfactory/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /kiichain/tokenfactory/v1beta1/denoms/{denom}/authority_metadata HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /kiichain/tokenfactory/v1beta1/denoms_from_admin/{admin} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /kiichain/tokenfactory/v1beta1/denoms_from_creator/{creator} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "max_memo_characters": "text",
        "tx_sig_limit": "text",
        "tx_size_cost_per_byte": "text",
        "sig_verify_cost_ed25519": "text",
        "sig_verify_cost_secp256k1": "text"
      }
    }
    {
      "info": {
        "address": "text",
        "pub_key": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "account_number": "text",
        "sequence": "text"
      }
    }
    {
      "accounts": [
        {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "account": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
    {
      "account_address": "text"
    }
    {
      "bech32_prefix": "text"
    }
    {
      "address_string": "text"
    }
    {
      "address_bytes": "Ynl0ZXM="
    }
    {
      "accounts": [
        {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      ]
    }
    {
      "account": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
    GET /cosmos/auth/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/account_info/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/accounts HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/accounts/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/address_by_id/{id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/bech32 HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/bech32/{address_bytes} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/bech32/{address_string} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/module_accounts HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/auth/v1beta1/module_accounts/{name} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "evidence": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
    {
      "evidence": [
        {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/evidence/v1beta1/evidence/{hash} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evidence/v1beta1/evidence HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "incentivized_packets": [
        {
          "packet_id": {
            "port_id": "text",
            "channel_id": "text",
            "sequence": "text"
          },
          "packet_fees": [
            {
              "fee": {
                "recv_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ],
                "ack_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ],
                "timeout_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ]
              },
              "refund_address": "text",
              "relayers": [
                "text"
              ]
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "incentivized_packet": {
        "packet_id": {
          "port_id": "text",
          "channel_id": "text",
          "sequence": "text"
        },
        "packet_fees": [
          {
            "fee": {
              "recv_fee": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "ack_fee": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "timeout_fee": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ]
            },
            "refund_address": "text",
            "relayers": [
              "text"
            ]
          }
        ]
      }
    }
    {
      "incentivized_packets": [
        {
          "packet_id": {
            "port_id": "text",
            "channel_id": "text",
            "sequence": "text"
          },
          "packet_fees": [
            {
              "fee": {
                "recv_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ],
                "ack_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ],
                "timeout_fee": [
                  {
                    "denom": "text",
                    "amount": "text"
                  }
                ]
              },
              "refund_address": "text",
              "relayers": [
                "text"
              ]
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "channel": {
        "state": "STATE_UNINITIALIZED_UNSPECIFIED",
        "ordering": "ORDER_NONE_UNSPECIFIED",
        "counterparty": {
          "port_id": "text",
          "channel_id": "text"
        },
        "connection_hops": [
          "text"
        ],
        "version": "text",
        "upgrade_sequence": "text"
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "connection": {
        "client_id": "text",
        "versions": [
          {
            "identifier": "text",
            "features": [
              "text"
            ]
          }
        ],
        "state": "STATE_UNINITIALIZED_UNSPECIFIED",
        "counterparty": {
          "client_id": "text",
          "connection_id": "text",
          "prefix": {
            "key_prefix": "Ynl0ZXM="
          }
        },
        "delay_period": "text"
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "client_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "channels": [
        {
          "state": "STATE_UNINITIALIZED_UNSPECIFIED",
          "ordering": "ORDER_NONE_UNSPECIFIED",
          "counterparty": {
            "port_id": "text",
            "channel_id": "text"
          },
          "connection_hops": [
            "text"
          ],
          "version": "text",
          "port_id": "text",
          "channel_id": "text",
          "upgrade_sequence": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "connections": [
        {
          "id": "text",
          "client_id": "text",
          "versions": [
            {
              "identifier": "text",
              "features": [
                "text"
              ]
            }
          ],
          "state": "STATE_UNINITIALIZED_UNSPECIFIED",
          "counterparty": {
            "client_id": "text",
            "connection_id": "text",
            "prefix": {
              "key_prefix": "Ynl0ZXM="
            }
          },
          "delay_period": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "status": "text"
    }
    {
      "client_states": [
        {
          "client_id": "text",
          "client_state": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "success": true
    }
    {
      "escrow_address": "text"
    }
    {
      "hash": "text"
    }
    {
      "denom_traces": [
        {
          "path": "text",
          "base_denom": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "denom_trace": {
        "path": "text",
        "base_denom": "text"
      }
    }
    {
      "params": {
        "send_enabled": true,
        "receive_enabled": true
      }
    }
    {
      "fee_enabled": true
    }
    {
      "amount": {
        "denom": "text",
        "amount": "text"
      }
    }
    {
      "counterparty_payee": "text"
    }
    {
      "payee_address": "text"
    }
    {
      "ack_fees": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "recv_fees": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "timeout_fees": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "fee_enabled_channels": [
        {
          "port_id": "text",
          "channel_id": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "address": "text"
    }
    {
      "params": {
        "controller_enabled": true
      }
    }
    {
      "params": {
        "host_enabled": true,
        "allow_messages": [
          "text"
        ]
      }
    }
    {
      "consensus_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "client_id": "text",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "next_sequence_receive": "text",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "identified_client_state": {
        "client_id": "text",
        "client_state": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "next_sequence_send": "text",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "acknowledgements": [
        {
          "port_id": "text",
          "channel_id": "text",
          "sequence": "text",
          "data": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "acknowledgement": "Ynl0ZXM=",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "commitments": [
        {
          "port_id": "text",
          "channel_id": "text",
          "sequence": "text",
          "data": "Ynl0ZXM="
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "sequences": [
        "text"
      ],
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "sequences": [
        "text"
      ],
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "commitment": "Ynl0ZXM=",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "received": true,
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "upgrade": {
        "fields": {
          "ordering": "ORDER_NONE_UNSPECIFIED",
          "connection_hops": [
            "text"
          ],
          "version": "text"
        },
        "timeout": {
          "height": {
            "revision_number": "text",
            "revision_height": "text"
          },
          "timestamp": "text"
        },
        "next_sequence_send": "text"
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "error_receipt": {
        "sequence": "text",
        "message": "text"
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "channels": [
        {
          "state": "STATE_UNINITIALIZED_UNSPECIFIED",
          "ordering": "ORDER_NONE_UNSPECIFIED",
          "counterparty": {
            "port_id": "text",
            "channel_id": "text"
          },
          "connection_hops": [
            "text"
          ],
          "version": "text",
          "port_id": "text",
          "channel_id": "text",
          "upgrade_sequence": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "params": {
        "upgrade_timeout": {
          "height": {
            "revision_number": "text",
            "revision_height": "text"
          },
          "timestamp": "text"
        }
      }
    }
    {
      "connection_paths": [
        "text"
      ],
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "identified_client_state": {
        "client_id": "text",
        "client_state": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        }
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "consensus_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "client_id": "text",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "params": {
        "max_expected_time_per_block": "text"
      }
    }
    {
      "consensus_states": [
        {
          "height": {
            "revision_number": "text",
            "revision_height": "text"
          },
          "consensus_state": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "consensus_state_heights": [
        {
          "revision_number": "text",
          "revision_height": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "consensus_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      }
    }
    {
      "params": {
        "allowed_clients": [
          "text"
        ]
      }
    }
    {
      "upgraded_client_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
    {
      "upgraded_consensus_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
    GET /ibc/apps/fee/v1/incentivized_packets HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/incentivized_packet HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/connections/{connection_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/client_states/{client_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/connections HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/client_status/{client_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/client_states HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    POST /ibc/core/client/v1/verify_membership HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 202
    
    {
      "client_id": "text",
      "proof": "Ynl0ZXM=",
      "proof_height": {
        "revision_number": "text",
        "revision_height": "text"
      },
      "merkle_path": {
        "key_path": [
          "text"
        ]
      },
      "value": "Ynl0ZXM=",
      "time_delay": "text",
      "block_delay": "text"
    }
    GET /ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/transfer/v1/denom_hashes/{trace} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/transfer/v1/denom_traces HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/transfer/v1/denom_traces/{hash} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/transfer/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/transfer/v1/denoms/{denom}/total_escrow HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_ack_fees HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_recv_fees HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/{packet_id.sequence}/total_timeout_fees HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/fee/v1/fee_enabled HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/interchain_accounts/controller/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/apps/interchain_accounts/host/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade_error HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/connections/{connection}/channels HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/channel/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/client_connections/{client_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/connections/{connection_id}/client_state HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/connection/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/consensus_states/{client_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/consensus_states/{client_id}/heights HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/upgraded_client_states HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /ibc/core/client/v1/upgraded_consensus_states HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "evm_denom": "text",
        "extra_eips": [
          "text"
        ],
        "chain_config": {
          "homestead_block": "text",
          "dao_fork_block": "text",
          "dao_fork_support": true,
          "eip150_block": "text",
          "eip150_hash": "text",
          "eip155_block": "text",
          "eip158_block": "text",
          "byzantium_block": "text",
          "constantinople_block": "text",
          "petersburg_block": "text",
          "istanbul_block": "text",
          "muir_glacier_block": "text",
          "berlin_block": "text",
          "london_block": "text",
          "arrow_glacier_block": "text",
          "gray_glacier_block": "text",
          "merge_netsplit_block": "text",
          "shanghai_block": "text",
          "cancun_block": "text",
          "chain_id": "text",
          "denom": "text",
          "decimals": "text"
        },
        "allow_unprotected_txs": true,
        "evm_channels": [
          "text"
        ],
        "access_control": {
          "create": {
            "access_type": "ACCESS_TYPE_PERMISSIONLESS",
            "access_control_list": [
              "text"
            ]
          },
          "call": {
            "access_type": "ACCESS_TYPE_PERMISSIONLESS",
            "access_control_list": [
              "text"
            ]
          }
        },
        "active_static_precompiles": [
          "text"
        ]
      }
    }
    {
      "balance": "text",
      "code_hash": "text",
      "nonce": "text"
    }
    {
      "balance": "text"
    }
    {
      "base_fee": "text"
    }
    {
      "code": "Ynl0ZXM="
    }
    {
      "config": {
        "homestead_block": "text",
        "dao_fork_block": "text",
        "dao_fork_support": true,
        "eip150_block": "text",
        "eip150_hash": "text",
        "eip155_block": "text",
        "eip158_block": "text",
        "byzantium_block": "text",
        "constantinople_block": "text",
        "petersburg_block": "text",
        "istanbul_block": "text",
        "muir_glacier_block": "text",
        "berlin_block": "text",
        "london_block": "text",
        "arrow_glacier_block": "text",
        "gray_glacier_block": "text",
        "merge_netsplit_block": "text",
        "shanghai_block": "text",
        "cancun_block": "text",
        "chain_id": "text",
        "denom": "text",
        "decimals": "text"
      }
    }
    {
      "cosmos_address": "text",
      "sequence": "text",
      "account_number": "text"
    }
    {
      "gas": "text",
      "ret": "Ynl0ZXM=",
      "vm_error": "text"
    }
    {
      "hash": "text",
      "logs": [
        {
          "address": "text",
          "topics": [
            "text"
          ],
          "data": "Ynl0ZXM=",
          "block_number": "text",
          "tx_hash": "text",
          "tx_index": "text",
          "block_hash": "text",
          "index": "text",
          "removed": true
        }
      ],
      "ret": "Ynl0ZXM=",
      "vm_error": "text",
      "gas_used": "text"
    }
    {
      "min_gas_price": "text"
    }
    {
      "value": "text"
    }
    {
      "data": "Ynl0ZXM="
    }
    {
      "data": "Ynl0ZXM="
    }
    {
      "account_address": "text",
      "sequence": "text",
      "account_number": "text"
    }
    GET /cosmos/evm/vm/v1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/account/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/balances/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/base_fee HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/codes/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/config HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/cosmos_account/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/estimate_gas HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/eth_call HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/min_gas_price HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/storage/{address}/{key} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/validator_account/{cons_address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/trace_block HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/evm/vm/v1/trace_tx HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "balances": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
    {
      "denom_owners": [
        {
          "address": "text",
          "balance": {
            "denom": "text",
            "amount": "text"
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "denom_owners": [
        {
          "address": "text",
          "balance": {
            "denom": "text",
            "amount": "text"
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "metadatas": [
        {
          "description": "text",
          "denom_units": [
            {
              "denom": "text",
              "exponent": 1,
              "aliases": [
                "text"
              ]
            }
          ],
          "base": "text",
          "display": "text",
          "name": "text",
          "symbol": "text",
          "uri": "text",
          "uri_hash": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "metadata": {
        "description": "text",
        "denom_units": [
          {
            "denom": "text",
            "exponent": 1,
            "aliases": [
              "text"
            ]
          }
        ],
        "base": "text",
        "display": "text",
        "name": "text",
        "symbol": "text",
        "uri": "text",
        "uri_hash": "text"
      }
    }
    {
      "metadata": {
        "description": "text",
        "denom_units": [
          {
            "denom": "text",
            "exponent": 1,
            "aliases": [
              "text"
            ]
          }
        ],
        "base": "text",
        "display": "text",
        "name": "text",
        "symbol": "text",
        "uri": "text",
        "uri_hash": "text"
      }
    }
    {
      "params": {
        "send_enabled": [
          {
            "denom": "text",
            "enabled": true
          }
        ],
        "default_send_enabled": true
      }
    }
    {
      "send_enabled": [
        {
          "denom": "text",
          "enabled": true
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "balances": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
    {
      "supply": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "amount": {
        "denom": "text",
        "amount": "text"
      }
    }
    GET /cosmos/bank/v1beta1/balances/{address}/by_denom HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/denom_owners_by_query HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/denoms_metadata HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/denoms_metadata/{denom} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/denoms_metadata_by_query_string HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/supply HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/supply/by_denom HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/balances/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/denom_owners/{denom} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/send_enabled HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/bank/v1beta1/spendable_balances/{address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "voting_params": {
        "voting_period": "text"
      },
      "deposit_params": {
        "min_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "max_deposit_period": "text"
      },
      "tally_params": {
        "quorum": "Ynl0ZXM=",
        "threshold": "Ynl0ZXM=",
        "veto_threshold": "Ynl0ZXM="
      }
    }
    {
      "voting_params": {
        "voting_period": "text"
      },
      "deposit_params": {
        "min_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "max_deposit_period": "text"
      },
      "tally_params": {
        "quorum": "text",
        "threshold": "text",
        "veto_threshold": "text"
      },
      "params": {
        "min_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "max_deposit_period": "text",
        "voting_period": "text",
        "quorum": "text",
        "threshold": "text",
        "veto_threshold": "text",
        "min_initial_deposit_ratio": "text",
        "proposal_cancel_ratio": "text",
        "proposal_cancel_dest": "text",
        "expedited_voting_period": "text",
        "expedited_threshold": "text",
        "expedited_min_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "burn_vote_quorum": true,
        "burn_proposal_deposit_prevote": true,
        "burn_vote_veto": true,
        "min_deposit_ratio": "text"
      }
    }
    {
      "proposals": [
        {
          "id": "text",
          "messages": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "status": "PROPOSAL_STATUS_UNSPECIFIED",
          "final_tally_result": {
            "yes_count": "text",
            "abstain_count": "text",
            "no_count": "text",
            "no_with_veto_count": "text"
          },
          "submit_time": "2025-12-10T00:33:44.342Z",
          "deposit_end_time": "2025-12-10T00:33:44.342Z",
          "total_deposit": [
            {
              "denom": "text",
              "amount": "text"
            }
          ],
          "voting_start_time": "2025-12-10T00:33:44.342Z",
          "voting_end_time": "2025-12-10T00:33:44.342Z",
          "metadata": "text",
          "title": "text",
          "summary": "text",
          "proposer": "text",
          "expedited": true,
          "failed_reason": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "proposal": {
        "id": "text",
        "messages": [
          {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        ],
        "status": "PROPOSAL_STATUS_UNSPECIFIED",
        "final_tally_result": {
          "yes_count": "text",
          "abstain_count": "text",
          "no_count": "text",
          "no_with_veto_count": "text"
        },
        "submit_time": "2025-12-10T00:33:44.342Z",
        "deposit_end_time": "2025-12-10T00:33:44.342Z",
        "total_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "voting_start_time": "2025-12-10T00:33:44.342Z",
        "voting_end_time": "2025-12-10T00:33:44.342Z",
        "metadata": "text",
        "title": "text",
        "summary": "text",
        "proposer": "text",
        "expedited": true,
        "failed_reason": "text"
      }
    }
    {
      "deposits": [
        {
          "proposal_id": "text",
          "depositor": "text",
          "amount": [
            {
              "denom": "text",
              "amount": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "deposit": {
        "proposal_id": "text",
        "depositor": "text",
        "amount": [
          {
            "denom": "text",
            "amount": "text"
          }
        ]
      }
    }
    {
      "tally": {
        "yes_count": "text",
        "abstain_count": "text",
        "no_count": "text",
        "no_with_veto_count": "text"
      }
    }
    {
      "votes": [
        {
          "proposal_id": "text",
          "voter": "text",
          "options": [
            {
              "option": "VOTE_OPTION_UNSPECIFIED",
              "weight": "text"
            }
          ],
          "metadata": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "vote": {
        "proposal_id": "text",
        "voter": "text",
        "options": [
          {
            "option": "VOTE_OPTION_UNSPECIFIED",
            "weight": "text"
          }
        ],
        "metadata": "text"
      }
    }
    {
      "proposals": [
        {
          "proposal_id": "text",
          "content": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "status": "PROPOSAL_STATUS_UNSPECIFIED",
          "final_tally_result": {
            "yes": "text",
            "abstain": "text",
            "no": "text",
            "no_with_veto": "text"
          },
          "submit_time": "2025-12-10T00:33:44.342Z",
          "deposit_end_time": "2025-12-10T00:33:44.342Z",
          "total_deposit": [
            {
              "denom": "text",
              "amount": "text"
            }
          ],
          "voting_start_time": "2025-12-10T00:33:44.342Z",
          "voting_end_time": "2025-12-10T00:33:44.342Z"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "proposal": {
        "proposal_id": "text",
        "content": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "status": "PROPOSAL_STATUS_UNSPECIFIED",
        "final_tally_result": {
          "yes": "text",
          "abstain": "text",
          "no": "text",
          "no_with_veto": "text"
        },
        "submit_time": "2025-12-10T00:33:44.342Z",
        "deposit_end_time": "2025-12-10T00:33:44.342Z",
        "total_deposit": [
          {
            "denom": "text",
            "amount": "text"
          }
        ],
        "voting_start_time": "2025-12-10T00:33:44.342Z",
        "voting_end_time": "2025-12-10T00:33:44.342Z"
      }
    }
    {
      "deposits": [
        {
          "proposal_id": "text",
          "depositor": "text",
          "amount": [
            {
              "denom": "text",
              "amount": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "deposit": {
        "proposal_id": "text",
        "depositor": "text",
        "amount": [
          {
            "denom": "text",
            "amount": "text"
          }
        ]
      }
    }
    {
      "tally": {
        "yes": "text",
        "abstain": "text",
        "no": "text",
        "no_with_veto": "text"
      }
    }
    {
      "votes": [
        {
          "proposal_id": "text",
          "voter": "text",
          "option": "VOTE_OPTION_UNSPECIFIED",
          "options": [
            {
              "option": "VOTE_OPTION_UNSPECIFIED",
              "weight": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "vote": {
        "proposal_id": "text",
        "voter": "text",
        "option": "VOTE_OPTION_UNSPECIFIED",
        "options": [
          {
            "option": "VOTE_OPTION_UNSPECIFIED",
            "weight": "text"
          }
        ]
      }
    }
    {
      "constitution": "text"
    }
    GET /cosmos/gov/v1beta1/params/{params_type} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/params/{params_type} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id}/deposits HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id}/tally HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id}/votes HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals/{proposal_id}/votes/{voter} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id}/tally HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/constitution HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1/proposals HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/gov/v1beta1/proposals HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "unbonding_time": "text",
        "max_validators": 1,
        "max_entries": 1,
        "historical_entries": 1,
        "bond_denom": "text",
        "min_commission_rate": "text"
      }
    }
    {
      "delegation_responses": [
        {
          "delegation": {
            "delegator_address": "text",
            "validator_address": "text",
            "shares": "text"
          },
          "balance": {
            "denom": "text",
            "amount": "text"
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "redelegation_responses": [
        {
          "redelegation": {
            "delegator_address": "text",
            "validator_src_address": "text",
            "validator_dst_address": "text",
            "entries": [
              {
                "creation_height": "text",
                "completion_time": "2025-12-10T00:33:44.342Z",
                "initial_balance": "text",
                "shares_dst": "text",
                "unbonding_id": "text",
                "unbonding_on_hold_ref_count": "text"
              }
            ]
          },
          "entries": [
            {
              "redelegation_entry": {
                "creation_height": "text",
                "completion_time": "2025-12-10T00:33:44.342Z",
                "initial_balance": "text",
                "shares_dst": "text",
                "unbonding_id": "text",
                "unbonding_on_hold_ref_count": "text"
              },
              "balance": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "unbonding_responses": [
        {
          "delegator_address": "text",
          "validator_address": "text",
          "entries": [
            {
              "creation_height": "text",
              "completion_time": "2025-12-10T00:33:44.342Z",
              "initial_balance": "text",
              "balance": "text",
              "unbonding_id": "text",
              "unbonding_on_hold_ref_count": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "validators": [
        {
          "operator_address": "text",
          "consensus_pubkey": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "jailed": true,
          "status": "BOND_STATUS_UNSPECIFIED",
          "tokens": "text",
          "delegator_shares": "text",
          "description": {
            "moniker": "text",
            "identity": "text",
            "website": "text",
            "security_contact": "text",
            "details": "text"
          },
          "unbonding_height": "text",
          "unbonding_time": "2025-12-10T00:33:44.342Z",
          "commission": {
            "commission_rates": {
              "rate": "text",
              "max_rate": "text",
              "max_change_rate": "text"
            },
            "update_time": "2025-12-10T00:33:44.342Z"
          },
          "min_self_delegation": "text",
          "unbonding_on_hold_ref_count": "text",
          "unbonding_ids": [
            "text"
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "validator": {
        "operator_address": "text",
        "consensus_pubkey": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "jailed": true,
        "status": "BOND_STATUS_UNSPECIFIED",
        "tokens": "text",
        "delegator_shares": "text",
        "description": {
          "moniker": "text",
          "identity": "text",
          "website": "text",
          "security_contact": "text",
          "details": "text"
        },
        "unbonding_height": "text",
        "unbonding_time": "2025-12-10T00:33:44.342Z",
        "commission": {
          "commission_rates": {
            "rate": "text",
            "max_rate": "text",
            "max_change_rate": "text"
          },
          "update_time": "2025-12-10T00:33:44.342Z"
        },
        "min_self_delegation": "text",
        "unbonding_on_hold_ref_count": "text",
        "unbonding_ids": [
          "text"
        ]
      }
    }
    {
      "hist": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "Ynl0ZXM="
        },
        "valset": [
          {
            "operator_address": "text",
            "consensus_pubkey": {
              "type_url": "text",
              "value": "Ynl0ZXM="
            },
            "jailed": true,
            "status": "BOND_STATUS_UNSPECIFIED",
            "tokens": "text",
            "delegator_shares": "text",
            "description": {
              "moniker": "text",
              "identity": "text",
              "website": "text",
              "security_contact": "text",
              "details": "text"
            },
            "unbonding_height": "text",
            "unbonding_time": "2025-12-10T00:33:44.342Z",
            "commission": {
              "commission_rates": {
                "rate": "text",
                "max_rate": "text",
                "max_change_rate": "text"
              },
              "update_time": "2025-12-10T00:33:44.342Z"
            },
            "min_self_delegation": "text",
            "unbonding_on_hold_ref_count": "text",
            "unbonding_ids": [
              "text"
            ]
          }
        ]
      }
    }
    {
      "pool": {
        "not_bonded_tokens": "text",
        "bonded_tokens": "text"
      }
    }
    {
      "validators": [
        {
          "operator_address": "text",
          "consensus_pubkey": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "jailed": true,
          "status": "BOND_STATUS_UNSPECIFIED",
          "tokens": "text",
          "delegator_shares": "text",
          "description": {
            "moniker": "text",
            "identity": "text",
            "website": "text",
            "security_contact": "text",
            "details": "text"
          },
          "unbonding_height": "text",
          "unbonding_time": "2025-12-10T00:33:44.342Z",
          "commission": {
            "commission_rates": {
              "rate": "text",
              "max_rate": "text",
              "max_change_rate": "text"
            },
            "update_time": "2025-12-10T00:33:44.342Z"
          },
          "min_self_delegation": "text",
          "unbonding_on_hold_ref_count": "text",
          "unbonding_ids": [
            "text"
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "validator": {
        "operator_address": "text",
        "consensus_pubkey": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "jailed": true,
        "status": "BOND_STATUS_UNSPECIFIED",
        "tokens": "text",
        "delegator_shares": "text",
        "description": {
          "moniker": "text",
          "identity": "text",
          "website": "text",
          "security_contact": "text",
          "details": "text"
        },
        "unbonding_height": "text",
        "unbonding_time": "2025-12-10T00:33:44.342Z",
        "commission": {
          "commission_rates": {
            "rate": "text",
            "max_rate": "text",
            "max_change_rate": "text"
          },
          "update_time": "2025-12-10T00:33:44.342Z"
        },
        "min_self_delegation": "text",
        "unbonding_on_hold_ref_count": "text",
        "unbonding_ids": [
          "text"
        ]
      }
    }
    {
      "delegation_responses": [
        {
          "delegation": {
            "delegator_address": "text",
            "validator_address": "text",
            "shares": "text"
          },
          "balance": {
            "denom": "text",
            "amount": "text"
          }
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "delegation_response": {
        "delegation": {
          "delegator_address": "text",
          "validator_address": "text",
          "shares": "text"
        },
        "balance": {
          "denom": "text",
          "amount": "text"
        }
      }
    }
    {
      "unbond": {
        "delegator_address": "text",
        "validator_address": "text",
        "entries": [
          {
            "creation_height": "text",
            "completion_time": "2025-12-10T00:33:44.342Z",
            "initial_balance": "text",
            "balance": "text",
            "unbonding_id": "text",
            "unbonding_on_hold_ref_count": "text"
          }
        ]
      }
    }
    {
      "unbonding_responses": [
        {
          "delegator_address": "text",
          "validator_address": "text",
          "entries": [
            {
              "creation_height": "text",
              "completion_time": "2025-12-10T00:33:44.342Z",
              "initial_balance": "text",
              "balance": "text",
              "unbonding_id": "text",
              "unbonding_on_hold_ref_count": "text"
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/staking/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/historical_info/{height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/pool HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators/{validator_addr} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/delegations/{delegator_addr} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "params": {
        "community_tax": "text",
        "base_proposer_reward": "text",
        "bonus_proposer_reward": "text",
        "withdraw_addr_enabled": true
      }
    }
    {
      "validators": [
        "text"
      ]
    }
    {
      "operator_address": "text",
      "self_bond_rewards": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "commission": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "pool": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "rewards": [
        {
          "validator_address": "text",
          "reward": [
            {
              "denom": "text",
              "amount": "text"
            }
          ]
        }
      ],
      "total": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "rewards": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
    {
      "withdraw_address": "text"
    }
    {
      "commission": {
        "commission": [
          {
            "denom": "text",
            "amount": "text"
          }
        ]
      }
    }
    {
      "rewards": {
        "rewards": [
          {
            "denom": "text",
            "amount": "text"
          }
        ]
      }
    }
    {
      "slashes": [
        {
          "validator_period": "text",
          "fraction": "text"
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    GET /cosmos/distribution/v1beta1/params HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/validators/{validator_address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/community_pool HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/validators/{validator_address}/commission HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    GET /cosmos/distribution/v1beta1/validators/{validator_address}/slashes HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    {
      "tx": {
        "body": {
          "messages": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "memo": "text",
          "timeout_height": "text",
          "extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "non_critical_extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ]
        },
        "auth_info": {
          "signer_infos": [
            {
              "public_key": {
                "type_url": "text",
                "value": "Ynl0ZXM="
              },
              "mode_info": {
                "single": {
                  "mode": "SIGN_MODE_UNSPECIFIED"
                },
                "multi": "[Circular Reference]"
              },
              "sequence": "text"
            }
          ],
          "fee": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "gas_limit": "text",
            "payer": "text",
            "granter": "text"
          },
          "tip": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "tipper": "text"
          }
        },
        "signatures": [
          "Ynl0ZXM="
        ]
      }
    }
    {
      "tx_bytes": "Ynl0ZXM="
    }
    {
      "amino_json": "text"
    }
    {
      "amino_binary": "Ynl0ZXM="
    }
    {
      "txs": [
        {
          "body": {
            "messages": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ],
            "memo": "text",
            "timeout_height": "text",
            "extension_options": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ],
            "non_critical_extension_options": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ]
          },
          "auth_info": {
            "signer_infos": [
              {
                "public_key": {
                  "type_url": "text",
                  "value": "Ynl0ZXM="
                },
                "mode_info": "[Circular Reference]",
                "sequence": "text"
              }
            ],
            "fee": {
              "amount": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "gas_limit": "text",
              "payer": "text",
              "granter": "text"
            },
            "tip": {
              "amount": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "tipper": "text"
            }
          },
          "signatures": [
            "Ynl0ZXM="
          ]
        }
      ],
      "tx_responses": [
        {
          "height": "text",
          "txhash": "text",
          "codespace": "text",
          "code": 1,
          "data": "text",
          "raw_log": "text",
          "logs": [
            {
              "msg_index": 1,
              "log": "text",
              "events": [
                {
                  "type": "text",
                  "attributes": [
                    {
                      "key": "text",
                      "value": "text"
                    }
                  ]
                }
              ]
            }
          ],
          "info": "text",
          "gas_wanted": "text",
          "gas_used": "text",
          "tx": {
            "type_url": "text",
            "value": "Ynl0ZXM="
          },
          "timestamp": "text",
          "events": [
            {
              "type": "text",
              "attributes": [
                {
                  "key": "text",
                  "value": "text",
                  "index": true
                }
              ]
            }
          ]
        }
      ],
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      },
      "total": "text"
    }
    {
      "tx": {
        "body": {
          "messages": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "memo": "text",
          "timeout_height": "text",
          "extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "non_critical_extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ]
        },
        "auth_info": {
          "signer_infos": [
            {
              "public_key": {
                "type_url": "text",
                "value": "Ynl0ZXM="
              },
              "mode_info": {
                "single": {
                  "mode": "SIGN_MODE_UNSPECIFIED"
                },
                "multi": "[Circular Reference]"
              },
              "sequence": "text"
            }
          ],
          "fee": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "gas_limit": "text",
            "payer": "text",
            "granter": "text"
          },
          "tip": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "tipper": "text"
          }
        },
        "signatures": [
          "Ynl0ZXM="
        ]
      },
      "tx_response": {
        "height": "text",
        "txhash": "text",
        "codespace": "text",
        "code": 1,
        "data": "text",
        "raw_log": "text",
        "logs": [
          {
            "msg_index": 1,
            "log": "text",
            "events": [
              {
                "type": "text",
                "attributes": [
                  {
                    "key": "text",
                    "value": "text"
                  }
                ]
              }
            ]
          }
        ],
        "info": "text",
        "gas_wanted": "text",
        "gas_used": "text",
        "tx": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "timestamp": "text",
        "events": [
          {
            "type": "text",
            "attributes": [
              {
                "key": "text",
                "value": "text",
                "index": true
              }
            ]
          }
        ]
      }
    }
    {
      "tx_response": {
        "height": "text",
        "txhash": "text",
        "codespace": "text",
        "code": 1,
        "data": "text",
        "raw_log": "text",
        "logs": [
          {
            "msg_index": 1,
            "log": "text",
            "events": [
              {
                "type": "text",
                "attributes": [
                  {
                    "key": "text",
                    "value": "text"
                  }
                ]
              }
            ]
          }
        ],
        "info": "text",
        "gas_wanted": "text",
        "gas_used": "text",
        "tx": {
          "type_url": "text",
          "value": "Ynl0ZXM="
        },
        "timestamp": "text",
        "events": [
          {
            "type": "text",
            "attributes": [
              {
                "key": "text",
                "value": "text",
                "index": true
              }
            ]
          }
        ]
      }
    }
    {
      "txs": [
        {
          "body": {
            "messages": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ],
            "memo": "text",
            "timeout_height": "text",
            "extension_options": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ],
            "non_critical_extension_options": [
              {
                "type_url": "text",
                "value": "Ynl0ZXM="
              }
            ]
          },
          "auth_info": {
            "signer_infos": [
              {
                "public_key": {
                  "type_url": "text",
                  "value": "Ynl0ZXM="
                },
                "mode_info": "[Circular Reference]",
                "sequence": "text"
              }
            ],
            "fee": {
              "amount": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "gas_limit": "text",
              "payer": "text",
              "granter": "text"
            },
            "tip": {
              "amount": [
                {
                  "denom": "text",
                  "amount": "text"
                }
              ],
              "tipper": "text"
            }
          },
          "signatures": [
            "Ynl0ZXM="
          ]
        }
      ],
      "block_id": {
        "hash": "Ynl0ZXM=",
        "part_set_header": {
          "total": 1,
          "hash": "Ynl0ZXM="
        }
      },
      "block": {
        "header": {
          "version": {
            "block": "text",
            "app": "text"
          },
          "chain_id": "text",
          "height": "text",
          "time": "2025-12-10T00:33:44.342Z",
          "last_block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "last_commit_hash": "Ynl0ZXM=",
          "data_hash": "Ynl0ZXM=",
          "validators_hash": "Ynl0ZXM=",
          "next_validators_hash": "Ynl0ZXM=",
          "consensus_hash": "Ynl0ZXM=",
          "app_hash": "Ynl0ZXM=",
          "last_results_hash": "Ynl0ZXM=",
          "evidence_hash": "Ynl0ZXM=",
          "proposer_address": "Ynl0ZXM="
        },
        "data": {
          "txs": [
            "Ynl0ZXM="
          ]
        },
        "evidence": {
          "evidence": [
            {
              "duplicate_vote_evidence": {
                "vote_a": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "vote_b": {
                  "type": "SIGNED_MSG_TYPE_UNKNOWN",
                  "height": "text",
                  "round": 1,
                  "block_id": {
                    "hash": "Ynl0ZXM=",
                    "part_set_header": {
                      "total": 1,
                      "hash": "Ynl0ZXM="
                    }
                  },
                  "timestamp": "2025-12-10T00:33:44.342Z",
                  "validator_address": "Ynl0ZXM=",
                  "validator_index": 1,
                  "signature": "Ynl0ZXM=",
                  "extension": "Ynl0ZXM=",
                  "extension_signature": "Ynl0ZXM="
                },
                "total_voting_power": "text",
                "validator_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              },
              "light_client_attack_evidence": {
                "conflicting_block": {
                  "signed_header": {
                    "header": {
                      "version": {
                        "block": "text",
                        "app": "text"
                      },
                      "chain_id": "text",
                      "height": "text",
                      "time": "2025-12-10T00:33:44.342Z",
                      "last_block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "last_commit_hash": "Ynl0ZXM=",
                      "data_hash": "Ynl0ZXM=",
                      "validators_hash": "Ynl0ZXM=",
                      "next_validators_hash": "Ynl0ZXM=",
                      "consensus_hash": "Ynl0ZXM=",
                      "app_hash": "Ynl0ZXM=",
                      "last_results_hash": "Ynl0ZXM=",
                      "evidence_hash": "Ynl0ZXM=",
                      "proposer_address": "Ynl0ZXM="
                    },
                    "commit": {
                      "height": "text",
                      "round": 1,
                      "block_id": {
                        "hash": "Ynl0ZXM=",
                        "part_set_header": {
                          "total": 1,
                          "hash": "Ynl0ZXM="
                        }
                      },
                      "signatures": [
                        {
                          "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
                          "validator_address": "Ynl0ZXM=",
                          "timestamp": "2025-12-10T00:33:44.342Z",
                          "signature": "Ynl0ZXM="
                        }
                      ]
                    }
                  },
                  "validator_set": {
                    "validators": [
                      {
                        "address": "Ynl0ZXM=",
                        "pub_key": {
                          "ed25519": "Ynl0ZXM=",
                          "secp256k1": "Ynl0ZXM="
                        },
                        "voting_power": "text",
                        "proposer_priority": "text"
                      }
                    ],
                    "proposer": {
                      "address": "Ynl0ZXM=",
                      "pub_key": {
                        "ed25519": "Ynl0ZXM=",
                        "secp256k1": "Ynl0ZXM="
                      },
                      "voting_power": "text",
                      "proposer_priority": "text"
                    },
                    "total_voting_power": "text"
                  }
                },
                "common_height": "text",
                "byzantine_validators": [
                  {
                    "address": "Ynl0ZXM=",
                    "pub_key": {
                      "ed25519": "Ynl0ZXM=",
                      "secp256k1": "Ynl0ZXM="
                    },
                    "voting_power": "text",
                    "proposer_priority": "text"
                  }
                ],
                "total_voting_power": "text",
                "timestamp": "2025-12-10T00:33:44.342Z"
              }
            }
          ]
        },
        "last_commit": {
          "height": "text",
          "round": 1,
          "block_id": {
            "hash": "Ynl0ZXM=",
            "part_set_header": {
              "total": 1,
              "hash": "Ynl0ZXM="
            }
          },
          "signatures": [
            {
              "block_id_flag": "BLOCK_ID_FLAG_UNKNOWN",
              "validator_address": "Ynl0ZXM=",
              "timestamp": "2025-12-10T00:33:44.342Z",
              "signature": "Ynl0ZXM="
            }
          ]
        }
      },
      "pagination": {
        "next_key": "Ynl0ZXM=",
        "total": "text"
      }
    }
    {
      "gas_info": {
        "gas_wanted": "text",
        "gas_used": "text"
      },
      "result": {
        "data": "Ynl0ZXM=",
        "log": "text",
        "events": [
          {
            "type": "text",
            "attributes": [
              {
                "key": "text",
                "value": "text",
                "index": true
              }
            ]
          }
        ],
        "msg_responses": [
          {
            "type_url": "text",
            "value": "Ynl0ZXM="
          }
        ]
      }
    }
    POST /cosmos/tx/v1beta1/decode HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 23
    
    {
      "tx_bytes": "Ynl0ZXM="
    }
    POST /cosmos/tx/v1beta1/encode HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 629
    
    {
      "tx": {
        "body": {
          "messages": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "memo": "text",
          "timeout_height": "text",
          "extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "non_critical_extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ]
        },
        "auth_info": {
          "signer_infos": [
            {
              "public_key": {
                "type_url": "text",
                "value": "Ynl0ZXM="
              },
              "mode_info": {
                "single": {
                  "mode": "SIGN_MODE_UNSPECIFIED"
                },
                "multi": "[Circular Reference]"
              },
              "sequence": "text"
            }
          ],
          "fee": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "gas_limit": "text",
            "payer": "text",
            "granter": "text"
          },
          "tip": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "tipper": "text"
          }
        },
        "signatures": [
          "Ynl0ZXM="
        ]
      }
    }
    POST /cosmos/tx/v1beta1/decode/amino HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 27
    
    {
      "amino_binary": "Ynl0ZXM="
    }
    POST /cosmos/tx/v1beta1/encode/amino HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 21
    
    {
      "amino_json": "text"
    }
    GET /cosmos/tx/v1beta1/txs/{hash} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    POST /cosmos/tx/v1beta1/txs HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 59
    
    {
      "tx_bytes": "Ynl0ZXM=",
      "mode": "BROADCAST_MODE_UNSPECIFIED"
    }
    GET /cosmos/tx/v1beta1/txs/block/{height} HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*
    
    POST /cosmos/tx/v1beta1/simulate HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Content-Type: application/json
    Accept: */*
    Content-Length: 651
    
    {
      "tx": {
        "body": {
          "messages": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "memo": "text",
          "timeout_height": "text",
          "extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ],
          "non_critical_extension_options": [
            {
              "type_url": "text",
              "value": "Ynl0ZXM="
            }
          ]
        },
        "auth_info": {
          "signer_infos": [
            {
              "public_key": {
                "type_url": "text",
                "value": "Ynl0ZXM="
              },
              "mode_info": {
                "single": {
                  "mode": "SIGN_MODE_UNSPECIFIED"
                },
                "multi": "[Circular Reference]"
              },
              "sequence": "text"
            }
          ],
          "fee": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "gas_limit": "text",
            "payer": "text",
            "granter": "text"
          },
          "tip": {
            "amount": [
              {
                "denom": "text",
                "amount": "text"
              }
            ],
            "tipper": "text"
          }
        },
        "signatures": [
          "Ynl0ZXM="
        ]
      },
      "tx_bytes": "Ynl0ZXM="
    }
    GET /cosmos/tx/v1beta1/txs HTTP/1.1
    Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
    Accept: */*