Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
A background on why we're relentlessly building every day.
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.
Our vision of what and why we are building relentlessly everyday.
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.
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.
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.
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).
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.
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.
Collateral: KII will be used as a collateral on DeFi apps, liquid staking, lending, and futures settlement.
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.
Rewards: KII is rewarded to validators and delegators for their service to the network.
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.
Governance: KII will be used for voting on future protocol and ecosystem development once the blockchain migrates to open governance.
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.
Get a wallet for KiiChain Testnet Oro
Connect your Keplr or MetaMask wallet to the explorer app to stake KII into a validator or to help launch a full node/validator.
Connect to our web wallet using Keplr or Metamask.
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 are economy-centric, real world models currently in use. Kii is developing technological solutions to solve the current problems within each niche.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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. 💰💸
Validators power the network.
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
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.
Where we've been and where we're going.
Inception. Internal building. OTC trading.
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 ().
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 ().
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.
KIIEX is a hybrid centralized-decentralized exchange platform designed for on-chain FX trading, cross-border payments and finance solutions.
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.
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.
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.
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:
KIIEX is fully compliant within each jurisdiction. Users must adhere to KYC and AML standards and requirements.
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.
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.
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.
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 (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 .
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.
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.
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.
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.
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 .
The latest version of the KiiChain Whitepaper.
Endpoints for user authentication.
Everything you need to know about building on KiiChain. Your hub for connecting to the chain and building applications on the decentralized web.
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:
If you are a developer we also have our official SKDs for development:
Kii protocols can be found at these links:
Generally, our chains (testnets and mainnet) follow the same set of endpoints. More information about our endpoints can be found here:
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-level endpoints used by trading and operator roles.
Join the testnet, set up your wallet, and request KII tokens.
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 KII can be found in the faucet in Discord and on our Explorer App. It can be called on every 24 hours.
Request tokens:
$request {address}
Example EVM:
$request Ox12345abcde…
Example CW:
$request kii12345abcde…
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]
For delegators / stakers.
If you're interested in delegating (staking) your KII to a validator or masternode, the following information is important to review.
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 for Testnet Oro
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.
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.
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.
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.
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
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.
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.
Everyone is welcome to launch their own validator. Please review all information carefully.
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.
A delegator is a person or entity that wants to Stake their tokens without managing a node or full node.
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.
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.
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.
Build on the ecosystem.
An overview of developer tools, SDKs and resources for accessing the network.
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
To be able to swap, you first need to have funds, and you can get them in two ways:
The first one is creating a Deposit.
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.
Once the deposit is complete, you will see the new balance available in your account and can start swapping on the SWAP page.
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.
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
Endpoints related to user actions.
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
Connect your wallet to the KII interactive explorer and start staking.
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.
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.
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.
An SDK written in Javascript/Typescript for KiiChain
Note: This project is still under development, so future changes will be made.
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.
Each package has its own documentation under its readme file.
KiiJS consists of smaller NPM packages within the @kiichain namespace. For more detailed documentation on each package, please refer to the table below.
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
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.
Please be sure to read and follow our Code of Conduct. By participating, you are expected to uphold this code.
Read our contribution guidelines to learn about our issue and pull request submission processes, coding rules, and more.
We use GitHub Issues for tracking requests and bugs, for general questions and discussion.
The KiiPy project is licensed under Apache License 2.0.
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
Create your user API Key and add permissions
Create a Signature
Authenticate via API
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.
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.
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
.
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 wallet using MetaMask or Keplr with a web wallet for Testnet Oro. Its important to use a wallet compatible to your browser.
Go to Metamask.io and download and install the web extension browser. Make sure the web extension is from .
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!
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:
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.
Upon saving and completion, you should be connected to the testnet network!
Now, get some testnet tokens by following the instructions: .
Network name
Kiichain Testnet Oro
New RPC URL
Chain ID
1336
Currency symbol
KII
Block explorer URL
An introduction and important links.
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 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.
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
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.
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.
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
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:
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.
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.
The source code for the Testnet Oro can be found at:
Testnet Oro has the following endpoints open for development purposes:
Sentry #1:
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:
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.
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
Instructions on how to join the network can be found at:
You can get tokens to our Testnet Oro by using our Explorer app:
Our through our Discord channel:
More information about how to use our discord Faucet can be found at:
The testnet Oro also has its own Explorer, it can be found here:
You can find guides to the testnet at our Developer Tools:
Rest endpoints for the testnet Oro can be found here:
Endpoints
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...
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.
KiiChain has precompiled smart contracts crafted to allow EVM interaction with the Cosmos SDK functionalities
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.
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
You can utilize direct json-rpc connections to those addresses. We also have a TS/JS library to help interact with them.
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.
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.
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.
Kiichain´s PoS staking model.
There are three type of important network participants in Kiichain.
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.
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.
Delegators (stakers): Individuals who commit KII to validators in order to participate in staking and earn rewards.
An oracle is a blockchain component that provides external real-world data and store on the Blockchain
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.
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.
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.
Description of all the custom modules that makes Kiichain work
Delegating / staking KII requires active supervision.
Being a delegator is not a passive task. Here are the main points of consideration of a delegator:
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.
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).
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.
Protocol for minimizing the risks of attacks.
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.
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.
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.
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.
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.
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.
Staking rewards and validator commissions.
Validators and delegators earn revenue in exchange for their services. This revenue is given in two forms:
Block provisions (KIIs): They are paid in newly created KIIs. Block provisions exist to incentivize KII holders to validate and stake the network.
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.
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.
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
Staging URL :
https://apstage.proxy.kiiex.io/ap
Prod URL :
https://alphaprod.proxy.kiiex.io/ap
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.
These are the prerequisites for the step-by-step guide.
Create your KIIEX account:
Go to https://kiiex.io/ and click on login, and create your user
You can also follow our guide on Set up your KIIEX Account
Update your account from level 0 to level 1 by following our KYC flow to be able to swap
Create your trader API Key on our panel to follow the next steps
These are the steps to fully create a swap and withdraw it:
Authenticate your user via api
Create a USDT deposit. If you have already created a deposit, check your current balance
Get the current COPM/USDT rate
Create market order (buy COPM)
Verify order was filled
Get trade details (swap info)
Confirm the new COPM balance using the get account positions endpoint
Create a COPM withdrawal, it could be to another wallet or to your bank account
Check your COPM withdrawal status
How do I perform the swap workflow using the API?
Become a Kii Ambassador
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):
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.
Have a good follower base and engagement level on social media.
Follow KiiChain on X and be registered on the ORO Testnet.
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.
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.
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.
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.
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.
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.
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.
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.
For hardware and software protocols.
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.
Validators are expected to implement monitoring, alerting, and management solutions. There are several tools that you can use.
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.
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.
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.
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.
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.
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.
Install Rust and CosmWasm toolchain:
Create a new CosmWasm contract:
Compile the contract:
Store the Contract
Instantiate the Contract
Execute the Contract
Install Node.js and Hardhat:
Install dependencies:
Create a Solidity file (MyContract.sol
) in contracts/
:
Compile the contract:
Create a deployment script (scripts/deploy.js
):
Deploy to Kiichain:
Using Hardhat Console:
CosmWasm Documentation:
Ethereum Hardhat Guide:
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.
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.
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
:
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.
Typescript library containing general utility functions for interacting with Kiichain.
The package has utils to easen up conversion between hex and bech32 addresses. They can be used like this:
Some wallets do not recognize the ETHSECP256-1 PubKey signatures. We made a couple helpers to utilize it without problems.
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.
Sign the transaction with a custom pubkey
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)
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");
# 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"
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.
The evm
module provides:
EVM Execution Environment within Cosmos-SDK
Support for Ethereum JSON-RPC APIs
Full Solidity smart contract compatibility
The EVM module provides several messages and transactions that users and developers can utilize:
Submit Ethereum Transactions: Users can submit Ethereum-formatted transactions (MsgEthereumTx
) to Kiichain, which are processed by the EVM module.
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
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.
The x/feemarket
module implements a dynamic fee mechanism inspired by Ethereum's EIP-1559, enhancing transaction fee predictability and network efficiency.
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.
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.
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.
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.
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.
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
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
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\"" ];
}
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
How to update and maintain a validator on the Kii network
This will guide you through basic operations on how to maintain 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.
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
Transfer funds
Ensure your account has sufficient funds for fees and self-delegation.
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.
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-rate
must 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.
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"
You may want to halt your validator for maintenance or a coordinated upgrade. You can gracefully halt your validator by setting it halt-height
to 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 for the RWA Protocol on KiiChain
Note: This project is still under development so future changes will be made.
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.
Token transfers and balance checks
Identity registration and management
Compliance module integration
Blockchain interaction via RPC
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.
Incentives for validating the network.
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.
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.
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.
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.
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)
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%.
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.
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.
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.
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.
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:
Transfer funds
Ensure your account has sufficient funds for fees and self-delegation.
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
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
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.
Golang version: v1.23.x
Build tools: build-essential
package (Linux)
To install Kiichain, download the pre-built binaries:
Verify the installation by checking the version of kiichaind:
To join the Testnet Oro, you must have the daemon kiichaind
installed in your machine.
For optimal performance, we recommend:
4 vCPU x86_64
8 GB RAM
1 TB NVME SSD
The easiest way to prepare a node is by using our provided scripts.
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
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 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 .
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:
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:
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.
Enable State Sync in Configuration
Modify the config.toml
file to enable state sync and set the required parameters.
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:
Go to $NODE_HOME/config/app.toml
and 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'
Further instructions on how to build a great node architecture can be found on:
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"
T-REX Protocol on KiiChain
Note: This project is still under development so future changes will be made.
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.
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.
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.
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
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
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
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.
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
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
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
Implement CW20 T-REX Token
Implement Identity Registry and Identity Registry Storage
Implement Trusted Issuers Registry and Claim Topics Registry
Implement Modular Compliance
Implement ONCHAINID
Implement T-REX Factory
Implement Implementation Authority
Integrate all contracts and perform thorough testing
Conduct security audit
Deploy to Kii-Chain testnet
Final testing and adjustments
Deploy to Kii-Chain mainnet
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
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.
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.
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
⚡️ 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.
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:
To broadcast messages, you can create signers with a variety of options:
(recommended)
Likely you'll want to use the Amino, so unless you need proto, you should use this one:
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.
Now that you have your stargateClient
, you can broadcast messages:
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.
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
});
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
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
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:
A new block is created
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
The module aggregates the votes and calculates the final exchange rate for each asset
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
The final exchange rate is stored on-chain and can be queried by other modules or smart contracts
These are the most important state types used by the Oracle module:
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 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\""];
}
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;
}
The Oracle module expose the following messages:
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\""];
}
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\""];
}
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];
}
On each ABCI call, the Oracle module performs the following actions:
Check if we are under a new slash window
Check the slash counters for validators and slash them if they didn't submit enough votes in the previous voting period
Remove the excess feeds
At the end of each block, the Oracle module performs the following actions:
Check if we are under a new voting period
Iterate the votes
Calculate the final exchange rate for each asset in the whitelist
Store the final exchange rate on-chain
The Oracle module ignores fees from validators on their first vote in the current voting period. The following is done:
Check if the message is a MsgAggregateExchangeRateVote
Check the validator/feeder relationship
If the validator is voting for the first time in the current voting period, ignore the fees
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
Overview for deploying a smart contract with Hardhat, Remix, Foundry, and Thirdweb.
RPC URL:
Chain Id:
1336
Install the hardhat framework in your project, by typing the following command:
$ npm install --save-dev hardhat
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
After creating the smart contract in the “Contracts” folder, run the following command to check your code.
$ npx hardhat compile
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
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.
In the “Deploy and Run Transactions” section, move to the Environment and select your Metamask Provider, remember you must be connected to KiiChain Testnet
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.
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
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
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.
In this example, we will create a ERC721 (Non fungible token).
Create an account in thrirdweb, create an API key here, and link your wallet.
Storage the API key in a secure place.
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
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.
Remember that you can check the smart contracts Deployed here.
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.
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 .
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
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:
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
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
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.
You can also install the price-feeder manually by following these steps:
Build and install the price feeder
Download our example config with:
Now read the file and update all the main configurations based on our next section:
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
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
Verify Operation
Check the service logs:
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
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.
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"
Authenticates using either username/password or API key method.
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 deposit ticket by OMS ID, account, request code, and ticket ID
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 all deposit tickets for a given OMS, operator, and account
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": {}
}
]
Retrieve a withdraw ticket based on OMS ID, account, request code, and ticket ID
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": [
{}
]
}
Creates a deposit ticket used to fund an account.
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 from OMS, trading venue operator, and account that matches the current Verify Code for confirmation.
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 the Open Trade Reports, only Block Trades, for the given accountId. ReceiveTime in POSIX format × 1000 (milliseconds since 1 January 1970).
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 the Open Trade Reports, only Block Trades, for the given instrumentId. Identifying information of counterparty is removed.
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
}
]
Cancels and replaces an order with a new order in a single call.
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
}
Reduces an order’s quantity without affecting its position in the book.
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"
}
Cancels an order using OrderId or ClientOrderId.
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"
}
Cancels all active orders for a specified account and OMS.
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"
}
Submits a new order with the specified parameters.
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
}
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
}
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
}
]
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
}
]
ReceiveTime in POSIX format X 1000 (milliseconds since 1 January 1970)
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
}
]
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
}
]
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 decentralized application on KiiChain.
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.
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.
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:
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.
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.
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.
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.
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 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.
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:
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.
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.
Connect to the Wallet: Copy the seed phrase from the console, paste it into the input field under "Enter your seed phrase," and click "Connect Wallet via Seed Phrase."
View Wallet Balance: If connected successfully, the wallet's balance should be displayed on the screen.
By following these steps, you can confirm that the dApp is functioning as expected.
To deploy your decentralized application (dApp) using Firebase Hosting, follow these steps:
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.
Access Firebase Hosting:
In the left menu, go to Build → Hosting.
Click "Get started" to begin setting up Firebase Hosting.
Install Firebase CLI:
Open your terminal and install Firebase CLI globally
npm install -g firebase-tools
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!
Build the project:
Run the following command to generate the production-ready files
npm run build
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.
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"
}
Authentication result
{
"authenticated": true,
"user": {
"userId": 1,
"userName": "text",
"email": "text",
"emailVerified": true,
"accountId": 1,
"omsId": 1,
"use2FA": true
}
}
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"
}
Authentication result
{
"authenticated": true,
"user": {
"userId": 1,
"userName": "text",
"email": "text",
"emailVerified": true,
"accountId": 1,
"omsId": 1,
"use2FA": true
}
}
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"
}
Deposit ticket creation result
{
"success": true,
"requestcode": "text"
}
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
}
Account balances
[
{
"omsId": 1,
"accountId": 1,
"productSymbol": "text",
"productId": 1,
"amount": 1,
"hold": 1
}
]
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"
}
Market data snapshot
[
[
"text"
]
]
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
}
Order status
{
"status": "text",
"errormsg": "text",
"OrderId": 1
}
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
}
Order status details
{
"OrderId": 1,
"OrderState": "text",
"QuantityExecuted": 1,
"AvgPrice": 1
}
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
}
List of executed trades
[
{
"tradeId": 1,
"orderId": 1,
"quantity": 1,
"price": 1
}
]
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"
}
Withdrawal request result
{
"result": true,
"errormsg": "text",
"errorcode": 1,
"detail": "text"
}
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
}
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"
}
]
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
yarn add @kiichain/kiijs-evm ethers viem
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.
Ensure that your EVM wallet has the KiiChain network enabled.
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);
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.
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.
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
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.
The Bank precompile contract provides functionalities for managing balances, supply, symbols, and more.
Functions
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
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)
The Distribution precompile contract facilitates operations related to rewards withdrawal and distribution.
Functions
Here's the table representation of your Distribution ABI:
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
The Evidence precompile contract provides functionalities for dealing with evidences.
Functions
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
The Governance precompile contract supports actions to deposit funds into proposals, view them and interact with them.
Functions
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
Enables cross-chain token transfers via IBC with simplified parameters
Functions
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
Enables cross-chain token transfers via IBC with granular permission control over channels and denominations.
Functions
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
Enables query, interaction and management of validator penalties.
Functions
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
The Staking precompile manages validator operations, delegations, and governance permissions in a Cosmos-based blockchain with EVM compatibility.
Functions
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
The wasm precompile makes wasm contracts available to being used via evm, with instantiate, query and execute.
Functions
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
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"
}
}
GET /cosmos/evm/feemarket/v1/base_fee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"base_fee": "text"
}
GET /cosmos/slashing/v1beta1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"params": {
"signed_blocks_window": "text",
"min_signed_per_window": "Ynl0ZXM=",
"downtime_jail_duration": "text",
"slash_fraction_double_sign": "Ynl0ZXM=",
"slash_fraction_downtime": "Ynl0ZXM="
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
cons_address is the address to query signing info of
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
address is the address to query balances for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.
Since: cosmos-sdk 0.50
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"
}
}
address is the address to query balances for.
denom is the coin denom to query balances for.
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"
}
}
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
denom defines the coin denomination to query all account holders for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Since: cosmos-sdk 0.50.3
denom defines the coin denomination to query all account holders for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
denom is the coin denom to query the metadata for.
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"
}
}
denom is the coin denom to query the metadata for.
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"
}
}
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
}
}
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
denoms is the specific denoms you want look up. Leave empty to get all entries.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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
address is the address to query spendable balances for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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
address is the address to query balances for.
denom is the coin denom to query balances for.
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
denom is the coin denom to query balances for.
GET /cosmos/bank/v1beta1/supply/by_denom HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"amount": {
"denom": "text",
"amount": "text"
}
}
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"
]
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
token identifier can be either the hex contract address of the ERC20 or the Cosmos base denomination
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"
}
}
Since: cosmos-sdk 0.46
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"
}
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="
}
]
}
}
}
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="
}
]
}
}
}
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
GET /cosmos/base/node/v1beta1/config HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"minimum_gas_price": "text",
"pruning_keep_recent": "text",
"pruning_interval": "text",
"halt_height": "text"
}
GET /cosmos/base/node/v1beta1/status HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"earliest_store_height": "text",
"height": "text",
"timestamp": "2025-07-03T12:17:38.019Z",
"app_hash": "Ynl0ZXM=",
"validator_hash": "Ynl0ZXM="
}
hash defines the evidence hash of the requested evidence.
Since: cosmos-sdk 0.47
evidence_hash defines the hash of the requested evidence. Deprecated: Use hash, a HEX encoded string, instead.
GET /cosmos/evidence/v1beta1/evidence/{hash} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"evidence": {
"type_url": "text",
"value": "Ynl0ZXM="
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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="
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
CodeHash is the hash of the code.
CreatorAddress is the address of the contract instantiator.
Salt is a hex encoded salt.
InitArgs are optional json encoded init args to be used in contract address building if provided.
GET /cosmwasm/wasm/v1/contract/build_address HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"address": "text"
}
address is the address of the contract to query
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="
}
}
}
address is the address of the contract to query
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
address is the address of the contract
GET /cosmwasm/wasm/v1/contract/{address}/raw/{query_data} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"data": "Ynl0ZXM="
}
address is the address of the contract
QueryData contains the query data passed to the contract
GET /cosmwasm/wasm/v1/contract/{address}/smart/{query_data} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"data": "Ynl0ZXM="
}
address is the address of the contract
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
CreatorAddress is the address of contract creator
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Optional, msg_type_url, when set, will query only grants matching given msg type.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Since: cosmos-sdk 0.46
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Since: cosmos-sdk 0.46
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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_type defines which parameters to query for, can be one of "voting", "tallying" or "deposit".
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_type defines which parameters to query for, can be one of "voting", "tallying" or "deposit".
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"
}
}
proposal_status defines the status of the proposals.
voter defines the voter address for the proposals.
depositor defines the deposit addresses from the proposals.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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_id defines the unique id of the proposal.
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"
}
}
proposal_id defines the unique id of the proposal.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
proposal_id defines the unique id of the proposal.
depositor defines the deposit addresses from the proposals.
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"
}
]
}
}
proposal_id defines the unique id of the proposal.
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"
}
}
proposal_id defines the unique id of the proposal.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
proposal_id defines the unique id of the proposal.
voter defines the voter address for the proposals.
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"
}
}
proposal_status defines the status of the proposals.
voter defines the voter address for the proposals.
depositor defines the deposit addresses from the proposals.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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_id defines the unique id of the proposal.
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"
}
}
proposal_id defines the unique id of the proposal.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
proposal_id defines the unique id of the proposal.
depositor defines the deposit addresses from the proposals.
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"
}
]
}
}
proposal_id defines the unique id of the proposal.
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"
}
}
proposal_id defines the unique id of the proposal.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
proposal_id defines the unique id of the proposal.
voter defines the voter address for the proposals.
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"
}
]
}
}
last height of the current chain must be sent in request as this is the height under which next consensus state is stored
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="
}
name is the name of the applied plan to query for.
GET /cosmos/upgrade/v1beta1/applied_plan/{name} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"height": "text"
}
Since: cosmos-sdk 0.46
GET /cosmos/upgrade/v1beta1/authority HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"address": "text"
}
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="
}
}
}
Since: cosmos-sdk 0.43
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.
GET /cosmos/upgrade/v1beta1/module_versions HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"module_versions": [
{
"name": "text",
"version": "text"
}
]
}
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
delegator_addr defines the delegator address to query for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
delegator_addr defines the delegator address to query for.
src_validator_addr defines the validator address to redelegate from.
dst_validator_addr defines the validator address to redelegate to.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
delegator_addr defines the delegator address to query for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
delegator_addr defines the delegator address to query for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
delegator_addr defines the delegator address to query for.
validator_addr defines the validator address to query for.
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"
]
}
}
height defines at which height to query the historical info.
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"
]
}
]
}
}
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"
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
status enables to query for validators matching a given status.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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_addr defines the validator address to query for.
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"
]
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
validator_addr defines the validator address to query for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
validator_addr defines the validator address to query for.
delegator_addr defines the delegator address to query for.
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"
}
}
}
validator_addr defines the validator address to query for.
delegator_addr defines the delegator address to query for.
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"
}
]
}
}
When called from another module, this query might consume a high amount of gas if the pagination field is incorrectly set.
validator_addr defines the validator address to query for.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Since: cosmos-sdk 0.47
TxDecodeRequest is the request type for the Service.TxDecode RPC method.
Since: cosmos-sdk 0.47
tx_bytes is the raw transaction.
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="
]
}
}
Since: cosmos-sdk 0.47
TxEncodeRequest is the request type for the Service.TxEncode RPC method.
Since: cosmos-sdk 0.47
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="
}
Since: cosmos-sdk 0.47
TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino RPC method.
Since: cosmos-sdk 0.47
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"
}
Since: cosmos-sdk 0.47
TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino RPC method.
Since: cosmos-sdk 0.47
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="
}
events is the list of transaction event type. Deprecated post v0.47.x: use query instead, which should contain a valid events query.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
page is the page number to query, starts at 1. If not provided, will default to first page.
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.
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
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"
}
hash is the tx hash to query, encoded as a hex string.
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
}
]
}
]
}
}
BroadcastTxRequest is the request type for the Service.BroadcastTxRequest RPC method.
tx_bytes is the raw transaction.
BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC method.
BROADCAST_MODE_UNSPECIFIED
Possible values: 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
}
]
}
]
}
}
Since: cosmos-sdk 0.45.2
height is the height of the block to query.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
SimulateRequest is the request type for the Service.Simulate RPC method.
tx_bytes is the raw transaction.
Since: cosmos-sdk 0.43
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="
}
]
}
}
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"
}
}
Since: cosmos-sdk 0.47
address is the account address string.
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"
}
}
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
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
address defines the address to query for.
GET /cosmos/auth/v1beta1/accounts/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"account": {
"type_url": "text",
"value": "Ynl0ZXM="
}
}
Since: cosmos-sdk 0.46.2
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.
account_id is the account number of the address to be queried.
Since: cosmos-sdk 0.47
GET /cosmos/auth/v1beta1/address_by_id/{id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"account_address": "text"
}
Since: cosmos-sdk 0.46
GET /cosmos/auth/v1beta1/bech32/{address_bytes} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"address_string": "text"
}
Since: cosmos-sdk 0.46
GET /cosmos/auth/v1beta1/bech32/{address_string} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"address_bytes": "Ynl0ZXM="
}
Since: cosmos-sdk 0.46
GET /cosmos/auth/v1beta1/module_accounts HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"accounts": [
{
"type_url": "text",
"value": "Ynl0ZXM="
}
]
}
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="
}
}
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"
}
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
block height at which to query.
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"
}
}
channel unique identifier
channel port identifier
packet sequence
block height at which to query.
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"
]
}
]
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
Height to query at.
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 unique identifier
port unique identifier
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 unique identifier
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"
}
}
client state unique identifier
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
client unique identifier
GET /ibc/core/client/v1/client_status/{client_id} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"status": "text"
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
client unique identifier.
the proof to be verified by the client.
the value which is proven.
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
}
unique channel identifier
unique port identifier
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"
}
The denomination trace ([port_id]/[channel_id])+/[denom]
GET /ibc/apps/transfer/v1/denom_hashes/{trace} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"hash": "text"
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information.
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"
}
}
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
}
}
unique channel identifier
unique port identifier
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
}
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"
}
}
unique channel identifier
the relayer address to which the counterparty is registered
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"
}
unique channel identifier
the relayer address to which the distribution address is registered
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"
}
channel unique identifier
channel port identifier
packet sequence
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"
}
]
}
channel unique identifier
channel port identifier
packet sequence
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"
}
]
}
channel unique identifier
channel port identifier
packet sequence
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"
}
]
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
block height at which to query.
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"
}
}
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"
}
GET /ibc/apps/interchain_accounts/controller/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"params": {
"controller_enabled": true
}
}
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"
]
}
}
channel unique identifier
port unique identifier
revision number of the consensus state
revision height of the consensus state
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"
}
}
channel unique identifier
port unique identifier
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"
}
}
channel unique identifier
port unique identifier
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"
}
}
channel unique identifier
port unique identifier
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"
}
}
channel unique identifier
port unique identifier
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
list of packet sequences.
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"
}
}
channel unique identifier
port unique identifier
packet sequence
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"
}
}
channel unique identifier
port unique identifier
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
channel unique identifier
port unique identifier
list of acknowledgement sequences
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"
}
}
channel unique identifier
port unique identifier
list of packet sequences
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"
}
}
channel unique identifier
port unique identifier
packet sequence
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"
}
}
channel unique identifier
port unique identifier
packet sequence
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"
}
}
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"
}
}
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"
}
}
connection unique identifier
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
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"
}
}
}
client identifier associated with a connection
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"
}
}
connection identifier
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"
}
}
connection identifier
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"
}
}
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"
}
}
client identifier
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
client identifier
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
client identifier
consensus state revision number
consensus state revision height
latest_height overrrides the height field and queries the latest stored ConsensusState.
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"
}
}
GET /ibc/core/client/v1/params HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"params": {
"allowed_clients": [
"text"
]
}
}
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="
}
}
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="
}
}
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"
}
}
GET /kiichain/tokenfactory/v1beta1/denoms/{denom}/authority_metadata HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"authority_metadata": {
"admin": "text"
}
}
GET /kiichain/tokenfactory/v1beta1/denoms_from_admin/{admin} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"denoms": [
"text"
]
}
GET /kiichain/tokenfactory/v1beta1/denoms_from_creator/{creator} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"denoms": [
"text"
]
}
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"
]
}
}
address is the ethereum hex address to query the account for.
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"
}
address is the ethereum hex address to query the balance for.
GET /cosmos/evm/vm/v1/balances/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"balance": "text"
}
GET /cosmos/evm/vm/v1/base_fee HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"base_fee": "text"
}
address is the ethereum hex address to query the code for.
GET /cosmos/evm/vm/v1/codes/{address} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"code": "Ynl0ZXM="
}
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"
}
}
address is the ethereum hex address to query the account for.
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"
}
args uses the same json format as the json rpc api.
gas_cap defines the default gas cap to be used.
proposer_address of the requested block in hex format.
chain_id is the eip155 chain id parsed from the requested block header.
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"
}
args uses the same json format as the json rpc api.
gas_cap defines the default gas cap to be used.
proposer_address of the requested block in hex format.
chain_id is the eip155 chain id parsed from the requested block header.
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"
}
GET /cosmos/evm/vm/v1/min_gas_price HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"min_gas_price": "text"
}
address is the ethereum hex address to query the storage state for.
key defines the key of the storage state
GET /cosmos/evm/vm/v1/storage/{address}/{key} HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"value": "text"
}
tracer is a custom javascript tracer.
timeout overrides the default timeout of 5 seconds for JavaScript-based tracing calls.
reexec defines the number of blocks the tracer is willing to go back.
disable_stack switches stack capture.
disable_storage switches storage capture.
debug can be used to print output during capture end.
limit defines the maximum length of output, but zero means unlimited.
homestead_block switch (nil no fork, 0 = already homestead).
dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork).
dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork.
eip150_block: EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork).
eip150_hash: EIP150 HF hash (needed for header only clients as only gas pricing changed).
eip155_block: EIP155Block HF block.
eip158_block: EIP158 HF block.
byzantium_block: Byzantium switch block (nil no fork, 0 = already on byzantium).
constantinople_block: Constantinople switch block (nil no fork, 0 = already activated).
petersburg_block: Petersburg switch block (nil same as Constantinople).
istanbul_block: Istanbul switch block (nil no fork, 0 = already on istanbul).
muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 = already activated).
berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin).
london_block: London switch block (nil = no fork, 0 = already on london).
arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated).
gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 = already activated).
merge_netsplit_block: Virtual fork after The Merge to use as a network splitter.
shanghai_block switch block (nil = no fork, 0 = already on shanghai).
cancun_block switch block (nil = no fork, 0 = already on cancun).
chain_id is the id of the chain (EIP-155).
denom is the denomination used on the EVM.
decimals is the real decimal precision of the denomination used on the EVM.
enable_memory switches memory capture.
enable_return_data switches the capture of return data.
tracer_json_config configures the tracer using a JSON string.
block_number of the traced block.
block_hash (hex) of the traced block.
block_time of the traced block.
proposer_address is the address of the requested block.
chain_id is the eip155 chain id parsed from the requested block header.
block_max_gas of the traced block.
GET /cosmos/evm/vm/v1/trace_block HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"data": "Ynl0ZXM="
}
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:
https
is assumed.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.
Must be a valid serialized protocol buffer of the above specified type.
size is the encoded storage size of the transaction (DEPRECATED).
hash of the transaction in hex format.
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.
tracer is a custom javascript tracer.
timeout overrides the default timeout of 5 seconds for JavaScript-based tracing calls.
reexec defines the number of blocks the tracer is willing to go back.
disable_stack switches stack capture.
disable_storage switches storage capture.
debug can be used to print output during capture end.
limit defines the maximum length of output, but zero means unlimited.
homestead_block switch (nil no fork, 0 = already homestead).
dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork).
dao_fork_support defines whether the nodes supports or opposes the DAO hard-fork.
eip150_block: EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork).
eip150_hash: EIP150 HF hash (needed for header only clients as only gas pricing changed).
eip155_block: EIP155Block HF block.
eip158_block: EIP158 HF block.
byzantium_block: Byzantium switch block (nil no fork, 0 = already on byzantium).
constantinople_block: Constantinople switch block (nil no fork, 0 = already activated).
petersburg_block: Petersburg switch block (nil same as Constantinople).
istanbul_block: Istanbul switch block (nil no fork, 0 = already on istanbul).
muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 = already activated).
berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin).
london_block: London switch block (nil = no fork, 0 = already on london).
arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 = already activated).
gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 = already activated).
merge_netsplit_block: Virtual fork after The Merge to use as a network splitter.
shanghai_block switch block (nil = no fork, 0 = already on shanghai).
cancun_block switch block (nil = no fork, 0 = already on cancun).
chain_id is the id of the chain (EIP-155).
denom is the denomination used on the EVM.
decimals is the real decimal precision of the denomination used on the EVM.
enable_memory switches memory capture.
enable_return_data switches the capture of return data.
tracer_json_config configures the tracer using a JSON string.
block_number of requested transaction.
block_hash of requested transaction.
block_time of requested transaction.
proposer_address is the proposer of the requested block.
chain_id is the eip155 chain id parsed from the requested block header.
block_max_gas of the block of the requested transaction.
GET /cosmos/evm/vm/v1/trace_tx HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"data": "Ynl0ZXM="
}
cons_address is the validator cons address to query the account for.
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"
}
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
}
}
delegator_address defines the delegator address to query for.
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/validators HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"validators": [
"text"
]
}
validator_address defines the validator address to query for.
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"
}
]
}
GET /cosmos/distribution/v1beta1/community_pool HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"pool": [
{
"denom": "text",
"amount": "text"
}
]
}
delegator_address defines the delegator address to query for.
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"
}
]
}
delegator_address defines the delegator address to query for.
validator_address defines the validator address to query for.
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"
}
]
}
delegator_address defines the delegator address to query for.
GET /cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address HTTP/1.1
Host: lcd.uno.sentry.testnet.v3.kiivalidator.com
Accept: */*
{
"withdraw_address": "text"
}
validator_address defines the validator address to query for.
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"
}
]
}
}
validator_address defines the validator address to query for.
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"
}
]
}
}
validator_address defines the validator address to query for.
starting_height defines the optional starting height to query the slashes.
starting_height defines the optional ending height to query the slashes.
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
Since: cosmos-sdk 0.46
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}
granter is the address of the user granting an allowance of their funds.
grantee is the address of the user being granted an allowance of another user's funds.
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="
}
}
}
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.
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.
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.
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.
reverse is set to true if results are to be returned in the descending order.
Since: cosmos-sdk 0.43
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"
}
}