Only this pageAll pages
Powered by GitBook
1 of 98

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...

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...

Tokenomics

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.

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.

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 on-chain 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.

Getting Started

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. KIIEX Benefits: KII holders 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. KIIEX 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 KIIEX: 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.

Evergreen Model

KII has designed a sustainable rewards model where network participants can reap the rewards of the Kii Global 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.

EVM

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.

Mobile Wallets

Download and set up our Kii Mobile wallet from the App Store or Google Play. Mobile apps allow users to send and receive KII and stake their KII to a validator of their choice.

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 TradFi 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.

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 on-chain 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 on-chain, 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.

KIIEX 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. 💰💸

Kiichain

Cosmos

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

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.

FeeMarket

Roadmap

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

2022:

Inception. Internal building. OTC trading.

2023:

Q1: KiiChain Dev Net.

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

Q3: KIIEX Beta was launched, testing trading and payments in mainnet in a whitelisted environment (over $50m in total volume). Achieved positive EBIDTA 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 on-chain tasks and partnerships ().

  • Public sale, listing and mainnet.

  • PayFi module integration with mainnet.

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

  • KIIDEX integration into KIIEX with listing of RWA products.

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

  • IBC and Wasm upgrades.

  • ICS module with dual staking.

Q3:

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

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

  • KIIEX API integrations for 30+ countries.

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

Q4:

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

  • On-chain invoice factoring and financing.

  • SVM module.

What is KIIEX?

KIIEX is a hybrid centralized-decentralized exchange platform designed for on-chain FX trading, cross-border payments and finance solutions.

What is KIIEX

KIIEX is an on-chain FX desk powering global payments, trading and finance solutions in an easy to use platform designed for everyone. Users, businesses or builders can use KIIEX by signing up for an account or connecting to APIs. KIIEX differs from other traditional platforms by its hybrid approach of sourcing liquidity and maintaining balances on-chain exposed to local currencies. KIIEX 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 KIIEX is a hybrid matching engine that is able to source on-chain liquidity across any blockchain ecosystem while using centralized pricing to hedge and rebalance on-chain positions. The result is a ultra-liquid layer that can operate 24/7 on certain pairs that only have liquidity during traditional business hours.

Ramps

KIIEX 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-pary accounts while remaining 100% compliant.

Connect to APIs

KIIEX 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 informaiton on the APIs, visit:

KYC / AML

KIIEX is fully compliant within each jurisdiction. Users must adhere to KYC and AML standards and requirements.

What is KiiChain?

KiiChain is the first 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 KIIEX

KIIEX is a cross-border payment and trading platform 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. We envision the Cosmos SDK as the npm-like framework to build secure blockchain applications on top of CometBFT. 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 & Tendermint Core

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.

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 on-chain 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 on-chain 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 weeks.

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 .

Coin Unlocking Schedule

Whitepaper

The latest version of the KiiChain Whitepaper.

Slashing

Authentication

Endpoints for user authentication.

Bank

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:

Developer Tools

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

Protocols

Kii protocols can be found at these links:

Endpoints

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

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.

System

System-level endpoints used by trading and operator roles.

ERC20

Tendermint

Evidence

https://k
iiex
App Store Reference
kii Github
(kii2 Github
kiichain Github
https://kiichain.io/testnet
KIIEX APIs
here
here
here
515KB
KiiChain Whitepaper.pdf
pdf
Testnet Oro
Rust SDK
JS/TS SDK
RWA Protocol
Endpoints
Discord Kiichain invite

Intro Coin Details

Coin Details

Detail
Amount

Ticker

KII

Max Supply

1,800,000,000

Initial Circulating Supply

180,000,000

No minting or burning.

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.

  • Testnet explorer app

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:

$request {address}

Example EVM:

$request Ox12345abcde…

Example CW:

$request kii12345abcde…

List of Commands:

See all available commands:

$help

Request tokens:

$request [kii address]

Query an address balance:

$balance [kii address]

Query a transaction:

$tx_info [transaction hash ID]

Query the faucet and node status:

$faucet_status [chain ID]

Query the faucet address:

$faucet_address [chain ID]

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.

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.

Endpoints - Cosmos

Endpoints for Testnet Oro

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:

kiichaind keys add <key_name> \
  --keyring-backend test \
  --recover \
  --coin-type 118 \
  --key-type secp256k1
  • 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.

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

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.

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.

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.

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.

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.

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.

Developer Tools

Build on the ecosystem.

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

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 KIIEX 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.

Cosmwasm

Authz

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

Gov

User

Endpoints related to user actions.

Upgrade

Staking

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 app.kiiglobal.io

Example of Staking page
Example of validator profile

Tx

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 MetaMask or Keplr. During testnet, if you do not have MetaMask installed first, you will receive this error.

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 Wallett". 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.

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

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

Typescript support for KiiChain protofiles, generated with Telescope

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

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 Code of Conduct. By participating, you are expected to uphold this code.

Contribution Guidelines

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

Issues, Questions and Discussions

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

License

The KiiPy project is licensed under Apache License 2.0.

Auth

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

  2. Create a Signature

  3. 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 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.

Set up your KIIEX 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 ❤️

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 .

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 though 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: .

Consensus

IBC

TokenFactory

@kiichain/kiijs-evm
@kiichain/kiijs-proto
@kiichain/kiijs-utils

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

MetaMask
Kiichain Testnet Page
Explorer App
Chain lists
Testnet Tokens

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. Kelpr supports wallets in Chrome, Firefox and Edge.

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

Get Testnet tokens

Testnet Oro tokens are available in our Discord faucet 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:

$request {address}

Example EVM:

$request Ox12345abcde…

Example Cosmos Address:

$request kii12345abcde…

The full list of commands are:

List commands:

$help

Request tokens:

$request [kii address]

Query an address balance:

$balance [kii address]

Query a transaction:

$tx_info [transaction hash ID]

Query the faucet and node status:

$faucet_status

Query the faucet address:

$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 here 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 here.

Quick start links:

  • Launch a node/full node/validator

  • Blockchain endpoints

  • Deploy a smart contract

  • dApp development

  • Testnet faucet

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 here.

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

You can find us on Discord:

  • Invitation link

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.

  • X Link

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:

  • Kiichain

Endpoints

Testnet Oro has the following endpoints open for development purposes:

Sentry #1:

  • RPC: https://rpc.uno.sentry.testnet.v3.kiivalidator.com/

  • Rest (LCD): https://lcd.uno.sentry.testnet.v3.kiivalidator.com/

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

  • JSON-RPC (EVM): https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/

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

Sentry #2:

  • RPC: https://rpc.dos.sentry.testnet.v3.kiivalidator.com/

  • Rest (LCD): https://lcd.dos.sentry.testnet.v3.kiivalidator.com/

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

  • JSON-RPC (EVM): https://json-rpc.dos.sentry.testnet.v3.kiivalidator.com/

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

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

  • EVM Chain ID: 1336

  • Bench32 Prefix: kii

How to chain the network

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

  • Step-by-Step Guide

Faucet

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

  • KiiChain Explorer Faucet

Our through our Discord channel:

  • Discord Kiichain Invitation

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

  • Testnet Faucet

Explorer

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

  • Testnet Oro Explorer

Developer Tools

You can find guides to the testnet at our Developer Tools:

  • RWA Protocol

  • Deploying a smart contract

  • Deploying a dApp

Endpoints

Rest endpoints for the testnet Oro can be found here:

  • Endpoints

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.

// CosmWasm based addresses
kii123abc...

// EVM based addresses
0x123abc...

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.

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

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

Interacting with precompiles

You can utilize direct json-rpc connections to those addresses. We also have a TS/JS library to help interact with them.

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.

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.

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.

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

  • 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.

Modules

Description of all the custom modules that makes Kiichain work

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.

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.

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.

  2. 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.

https://codebeautify.org/hmac-generator
Create API KEY
Create a Signature
Authenticate via API

Stablecoin FX Quick Start

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

Requirements to be able to trade stablecoins on KIIEX, 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 :

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

Prod URL :

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

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 KIIEX account:

    1. Go to https://kiiex.io/ and click on login, and create your user

      1. You can also follow our guide on Set up your KIIEX Account

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

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

Step-by-step

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

  1. Authenticate your user via api

    1. Authenticate your User via API

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

    1. Create Deposit

    2. POST /GetAccountPositions

  3. Get the current COPM/USDT rate

    1. Get Current Rate

  4. Create market order (buy COPM)

    1. Create a SWAP

  5. Verify order was filled

    1. Get SWAP status

  6. Get trade details (swap info)

    1. POST /GetTradesHistory

  7. Confirm the new COPM balance using the get account positions endpoint

    1. Get Account Balances

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

    1. Create a Withdrawal

  9. Check your COPM withdrawal status

    1. Check Withdrawal status

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

Models

VM

Distribution

Feegrant

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):

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.

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

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.

  • Special Q&A sessions with the KiiChain Core Team.

  • Early access to new features, tools, and campaigns.

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.

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

    • Complete and submit weekly tasks through our tracking system

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.

  • You repeatedly ignore or skip assigned tasks.

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.

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 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 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 or the on the forum.

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:

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 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.

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

yarn add @kiichain/kiijs-utils @kiichain/kiijs-proto
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)
Cosmovisor (opens new window)
CometBFT Documentation (opens new window)
Sentry Node Architecture Overview (opens new window)
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");
CosmWasm Docs
Hardhat Docs
# 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"
this yubikey library is available (opens new window)
https://discord.gg/kiichain

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 Cosmos EVM implementation.

Overview

The evm module provides:

  • 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:

kiichaind query evm code [address]
# Example:
kiichaind query evm code 0x7bf7b17da59880d9bcca24915679668db75f9397
  • Query Storage:

kiichaind query evm storage [address] [key] [flags]
# Example:
kiichaind query evm storage 0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0 0 --height 0
  • Submit Raw Ethereum Transaction:

kiichaind tx evm raw [tx_hex]
# Example:
kiichaind tx evm raw 0xf9ff74c86aefeb5f6019d77280bbb44fb695b4d45cfe97e6eed7acd62905f4a85034d5c68ed25a2e7a8eeb9baf1b84

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.​

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./].

message MsgCreateDenom {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string subdenom = 2 [ (gogoproto.moretags) = "yaml:\"subdenom\"" ];
}

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.

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

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.

message MsgMint {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}

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 bank module

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.

message MsgBurn {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.base.v1beta1.Coin amount = 2 [
    (gogoproto.moretags) = "yaml:\"amount\"",
    (gogoproto.nullable) = false
  ];
}

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 bank module

ChangeAdmin

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

message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  string denom = 2 [ (gogoproto.moretags) = "yaml:\"denom\"" ];
  string newAdmin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ];
}

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.

message MsgChangeAdmin {
  string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
  cosmos.bank.v1beta1.Metadata metadata = 2 [ (gogoproto.moretags) = "yaml:\"metadata\"", (gogoproto.nullable)   = false ];
}

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

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:

kiichaind keys add $VALIDATOR_KEY_NAME

You will get an output such as:

- 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
  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:

kiichaind tendermint show-validator

To create a validator you can use the following command:

# 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

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.

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:

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"

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:

    • 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.

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:

kiichaind tx slashing unjail \
 --from=<key_name> \
 --chain-id=<chain_id>
 --gas="auto" \
 --gas-prices="1000000000akii"

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.

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

  • Github RWA Repo

  • 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

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(())
}

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.

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

    • 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)

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.

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)

  • Check the section 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 .

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
Binary Installation
Running a Validator
https://docs.google.com/forms/d/e/1FAIpQLSdugVWI9KSda6x5bQuA3erW_u8s2QDSFc7oNRANQjfVnbqjeg/viewformdocs.google.com
https://docs.google.com/forms/d/e/1FAIpQLSctquajIpdeaxEgL9oSmFQEpmDs1sNC6ACZUrCxhVdPus8d1w/viewformdocs.google.com

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.

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 .

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 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:

References

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"
becoming a validator
the price feeder
Cosmosvisor Quick Start
Binary Installation
Playbook For Cosmos Validators: Node Architecture Choices
Running a Validator
Playbook For Cosmos Validators: Node Architecture Choices
Cosmosvisor Quick Start
Join Testnet Oro
Join Testnet Oro CV

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.

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

KIIEX | Crypto Exchange

Kiijs-proto

@kiichain/kiijs-evm

install

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 . Continue below to see how to manually construct signers and clients.

Here are the docs on 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:

  • (recommended)

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

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
});
cosmos-kit
creating signers
cosmos-kit
keplr
cosmjs
Logo

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

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:

// 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\""];
}

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:

// 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

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:

// 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;
}

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:

// 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\""];
}

DelegateFeedConsent

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

// 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\""];
}

UpdateParams

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

// 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];
}

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

Deploy a smart contract

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

Chain Information

RPC URL:

Chain Id:

1336

Deploy with Hardhat

1. Install Hardhat

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

$ npm install --save-dev hardhat

2. Create a hardhat project

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

$ 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

3. Create a Smart contract and Compile protect

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

$ npx hardhat compile 

5. 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:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config: HardhatUserConfig = {
  solidity: "0.8.20", // Solidity Version
  networks: {
    kiichain: {
      url: "<https://a.sentry.testnet.kiivalidator.com:8645>",
      chainId: 123454321,
      accounts: [`0x${yourApiKey}`],
    },
  },
};

export default config;
$ npx hardhat ignition deploy ignition/modules/<contractName>.ts --network kiichain

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 is 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.

curl -L [<https://foundry.paradigm.xyz>](<https://foundry.paradigm.xyz/>) | bash

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

foundryup

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:

forge init projectName
cd projectName

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

// 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;
    }
}

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

// 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();
    }
}

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

forge build

3. Deploy

First, you need to run a simulation.

forge script script/Counter.s.sol:CounterScript --fork-url <https://a.sentry.testnet.kiivalidator.com:8645/> --private-key yourPrivateKey

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

forge script script/Counter.s.sol:CounterScript --fork-url <https://a.sentry.testnet.kiivalidator.com:8645/> --private-key yourPrivateKey --broadcast

A success message should appear.

Deploy with Thirdweb

In this example, we will create a ERC721 (Non fungible token).

1. Create an account

Create an account in thrirdweb, create an API key here, and link your wallet.

Storage the API key in a secure place.

2. Create a project

npx thirdweb create

A message appears

Need to install the following packages:
[email protected]
Ok to proceed? (y) y

After the installation this screen should appear, select “Contract”

    $$\\     $$\\       $$\\                 $$\\                         $$\\
    $$ |    $$ |      \\__|                $$ |                        $$ |
  $$$$$$\\   $$$$$$$\\  $$\\  $$$$$$\\   $$$$$$$ |$$\\  $$\\  $$\\  $$$$$$\\  $$$$$$$\\
  \\_$$  _|  $$  __$$\\ $$ |$$  __$$\\ $$  __$$ |$$ | $$ | $$ |$$  __$$\\ $$  __$$\\
    $$ |    $$ |  $$ |$$ |$$ |  \\__|$$ /  $$ |$$ | $$ | $$ |$$$$$$$$ |$$ |  $$ |
    $$ |$$\\ $$ |  $$ |$$ |$$ |      $$ |  $$ |$$ | $$ | $$ |$$   ____|$$ |  $$ |
    \\$$$$  |$$ |  $$ |$$ |$$ |      \\$$$$$$$ |\\$$$$$\\$$$$  |\\$$$$$$$\\ $$$$$$$  |
     \\____/ \\__|  \\__|\\__|\\__|       \\_______| \\_____\\____/  \\_______|\\_______/

 💎 thirdweb v0.14.12 💎

? What type of project do you want to create? » - Use arrow-keys. Return to submit.
    App
>   Contract
    Dynamic Contract Extension

Select the following options:

√ What type of project do you want to create? » Contract
√ What is your project named? ... ERC721-Example
√ What framework do you want to use? » Forge
√ What will be the name of your new smart contract? ... MyContract
√ What type of contract do you want to start from? » ERC721
√ What extensions do you want to add to your contract? » None

3. Write a smart contract and deploy

Enter the directory and run the following command:

cd erc721-example
npx thirdweb deploy -k yourApiKey

Open the link and fill in the fields.

In chain choose

add Custom Network

Finally, select Deploy Now and accept the transaction in your wallet.

Confirming Smart Contract on Explorer App

Remember that you can check the smart contracts Deployed here.

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.

Price feeder details

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 .

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:

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:

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

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:

  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

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

Acknowledgment

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

# 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
# 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"
The Price Feeder
The Price Feeder
Oracle module
Binance
MEXC
Coinbase
Gate
Huobi
Kraken
Okx
Run price feeder
Price feeder configuration
can be found here
Oracle definition by Kii team
Oracle definition by Cosmos
Run the price feeder
Price feeder README
Oracle module details
SEI's price-feeder
https://json-rpc.uno.sentry.testnet.v3.kiivalidator.com/

Authenticates a user for the current websocket session

post

Authenticates using either username/password or API key method.

Authorizations
Body
one ofOptional
Responses
200
Authentication result
application/json
400
Invalid authentication request format
401
Invalid credentials or token
post
POST /ap/AuthenticateUser HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 85

{
  "APIKey": "text",
  "Signature": "text",
  "UserId": "text",
  "UserName": "text",
  "Nonce": "text"
}
{
  "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"
}

Get a specific deposit ticket

post

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

Authorizations
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
POST /ap/GetDepositTicket HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 59

{
  "OMSId": 1,
  "AccountId": 1,
  "RequestCode": "text",
  "TicketId": 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-07-03T12:17:38.019Z",
  "lastUpdateTimeStamp": "2025-07-03T12:17:38.019Z",
  "comments": {},
  "attachments": {}
}

Get a list of deposit tickets for a specific account

post

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

Authorizations
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
POST /ap/GetDepositTickets HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 40

{
  "OMSId": 1,
  "OperatorId": 1,
  "AccountId": 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-07-03T12:17:38.019Z",
    "lastUpdateTimeStamp": "2025-07-03T12:17:38.019Z",
    "comments": {},
    "attachments": {}
  }
]

Get a specific withdraw ticket

post

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

Authorizations
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
POST /ap/GetWithdrawTicket HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 59

{
  "OMSId": 1,
  "AccountId": 1,
  "RequestCode": "text",
  "TicketId": 1
}
{
  "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-07-03T12:17:38.019Z",
  "lastUpdateTimestamp": "2025-07-03T12:17:38.019Z",
  "Comments": [
    {
      "commentId": 1,
      "enteredBy": 1,
      "enteredDateTime": "2025-07-03T12:17:38.019Z",
      "comment": "text",
      "operatorId": 1,
      "omsId": 1,
      "ticketCode": "text",
      "ticketId": 1
    }
  ],
  "Attachments": [
    {
      "attachmentId": 1,
      "submittedByUserId": 1,
      "submittedByUserName": "text",
      "uploadDate": "2025-07-03T12:17:38.019Z",
      "uploadIP": "text",
      "ticketNumber": 1
    }
  ],
  "AuditLog": [
    {}
  ]
}

Create a new deposit ticket

post

Creates a deposit ticket used to fund an account.

Authorizations
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
POST /ap/CreateDepositTicket HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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-07-03T12:17:38.019Z",
  "lastUpdateTimeStamp": "2025-07-03T12:17:38.019Z",
  "comments": {},
  "attachments": {}
}
{
  "success": true,
  "requestcode": "text"
}

Returns a single withdraw ticket by Verify Code

post

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

Authorizations
Body
OMSIdintegerRequired
VerifyCodestringRequired
Responses
200
A withdraw ticket object
application/json
400
Bad request
post
POST /ap/GetWithdrawTicketByVerifyCode HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 31

{
  "OMSId": 1,
  "VerifyCode": "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-07-03T12:17:38.019Z",
  "lastUpdateTimestamp": "2025-07-03T12:17:38.019Z",
  "Comments": [
    {
      "commentId": 1,
      "enteredBy": 1,
      "enteredDateTime": "2025-07-03T12:17:38.019Z",
      "comment": "text",
      "operatorId": 1,
      "omsId": 1,
      "ticketCode": "text",
      "ticketId": 1
    }
  ],
  "Attachments": [
    {
      "attachmentId": 1,
      "submittedByUserId": 1,
      "submittedByUserName": "text",
      "uploadDate": "2025-07-03T12:17:38.019Z",
      "uploadIP": "text",
      "ticketNumber": 1
    }
  ],
  "AuditLog": [
    {}
  ]
}

Retrieves Open Trade Reports for a specific account

get

Retrieves the Open Trade Reports, only Block Trades, for the given accountId. ReceiveTime in POSIX format × 1000 (milliseconds since 1 January 1970).

Authorizations
Body
OMSIdintegerOptional
AccountIdintegerOptional
Responses
200
A list of open trade reports
application/json
400
Invalid request parameters
401
Unauthorized access
get
GET /ap/GetOpenTradeReports HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 25

{
  "OMSId": 1,
  "AccountId": 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
  }
]

Retrieves Open Trade Reports for a specific instrument

get

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

Authorizations
Body
OMSIdintegerOptional
InstrumentIdintegerOptional
Responses
200
A list of open trade reports
application/json
400
Invalid request parameters
401
Unauthorized access
get
GET /ap/GetAllOpenTradeReports HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 28

{
  "OMSId": 1,
  "InstrumentId": 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
  }
]

Cancel and Replace Order

post

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

Authorizations
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
POST /ap/CancelReplaceOrder HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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
}
{
  "replacementOrderId": 1,
  "replacementClOrdId": 1,
  "origOrderId": 1,
  "origClOrdId": 1
}

Modify Order Quantity

post

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

Authorizations
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
POST /ap/ModifyOrder HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 93

{
  "OMSId": 1,
  "OrderId": 1,
  "InstrumentId": 1,
  "PreviousOrderRevision": 1,
  "Quantity": 1,
  "AccountId": 1
}
{
  "success": true,
  "requestcode": "text"
}

Cancel Order

post

Cancels an order using OrderId or ClientOrderId.

Authorizations
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
POST /ap/CancelOrder HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 51

{
  "OMSId": 1,
  "AccountId": 1,
  "OrderId": 1,
  "ClorderId": 1
}
{
  "success": true,
  "requestcode": "text"
}

Cancel All Orders

post

Cancels all active orders for a specified account and OMS.

Authorizations
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
POST /ap/CancelAllOrders HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 25

{
  "AccountId": 1,
  "OMSId": 1
}
{
  "success": true,
  "requestcode": "text"
}

Creates an order

post

Submits a new order with the specified parameters.

Authorizations
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
POST /ap/SendOrder HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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
}

Get a fee estimate for a withdrawal

post
Authorizations
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
POST /ap/GetWithdrawFee HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 72

{
  "OMSId": 1,
  "AccountId": 1,
  "ProductId": 1,
  "Amount": 1,
  "AccountProviderId": 1
}
{
  "FeeAmount": 1,
  "TicketAmount": 1
}

Gets a list of deposits for an Account

post
Authorizations
Body
OMSIdintegerRequired
AccountIdintegerRequired
DepthintegerOptional
Responses
200
A list of account deposit transactions
application/json
400
Bad Request
401
Unauthorized
post
POST /ap/GetAccountDepositTransactions HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 35

{
  "OMSId": 1,
  "AccountId": 1,
  "Depth": 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
  }
]

Gets a list of transactions for an Account

post
Authorizations
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
POST /ap/GetAccountTransactions HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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
  ]
}
[
  {
    "transactionId": 1,
    "omsId": 1,
    "accountId": 1,
    "cr": 1,
    "dr": 1,
    "counterparty": 1,
    "transactionType": 1,
    "referenceId": 1,
    "referenceType": 1,
    "productId": 1,
    "balance": 1,
    "timeStamp": 1
  }
]

Retrieves a list of orders for an account

post

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

Authorizations
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
POST /ap/GetOrderHistory HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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
}
[
  {
    "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
  }
]

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

post
Authorizations
Body
AccountIdintegerOptional
OMSIdintegerOptional
IncludePendingbooleanOptional
Responses
200
A list of account positions
application/json
400
Bad Request
401
Unauthorized
post
POST /ap/GetAccountPositions HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "AccountId": 1,
  "OMSId": 1,
  "IncludePending": true
}
[
  {
    "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
  }
]

Retrieves Trade History for a specific account.

post
Authorizations
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
POST /ap/GetAccountTrades HTTP/1.1
Host: apstage.proxy.kiiex.io
Authorization: Bearer JWT
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
}
[
  {
    "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
  }
]

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.

  • TypeScript for adding static types to JavaScript.

Create project

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

npx create-react-app kii-dapp --template typescript
cd kii-dapp

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:

code .

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:

npm i ethers

The version used in this tutorial is Ethers.js v6.

Coding the dApp

Create the Repository

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

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);
}

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

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;

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:

npm run start

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.

  3. 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."

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

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 Firebase Console.

    • Click on "Create a project".

    • Name your project and disable Google Analytics (optional for this tutorial).

    • Click "Continue" once the project is ready.

  2. Access Firebase Hosting:

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

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

Step 2: Initialize Firebase Hosting

  1. Install Firebase CLI:

    • Open your terminal and install Firebase CLI globally

      npm install -g firebase-tools
  2. Login and Initialize Firebase:

    • Inside your project directory, run

      firebase login
      firebase init
    • 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

    ? 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!

Step 3: Build and Deploy Your dApp

  1. Build the project:

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

      npm run build
  2. Deploy to Firebase

    • Deploy your built project to Firebase Hosting

      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>

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

Authenticate user session

post
Body
one ofOptional
Responses
200
Authentication result
application/json
post
POST /ap/AuthenticateUser HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 85

{
  "APIKey": "text",
  "Signature": "text",
  "UserId": "text",
  "UserName": "text",
  "Nonce": "text"
}
200

Authentication result

{
  "authenticated": true,
  "user": {
    "userId": 1,
    "userName": "text",
    "email": "text",
    "emailVerified": true,
    "accountId": 1,
    "omsId": 1,
    "use2FA": true
  }
}

Authenticate user session

post
Body
one ofOptional
Responses
200
Authentication result
application/json
post
POST /ap/AuthenticateUser HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 85

{
  "APIKey": "text",
  "Signature": "text",
  "UserId": "text",
  "UserName": "text",
  "Nonce": "text"
}
200

Authentication result

{
  "authenticated": true,
  "user": {
    "userId": 1,
    "userName": "text",
    "email": "text",
    "emailVerified": true,
    "accountId": 1,
    "omsId": 1,
    "use2FA": true
  }
}

Create a new deposit ticket

post
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
Responses
200
Deposit ticket creation result
application/json
post
POST /ap/CreateDepositTicket HTTP/1.1
Host: apstage.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-07-03T12:17:38.019Z",
  "lastUpdateTimestamp": "2025-07-03T12:17:38.019Z",
  "comments": "text",
  "attachments": "text"
}
200

Deposit ticket creation result

{
  "success": true,
  "requestcode": "text"
}

Get account positions (balances)

post
Body
AccountIdintegerOptional
OMSIdintegerOptional
IncludePendingbooleanOptional
Responses
200
Account balances
application/json
post
POST /ap/GetAccountPositions HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "AccountId": 1,
  "OMSId": 1,
  "IncludePending": true
}
200

Account balances

[
  {
    "omsId": 1,
    "accountId": 1,
    "productSymbol": "text",
    "productId": 1,
    "amount": 1,
    "hold": 1
  }
]

Get market snapshot

post
Body
OMSIdintegerOptional
BaseCurrencystringOptional
QuoteCurrencystringOptional
InstrumentIdsstringOptional
Responses
200
Market data snapshot
application/json
post
POST /ap/GetLevel1SummaryMin HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 79

{
  "OMSId": 1,
  "BaseCurrency": "text",
  "QuoteCurrency": "text",
  "InstrumentIds": "text"
}
200

Market data snapshot

[
  [
    "text"
  ]
]

Create a new order

post
Body
InstrumentIdintegerOptional
OMSIdintegerOptional
AccountIdintegerOptional
TimeInForceintegerOptional
ClientOrderIdintegerOptional
OrderIdOCOintegerOptional
UseDisplayQuantitybooleanOptional
SideintegerOptional
quantitynumberOptional
OrderTypeintegerOptional
PegPriceTypeintegerOptional
LimitPricenumberOptional
PostOnlybooleanOptional
Responses
200
Order status
application/json
post
POST /ap/SendOrder HTTP/1.1
Host: apstage.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
}
200

Order status

{
  "status": "text",
  "errormsg": "text",
  "OrderId": 1
}

Get single order status

post
Body
omsIdintegerOptional
accountIdintegerOptional
orderIdintegerOptional
Responses
200
Order status details
application/json
post
POST /ap/GetOrderStatus HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 37

{
  "omsId": 1,
  "accountId": 1,
  "orderId": 1
}
200

Order status details

{
  "OrderId": 1,
  "OrderState": "text",
  "QuantityExecuted": 1,
  "AvgPrice": 1
}

Get trades history

post
Body
omsIdintegerOptional
accountIdintegerOptional
instrumentIdintegerOptional
tradeIdintegerOptional
orderIdintegerOptional
userIdintegerOptional
startTimestampintegerOptional
endTimestampintegerOptional
depthintegerOptional
startIndexintegerOptional
executionIdintegerOptional
Responses
200
List of executed trades
application/json
post
POST /ap/GetTradesHistory HTTP/1.1
Host: apstage.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
}
200

List of executed trades

[
  {
    "tradeId": 1,
    "orderId": 1,
    "quantity": 1,
    "price": 1
  }
]

Initiates the withdrawal of funds from an account

post
Body
OMSIdintegerOptional
AccountIdintegerOptional
ProductIdintegerOptional
AmountnumberOptional
feeAmountnumberOptional
TemplateFormobjectOptional
TemplateTypestringOptional
Responses
200
Withdrawal request result
application/json
post
POST /ap/CreateWithdrawTicket HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 104

{
  "OMSId": 1,
  "AccountId": 1,
  "ProductId": 1,
  "Amount": 1,
  "feeAmount": 1,
  "TemplateForm": {},
  "TemplateType": "text"
}
200

Withdrawal request result

{
  "result": true,
  "errormsg": "text",
  "errorcode": 1,
  "detail": "text"
}

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

post
Body
OMSIdintegerOptional
AccountIdintegerOptional
StartIndexintegerOptional
LimitintegerOptional
Responses
200
List of withdraw tickets
application/json
post
POST /ap/GetWithdrawTickets HTTP/1.1
Host: apstage.proxy.kiiex.io
Content-Type: application/json
Accept: */*
Content-Length: 50

{
  "OMSId": 1,
  "AccountId": 1,
  "StartIndex": 1,
  "Limit": 1
}
200

List of withdraw tickets

[
  {
    "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-07-03T12:17:38.019Z",
    "lastUpdateTimestamp": "2025-07-03T12:17:38.019Z",
    "Comments": "text",
    "Attachments": "text",
    "AuditLog": "text"
  }
]

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

yarn add @kiichain/kiijs-evm ethers viem

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.

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");

An alternative without the popup is to directly use your private key to connect.

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);

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

Provides functionalities for checking balances and supply.

Facilitates conversion between hex address and bech32

Deals with reward distribution and related

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

Allows IBC transfers

Facilitates conversion between hex address and bech32

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

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

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 }]

Retrieves all the supplies from the chain

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.

import { HexToBech32, Bech32ToHex } from '@kiichain/kiijs-evm'

const kiiAddress = HexToBech32("0xyourhex")

const evmAddress = Bech32ToHex("kiiYouraddress)

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

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 }]

Gets all rewards for a delegator with totals

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

Precompile Addresses

0x0000000000000000000000000000000000000801

Evidence Precompile

The Evidence precompile contract provides functionalities for dealing with evidences.

Functions

Function Name
Input Parameters
Return Value
Description

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

Submits new evidence of validator equivocation

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

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, ... }

Returns governance parameters

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

Precompile Addresses

0x0000000000000000000000000000000000000805

IBC Precompile

Enables cross-chain token transfers via IBC with simplified parameters

Functions

Function Name
Input Parameters
Return Value
Description

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)

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

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

Reduces spend limit for a specific channel/denom

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

Precompile Addresses

0x0000000000000000000000000000000000000802

Slashing Precompile

Enables query, interaction and management of validator penalties.

Functions

Function Name
Input Parameters
Return Value
Description

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 }

Gets all validator signing info with pagination

unjail

validatorAddress: string (address)

success: boolean

Releases a validator from jail status

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

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

Cancels an unbonding delegation before completion

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

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

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)

Low-level contract query (returns raw bytes)

querySmart

contractAddress: string msg: bytes (JSON-encoded query)

data: bytes (JSON response)

Smart query (parses input/output as JSON)

Precompile Addresses

0x0000000000000000000000000000000000001001

Bank Precompile
Bech32 Precompile
Distribution Precompile
Governance Precompile
IBC Precompile
ICS20 Precompile
Slashing Precompile
Staking Precompile
Wasm Precompile

Params queries the parameters of x/feemarket module.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/evm/feemarket/v1/params 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"
  }
}

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
GET /cosmos/evm/feemarket/v1/base_fee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "base_fee": "text"
}

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
GET /cosmos/evm/feemarket/v1/block_gas HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "gas": "text"
}

Params queries the parameters of slashing module

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
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="
  }
}

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
GET /cosmos/slashing/v1beta1/signing_infos HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "info": [
    {
      "address": "text",
      "start_height": "text",
      "index_offset": "text",
      "jailed_until": "2025-07-03T12:17:38.019Z",
      "tombstoned": true,
      "missed_blocks_counter": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/slashing/v1beta1/signing_infos/{cons_address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "val_signing_info": {
    "address": "text",
    "start_height": "text",
    "index_offset": "text",
    "jailed_until": "2025-07-03T12:17:38.019Z",
    "tombstoned": true,
    "missed_blocks_counter": "text"
  }
}

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
GET /cosmos/bank/v1beta1/balances/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balances": [
    {
      "denom": "text",
      "amount": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/balances/{address}/by_denom HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balance": {
    "denom": "text",
    "amount": "text"
  }
}

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
GET /cosmos/bank/v1beta1/denom_owners/{denom} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denom_owners": [
    {
      "address": "text",
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/denom_owners_by_query HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denom_owners": [
    {
      "address": "text",
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/denoms_metadata HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /cosmos/bank/v1beta1/denoms_metadata/{denom} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "metadata": {
    "description": "text",
    "denom_units": [
      {
        "denom": "text",
        "exponent": 1,
        "aliases": [
          "text"
        ]
      }
    ],
    "base": "text",
    "display": "text",
    "name": "text",
    "symbol": "text",
    "uri": "text",
    "uri_hash": "text"
  }
}

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
GET /cosmos/bank/v1beta1/denoms_metadata_by_query_string HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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 queries the parameters of x/bank module.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/bank/v1beta1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "send_enabled": [
      {
        "denom": "text",
        "enabled": true
      }
    ],
    "default_send_enabled": true
  }
}

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
GET /cosmos/bank/v1beta1/send_enabled HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "send_enabled": [
    {
      "denom": "text",
      "enabled": true
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/spendable_balances/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balances": [
    {
      "denom": "text",
      "amount": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/spendable_balances/{address}/by_denom HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balance": {
    "denom": "text",
    "amount": "text"
  }
}

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
GET /cosmos/bank/v1beta1/supply HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "supply": [
    {
      "denom": "text",
      "amount": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/bank/v1beta1/supply/by_denom HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "amount": {
    "denom": "text",
    "amount": "text"
  }
}

Params retrieves the erc20 module params

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/evm/erc20/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "enable_erc20": true,
    "native_precompiles": [
      "text"
    ],
    "dynamic_precompiles": [
      "text"
    ]
  }
}

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
GET /cosmos/evm/erc20/v1/token_pairs HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "token_pairs": [
    {
      "erc20_address": "text",
      "denom": "text",
      "enabled": true,
      "contract_owner": "OWNER_UNSPECIFIED"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/evm/erc20/v1/token_pairs/{token} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "token_pair": {
    "erc20_address": "text",
    "denom": "text",
    "enabled": true,
    "contract_owner": "OWNER_UNSPECIFIED"
  }
}

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
GET /cosmos/base/tendermint/v1beta1/abci_query 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"
}

GetLatestBlock returns the latest block.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/base/tendermint/v1beta1/blocks/latest HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
              "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-07-03T12:17:38.019Z",
              "validator_address": "Ynl0ZXM=",
              "validator_index": 1,
              "signature": "Ynl0ZXM=",
              "extension": "Ynl0ZXM=",
              "extension_signature": "Ynl0ZXM="
            },
            "total_voting_power": "text",
            "validator_power": "text",
            "timestamp": "2025-07-03T12:17:38.019Z"
          },
          "light_client_attack_evidence": {
            "conflicting_block": {
              "signed_header": {
                "header": {
                  "version": {
                    "block": "text",
                    "app": "text"
                  },
                  "chain_id": "text",
                  "height": "text",
                  "time": "2025-07-03T12:17:38.019Z",
                  "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-07-03T12:17:38.019Z",
                      "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-07-03T12:17:38.019Z"
          }
        }
      ]
    },
    "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-07-03T12:17:38.019Z",
          "signature": "Ynl0ZXM="
        }
      ]
    }
  },
  "sdk_block": {
    "header": {
      "version": {
        "block": "text",
        "app": "text"
      },
      "chain_id": "text",
      "height": "text",
      "time": "2025-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
              "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-07-03T12:17:38.019Z",
              "validator_address": "Ynl0ZXM=",
              "validator_index": 1,
              "signature": "Ynl0ZXM=",
              "extension": "Ynl0ZXM=",
              "extension_signature": "Ynl0ZXM="
            },
            "total_voting_power": "text",
            "validator_power": "text",
            "timestamp": "2025-07-03T12:17:38.019Z"
          },
          "light_client_attack_evidence": {
            "conflicting_block": {
              "signed_header": {
                "header": {
                  "version": {
                    "block": "text",
                    "app": "text"
                  },
                  "chain_id": "text",
                  "height": "text",
                  "time": "2025-07-03T12:17:38.019Z",
                  "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-07-03T12:17:38.019Z",
                      "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-07-03T12:17:38.019Z"
          }
        }
      ]
    },
    "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-07-03T12:17:38.019Z",
          "signature": "Ynl0ZXM="
        }
      ]
    }
  }
}

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
GET /cosmos/base/tendermint/v1beta1/blocks/{height} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
              "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-07-03T12:17:38.019Z",
              "validator_address": "Ynl0ZXM=",
              "validator_index": 1,
              "signature": "Ynl0ZXM=",
              "extension": "Ynl0ZXM=",
              "extension_signature": "Ynl0ZXM="
            },
            "total_voting_power": "text",
            "validator_power": "text",
            "timestamp": "2025-07-03T12:17:38.019Z"
          },
          "light_client_attack_evidence": {
            "conflicting_block": {
              "signed_header": {
                "header": {
                  "version": {
                    "block": "text",
                    "app": "text"
                  },
                  "chain_id": "text",
                  "height": "text",
                  "time": "2025-07-03T12:17:38.019Z",
                  "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-07-03T12:17:38.019Z",
                      "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-07-03T12:17:38.019Z"
          }
        }
      ]
    },
    "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-07-03T12:17:38.019Z",
          "signature": "Ynl0ZXM="
        }
      ]
    }
  },
  "sdk_block": {
    "header": {
      "version": {
        "block": "text",
        "app": "text"
      },
      "chain_id": "text",
      "height": "text",
      "time": "2025-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
              "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-07-03T12:17:38.019Z",
              "validator_address": "Ynl0ZXM=",
              "validator_index": 1,
              "signature": "Ynl0ZXM=",
              "extension": "Ynl0ZXM=",
              "extension_signature": "Ynl0ZXM="
            },
            "total_voting_power": "text",
            "validator_power": "text",
            "timestamp": "2025-07-03T12:17:38.019Z"
          },
          "light_client_attack_evidence": {
            "conflicting_block": {
              "signed_header": {
                "header": {
                  "version": {
                    "block": "text",
                    "app": "text"
                  },
                  "chain_id": "text",
                  "height": "text",
                  "time": "2025-07-03T12:17:38.019Z",
                  "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-07-03T12:17:38.019Z",
                      "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-07-03T12:17:38.019Z"
          }
        }
      ]
    },
    "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-07-03T12:17:38.019Z",
          "signature": "Ynl0ZXM="
        }
      ]
    }
  }
}

GetNodeInfo queries the current node info.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/base/tendermint/v1beta1/node_info HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

GetSyncing queries node syncing.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/base/tendermint/v1beta1/syncing HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "syncing": true
}

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
GET /cosmos/base/tendermint/v1beta1/validatorsets/latest HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /cosmos/base/tendermint/v1beta1/validatorsets/{height} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

Config queries for the operator configuration.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
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"
}

Status queries for the node status.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
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-07-03T12:17:38.019Z",
  "app_hash": "Ynl0ZXM=",
  "validator_hash": "Ynl0ZXM="
}

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
GET /cosmos/evidence/v1beta1/evidence/{hash} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "evidence": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  }
}

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
GET /cosmos/evidence/v1beta1/evidence HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "evidence": [
    {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmwasm/wasm/v1/code 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 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
GET /cosmwasm/wasm/v1/code/{code_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "code_info": {
    "code_id": "text",
    "creator": "text",
    "data_hash": "Ynl0ZXM=",
    "instantiate_permission": {
      "permission": "ACCESS_TYPE_UNSPECIFIED",
      "addresses": [
        "text"
      ]
    }
  },
  "data": "Ynl0ZXM="
}

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
GET /cosmwasm/wasm/v1/code/{code_id}/contracts HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "contracts": [
    "text"
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

Params gets the module params

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmwasm/wasm/v1/codes/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "code_upload_access": {
      "permission": "ACCESS_TYPE_UNSPECIFIED",
      "addresses": [
        "text"
      ]
    },
    "instantiate_default_permission": "ACCESS_TYPE_UNSPECIFIED"
  }
}

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
GET /cosmwasm/wasm/v1/codes/pinned HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "code_ids": [
    "text"
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmwasm/wasm/v1/contract/build_address HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "address": "text"
}

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
GET /cosmwasm/wasm/v1/contract/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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="
    }
  }
}

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
GET /cosmwasm/wasm/v1/contract/{address}/history HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /cosmwasm/wasm/v1/contract/{address}/raw/{query_data} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "data": "Ynl0ZXM="
}

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
GET /cosmwasm/wasm/v1/contract/{address}/smart/{query_data} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "data": "Ynl0ZXM="
}

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
GET /cosmwasm/wasm/v1/contract/{address}/state HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "models": [
    {
      "key": "Ynl0ZXM=",
      "value": "Ynl0ZXM="
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmwasm/wasm/v1/contracts/creator/{creator_address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "contract_addresses": [
    "text"
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/authz/v1beta1/grants HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "grants": [
    {
      "authorization": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "expiration": "2025-07-03T12:17:38.019Z"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/authz/v1beta1/grants/grantee/{grantee} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "grants": [
    {
      "granter": "text",
      "grantee": "text",
      "authorization": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "expiration": "2025-07-03T12:17:38.019Z"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/authz/v1beta1/grants/granter/{granter} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "grants": [
    {
      "granter": "text",
      "grantee": "text",
      "authorization": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      },
      "expiration": "2025-07-03T12:17:38.019Z"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1beta1/params/{params_type} 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="
  }
}

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
GET /cosmos/gov/v1/params/{params_type} 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": "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 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
GET /cosmos/gov/v1/proposals HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "deposit_end_time": "2025-07-03T12:17:38.019Z",
      "total_deposit": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "voting_start_time": "2025-07-03T12:17:38.019Z",
      "voting_end_time": "2025-07-03T12:17:38.019Z",
      "metadata": "text",
      "title": "text",
      "summary": "text",
      "proposer": "text",
      "expedited": true,
      "failed_reason": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
    "deposit_end_time": "2025-07-03T12:17:38.019Z",
    "total_deposit": [
      {
        "denom": "text",
        "amount": "text"
      }
    ],
    "voting_start_time": "2025-07-03T12:17:38.019Z",
    "voting_end_time": "2025-07-03T12:17:38.019Z",
    "metadata": "text",
    "title": "text",
    "summary": "text",
    "proposer": "text",
    "expedited": true,
    "failed_reason": "text"
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id}/deposits HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "deposits": [
    {
      "proposal_id": "text",
      "depositor": "text",
      "amount": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "deposit": {
    "proposal_id": "text",
    "depositor": "text",
    "amount": [
      {
        "denom": "text",
        "amount": "text"
      }
    ]
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id}/tally HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "tally": {
    "yes_count": "text",
    "abstain_count": "text",
    "no_count": "text",
    "no_with_veto_count": "text"
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id}/votes HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "votes": [
    {
      "proposal_id": "text",
      "voter": "text",
      "options": [
        {
          "option": "VOTE_OPTION_UNSPECIFIED",
          "weight": "text"
        }
      ],
      "metadata": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1/proposals/{proposal_id}/votes/{voter} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "vote": {
    "proposal_id": "text",
    "voter": "text",
    "options": [
      {
        "option": "VOTE_OPTION_UNSPECIFIED",
        "weight": "text"
      }
    ],
    "metadata": "text"
  }
}

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
GET /cosmos/gov/v1beta1/proposals HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "deposit_end_time": "2025-07-03T12:17:38.019Z",
      "total_deposit": [
        {
          "denom": "text",
          "amount": "text"
        }
      ],
      "voting_start_time": "2025-07-03T12:17:38.019Z",
      "voting_end_time": "2025-07-03T12:17:38.019Z"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
    "deposit_end_time": "2025-07-03T12:17:38.019Z",
    "total_deposit": [
      {
        "denom": "text",
        "amount": "text"
      }
    ],
    "voting_start_time": "2025-07-03T12:17:38.019Z",
    "voting_end_time": "2025-07-03T12:17:38.019Z"
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "deposits": [
    {
      "proposal_id": "text",
      "depositor": "text",
      "amount": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "deposit": {
    "proposal_id": "text",
    "depositor": "text",
    "amount": [
      {
        "denom": "text",
        "amount": "text"
      }
    ]
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/tally HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "tally": {
    "yes": "text",
    "abstain": "text",
    "no": "text",
    "no_with_veto": "text"
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "votes": [
    {
      "proposal_id": "text",
      "voter": "text",
      "option": "VOTE_OPTION_UNSPECIFIED",
      "options": [
        {
          "option": "VOTE_OPTION_UNSPECIFIED",
          "weight": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "vote": {
    "proposal_id": "text",
    "voter": "text",
    "option": "VOTE_OPTION_UNSPECIFIED",
    "options": [
      {
        "option": "VOTE_OPTION_UNSPECIFIED",
        "weight": "text"
      }
    ]
  }
}

Constitution queries the chain's constitution.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/gov/v1/constitution HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "constitution": "text"
}

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
GET /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "upgraded_consensus_state": "Ynl0ZXM="
}

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
GET /cosmos/upgrade/v1beta1/applied_plan/{name} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "height": "text"
}

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
GET /cosmos/upgrade/v1beta1/authority HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "address": "text"
}

CurrentPlan queries the current upgrade plan.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/upgrade/v1beta1/current_plan HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "plan": {
    "name": "text",
    "time": "2025-07-03T12:17:38.019Z",
    "height": "text",
    "info": "text",
    "upgraded_client_state": {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  }
}

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
GET /cosmos/upgrade/v1beta1/module_versions HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "module_versions": [
    {
      "name": "text",
      "version": "text"
    }
  ]
}

Parameters queries the staking parameters.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/staking/v1beta1/params 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"
  }
}

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
GET /cosmos/staking/v1beta1/delegations/{delegator_addr} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "delegation_responses": [
    {
      "delegation": {
        "delegator_address": "text",
        "validator_address": "text",
        "shares": "text"
      },
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "redelegation_responses": [
    {
      "redelegation": {
        "delegator_address": "text",
        "validator_src_address": "text",
        "validator_dst_address": "text",
        "entries": [
          {
            "creation_height": "text",
            "completion_time": "2025-07-03T12:17:38.019Z",
            "initial_balance": "text",
            "shares_dst": "text",
            "unbonding_id": "text",
            "unbonding_on_hold_ref_count": "text"
          }
        ]
      },
      "entries": [
        {
          "redelegation_entry": {
            "creation_height": "text",
            "completion_time": "2025-07-03T12:17:38.019Z",
            "initial_balance": "text",
            "shares_dst": "text",
            "unbonding_id": "text",
            "unbonding_on_hold_ref_count": "text"
          },
          "balance": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "unbonding_responses": [
    {
      "delegator_address": "text",
      "validator_address": "text",
      "entries": [
        {
          "creation_height": "text",
          "completion_time": "2025-07-03T12:17:38.019Z",
          "initial_balance": "text",
          "balance": "text",
          "unbonding_id": "text",
          "unbonding_on_hold_ref_count": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "commission": {
        "commission_rates": {
          "rate": "text",
          "max_rate": "text",
          "max_change_rate": "text"
        },
        "update_time": "2025-07-03T12:17:38.019Z"
      },
      "min_self_delegation": "text",
      "unbonding_on_hold_ref_count": "text",
      "unbonding_ids": [
        "text"
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
    "commission": {
      "commission_rates": {
        "rate": "text",
        "max_rate": "text",
        "max_change_rate": "text"
      },
      "update_time": "2025-07-03T12:17:38.019Z"
    },
    "min_self_delegation": "text",
    "unbonding_on_hold_ref_count": "text",
    "unbonding_ids": [
      "text"
    ]
  }
}

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
GET /cosmos/staking/v1beta1/historical_info/{height} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "hist": {
    "header": {
      "version": {
        "block": "text",
        "app": "text"
      },
      "chain_id": "text",
      "height": "text",
      "time": "2025-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
        "commission": {
          "commission_rates": {
            "rate": "text",
            "max_rate": "text",
            "max_change_rate": "text"
          },
          "update_time": "2025-07-03T12:17:38.019Z"
        },
        "min_self_delegation": "text",
        "unbonding_on_hold_ref_count": "text",
        "unbonding_ids": [
          "text"
        ]
      }
    ]
  }
}

Pool queries the pool info.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/staking/v1beta1/pool HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "pool": {
    "not_bonded_tokens": "text",
    "bonded_tokens": "text"
  }
}

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
GET /cosmos/staking/v1beta1/validators HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "commission": {
        "commission_rates": {
          "rate": "text",
          "max_rate": "text",
          "max_change_rate": "text"
        },
        "update_time": "2025-07-03T12:17:38.019Z"
      },
      "min_self_delegation": "text",
      "unbonding_on_hold_ref_count": "text",
      "unbonding_ids": [
        "text"
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/validators/{validator_addr} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
    "commission": {
      "commission_rates": {
        "rate": "text",
        "max_rate": "text",
        "max_change_rate": "text"
      },
      "update_time": "2025-07-03T12:17:38.019Z"
    },
    "min_self_delegation": "text",
    "unbonding_on_hold_ref_count": "text",
    "unbonding_ids": [
      "text"
    ]
  }
}

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
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "delegation_responses": [
    {
      "delegation": {
        "delegator_address": "text",
        "validator_address": "text",
        "shares": "text"
      },
      "balance": {
        "denom": "text",
        "amount": "text"
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "delegation_response": {
    "delegation": {
      "delegator_address": "text",
      "validator_address": "text",
      "shares": "text"
    },
    "balance": {
      "denom": "text",
      "amount": "text"
    }
  }
}

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
GET /cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "unbond": {
    "delegator_address": "text",
    "validator_address": "text",
    "entries": [
      {
        "creation_height": "text",
        "completion_time": "2025-07-03T12:17:38.019Z",
        "initial_balance": "text",
        "balance": "text",
        "unbonding_id": "text",
        "unbonding_on_hold_ref_count": "text"
      }
    ]
  }
}

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
GET /cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "unbonding_responses": [
    {
      "delegator_address": "text",
      "validator_address": "text",
      "entries": [
        {
          "creation_height": "text",
          "completion_time": "2025-07-03T12:17:38.019Z",
          "initial_balance": "text",
          "balance": "text",
          "unbonding_id": "text",
          "unbonding_on_hold_ref_count": "text"
        }
      ]
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
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="
}
{
  "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="
    ]
  }
}

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
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="
    ]
  }
}
{
  "tx_bytes": "Ynl0ZXM="
}

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
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="
}
{
  "amino_json": "text"
}

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
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"
}
{
  "amino_binary": "Ynl0ZXM="
}

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
GET /cosmos/tx/v1beta1/txs HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
}

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
GET /cosmos/tx/v1beta1/txs/{hash} 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_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
          }
        ]
      }
    ]
  }
}

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
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"
}
{
  "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
          }
        ]
      }
    ]
  }
}

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
GET /cosmos/tx/v1beta1/txs/block/{height} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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-07-03T12:17:38.019Z",
      "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-07-03T12:17:38.019Z",
              "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-07-03T12:17:38.019Z",
              "validator_address": "Ynl0ZXM=",
              "validator_index": 1,
              "signature": "Ynl0ZXM=",
              "extension": "Ynl0ZXM=",
              "extension_signature": "Ynl0ZXM="
            },
            "total_voting_power": "text",
            "validator_power": "text",
            "timestamp": "2025-07-03T12:17:38.019Z"
          },
          "light_client_attack_evidence": {
            "conflicting_block": {
              "signed_header": {
                "header": {
                  "version": {
                    "block": "text",
                    "app": "text"
                  },
                  "chain_id": "text",
                  "height": "text",
                  "time": "2025-07-03T12:17:38.019Z",
                  "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-07-03T12:17:38.019Z",
                      "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-07-03T12:17:38.019Z"
          }
        }
      ]
    },
    "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-07-03T12:17:38.019Z",
          "signature": "Ynl0ZXM="
        }
      ]
    }
  },
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
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="
}
{
  "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="
      }
    ]
  }
}

Params queries all parameters.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/auth/v1beta1/params 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"
  }
}

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
GET /cosmos/auth/v1beta1/account_info/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "info": {
    "address": "text",
    "pub_key": {
      "type_url": "text",
      "value": "Ynl0ZXM="
    },
    "account_number": "text",
    "sequence": "text"
  }
}

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
GET /cosmos/auth/v1beta1/accounts HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "accounts": [
    {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/auth/v1beta1/accounts/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "account": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  }
}

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
GET /cosmos/auth/v1beta1/address_by_id/{id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "account_address": "text"
}

Bech32Prefix queries bech32Prefix

get

Since: cosmos-sdk 0.46

Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/auth/v1beta1/bech32 HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "bech32_prefix": "text"
}

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
GET /cosmos/auth/v1beta1/bech32/{address_bytes} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "address_string": "text"
}

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
GET /cosmos/auth/v1beta1/bech32/{address_string} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "address_bytes": "Ynl0ZXM="
}

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
GET /cosmos/auth/v1beta1/module_accounts HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "accounts": [
    {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  ]
}

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
GET /cosmos/auth/v1beta1/module_accounts/{name} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "account": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  }
}

Params queries the parameters of x/consensus module.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/consensus/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
    }
  }
}

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
GET /ibc/apps/fee/v1/incentivized_packets 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"
  }
}

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
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: */*
{
  "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"
        ]
      }
    ]
  }
}

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
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: */*
{
  "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 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
GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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 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
GET /ibc/core/connection/v1/connections/{connection_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /ibc/core/client/v1/client_states/{client_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "client_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  },
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/channel/v1/channels HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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 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
GET /ibc/core/connection/v1/connections HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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 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
GET /ibc/core/client/v1/client_status/{client_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "status": "text"
}

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
GET /ibc/core/client/v1/client_states HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "client_states": [
    {
      "client_id": "text",
      "client_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
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"
}
{
  "success": true
}

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
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: */*
{
  "escrow_address": "text"
}

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
GET /ibc/apps/transfer/v1/denom_hashes/{trace} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "hash": "text"
}

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
GET /ibc/apps/transfer/v1/denom_traces HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denom_traces": [
    {
      "path": "text",
      "base_denom": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /ibc/apps/transfer/v1/denom_traces/{hash} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denom_trace": {
    "path": "text",
    "base_denom": "text"
  }
}

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
GET /ibc/apps/transfer/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "send_enabled": true,
    "receive_enabled": true
  }
}

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
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: */*
{
  "fee_enabled": true
}

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
GET /ibc/apps/transfer/v1/denoms/{denom}/total_escrow HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "amount": {
    "denom": "text",
    "amount": "text"
  }
}

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
GET /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "counterparty_payee": "text"
}

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
GET /ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "payee_address": "text"
}

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
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: */*
{
  "ack_fees": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
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: */*
{
  "recv_fees": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
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: */*
{
  "timeout_fees": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
GET /ibc/apps/fee/v1/fee_enabled HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "fee_enabled_channels": [
    {
      "port_id": "text",
      "channel_id": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "address": "text"
}

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
GET /ibc/apps/interchain_accounts/controller/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "controller_enabled": true
  }
}

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
GET /ibc/apps/interchain_accounts/host/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "host_enabled": true,
    "allow_messages": [
      "text"
    ]
  }
}

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
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: */*
{
  "consensus_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  },
  "client_id": "text",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "next_sequence_receive": "text",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "identified_client_state": {
    "client_id": "text",
    "client_state": {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  },
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "next_sequence_send": "text",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "acknowledgements": [
    {
      "port_id": "text",
      "channel_id": "text",
      "sequence": "text",
      "data": "Ynl0ZXM="
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  },
  "height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "acknowledgement": "Ynl0ZXM=",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "commitments": [
    {
      "port_id": "text",
      "channel_id": "text",
      "sequence": "text",
      "data": "Ynl0ZXM="
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  },
  "height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "sequences": [
    "text"
  ],
  "height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "sequences": [
    "text"
  ],
  "height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "commitment": "Ynl0ZXM=",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "received": true,
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/upgrade HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
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: */*
{
  "error_receipt": {
    "sequence": "text",
    "message": "text"
  },
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/channel/v1/connections/{connection}/channels HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /ibc/core/channel/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "upgrade_timeout": {
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      },
      "timestamp": "text"
    }
  }
}

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
GET /ibc/core/connection/v1/client_connections/{client_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "connection_paths": [
    "text"
  ],
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/connection/v1/connections/{connection_id}/client_state HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "identified_client_state": {
    "client_id": "text",
    "client_state": {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  },
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
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: */*
{
  "consensus_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  },
  "client_id": "text",
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/connection/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "max_expected_time_per_block": "text"
  }
}

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
GET /ibc/core/client/v1/consensus_states/{client_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "consensus_states": [
    {
      "height": {
        "revision_number": "text",
        "revision_height": "text"
      },
      "consensus_state": {
        "type_url": "text",
        "value": "Ynl0ZXM="
      }
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /ibc/core/client/v1/consensus_states/{client_id}/heights HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "consensus_state_heights": [
    {
      "revision_number": "text",
      "revision_height": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
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: */*
{
  "consensus_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  },
  "proof": "Ynl0ZXM=",
  "proof_height": {
    "revision_number": "text",
    "revision_height": "text"
  }
}

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
GET /ibc/core/client/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "allowed_clients": [
      "text"
    ]
  }
}

UpgradedClientState queries an Upgraded IBC light client.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /ibc/core/client/v1/upgraded_client_states HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "upgraded_client_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  }
}

UpgradedConsensusState queries an Upgraded IBC consensus state.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /ibc/core/client/v1/upgraded_consensus_states HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "upgraded_consensus_state": {
    "type_url": "text",
    "value": "Ynl0ZXM="
  }
}

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
GET /kiichain/tokenfactory/v1beta1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "params": {
    "denom_creation_fee": [
      {
        "denom": "text",
        "amount": "text"
      }
    ],
    "denom_creation_gas_consume": "text"
  }
}

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
GET /kiichain/tokenfactory/v1beta1/denoms/{denom}/authority_metadata HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "authority_metadata": {
    "admin": "text"
  }
}

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
GET /kiichain/tokenfactory/v1beta1/denoms_from_admin/{admin} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denoms": [
    "text"
  ]
}

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
GET /kiichain/tokenfactory/v1beta1/denoms_from_creator/{creator} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "denoms": [
    "text"
  ]
}

Params queries the parameters of x/vm module.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/evm/vm/v1/params 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"
    ]
  }
}

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
GET /cosmos/evm/vm/v1/account/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balance": "text",
  "code_hash": "text",
  "nonce": "text"
}

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
GET /cosmos/evm/vm/v1/balances/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "balance": "text"
}

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
GET /cosmos/evm/vm/v1/base_fee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "base_fee": "text"
}

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
GET /cosmos/evm/vm/v1/codes/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "code": "Ynl0ZXM="
}

Config queries the EVM configuration

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/evm/vm/v1/config HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
  }
}

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
GET /cosmos/evm/vm/v1/cosmos_account/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "cosmos_address": "text",
  "sequence": "text",
  "account_number": "text"
}

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
GET /cosmos/evm/vm/v1/estimate_gas HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "gas": "text",
  "ret": "Ynl0ZXM=",
  "vm_error": "text"
}

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
GET /cosmos/evm/vm/v1/eth_call HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "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"
}

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
GET /cosmos/evm/vm/v1/min_gas_price HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "min_gas_price": "text"
}

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
GET /cosmos/evm/vm/v1/storage/{address}/{key} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "value": "text"
}

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
GET /cosmos/evm/vm/v1/trace_block HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "data": "Ynl0ZXM="
}

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
GET /cosmos/evm/vm/v1/trace_tx HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "data": "Ynl0ZXM="
}

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
GET /cosmos/evm/vm/v1/validator_account/{cons_address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "account_address": "text",
  "sequence": "text",
  "account_number": "text"
}

Params queries params of the distribution module.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/distribution/v1beta1/params 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
  }
}

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
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "validators": [
    "text"
  ]
}

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
GET /cosmos/distribution/v1beta1/validators/{validator_address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "operator_address": "text",
  "self_bond_rewards": [
    {
      "denom": "text",
      "amount": "text"
    }
  ],
  "commission": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

CommunityPool queries the community pool coins.

get
Responses
200
A successful response.
application/json
default
An unexpected error response.
application/json
get
GET /cosmos/distribution/v1beta1/community_pool HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "pool": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "rewards": [
    {
      "validator_address": "text",
      "reward": [
        {
          "denom": "text",
          "amount": "text"
        }
      ]
    }
  ],
  "total": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "rewards": [
    {
      "denom": "text",
      "amount": "text"
    }
  ]
}

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
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "withdraw_address": "text"
}

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
GET /cosmos/distribution/v1beta1/validators/{validator_address}/commission HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "commission": {
    "commission": [
      {
        "denom": "text",
        "amount": "text"
      }
    ]
  }
}

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
GET /cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "rewards": {
    "rewards": [
      {
        "denom": "text",
        "amount": "text"
      }
    ]
  }
}

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
GET /cosmos/distribution/v1beta1/validators/{validator_address}/slashes HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "slashes": [
    {
      "validator_period": "text",
      "fraction": "text"
    }
  ],
  "pagination": {
    "next_key": "Ynl0ZXM=",
    "total": "text"
  }
}

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
GET /cosmos/feegrant/v1beta1/issued/{granter} 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 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
GET /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
  "allowance": {
    "granter": "text",
    "grantee": "text",
    "allowance": {
      "type_url": "text",
      "value": "Ynl0ZXM="
    }
  }
}

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
GET /cosmos/feegrant/v1beta1/allowances/{grantee} 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"
  }
}