diff --git a/04e8b755-d259-40f9-b66c-ddf5223c66fa/index.html b/04e8b755-d259-40f9-b66c-ddf5223c66fa/index.html deleted file mode 100644 index 3ccd68c..0000000 --- a/04e8b755-d259-40f9-b66c-ddf5223c66fa/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -Bank | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/0b33153c-9b3e-410f-abd7-2877ccb870ce/index.html b/0b33153c-9b3e-410f-abd7-2877ccb870ce/index.html deleted file mode 100644 index 14d2174..0000000 --- a/0b33153c-9b3e-410f-abd7-2877ccb870ce/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Recovery | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/0e1ccab2-5425-473e-be93-5b4a87de5d00/index.html b/0e1ccab2-5425-473e-be93-5b4a87de5d00/index.html deleted file mode 100644 index 3ad20e6..0000000 --- a/0e1ccab2-5425-473e-be93-5b4a87de5d00/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Custody | KIRA - - - - -
Skip to main content

Custody

Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs

-

x/custody

- - \ No newline at end of file diff --git a/184c11ed-4849-4ec5-acd0-f795b7abf467/index.html b/184c11ed-4849-4ec5-acd0-f795b7abf467/index.html deleted file mode 100644 index a4d1215..0000000 --- a/184c11ed-4849-4ec5-acd0-f795b7abf467/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -Fee processing | KIRA - - - - -
Skip to main content

Fee processing

Concept

-

Traditional Layer 1 blockchain networks like Ethereum use a complex, dynamic fee market determined by opcode prices and the computational "gas" consumed during transaction execution. In such a system, calculating the exact transaction cost can be cumbersome and time-consuming. Additionally, these opcode prices are deeply embedded within the protocol, typically requiring a network upgrade or hard fork for changes.

-

KIRA's approach replaces the conventional "gas" system with a governance-driven structure. Here, transaction fees are predefined for each type of transaction and uniformly denominated in ukex, simplifying and stabilizing the fee calculation. Additionally, the governance is tasked with setting failure fees for each transaction type and determining a specific timeout period for transactions. Complementing this streamlined fee structure, KIRA's Token Rates Registrar allows fees to be paid in other whitelisted tokens at a fee_rate defined by the governance. This mechanism ensures a clear and efficient conversion between ukex and other tokens, enhancing the network's flexibility and user accessibility.

-

Bounded fee range

-

While KIRA does have a fee market, it operates within a bounded range set by the min_tx_fee and max_tx_fee parameters. This approach serves two purposes:

-
    -
  • Spam Prevention: The min_tx_fee sets a lower boundary, acting as a deterrent against spam transactions, thus maintaining the network's integrity by preventing it from being overloaded with low-value or malicious transactions.
  • -
  • User Protection: The max_tx_fee acts as an upper limit, safeguarding users from inadvertently incurring excessive fees. This is particularly important in preventing significant fund losses that might occur due to mistakenly high fee inputs during transaction submission.
  • -
-

Parameters

-
NAMETYPEEXAMPLEDESCRIPTION
transaction_typestringsubmit-proposalThe specific transaction type the following parameters apply to. All existing types can be found here.
execution_feeuint64100The required fee for users to successfully execute this particular transaction type.
failure_feeuint6450The fee users must pay in case the transaction execution is unsuccessful.
timeoutuint64300The time duration (in seconds) after which the transaction execution will be considered as failed if not completed.
default_parametersuint6442The default input values that the corresponding transaction function will utilize before execution.
-

Cli syntax & examples

-
note

Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the Roles & Permissions documentation for more details. $SIGNER represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as $FLAGS_TX and $FLAGS_QR__, see the section

-

Transactions

set-execution-feeUpdate execution fee parameters for different transaction types.

Updating execution fees with sudo permission

The set-execution-fee CLI command allows accounts with sudo permission 7 to modify execution fee parameters for different transaction types.

Flags

    -
  • $TX_TYPE: The type of transaction for which the fees are being updated.
  • -
  • $EXECUTION_FEE: The fee for successful execution of the transaction.
  • -
  • $FAILURE_FEE: The fee for failed execution of the transaction.
  • -
  • $TX_TIMEOUT: The timeout duration for the transaction.
  • -
sekaid tx customgov set-execution-fee \
--from=$SIGNER $FLAGS_TX \
--transaction_type=$TX_TYPE \
--execution_fee=$EXECUTION_FEE \
--failure_fee=$FAILURE_FEE \
--timeout=$TX_TIMEOUT
- - \ No newline at end of file diff --git a/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c/index.html b/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c/index.html deleted file mode 100644 index 8c0b044..0000000 --- a/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -Data Registry | KIRA - - - - -
Skip to main content

Data Registry

Concept

-

The Data Registry is a curated data reference storage under governance. Its primary role is to sidestep the constraints of on-chain storage by providing references to external data resources, like those found on IPFS or GitHub. By doing so, the Data Registry ensures that large files or extended data sequences aren't directly stored on-chain. Instead, it archives external URLs, metalinks, and various distributed references. A pivotal aspect of the Data Registry is its ability to vouch for the authenticity and integrity of the external data. This is achieved via on-chain checksums, bolstering trustworthiness by verifying the consistency of hosted data. Furthermore, the Data Registry enriches the stored references by supplying supplementary information, including file size and encoding. Akin to how the Identity Registrar assures the legitimacy and uniqueness of user identities, the Data Registry offers a secure, reliable bridge between the on-chain network and the vast external data world.

-

Code of conduct

-

An integral property of the Data Registry is the code_of_conduct. This can be perceived as the Service-layer Agreement bridging network governance and its users. This off-chain text serves as a guiding beacon, delineating the expected conduct of network participants. In essence, it acts as the network's constitution, providing insights and guidelines to users and incoming governance members alike.

-

Parameters

-
NAMETYPEEXAMPLEDESCRIPTION
keystringdoc1The identifier for the stored property.
referencestringipfs://QmYw...The URL or metalink directing to the externally hosted file.
encodingstringmarkdownSpecifies the file's encoding type.
hashstringe3b0c442...The SHA256 checksum, ensuring the file's authenticity.
sizeuint641024Denotes the file size in Bytes.
-

Cli syntax & examples

-
note

Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the Roles & Permissions documentation for more details. $SIGNER represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as $FLAGS_TX and $FLAGS_QR__, see the section

-

Transactions

There is no transactions other than the governance proposals for this sub-module

- - \ No newline at end of file diff --git a/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html b/22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html similarity index 50% rename from learn/22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html rename to 22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html index 3da2766..210e4a2 100644 --- a/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html +++ b/22c36797-10c8-40e4-9457-d8f1b6b4563b/index.html @@ -3,33 +3,34 @@ -Glossary | KIRA - - +Glossary | KIRA + + -
Skip to main content

Glossary

    -
  • dApp: Decentralized application
  • -
  • SEKAI: SEKAI is KIRA Network's base layer (L1) blockchain application sometimes referred to as “backend”. The role of SEKAI is to be a source of shared security as well as a governance and settlement layer for all KIRA RollApps (L2). KIRA Blockchain preserves information such as user account balances, governance permissions, and dApp state roots as well as other essential data for coordinating both L1 and L2 operations.
  • +

    Glossary

      +
    • RollApp: Decentralized application
    • +
    • SEKAI: SEKAI is KIRA Network's base layer (L1) blockchain application sometimes referred to as “backend”. The role of SEKAI is to be a source of shared security as well as a governance and settlement layer for all KIRA RollApps (L2). KIRA Blockchain preserves information such as user account balances, governance permissions, and RollApp state roots as well as other essential data for coordinating both L1 and L2 operations.
    • MBPoS (Multi-Bonded Proof of Stake): MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. The reason behind multi-staking implementation in KIRA is to increase the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications.
    • -
    • INTERX: INTERX, which stands for Interchain NginX, is a decentralized middleware making it simple and intuitive to interact with KIRA network. INTERX has a supporting role for both frontends as dAPI gateway as well as for the L2 applications abstracting the complexity of blockchains and serving as a Content Availability Layer and P2P node discovery tool. In the context of dApps INTERX is used as both DA and Sequencer so that developers can focus fully on business logic and not infrastructure. One of the important features of INTERX is acting as a light client replacement and removes the dependency on centralized SSL certificate authorities through a combination of digital signatures and fraud proofs.
    • +
    • INTERX: INTERX, which stands for Interchain NginX, is a decentralized middleware making it simple and intuitive to interact with KIRA network. INTERX has a supporting role for both frontends as dAPI gateway as well as for the L2 applications abstracting the complexity of blockchains and serving as a Content Availability Layer and P2P node discovery tool. In the context of RollApps INTERX is used as both DA and Sequencer so that developers can focus fully on business logic and not infrastructure. One of the important features of INTERX is acting as a light client replacement and removes the dependency on centralized SSL certificate authorities through a combination of digital signatures and fraud proofs.
    • RYOKAI: The next generation of the KIRA Manager (KM 2.0) supporting the orchestration of the KIRA L2 applications.
    • VFG (Virtual Finality Gadget): The Virtual Finality Gadget (VFG) is a programmable finality enabling decentralized applications to share the security of the base layer and define their own consensus rules. The VFG is a protocol that enables KIRA to support any type of RollApp (Pessimistic, Optimistic, General Purpose, Recursive Blockchain). At the core of VFG lies the idea of splitting the application into dedicated execution and verification parts. Depending on which network participants run which part (execution or verification logic) any modern consensus type can be virtualized.
    • -
    • Monolithic Blockchain: In a monolithic blockchain, consensus nodes handle all network functions. These include processing transactions for all dApps, verifying transaction correctness, managing data storage, and achieving consensus among nodes. This model integrates all core tasks into a single blockchain system.
    • +
    • Monolithic Blockchain: In a monolithic blockchain, consensus nodes handle all network functions. These include processing transactions for all RollApps, verifying transaction correctness, managing data storage, and achieving consensus among nodes. This model integrates all core tasks into a single blockchain system.
    • Modular Blockchain: A modular blockchain is a system where various functions of the blockchain stack are separated into independent networks and then interconnected. This approach is similar to the concept of microservices in traditional web architectures, where different components like notifications, storage, monitoring, and payment are split into distinct services and integrated via APIs. In a modular blockchain, components such as the execution layer (i.e. sequencers), data availability layer, and settlement layer are distinct yet linked through specific protocols.
    • Hypermodularity: Hypermodularity refers to a system where all essential modular components are readily accessible to the nodes that require them, without the need to retrieve them from complex, dependent networks. This architecture aims to reduce unnecessary overhead, complexity, and dependency risk. An example here might be network layer awareness of the node location allowing DA microservice to be positioned right next to the Sequencer on the physical layer or other location relevant to a particular application and user-boosting efficiency.
    • Rollup/Rolldown: These terms describe different methods of finalizing the state transitions of Layer 2, particularly user balances or overall database state. In the case of "Rollups," state transitions that are attempted to be settled on the base layer are assumed to be by default correct unless evidence in the form of fraud proof is provided. In the case of "Rolldowns," state transitions that are attempted to be settled require a threshold of verifiers to accept them - for that reason, Rolldowns are sometimes referred to as "Pessimistic Rollups." In general, Rollup might be also referred to as an L2 or an independent network that uses a "pessimistic" or "optimistic" settlement with a larger base layer network (e.g., Ethereum) that it actively observes to gain access to tokens or otherwise communicate with other networks or applications. We might refer to such networks as sidechains, zones, and/or parachains. If such a network serves a very specific purpose, it might be also referred to as an "AppChain," or in other words, an Application Specific Blockchain. As of 2024, AppChains are an extinct concept, but you might come across them in various crypto-related literature and topics. In the case of KIRA, thanks to VFG, we can classify all types of blockchain or blockchain-less applications requiring trustless compute verification as "General Purpose Rollups" and do not have to reason about their inner-workings.
    • Optimistic Layer 2: In the optimistic approach, the computation of the new state of L2 is assumed to be correct by the Executor, until proven incorrect. The finality or computational verification of the rollup's new state is rerun only by one or more nodes that choose to do so. If no node disputes the state within a certain time frame (typically 7 days), it is then considered finalized.
    • Pessimistic Layer 2: In this approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. The finality or computational verification of the rollup's new state is deterministically re-executed by one or more other nodes. An example of a pessimistic rollup is the use of Zero-Knowledge proofs, where the Executor generates a proof, and then another node verifies this proof. The proof verification logic is deterministic and uniform across all verifiers.
    • General Layer 2: In the general approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. Finality is still contingent upon at least one node's re-execution of the state transition, but the verification can employ non-deterministic methods. This approach accommodates a broader spectrum of application frameworks, e.g., applications that operate at CPU clock speeds, also known as blockchain-less applications.
    • -
    • Blockchain-less Application: A blockchain-less application is a type of dApp that processes user transactions in real-time, without the traditional blockchain mempool. This absence of a visible mempool eliminates the possibility of malicious participants manipulating transaction order, thereby reducing common issues such as front-running and Maximum Extractable Value exploitation. The responsibility for maintaining the integrity of transaction processing and execution order lies with the dApp Leader, who, in the event of any provable misconduct, can be subject to eviction.
    • -
    • Consensus node (validator): A Consensus node is an active network participant responsible for processing transactions, adding new blocks to SEKAI, and storing SEKAI state by running a ‘validator’ node. Each node is responsible for creating and managing its unique staking pool where delegators can lock their funds to provide security to the network. Additionally, Consensus nodes may opt in to act as Executors for dApps.
    • +
    • Blockchain-less Application: A blockchain-less application is a type of RollApp that processes user transactions in real-time, without the traditional blockchain mempool. This absence of a visible mempool eliminates the possibility of malicious participants manipulating transaction order, thereby reducing common issues such as front-running and Maximum Extractable Value exploitation. The responsibility for maintaining the integrity of transaction processing and execution order lies with the RollApp Leader, who, in the event of any provable misconduct, can be subject to eviction.
    • +
    • Consensus node (validator): A Consensus node is an active network participant responsible for processing transactions, adding new blocks to SEKAI, and storing SEKAI state by running a ‘validator’ node. Each node is responsible for creating and managing its unique staking pool where delegators can lock their funds to provide security to the network. Additionally, Consensus nodes may opt in to act as Executors for RollApps.
    • Delegator: A Delegator is any network participant who engages in consensus by locking assets as collateral to one or multiple staking pools without necessarily running a ‘validator’ node. Note that KIRA doesn’t require block proposers to have a minimum self-bonded stake to pledge their honesty. It is the responsibility of delegators to exercise due diligence and diversification when choosing a block proposer staking pool, as the risk of staked assets is directly exposed to the block proposer’s actions. However, contrary to other PoS blockchains, double-signing is the only behavior that results in slashing (downtime is not penalized).
    • -
    • dApp Session: A dApp Session refers to a designated period during which a dApp is executed by a single Executor, known as the dApp Leader. This session encompasses the operational phase of the dApp: the execution of its code and the subsequent processing of any changes to SEKAI state and/or the dApp's internal database. The session concludes with the submission of these changes for verification by Fishermen, and consensus by other Executors, in cases where more than one Executor is involved. For changes to be accepted, they must be approved by a supermajority of Executors and receive no rejections from Fishermen.
    • -
    • Verifier: A Verifier is a participant responsible for verifying the correctness of submissions made by the dApp Leader following the execution phase of a dApp session. Verifiers are either Fishermen or Executors who are not currently serving as the dApp Leader.
    • -
    • Executor: An Executor is a consensus node responsible for the validation and approval of the outcomes of a dApp session. They are responsible for storing the dApp's internal state and reviewing and voting on the results submitted by the dApp Leader, including changes to SEKAI state and updates to the dApp's internal state. Executors who are not serving as the dApp Leader automatically assume the role of a Verifier. Executors have the freedom to select which dApp(s) they wish to run, based on system requirements, and/or they can be appointed by the dApp's deployer.
    • -
    • dApp Leader: A dApp Leader, also referred to as a Sequencer, is a single Executor responsible for executing a dApp session. They are tasked with computing the outcomes of the dApp, such as changes in SEKAI state and/or dApp internal database updates. The dApp Leader submits these results for verification by Fishermen, and consensus by other Executors in cases where more than one Executor is involved.
    • -
    • Fishermen: They are a subset of dApp Verifiers who are tasked with specializing in overseeing and validating state transitions of a dApp. Like the Executors, they are responsible for storing the dApp's internal state. However they are distinct from Executors in that they are not part of SEKAI validator set and therefore cannot become dApp leaders. Their primary function is to ensure the correctness of state transitions using any chosen proprietary logic, with the authority to halt an application if they detect incorrect transitions.
    • -
    +
  • Session: A RollApp session refers to a designated period during which a RollApp is executed by a single Executor, known as the RollApp Leader. This session encompasses the operational phase of the RollApp: the execution of its code and the subsequent processing of any changes to SEKAI state and/or the RollApp's internal database. The session concludes with the submission of these changes for verification by Fishermen, and consensus by other Executors, in cases where more than one Executor is involved. For changes to be accepted, they must be approved by a supermajority of Executors and receive no rejections from Fishermen.
  • +
  • Verifier: A Verifier is a participant responsible for verifying the correctness of submissions made by the RollApp Leader following the execution phase of a RollApp session. Verifiers are either Fishermen or Executors who are not currently serving as the RollApp Leader.
  • +
  • Executor: An Executor is a consensus node responsible for the validation and approval of the outcomes of a RollApp session. They are responsible for storing the RollApp's internal state and reviewing and voting on the results submitted by the RollApp Leader, including changes to SEKAI state and updates to the RollApp's internal state. Executors who are not serving as the RollApp Leader automatically assume the role of a Verifier. Executors have the freedom to select which RollApp(s) they wish to run, based on system requirements, and/or they can be appointed by the RollApp's controllers.
  • +
  • RollApp Leader: A RollApp Leader, also referred to as a Sequencer, is a single Executor responsible for executing a RollApp session. They are tasked with computing the outcomes of the RollApp, such as changes in SEKAI state and/or RollApp internal database updates. The RollApp Leader submits these results for verification by Fishermen, and consensus by other Executors in cases where more than one Executor is involved.
  • +
  • Controller(s): This term refer to the person or team responsible for developing and maintaining a RollApp. They are represented by a set of KIRA addresses and have the ability to update the controller set and upgrade the RollApp's binaries and core functionality through new releases. Note that KIRA implements account abstraction, so a RollApp can serve as its own Controller. As the managers of a RollApp, Controllers have the authority to approve or deny Consensus nodes participation as Executors or Verifiers. This gives them control over who can validate and execute transactions for their particular application.
  • +
  • Fishermen: They are a subset of RollApp Verifiers who are tasked with specializing in overseeing and validating state transitions of a RollApp. Like the Executors, they are responsible for storing the RollApp's internal state. However, they are distinct from Executors in that they are not part of SEKAI validator set and therefore cannot become RollApp leaders. Their primary function is to ensure the correctness of state transitions using any chosen proprietary logic, with the authority to halt an application if they detect incorrect transitions.
  • +
\ No newline at end of file diff --git a/27fe8d79-00c0-4e0b-872b-3d72a246c073/index.html b/27fe8d79-00c0-4e0b-872b-3d72a246c073/index.html deleted file mode 100644 index f2e3c1f..0000000 --- a/27fe8d79-00c0-4e0b-872b-3d72a246c073/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -SEKAI | Backend | KIRA - - - - -
Skip to main content

SEKAI | Backend

Sekai

-

SEKAI 世界 (せかい) - is KIRA’s blockchain application responsible for all on-chain logic such as processing transactions and state transitions. SEKAI is executed by specialized node operators called consensus nodes a.k.a “Validators” who individually propose new blocks and together agree on the correctness of each new block in accordance with the SEKAI codebase. In short, all logic relevant to the block propagation and networking is handled by Tendermint while all application logic is handled by SEKAI (sekaid).

- - \ No newline at end of file diff --git a/2ac3bfb7-478c-4207-a290-051d9fa6124f/index.html b/2ac3bfb7-478c-4207-a290-051d9fa6124f/index.html new file mode 100644 index 0000000..5745b05 --- /dev/null +++ b/2ac3bfb7-478c-4207-a290-051d9fa6124f/index.html @@ -0,0 +1,14 @@ + + + + + +Orchestrator - RYOKAI | KIRA + + + + +
Skip to main content

Orchestrator - RYOKAI

RYOKAI 了解 (りょかい), previously known as KIRA Manager, is KIRA’s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.

+

RYOKAI facilitates the initialization and management of nodes via a built-in terminal, which permits the direct execution of commands on remote hosts. Additionally, it offers cross-platform support, enabling consensus nodes to manage their validator accounts on Android, iOS, and Linux devices. These features provide operators with the flexibility to access and control their infrastructure from any location, at any time. For monitoring, RYOKAI eliminates the need for additional computer systems by incorporating Prometheus exporters and the standard Tendermint endpoint (:26660). These tools collect and relay operational data, providing validators with a detailed understanding of network health and performance without relying on traditional monitoring infrastructure. Additionally, RYOKAI improves network security through firewall configurations, ssh key management, and encrypted communication channels to prevent unauthorized access and vulnerabilities.

+ + \ No newline at end of file diff --git a/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4/index.html b/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4/index.html deleted file mode 100644 index 408aaa2..0000000 --- a/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -Params | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/31613d97-abfb-4911-b17a-0c83cdba58a7/index.html b/31613d97-abfb-4911-b17a-0c83cdba58a7/index.html deleted file mode 100644 index 8b93e3e..0000000 --- a/31613d97-abfb-4911-b17a-0c83cdba58a7/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - -Keys & accounts | KIRA - - - - -
Skip to main content

Keys & accounts

An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.

-

KIRA accounts only exist on the blockchain if they have a non-zero balance. This is a feature of the Cosmos SDK that helps prevent the creation of "spam" accounts that do not hold any value. All KIRA addresses are 44 characters long and are Bech32 encoded with a kira prefix (e.g. kira1d52rts8wf508uy2sdcx4a0qxjzvqr3dsnesm4w). These accounts are derived from BIP39 mnemonic words, which must be kept safe by the account holder at all times. Losing access to the mnemonic or revealing its contents will result in permanent and irrecoverable loss of funds.

-

KIRA network defines 3 types of addresses that specify a context where an account is used:

-
    -
  • AccAddress identifies users (the sender of a message).
  • -
  • ValAddress identifies consensus node operators (a.k.a validators).
  • -
  • ConsAddress identifies consensus nodes that are participating in consensus. Consensus nodes are derived using the ed25519 curve.
  • -
-

Keyring

-

Like in every Cosmos-based network, Private/Public keys are stored and managed by using an object called a Keyring which default implementation comes from the third-party 99designs/keyring library. The private key can be stored in different "backends", such as a file or the operating system's own key storage system. The keyring allows users to manage their keys in a secure and convenient way, and can be integrated with various backend storage options to suit the needs of the user. These backends can be specified in the CLI using the --keyring-backend flag (cf. ).

-
    -
  • The os backend: This backend relies on operating system-specific defaults to handle key storage securely. It is the default option and is designed to meet users' most common needs and provide a comfortable experience without compromising on security.
  • -
  • The file backend: This backend stores the keyring encrypted within the app's configuration directory. It requires a password each time it is accessed, which may result in multiple prompts.
  • -
  • The pass backend: This backend uses the pass utility to manage on-disk encryption of keys' sensitive data and metadata. Keys are stored inside gpg encrypted files within app-specific directories.
  • -
  • The kwallet backend: This backend uses KDE Wallet Manager, which comes installed by default on the GNU/Linux distributions that ships KDE as default desktop environment.
  • -
  • The test backend: This backend is a password-less variation of the file backend and is provided for testing purposes only. It stores keys unencrypted on disk and is not recommended for use in production environments.
  • -
  • The memory backend: This backend stores keys in memory, which are immediately deleted after the program has exited. It is provided for testing purposes only and is not recommended for use in production environments.
  • -
-

Cli syntax & examples

-
note

Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the Roles & Permissions documentation for more details. $SIGNER represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as $FLAGS_TX and $FLAGS_QR__, see the section

-

Transactions

keys addAdd or recover an encrypted private key.
keys deleteDelete a key from the keyring.
keys recoverRecover a key using a mnemonic.

Creating an account

To create a new key in the keyring, use the add subcommand and provide the desired account key name as an argument. You can also specify the keyring backend to use by setting the $FLAGS_TX environment variable or by manually using the --keyring-backend flag. This is important as it determines where the private/public keypair will be stored and how it will be managed. A --multisig flag can also be provided to group multiple keys together to create a multisig key.

Flags

    -
  • $MULTISIG: List of key names for constructing a legacy multisig key.
  • -
  • $MULTISIGTHRESHOLD: K out of N required signatures for multisig.
  • -
  • $NOSORT: Keys are taken in the order supplied if true.
  • -
  • $PUBLICKEY: Saves key info to file from a JSON format public key.
  • -
  • $INTERACTIVE: Interactively prompt for BIP39 passphrase and mnemonic.
  • -
  • $USELEDGER: Store a reference to a private key on a Ledger device.
  • -
  • $RECOVER: Recover an existing key using a seed phrase.
  • -
  • $NOBACKUP: Don't print out the seed phrase.
  • -
  • $DRYRUN: Perform action without adding key to local keystore.
  • -
  • $HDPATH: Manual HD Path derivation.
  • -
  • $COINTYPE: Coin type number for HD derivation.
  • -
  • $ACCOUNT: Account number for HD derivation.
  • -
  • $INDEX: Address index number for HD derivation.
  • -
  • $KEYALGORITHM: Key signing algorithm for generating keys.
  • -
  • $ACCOUNT_NAME: The account key name.
  • -
sekaid keys add $ACCOUNT_NAME $FLAGS_TX

Deleting an account

To delete a key from the keyring, use the delete subcommand and provide the desired account key address as an argument and specify the keyring backend to delete from by setting the $FLAGS_TX environment variable or by manually using the --keyring-backend flag. --force flag can be specified to skip passphrase check and force key deletion unconditionally.

note

Removing offline or ledger keys will remove only the public key references stored locally, i.e. private keys stored in a ledger device cannot be deleted with the CLI.

Flags

    -
  • $YES: Skip confirmation prompt when deleting keys.
  • -
  • $FORCE: Remove the key unconditionally without asking for the passphrase.
  • -
sekaid keys delete $ACCOUNT_NAME $FLAGS_TX --force --yes

Recovering an account using mnemonic

To recover an account using its respective mnemonic, use the add subcommand with the —recover flag and provide the desired account key name as an argument.

Args

    -
  • $ACCOUNT_MNEMONIC: The account’s mnemonic.
  • -
yes "$ACCOUNT_MNEMONIC" | sekaid keys add $ACCOUNT_NAME $FLAGS_TX --recover
- - \ No newline at end of file diff --git a/34367cb0-ee71-418f-9dc5-bcc8823b71e5/index.html b/34367cb0-ee71-418f-9dc5-bcc8823b71e5/index.html deleted file mode 100644 index f3c5a23..0000000 --- a/34367cb0-ee71-418f-9dc5-bcc8823b71e5/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -Governance-regulated Foreign Token Transfers | KIRA - - - - -
Skip to main content

Governance-regulated Foreign Token Transfers

Concept

-

Foreign tokens can significantly impact the network's economy if they are stolen or originate from a compromised network (i.e. Luna). For instance, should a token experience sudden supply exploitation, it could pose a serious risk to the network's spam protection mechanism if used for fee payments. To mitigate this risk, KIRA’s governance has the ability to create and manage blacklist and whitelist filters for foreign token transfers. These filters can be enabled or disabled through the enable_token_whitelist and enable_token_blacklist network properties, and their contents are curated through dedicated governance proposals. In the event that a foreign network becomes compromised and its tokens are deposited into KIRA, these filters can be used to recover funds through a planned hard fork. This process is similar to funds recovery in other Proof-of-Stake and Proof-of-Work chains, but offers on-chain signaling of the network governance's intentions.

-

Filters mechanism

-

When the enable_token_whitelist network property is set to true, SEKAI will check whether a given token is whitelisted before allowing it to be transferred. Similarly, when the enable_token_blacklist network property is set to true, SEKAI will check whether a given token is blacklisted before allowing it to be transferred. These checks are performed during the AnteHandler phase of transaction processing.

-

If a token is not on the whitelist (in the case of enable_token_whitelist being set to true) or is on the blacklist (in the case of enable_token_blacklist being set to true), then the transaction will fail validation during the AnteHandler phase, and the transaction will not be broadcasted to the network or included in any block.

-

Parameters

-

Cli syntax & examples

-
note

Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the Roles & Permissions documentation for more details. $SIGNER represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as $FLAGS_TX and $FLAGS_QR__, see the section

-

Transactions

There is no transactions other than the governance proposals for this sub-module.

- - \ No newline at end of file diff --git a/39242b54-c86a-4406-82f9-49cad4ed7c5a/index.html b/39242b54-c86a-4406-82f9-49cad4ed7c5a/index.html deleted file mode 100644 index 57e1618..0000000 --- a/39242b54-c86a-4406-82f9-49cad4ed7c5a/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -Command Line Interface | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/3997e5c8-f744-4e83-9e22-f6845cc6c3ee/index.html b/3997e5c8-f744-4e83-9e22-f6845cc6c3ee/index.html deleted file mode 100644 index ec61757..0000000 --- a/3997e5c8-f744-4e83-9e22-f6845cc6c3ee/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Staking Collectives | KIRA - - - - -
Skip to main content

Staking Collectives

Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.

-

x/collectives

- - \ No newline at end of file diff --git a/39d6465e-61d4-4aff-868f-123b65c86326/index.html b/39d6465e-61d4-4aff-868f-123b65c86326/index.html new file mode 100644 index 0000000..04fe090 --- /dev/null +++ b/39d6465e-61d4-4aff-868f-123b65c86326/index.html @@ -0,0 +1,39 @@ + + + + + +KEX- KIRA’s Native Token | KIRA + + + + +
Skip to main content

KEX- KIRA’s Native Token

For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.

+

+

Kex, Kira’s Native Token

+
note

The KIRA network uses a shared clock to define the inflation rate of KEX, rather than relying on the traditional block time. This means that the amount of block rewards given out can fluctuate depending on network latency, block proposer timeouts, and other factors. This design choice was made to prevent consensus nodes from attacking the network by speeding up the block speed in order to increase KEX inflation, while simultaneously rejecting incoming transactions. While this approach may seem unfair at first glance, it ensures that over the long term, everyone participating in the network will receive their fair share of rewards on average.

+

The inflation rate of the native asset KEX is determined by the governance of the network. Inflation is used to attract activity and participation on the network, as well as to provide security through incentivizing stakeholders to hold valuable assets. The [Problem Internal Link] module also allows the governance to define the distribution of incentives in order to maintain the relevance and value of KEX. This is an important part of the system's design, as it ensures that the native asset remains an attractive and desirable token for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value.

+

Governance can configure KEX’s inflation rate with the following [Problem Internal Link]:

+
    +
  • inflation_rate - KEX inflation percentage +
      +
    • Default:
    • +
    • Minimum: 0
    • +
    • Maximum: 50
    • +
    +
  • +
  • inflation_period - Period of time in seconds over which current KEX supply is inflated by inflation_rate +
      +
    • Default: 31557600 (=1 year)
    • +
    • Minimum: 2629800
    • +
    • Maximum: 31557600
    • +
    +
  • +
+
+

Example over a period of 3600 seconds: For a starting KEX token supply at T1\small{T1} of 300500000, an inflation_rate of 15%, and an inflation_period of 31557600 seconds, all delegators staking their coins from T2T1=3600\small {T2-T1 = 3600} seconds would cumulatively qualify to claim 300500000×0.1531557600×36005142\small{ \dfrac{300500000 \times 0.15}{31557600} \times 3600 \approx 5142} KEX at T2\small{T2}.

+
+

Kex Economics

+
Initial token supply300 000 000
Current circulating supplyReal time circulating supply available here: circ.kira.network
Maximum token supplyNone. Can be capped by governance.
Token inflation18% annual rate by default.
Token allocation & distribution scheduleAll relevant information are available here.
Minimum stake for consensus nodeNo minimum
Active set minimumNo minimum
+ + \ No newline at end of file diff --git a/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5/index.html b/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5/index.html deleted file mode 100644 index 0a55613..0000000 --- a/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -Wallet | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/404.html b/404.html index c2d7748..256371e 100644 --- a/404.html +++ b/404.html @@ -1,13 +1,13 @@ - + -KIRA - - +KIRA + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/4672bb94-ed2b-4e45-9d33-af999825c193/index.html b/4672bb94-ed2b-4e45-9d33-af999825c193/index.html deleted file mode 100644 index a77c1e6..0000000 --- a/4672bb94-ed2b-4e45-9d33-af999825c193/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Slashing | KIRA - - - - -
Skip to main content

Slashing

A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.

-

x/slashing

- - \ No newline at end of file diff --git a/492e443f-5703-4d95-8508-a101405efde3/index.html b/492e443f-5703-4d95-8508-a101405efde3/index.html new file mode 100644 index 0000000..18d9fd9 --- /dev/null +++ b/492e443f-5703-4d95-8508-a101405efde3/index.html @@ -0,0 +1,26 @@ + + + + + +Unified Liquid Staking | KIRA + + + + +
Skip to main content

Unified Liquid Staking

KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.

+

Liquid staking has multiple pain points in the current DeFi landscape. Due to competition within the LSD sector, LSD liquidity is fragmented across DeFi. Furthermore, each LSD must be integrated individually for use within DeFi protocols, which introduces coordination overhead, additional attack vectors, and value leaks.

+

KIRA's Token Basketing module solves for the friction associated with liquid staking by aggregating users' receipt tokens by their liquidity denominations, into cohesive fungible assets.

+

The Token Basketing module's AMM is self-rebalancing and offers swaps without price impact.

+

A important aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:

+i=0tokens.Length1tokens[i].weighttokens[i].amount=constant\left \lfloor{ \sum_{i=0}^{tokens.Length - 1}tokens[i].weight \cdot tokens[i].amount}\right \rfloor = constant +

This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the surplus, while the swap fee is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system.

+

Assets within the pool are weighted according to their underlying staked value - these predetermined weights dictate the fixed price ratios at which incoming swaps are filled.

+

Governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens B<id> otherwise there will not be enough tokens in the basket to redeem. For example, if the basket B<id> includes tokens A, B, and C, the governance must ensure that

+(Aamount×Aweight)+(Bamount×Bweight)+(Camount×Cweight)B<ID>_<denom>.total_amount_issued\left(A_{amount} \times A_{weight}\right) + \left(B_{amount} \times B_{weight}\right) + \left(C_{amount} \times C_{weight}\right) \geq B_{<ID>\_<denom>.total\_amount\_issued} +

If the weights are not correctly configured, the governance proposal to update the basket weights will fail.

+

To protect against depegging scenarios, each token has a configurable maximum limit within its basket. In the event that an incoming swap would disbalance the composition of a particular basket, dynamic fees are adjusted to return it to equilibrium, incentivizing swaps rebalancing the basket over swaps that do not.

+

As token baskets are built into the base layer, this same weighting system adjusts automatically for changes in underlying staked value. Staking rewards and slashing penalties are automatically accounted for, without dependence on any third-party oracle.

+

Should intervention be required from onchain governance, multiple failsafe mechanisms exist. Validators can vote to include or exclude tokens from baskets. In the event of an ongoing emergency, swaps can be halted by governance until the situation is resolved. Additionally, swap fees accumulate toward a surplus which functions like an insurance fund controlled by chain governance. In the unlikely event that an asset does become depegged within its basket, governance can mobilize these surplus funds toward the asset’s peg restoration.

+ + \ No newline at end of file diff --git a/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef/index.html b/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef/index.html deleted file mode 100644 index ee101d1..0000000 --- a/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Governance | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/5b32eede-3889-4f8e-baf5-0f0dc9179a6b/index.html b/5b32eede-3889-4f8e-baf5-0f0dc9179a6b/index.html new file mode 100644 index 0000000..09f249d --- /dev/null +++ b/5b32eede-3889-4f8e-baf5-0f0dc9179a6b/index.html @@ -0,0 +1,28 @@ + + + + + +Rewards and Incentives Structure | KIRA + + + + +
Skip to main content

Rewards and Incentives Structure

Staking Rewards

+

KIRA consensus nodes earn trifold rewards: block rewards, fee rewards, and app incentives. They are distributed in slightly different ways but follow a simple generic pattern. They are awarded per block. The selected block proposer first takes a commission before the remainder is shared among its respective delegators who have entrusted their assets to the consensus nodes to participate in consensus on their behalf.

+
    +
  • Block rewards are a fixed amount of KEX tokens minted in each block — shared between delegators according to the total value of all the tokens they have delegated among all active staking pools. Hence, block rewards compensate delegators proportionally to the risk they are taking network-wise — this is similar to Cosmos reward distribution.
  • +
  • Fee rewards are a portion of the [Problem Internal Link] paid by users for each transactions shared between its delegators according to their share of the staking pool. Hence, fee rewards only compensate delegators proportionally to the risk they are taking locally — this is similar to Polkadot reward distribution. Note that fee rewards are not limited to KEX and can also include a variety of different tokens that are whitelisted for fee payment. The composition of the rewards basket may vary based on the type and volume of activity conducted on the network.
  • +
+

Application Incentives

+

A portion of the swap fees generated by the AMM pool of any app will be paid to consensus nodes serving as active app executors and verifiers for said apps, and by extension their delegators. dApp deployers may choose to offer additional incentives for consensus nodes to serve as the execution layer for these apps. Application incentives are paid in similar fashion to fee rewards.

+

Auxiliary Rewards

+

In addition, KIRA has two subsidiary sources of extrinsic rewards which are more circumstantial:

+
    +
  • Universal Basic Income (from KEX inflation) — The [Problem Internal Link] module allows to create various incentivization schemes for a specific network purposes (e.g. increasing block rewards if the network security subsidy becomes too low), or a specific role (e.g. community managers).
  • +
  • Stake grants (from KIRA’s treasury) — Winners of the incentivized games will be allocated some amount of staked KEX from the treasury to help them bootstrapping their nodes.
  • +
+

Recap

+
REWARDS TYPEREWARDS ORIGINBLOCK PROPOSER SHAREDELEGATORS SHARESEKAI MODULE
Block rewardsKEX inflationAccording to its staking pool commission rate
(min 1%, max 50%)
Split according to the total amount of assets they have staked network-wise (all staking pools)[Problem Internal Link]
Fee rewards[Problem Internal Link] (multiple tokens)According the [Problem Internal Link] validators_fee_share
(default 50%)
Split according to the total amount of assets they have staked locally (in the block proposer’s staking pool)[Problem Internal Link]
Universal Basic IncomeKEX inflationSet by governance proposalSet by governance proposal[Problem Internal Link]
Stake grantsKEX treasuryTBDTBDN/A
App IncentiveL2 AMMsapplications25% share of swap fees originating from dApp token swapsapplication dependent
+ + \ No newline at end of file diff --git a/6196d806-d61d-4013-b317-d9f2f8f4008f/index.html b/6196d806-d61d-4013-b317-d9f2f8f4008f/index.html deleted file mode 100644 index f7fc475..0000000 --- a/6196d806-d61d-4013-b317-d9f2f8f4008f/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - -Community | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/64eb7e84-ab20-454d-953f-57b1cf457790/index.html b/64eb7e84-ab20-454d-953f-57b1cf457790/index.html deleted file mode 100644 index cbdeb02..0000000 --- a/64eb7e84-ab20-454d-953f-57b1cf457790/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Multistaking | KIRA - - - - -
Skip to main content

Multistaking

KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.

-

x/staking x/multistaking

- - \ No newline at end of file diff --git a/65e3e6fe-040a-4716-b13b-9e27def6ff9d/index.html b/65e3e6fe-040a-4716-b13b-9e27def6ff9d/index.html deleted file mode 100644 index fcd305b..0000000 --- a/65e3e6fe-040a-4716-b13b-9e27def6ff9d/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - -Poor Network Conditions | KIRA - - - - -
Skip to main content

Poor Network Conditions

Concept

-

The robustness of the KIRA network is maintained by a set of active consensus nodes who ensure the smooth operation and security of the system. However, external factors or unforeseen events can sometimes hinder their ability to maintain the integrity of the network. Such a scenario where the number of active consensus nodes drops below the defined min_validators network property is termed as "Poor Network Conditions".

-

This condition could be attributed to various potential causes:

-
    -
  • Malicious DOS/DDOS attacks targeting consensus nodes not utilizing sentry nodes.
  • -
  • Coordinated interference from multiple ISPs used by consensus nodes.
  • -
  • Anomalies in DNS servers or incorrect address routing.
  • -
  • Failed network upgrades leading to unexpected behaviors.
  • -
  • Global political events affecting internet connectivity, like the "Great Firewall 2.0".
  • -
  • Among other unforeseen circumstances...
  • -
-

In response to these challenges, this module activates specific protocols and safeguards designed to protect the network and its users. These measures include limiting certain transactions and adjusting network properties to ensure asset safety and network stability until normal conditions are restored.

-

Ensuring network & users safety

-

The primary objective during poor network conditions is to safeguard user assets until the network regains its strength. The poor_network_max_bank_send network property is instrumental in this context. It dictates the upper limit for asset transfers during compromised network states. By equating this value with the max_tx_fee, the network can prevent potential asset misappropriation by malicious entities.

-

Furthermore, custodians can monitor the min_validators and poor_network_max_bank_send to decide whether to accept transfers from a network or a fork, especially if the consensus nodes count dips below the safety threshold. Essentially, these measures deter malicious consensus nodes from gaining undue advantages, such as attempting to sideline honest consensus nodes for their own gain.

-

Restricted transaction types

-

In light of such situations, the network can determine which Transaction Message Types are permissible. This proactive approach halts any unexpected network activities until a sufficient number of nodes is available for secure chain operation.

-

The default set of allowed messages during poor network conditions are:

-
MESSAGE TYPEDESCRIPTION
MsgTypeSubmitProposalSubmit a new governance proposal
MsgTypeSetNetworkPropertiesUpdate network-level properties/settings
MsgTypeVoteProposalCast a vote on an existing governance proposal
MsgTypeClaimCouncilorRequest to claim a councilor role
MsgTypeWhitelistPermissionsGrant certain permissions to an entity
MsgTypeBlacklistPermissionsRevoke certain permissions from an entity
MsgTypeCreateRoleCreate a new network role
MsgTypeAssignRoleAssign an existing role to an entity
MsgTypeUnassignRoleRemove a role from an entity
MsgTypeWhitelistRolePermissionGrant specific permissions to a role
MsgTypeBlacklistRolePermissionRevoke specific permissions from a role
MsgTypeRemoveWhitelistRolePermissionRemove granted permissions from a role's whitelist
MsgTypeRemoveBlacklistRolePermissionRemove permissions from a role's blacklist
MsgTypeClaimValidatorRequest to claim validator seat
MsgTypeActivateActivate the consensus node that was previously inactivated for downtime
MsgTypePauseTemporarily pause the consensus node
MsgTypeUnpauseResume a previously paused consensus node
MsgTypeRegisterIdentityRecordsRegister new identity records
MsgTypeEditIdentityRecordModify an existing identity record
MsgTypeRequestIdentityRecordsVerifyRequest verification for an identity record
MsgTypeHandleIdentityRecordsVerifyRequestHandle incoming verification requests
MsgTypeCancelIdentityRecordsVerifyRequestCancel a previously made verification request
-

Parameters

-
NAMETYPEEXAMPLEDESCRIPTION
poor_network_messages[]stringMsgTypeSubmitProposal,MsgTypeSetNetworkProperties,…A list defining the type of messages allowed during poor network conditions.
-

Cli syntax & examples

-
note

Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the Roles & Permissions documentation for more details. $SIGNER represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as $FLAGS_TX and $FLAGS_QR__, see the section

-

Transactions

There is no transactions other than the governance proposals for this sub-module

- - \ No newline at end of file diff --git a/6a318dbd-2d44-4f1f-9729-5e608286289f/index.html b/6a318dbd-2d44-4f1f-9729-5e608286289f/index.html deleted file mode 100644 index 41282af..0000000 --- a/6a318dbd-2d44-4f1f-9729-5e608286289f/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Evidence | KIRA - - - - -
Skip to main content
- - \ No newline at end of file diff --git a/6c6d144f-f315-43f7-8fe7-289d98890a69/index.html b/6c6d144f-f315-43f7-8fe7-289d98890a69/index.html deleted file mode 100644 index ce988d8..0000000 --- a/6c6d144f-f315-43f7-8fe7-289d98890a69/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Token Basketing | KIRA - - - - -
Skip to main content

Token Basketing

Through the functionality of this module users can bundle same-denomination tokens, such as KIRA’s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.

-

x/basket

-
- - \ No newline at end of file diff --git a/865cb42c-7ed4-4607-a446-c7ef3882056e/index.html b/865cb42c-7ed4-4607-a446-c7ef3882056e/index.html deleted file mode 100644 index 7b1ecc5..0000000 --- a/865cb42c-7ed4-4607-a446-c7ef3882056e/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Universal Basic Income | KIRA - - - - -
Skip to main content

Universal Basic Income

Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals.

-

x/ubi

- - \ No newline at end of file diff --git a/8a93bc9c-ce24-4129-96d5-9bbe381f6851/index.html b/8a93bc9c-ce24-4129-96d5-9bbe381f6851/index.html new file mode 100644 index 0000000..8b59ca7 --- /dev/null +++ b/8a93bc9c-ce24-4129-96d5-9bbe381f6851/index.html @@ -0,0 +1,28 @@ + + + + + +Middleware - INTERX | KIRA + + + + +
Skip to main content

Middleware - INTERX

Overview

+

INTERX (インターエックス) is KIRA's decentralized middleware service and is often referred to as KIRA’s Content Availability Layer. It is responsible for node monitoring, peer discovery, response caching, proxy, load balancing, storage, sequencing, and propagation (targeted gossiping) of data and transactions between client-facing applications and KIRA’s back-end services such as L2 apps or SEKAI. It optimizes communication across users, nodes, and Rollapps by enabling the formation of well-connected network subnets dedicated to each application.

+

INTERX simplifies the transition from Web2 to Web3 for developers by removing the complexity of blockchain interactions. Web3 interactions often involve dealing with smart contracts and complex interfaces that must be queried and interpreted like Ethereum's ABI or decoded like SCALE encoded metadata for Substrate RPC, an overwhelming and cumbersome change from the straightforward API calls typical for Web2 environments. By offering a familiar Web2-like API interface and acting as the default 'Sequencer' for applications, INTERX reduces the learning curve of Web3, empowering developers to focus more on their business logic.

+

One of INTERX's most important features is its combination of digital signatures and fraud proofs to effectively function as a decentralized API. This feature eliminates the need for light client implementations and maintenance, as well as dependence on centralized SSL certificate authorities.

+

Kira’s Approach to Data Availability

+

Traditional systems often treat all application data uniformly—both user balances and arbitrary data— a method that compromises UX and practicality. This is particularly true when quick access to essential and trusted information, like user balances, is required during unexpected interruptions in the application’s sequencing process (e.g. requests rate limiting). KIRA addresses this by clearly distinguishing these types of data. Specifically, user balances can be directly settled on SEKAI, KIRA’s base layer, leveraging account abstraction. This arrangement allows Layer 2 applications to be treated similarly to user accounts, enabling them to perform on-chain actions such as issuing tokens, participating in governance, staking, and even communicating with other applications as if they were autonomous humans.

+

In managing and ensuring the availability of arbitrary application data, INTERX adopts a specialized implementation designed to enhance the data replication versus network overhead ratio. This implementation is underpinned by four foundational concepts:

+
    +
  • Integrated Data Management: Consensus nodes operate and autoscale INTERX containers alongside their RollApp execution containers, akin to how edge nodes function within traditional Web2 networks. An edge node serves as a conduit between local environments (SEKAI and RollApp containers in KIRA’s case) and the external world. In this setup, essential data is directly accessible on the same devices that execute the application, thus reducing latency and the dependency issues seen when DA is handled by an external network.
  • +
  • Dedicated DA Sub-networks: Leveraging its node discovery capabilities, INTERX assigns each RollApp its own firewalled and rate-limited DA 'subnet'. This architecture optimizes bandwidth utilization and resource allocation by reducing the exchange and management of the application’s data only to the nodes directly relevant to the application—namely, its executors and verifiers.
  • +
  • Adaptive Data Replication: Traditional DA systems often employ a one-size-fits-all replication factor. Essentially, they define the level of redundancy through a fixed number of copies distributed within the network to ensure data availability. In practice, however, individual applications have distinct requirements for data access speed and replication based on the data type. With INTERX, RollApp data is replicated based on the individual needs of executors and verifiers. Developers can scale this replication level to align precisely with their application's needs, such as minimum bandwidth utilization for noncritical data and/or maximum possible security for application-critical data.
  • +
  • Caching: INTERX implements a caching mechanism to efficiently manage high-demand scenarios and prevent system overload. This feature is especially important in KIRA, where SEKAI’s block time can be extended based on the number of consensus nodes involved, influencing the likelihood of data being queried multiple times before any updates occur. By storing data after its initial retrieval, INTERX can swiftly respond to duplicate requests, conserving resources required to perform complex queries and thus maintaining network responsiveness.
  • +
+

Decentralized Api Gateway Through Swarm Request

+

A distinctive feature of INTERX is its functionality as a decentralized RPC gateway. This capability stems from its unique setup where each INTERX node, regardless of its associated subnet, is linked to a KIRA account address, with all responses being digitally signed. This architecture allows users to query multiple nodes simultaneously and evaluate the responses against each other. Such a mechanism enables users to identify nodes that consistently deliver precise responses and craft off-chain fraud proofs against nodes disseminating fraudulent or inconsistent data.

+

While light clients theoretically offer higher security through block-by-block consensus verification (without storing data), they fall short due to the maintenance they require. This maintenance challenge becomes particularly pronounced across hundreds or thousands of applications in a growing multi-chain world. By enabling the creation of fraud proofs, INTERX introduces a practical alternative for decentralization. It establishes a balance between the security offered by light clients and the convenience of Infura-style RPC providers. Through repeated queries to a broad spectrum of INTERX nodes, users can achieve a level of security comparable to that of light clients, assuming these nodes are either verified through the Identity Registrar or have stakes involved. This system underscores that even a single honest INTERX node in the query batch can trigger the eviction or slashing of dishonest ones. However, for maximum safety, users are recommended to operate their own INTERX node as well as a SEKAI instance, essentially running a full node.

+ + \ No newline at end of file diff --git a/8aad2626-40b5-42d6-9504-0c1287216a73/index.html b/8aad2626-40b5-42d6-9504-0c1287216a73/index.html deleted file mode 100644 index bfb8630..0000000 --- a/8aad2626-40b5-42d6-9504-0c1287216a73/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Layer 2 | KIRA - - - - -
Skip to main content

Layer 2

KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform—it's a launchpad for developers to define their own rules and easily iterate on diverse applications.

-

x/layer2

- - \ No newline at end of file diff --git a/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5/index.html b/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5/index.html new file mode 100644 index 0000000..778aacf --- /dev/null +++ b/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5/index.html @@ -0,0 +1,33 @@ + + + + + +Overview | KIRA + + + + +
Skip to main content

Overview

KIRA’s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.

+

KIRA by default pessimistically assumes incorrectness of all L2 computations. It only allows for application state settlement if the developer-programmable consensus of nodes verifies the application execution. This is in contrast to optimistic rollup systems which by default assume the correctness of all computations unless fraud proofs are presented which unnecessarily prolong the settlement process even if all network participants agree that the application state transitions are correct.

+

Application Submission

+

Before a dApp can be deployed on the KIRA network, it must go through an on-chain governance proposal process. This prevents spam applications and ineffective code from launching. The proposal is submitted by controllers; this proposal also signals the requirements for running the application. A minimum bond in KEX tokens is required to raise the proposal, ensuring developer commitment. A minimum bond must also be reached before the proposal duration ends for the application to be accepted. The minimum bond can be crowdsourced across collaborators. If it is not reached before the end of the proposal period, the dApp is rejected and bonds are returned. There is also a maximum bond that caps total deposits. Once approved through governance, dApp tokens representing ownership are minted and paired with the bonded KEX in a v2 Uniswap pool.

+

This permissionless, crowdsourced process is similar to Polkadot parachain auctions. However, the bonded KEX crowdsourced through the proposal remain liquid: Upon approval, dApp tokens representing ownership are minted and paired with the bonded KEX in a Uniswap v2-like pool and the LP tokens are distributed to all investors who contributed to crowdsource.

+
note

More information about the crowdsourcing mechanism is described in Initial Liquidity Offering page.

+

Permissioned Execution, Permissionless Verification

+

There are two primary roles for participation in a RollApp execution process - Executors and Verifiers, also referred to as Fishermen.

+

KIRA’s Validators have the option to take on either or both of these roles, they are not compelled and do not need to post a bond to take these roles. This is to ensure they can adapt their hardware to suit the application's needs and avoid running content that may pose legal issues in their operating region. However their participation is subject to approval by controllers (application owners), and they can be evicted from SEKAI validator set if acting maliciously. If a validator becomes an Executor, they will run the execution container and serve as Leader for Sessions, proposing state changes while also automatically taking on the role of Verifier when not actively leading a Session.

+

Any users can permissionlessly become Fishermen, i.e. if they have vested interest in this application. They are not subject to approval by controllers, but must submit a bond in the dApp's liquidity pool tokens. The bond amount is set via governance, defaulting to 0.1% of the pool’s total LP tokens circulating supply. In summary, validators can opt-in to run as Executors or Verifiers, pending approval. Other users can freely become Fishermen verifiers by providing a bond.

+

The key difference between the Executor and Verifier lies in their responsibilities and how each role is held accountable. Only Executors can become Leaders and propose state changes for an application, while Fishermen solely verify its integrity. Executors are held accountable by risking their validation role and income if removed for misconduct. Fishermen are accountable through the verifier bond they post in tokens, which can be slashed for faulty verification.

+

Sessions

+

In KIRA's Layer 2, computation occurs in timed periods called Sessions, similar to the "challenge periods" in Ethereum optimistic rollups. However, unlike Ethereum rollups which optimistically assume correct execution, KIRA pessimistically assumes incorrect results, and only settles state if sufficient verifications occur in a given Session.

+

A session proceeds as follows:

+
    +
  • A single Executor acts as the Session leader and performs computation, proposing a new application state root (the hash of the new app database state) and account balances changes on SEKAI. The leader can only be an active validator and is chosen in equal round-robin fashion among existing application’s Executors.
  • +
  • Immediately after the current Executor finishes execution, the next leader optimistically start executing its own session. This mechanism allows for continuous execution without waiting for the prior session's full verification to complete. In rare scenarios where a session was skipped (i.e. Leader timed out) and the following one was not properly executed, both sessions can be discarded, although this is unlikely to occur.
  • +
  • Other Executors act as Verifier and collect the leader results and cast their approval on proposed state changes. The end of the session and settlement requires over 2/3 Executor participation and unanimous agreement. In cases where the application has only one Executor, the end of the session relies on the approval of no less than 2/3 of all active Verifiers.
  • +
  • Meanwhile multiple verifier nodes (Fishermen) verify integrity of the leader's execution. They can halt settlement if they find incorrect state transitions, but cannot finalize settlement, only Executors can.
  • +
+
note

The number of Verifiers (fishermen) is uncapped and can be much greater than the number of Executors. However, there is only one Leader at any point in time,

+ + \ No newline at end of file diff --git a/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf/index.html b/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf/index.html deleted file mode 100644 index 0f3ccfc..0000000 --- a/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Spending Pool | KIRA - - - - -
Skip to main content

Spending Pool

Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens

-

x/spending

- - \ No newline at end of file diff --git a/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f/index.html b/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f/index.html new file mode 100644 index 0000000..c121cdf --- /dev/null +++ b/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f/index.html @@ -0,0 +1,22 @@ + + + + + +Building on KIRA | KIRA + + + + +
Skip to main content

Building on KIRA

Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.

+

To create an example KIRA application, a developer would:

+
    +
  • Create a deterministic server application and expose a protocol-defined endpoint for receiving user input from the INTERX. The next step is then to package the server application into a docker container.
  • +
  • Develop a secondary containerized “verification” application that can either re-compute the same results given the same set of ordered inputs from the INTERX or use other techniques, such as ZK proofs, for lightweight verification of the correct execution.
  • +
  • Develop a frontend application that can communicate with the server application for users to be able to experience the app.
  • +
  • Submit a transaction to the KIRA blockchain specifying the location of execution and verification docker containers, configuration file defining ports to be exposed/proxied via INTERX, and resources necessary to run the application.
  • +
  • Await sufficient KEX amount to be bonded into ILO and validators with sufficient hardware resources to signal they are willing to run the app.
  • +
+

If all the conditions above are met users will be able to query any of the INTERX nodes available on the KIRA network to locate a subnet of INTERX nodes that provide access to the app and expose its interfaces thus making interaction possible in a classical Web2 client-server manner.

+ + \ No newline at end of file diff --git a/a6a660a6-3e5c-4a53-9ec3-14aa07f00351/index.html b/a6a660a6-3e5c-4a53-9ec3-14aa07f00351/index.html new file mode 100644 index 0000000..260075d --- /dev/null +++ b/a6a660a6-3e5c-4a53-9ec3-14aa07f00351/index.html @@ -0,0 +1,31 @@ + + + + + +Initial Liquidity Offering | KIRA + + + + +
Skip to main content

Initial Liquidity Offering

The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps’ success.

+

The ILO procedure is as follows:

+
    +
  1. dApp deployer creates a governance proposal for app submission.
  2. +
  3. The minimum dApp bond must be committed within the proposal duration, set to 7 days by default. This value is set to 1,000,000 KEX by default.
  4. +
  5. For the proposal to pass, 1% of the minimum dApp bond must be committed by the dApp deployer before 7 days have elapsed. The remaining 99% of the bond can be supplied by any other users.
  6. +
  7. If the bonding conditions cannot be satisfied, all participants are refunded - otherwise, the dApp can be launched.
  8. +
  9. Once the dApp has launched, dApp tokens representing stakeholders’ ownership of the dApp are minted according to the token supply specified in the app proposal. They are then paired with all the bonded KEX in a v2 Uniswap-style AMM pool defined by a simple x*y=k bonding curve.
  10. +
  11. A spending pool is created for users who have bonded KEX. They are eligible to claim LP tokens from the spending pool, proportional to their respective bonded amounts. Depending on the dApp proposal, these LP tokens may be immediately claimable or progressively unlocked over time.
  12. +
+

To make all classical forms of raising capital and launching dApps possible, KIRA allows for dApp proposals to define whether additional tokens may be issued during and/or after the dApp launch by the dApp deployer. These are referred to as premint and postmint. The unlock rate of the spending pool is also defined by the dApp proposal.

+

Here are a few examples of ways in which these configurable parameters can be used:

+
    +
  • Fair Launch - no extra tokens may be issued and all LP coins are immediately unlocked. As an example use case, a lone developer creating a public good dApp might employ this parameter configuration, as the application will not need future emissions to incentivize users. It could also be used by applications funded by the KIRA treasury.
  • +
  • User-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens. The premint allowance is set to a small reasonable amount while the postmint function is not used. As an example use case, a small team that needs to hire a few developers could configure their token emissions like this. This would allow them to establish a token treasury and sell their stake to users that are locked in the LP.
  • +
  • Investor-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens; premint and postmint have allowances. As an example use case, a large-scale project with more complexity could configure its emissions like this. Premint and postmint would enable the creation of treasury and sale of SAFT agreements. The time when these investor tokens would be issued during the “postmint” event could be clearly defined. An address for postminted tokens could be set up by the dApp deployer as a vesting mechanism to easily distribute tokens to their rightful owners as well as configure an optional “drip” for the postmint if needed, so as to not damage investor confidence with an immediate increase of the token supply.
  • +
+

To align ILO participants' incentives with the dApp's success, a minimum threshold is defined for the amount of KEX collateral in the pool, set to 100,000 KEX by default. If the KEX collateral in the pool falls below this threshold, the dApp will enter a depreciation phase, set to around 28 days by default, after which dApp execution will be halted.

+

To make it worthwhile for validators to execute the dApp code, the dApp LP pool is utilized to create those incentives. Any swaps, deposits, and redemptions will incur a fee that is configurable by governance. The fixed fee will be applied after the swap from where 50% of the corresponding tokens must be burned (deminted), 25% given as a reward to liquidity providers and the remaining 25% will be split between active dApp executors, and verifiers (fishermen). This way pool can provide immediate incentives to the operators and LP providers. Additionally, the premint and postmint tokens can be used to incentivize operators before dApp starts to generate revenue.

+ + \ No newline at end of file diff --git a/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa/index.html b/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa/index.html new file mode 100644 index 0000000..9b77e1c --- /dev/null +++ b/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa/index.html @@ -0,0 +1,20 @@ + + + + + +Governance | KIRA + + + + +
Skip to main content

Governance

KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.

+

Roles & Permissions

+

KIRA's governance structure is underpinned by a detailed system of permissions, where specific actions, such as voting and proposing, are tied to unique permissions. These permissions dictate whether an account can execute a specific transaction. This granularity in permissions serves as the building blocks for 'roles,' which bundle permissions into comprehensive profiles that define the capabilities and responsibilities of subsets of council members. Being assigned a role equates to having all the permissions it encompasses. Roles, by their nature, are constructs of governance; the only pre-defined role in KIRA is that of “validator” automatically given to Consensus nodes. All other roles are conceptualized and established through governance actions. The creation of new roles is initiated at the network's inception by validators, who use their permissions to propose and approve the establishment of these roles through governance proposals.

+

Structure

+

KIRA's governance is inherently flexible and designed to evolve organically within its decentralized framework. Starting with the principle that each Consensus node possesses equal voting power (per capita), they form the cornerstone of governance. They have the autonomy to delegate various governance responsibilities to other verified groups through the definition of roles. This could lead to a dynamic where one group may have certain authority over another, and vice versa, depending on the distribution of responsibilities related to matters such as proposal voting or the management of malicious activities within the network. The governance model's modular design facilitates customized configurations, including multicameral systems for specialized proposal handling and checks and balances to mitigate centralization risks. This adaptability ensures KIRA's governance can evolve to meet diverse network conditions and requirements, underlining the network's capacity for self-directed evolution without centralized oversight.

+

Decision-making Framework

+

KIRA governance decisions are voted on-chain to immutably record outcomes on the blockchain itself. However, discussions primarily take place through off-chain coordination amongst Councilors and community members. When a proposal is created, only Councilors can vote if they have the required permission. A proposal passes if over 50% of votes are 'yes', otherwise it is rejected. A minority veto rejection is also possible if over 33.4% of all votes are 'veto’. Proposals require a quorum of 33% to be valid to reflect adequate Councilor participation and representation. If quorum is not reached, the proposal fails. After the voting period ends, there is a defined enactment time before changes take effect, allowing the community to prepare for the outcome. The minimum enactment time is configured by governance and applies to all proposals. Governance can additionally configure different voting periods for individual proposals. This structured on-chain process enables transparent and definitive decision-making.

+

KIRA does not utilize on-chain signaling proposals, which commonly lead to inefficient binary outcomes that fail to capture nuanced perspectives. Instead, it offers on-chain Polls to efficiently gauge sentiment and build consensus on complex issues. Polls allow for multiple customized voting options that cater to the diverse views within the community. This flexibility makes them well-suited for achieving consensus on matters like upgrade timeframes, future protocol changes, and other key issues. The Poll module provides an inclusive signaling mechanism that complements off-chain discussion. Ultimately, Polls enable KIRA's governance to reach timely decisions informed by the authentic and varied opinions of participants.

+ + \ No newline at end of file diff --git a/assets/images/1122915707-5d5933932e7843c11e61078f5eca0bcf.png b/assets/images/1122915707-5d5933932e7843c11e61078f5eca0bcf.png deleted file mode 100644 index d258f93..0000000 Binary files a/assets/images/1122915707-5d5933932e7843c11e61078f5eca0bcf.png and /dev/null differ diff --git a/assets/images/265237334-6aa20cf34a4508ce6283c95952055ad4.png b/assets/images/265237334-6aa20cf34a4508ce6283c95952055ad4.png deleted file mode 100644 index 635ef84..0000000 Binary files a/assets/images/265237334-6aa20cf34a4508ce6283c95952055ad4.png and /dev/null differ diff --git a/assets/js/0008b51c.dabe5810.js b/assets/js/0008b51c.dabe5810.js deleted file mode 100644 index 02cfa33..0000000 --- a/assets/js/0008b51c.dabe5810.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9375],{7947:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(5893),o=n(1151);n(4866),n(5162);const i={title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},r=void 0,s={id:"What-is-KIRA/SEKAI/Governance",title:"Governance",description:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Governance.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",permalink:"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},sidebar:"defaultSidebar",previous:{title:"Consensus",permalink:"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},next:{title:"Middleware - INTERX",permalink:"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851"}},l={},c=[{value:"Roles & permissions",id:"4a92d1418ae641c7aae19bdb862b6ead",level:3},{value:"Structure",id:"3c994110ecf44f89ab62ecadfe43b8a8",level:3},{value:"Decision-making framework",id:"97310261cd6643c59e08f59fa9662fe1",level:3}];function u(e){const t={h3:"h3",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council."}),"\n",(0,a.jsx)(t.h3,{id:"4a92d1418ae641c7aae19bdb862b6ead",children:"Roles & permissions"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance structure is underpinned by a detailed system of permissions, where specific actions, such as voting and proposing, are tied to unique permissions. These permissions dictate whether an account can execute a specific transaction. This granularity in permissions serves as the building blocks for 'roles,' which bundle permissions into comprehensive profiles that define the capabilities and responsibilities of subsets of council members. Being assigned a role equates to having all the permissions it encompasses. Roles, by their nature, are constructs of governance; the only pre-defined role in KIRA is that of \u201cvalidator\u201d automatically given to Consensus nodes. All other roles are conceptualized and established through governance actions. The creation of new roles is initiated at the network's inception by validators, who use their permissions to propose and approve the establishment of these roles through governance proposals."}),"\n",(0,a.jsx)(t.h3,{id:"3c994110ecf44f89ab62ecadfe43b8a8",children:"Structure"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance is inherently flexible and designed to evolve organically within its decentralized framework. Starting with the principle that each Consensus node possesses equal voting power (per capita), they form the cornerstone of governance. They have the autonomy to delegate various governance responsibilities to other verified groups through the definition of roles. This could lead to a dynamic where one group may have certain authority over another, and vice versa, depending on the distribution of responsibilities related to matters such as proposal voting or the management of malicious activities within the network. The governance model's modular design facilitates customized configurations, including multicameral systems for specialized proposal handling and checks and balances to mitigate centralization risks. This adaptability ensures KIRA's governance can evolve to meet diverse network conditions and requirements, underlining the network's capacity for self-directed evolution without centralized oversight."}),"\n",(0,a.jsx)(t.h3,{id:"97310261cd6643c59e08f59fa9662fe1",children:"Decision-making framework"}),"\n",(0,a.jsx)(t.p,{children:"KIRA governance decisions are voted on-chain to immutably record outcomes on the blockchain itself. However, discussions primarily take place through off-chain coordination amongst Councilors and community members. When a proposal is created, only Councilors can vote if they have the required permission. A proposal passes if over 50% of votes are 'yes', otherwise it is rejected. A minority veto rejection is also possible if over 33.4% of all votes are 'veto\u2019. Proposals require a quorum of 33% to be valid to reflect adequate Councilor participation and representation. If quorum is not reached, the proposal fails. After the voting period ends, there is a defined enactment time before changes take effect, allowing the community to prepare for the outcome. The minimum enactment time is configured by governance and applies to all proposals. Governance can additionally configure different voting periods for individual proposals. This structured on-chain process enables transparent and definitive decision-making."}),"\n",(0,a.jsx)(t.p,{children:"KIRA does not utilize on-chain signaling proposals, which commonly lead to inefficient binary outcomes that fail to capture nuanced perspectives. Instead, it offers on-chain Polls to efficiently gauge sentiment and build consensus on complex issues. Polls allow for multiple customized voting options that cater to the diverse views within the community. This flexibility makes them well-suited for achieving consensus on matters like upgrade timeframes, future protocol changes, and other key issues. The Poll module provides an inclusive signaling mechanism that complements off-chain discussion. Ultimately, Polls enable KIRA's governance to reach timely decisions informed by the authentic and varied opinions of participants."})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const o={tabItem:"tabItem_Ymn6"};var i=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),o=n(6905),i=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:n,groupId:o}),[m,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,u.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),b=(()=>{const e=c??m;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),v(e)}),[d,v,i]),tabValues:i}}var v=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),o=s[n].value;o!==a&&(c(t),r(o))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:o}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function I(e){const t=(0,v.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const o={},i=a.createContext(o);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0008b51c.f7b99b2e.js b/assets/js/0008b51c.f7b99b2e.js new file mode 100644 index 0000000..9f82152 --- /dev/null +++ b/assets/js/0008b51c.f7b99b2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9375],{7947:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(5893),o=n(1151);n(4866),n(5162);const i={title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},r=void 0,s={id:"What-is-KIRA/SEKAI/Governance",title:"Governance",description:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Governance.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},sidebar:"defaultSidebar",previous:{title:"Consensus",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},next:{title:"Middleware - INTERX",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851"}},l={},c=[{value:"Roles & Permissions",id:"4a92d1418ae641c7aae19bdb862b6ead",level:3},{value:"Structure",id:"3c994110ecf44f89ab62ecadfe43b8a8",level:3},{value:"Decision-making Framework",id:"97310261cd6643c59e08f59fa9662fe1",level:3}];function u(e){const t={h3:"h3",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council."}),"\n",(0,a.jsx)(t.h3,{id:"4a92d1418ae641c7aae19bdb862b6ead",children:"Roles & Permissions"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance structure is underpinned by a detailed system of permissions, where specific actions, such as voting and proposing, are tied to unique permissions. These permissions dictate whether an account can execute a specific transaction. This granularity in permissions serves as the building blocks for 'roles,' which bundle permissions into comprehensive profiles that define the capabilities and responsibilities of subsets of council members. Being assigned a role equates to having all the permissions it encompasses. Roles, by their nature, are constructs of governance; the only pre-defined role in KIRA is that of \u201cvalidator\u201d automatically given to Consensus nodes. All other roles are conceptualized and established through governance actions. The creation of new roles is initiated at the network's inception by validators, who use their permissions to propose and approve the establishment of these roles through governance proposals."}),"\n",(0,a.jsx)(t.h3,{id:"3c994110ecf44f89ab62ecadfe43b8a8",children:"Structure"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance is inherently flexible and designed to evolve organically within its decentralized framework. Starting with the principle that each Consensus node possesses equal voting power (per capita), they form the cornerstone of governance. They have the autonomy to delegate various governance responsibilities to other verified groups through the definition of roles. This could lead to a dynamic where one group may have certain authority over another, and vice versa, depending on the distribution of responsibilities related to matters such as proposal voting or the management of malicious activities within the network. The governance model's modular design facilitates customized configurations, including multicameral systems for specialized proposal handling and checks and balances to mitigate centralization risks. This adaptability ensures KIRA's governance can evolve to meet diverse network conditions and requirements, underlining the network's capacity for self-directed evolution without centralized oversight."}),"\n",(0,a.jsx)(t.h3,{id:"97310261cd6643c59e08f59fa9662fe1",children:"Decision-making Framework"}),"\n",(0,a.jsx)(t.p,{children:"KIRA governance decisions are voted on-chain to immutably record outcomes on the blockchain itself. However, discussions primarily take place through off-chain coordination amongst Councilors and community members. When a proposal is created, only Councilors can vote if they have the required permission. A proposal passes if over 50% of votes are 'yes', otherwise it is rejected. A minority veto rejection is also possible if over 33.4% of all votes are 'veto\u2019. Proposals require a quorum of 33% to be valid to reflect adequate Councilor participation and representation. If quorum is not reached, the proposal fails. After the voting period ends, there is a defined enactment time before changes take effect, allowing the community to prepare for the outcome. The minimum enactment time is configured by governance and applies to all proposals. Governance can additionally configure different voting periods for individual proposals. This structured on-chain process enables transparent and definitive decision-making."}),"\n",(0,a.jsx)(t.p,{children:"KIRA does not utilize on-chain signaling proposals, which commonly lead to inefficient binary outcomes that fail to capture nuanced perspectives. Instead, it offers on-chain Polls to efficiently gauge sentiment and build consensus on complex issues. Polls allow for multiple customized voting options that cater to the diverse views within the community. This flexibility makes them well-suited for achieving consensus on matters like upgrade timeframes, future protocol changes, and other key issues. The Poll module provides an inclusive signaling mechanism that complements off-chain discussion. Ultimately, Polls enable KIRA's governance to reach timely decisions informed by the authentic and varied opinions of participants."})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const o={tabItem:"tabItem_Ymn6"};var i=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),o=n(6905),i=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:n,groupId:o}),[m,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,u.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),b=(()=>{const e=c??m;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),v(e)}),[d,v,i]),tabValues:i}}var v=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),o=s[n].value;o!==a&&(c(t),r(o))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:o}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function I(e){const t=(0,v.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const o={},i=a.createContext(o);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01913bc9.65cc2183.js b/assets/js/01913bc9.65cc2183.js deleted file mode 100644 index 300d5c8..0000000 --- a/assets/js/01913bc9.65cc2183.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9290],{4806:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},i=void 0,s={id:"Stack/SEKAI--Backend/Modules/Distributor/index",title:"Distributor",description:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Distributor/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},sidebar:"defaultSidebar",previous:{title:"Layer 2",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73"},next:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba"}},l={},u=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/distributor",children:(0,a.jsx)(t.code,{children:"x/distributor"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),o=r(2466),i=r(6550),s=r(469),l=r(1980),u=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:r,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(u(t),i(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>i});var a=r(7294);const n={},o=a.createContext(n);function i(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03ac81e5.32603c75.js b/assets/js/03ac81e5.32603c75.js new file mode 100644 index 0000000..80ddd9f --- /dev/null +++ b/assets/js/03ac81e5.32603c75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4533],{8406:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),i=s(1151),a=s(4866),r=s(5162);const c={title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses",title:"Consensus nodes ranks & statuses",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",permalink:"/docs.kira.network/docs/9f763be9-fbd3-452f-8c6e-6e418f34856f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},sidebar:"defaultSidebar",previous:{title:"Jailing & slashing",permalink:"/docs.kira.network/docs/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},next:{title:"Governance",permalink:"/docs.kira.network/docs/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"}},l={},h=[{value:"Concept",id:"f34eaf6c97424f8fbb0d31fc614016a3",level:2},{value:"Ranking System",id:"729611044b78402fbb895dd8d0689f8a",level:3},{value:"Ranking Reset",id:"859920756f1c4be2a75ab4cdbb9e07b4",level:4},{value:"Node Statuses",id:"d8558d49b23249b192b6fa0e826d0b63",level:3},{value:"Pausing Node",id:"7c60dcc14b8b4b8cbfdfaae7337efff6",level:4},{value:"Initial Framework for Determining Optimal Ranking System Values",id:"97a5346b720741029b9847fab7461550",level:3},{value:"Parameters",id:"ec9a31c9c0864679b173c41bd2f6e9b8",level:2},{value:"Validator Signing Info",id:"036395957b234988b35849522764489c",level:4},{value:"Consensus Nodes Rank",id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",level:4},{value:"Cli Syntax & Examples",id:"f6aa9bcf8b9548e08851342e55526bfa",level:2},{value:"Transactions",id:"45932a0c158245b491ff1bfa70861f3a",level:2},{value:"Pause Validator",id:"93a2e9f8d825484bb2cd185bc9fdd4cf",level:4},{value:"Unpause Validator",id:"bb6f0ac5e8b84c06b9254a10d7b17cda",level:4},{value:"Activating an Inactive Node",id:"48d5192f5c3142b399d5396a637e7304",level:4},{value:"Queries",id:"c752b88fcac34284994386908ab948c0",level:2},{value:"Active Staking Pools",id:"690a7c0801d741fe998d1384a038f922",level:4},{value:"Inactive Staking Pools",id:"3458f5bf4ec9483888609b767a139118",level:4},{value:"Governance",id:"9304f58d70a74166a823067103118abe",level:2},{value:"Reset All Validators Ranks",id:"8dfa1ec3611d407a8074848dba5f9cd3",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"f34eaf6c97424f8fbb0d31fc614016a3",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The KIRA network encourages consensus nodes uptime (i.e maintain an ",(0,t.jsx)(n.code,{children:"active"})," status) by implementing a ranking system that fosters a dynamic and competitive environment to collectively promote network robustness and high participation levels. KIRA network utilizes the ",(0,t.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," consensus protocol, which ensures liveness by requiring a minimum of 2/3 + 1 of the consensus node set's total voting power to sign a block. While KIRA doesn't employ weighted voting and considers each node as having a single vote, the principle remains that it is not guaranteed for every node to sign every block as up to 1/3 of nodes can miss a block at any given time. This can be due to various factors, such as the random distribution of nodes around the world, limited networking connectivity between them, and the limited time that nodes have to wait for consensus votes. Accordingly, KIRA network's ranking system is designed to adapt to these variables. The system's parameters are fine-tuned by KIRA network governance to align individual node performance with the broader network health. This approach ensures high levels of participation while upholding the robustness of the network."]}),"\n",(0,t.jsx)(n.h3,{id:"729611044b78402fbb895dd8d0689f8a",children:"Ranking System"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"The rank value is a measure of a node's performance and is used to inform the governance system about the node's activity. It does not affect the operation or future revenue of the node, but it may impact the visibility of the node in the public ranking system on the frontend application."})}),"\n",(0,t.jsxs)(n.p,{children:["KIRA network's consensus nodes ranking system and the associated node statuses operates on block production and missed blocks counter and is measured through two performance indicators, ",(0,t.jsx)(n.code,{children:"streak"})," and ",(0,t.jsx)(n.code,{children:"rank"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.code,{children:"streak"})," functions like a short-term performance indicator, showing the sequential number of successful block proposals by a consensus node in real time. This is akin to kill-streaks in video games. A failure to propose a single block resets the ",(0,t.jsx)(n.code,{children:"streak"})," to zero and increases the node\u2019s ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," counter."]}),"\n",(0,t.jsxs)(n.li,{children:["In contrast, the ",(0,t.jsx)(n.code,{children:"rank"})," acts as a long-term performance indicator, reflecting the maximum ",(0,t.jsx)(n.code,{children:"streak"})," a validator has ever achieved. It is the main performance indicator."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["While a node's ",(0,t.jsx)(n.code,{children:"rank"})," may decrease due to missed blocks, the ranking system accommodates for the unpredictability of block production chances and waits until a node misses a ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," number of blocks before considering the node ",(0,t.jsx)(n.code,{children:"offline"}),". When a node\u2019s status becomes ",(0,t.jsx)(n.code,{children:"offline"}),", each subsequent missed block, or ",(0,t.jsx)(n.code,{children:"mischance"})," counter, decreases the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a constant amount, ",(0,t.jsx)(n.code,{children:"mischance_rank_decrease_amount"})," (set to 10 by default). However, if a node's status remains ",(0,t.jsx)(n.code,{children:"offline"})," and their ",(0,t.jsx)(n.code,{children:"mischance"})," score surpasses the ",(0,t.jsx)(n.code,{children:"max_mischance"})," value, defined in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", the system will categorize the node as ",(0,t.jsx)(n.code,{children:"inactive"}),". An ",(0,t.jsx)(n.code,{children:"inactive"})," status triggers a decrease in the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a percentage amount, defined by ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," (set to 50% by default)."]}),"\n",(0,t.jsxs)(n.p,{children:["Consequently, ",(0,t.jsx)(n.code,{children:"inactive"})," consensus nodes get removed from the consensus node set and are barred from producing blocks. They can return to active status only when their operators signal readiness to produce blocks again, having resolved their internal issues, by using the ",(0,t.jsx)(n.code,{children:"activate"})," CLI. The governance can adjust all these ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," to ensure a probabilistically fair decrease in a node's rank."]}),"\n",(0,t.jsx)(n.h4,{id:"859920756f1c4be2a75ab4cdbb9e07b4",children:"Ranking Reset"}),"\n",(0,t.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,t.jsx)(n.h3,{id:"d8558d49b23249b192b6fa0e826d0b63",children:"Node Statuses"}),"\n",(0,t.jsx)(n.p,{children:"Depending on it\u2019s performance and activity, a consensus node can have one of the following statuses:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"STATUS"}),(0,t.jsx)(n.th,{children:"DESCRIPTION"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsxs)(n.td,{children:["Validator is actively participating in consensus, proposing and signing blocks. Every produced block increases validator rank by ",(0,t.jsx)(n.code,{children:"1"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive"})}),(0,t.jsx)(n.td,{children:"Validator stopped producing blocks and didn't signal to the network any planned maintenance. As the result his rank got slashed."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"paused"})}),(0,t.jsx)(n.td,{children:"Validator node entered maintenance node and is not producing blocks. The rank is not impacted."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"jailed"})}),(0,t.jsxs)(n.td,{children:["Validator is jailed (permanently) due to double signing fault. Governance must investigate reason for the fault and unjail node via ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"proposal"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"7c60dcc14b8b4b8cbfdfaae7337efff6",children:"Pausing Node"}),"\n",(0,t.jsxs)(n.p,{children:["For planned maintenance where a consensus node must be offline, it can use the ",(0,t.jsx)(n.code,{children:"pause"})," CLI to remove itself from the consensus node set. This will prevent the its rank from being impacted and the node will not be inactivated. When it is back online, the consensus node can use the ",(0,t.jsx)(n.code,{children:"unpause"})," CLI to signal to the network that it is ready to rejoin the consensus node set."]}),"\n",(0,t.jsx)(n.h3,{id:"97a5346b720741029b9847fab7461550",children:"Initial Framework for Determining Optimal Ranking System Values"}),"\n",(0,t.jsxs)(n.p,{children:["Determining the optimal values for ",(0,t.jsx)(n.code,{children:"max_mischance"})," and ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," depends on various factors, including the specific network conditions, the desired level of decentralization, average time for automatic recovery and the overall network performance. Based on the average block production rate, expected node uptime, and network latency of existing Cosmos ecosystem chains, the following initial values are proposed."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"mischance_confidence"}),": In the Cosmos ecosystem, the average block time is around 5-7 seconds. To give a node a reasonable amount of time to recover from temporary issues, ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," could be set to a value equivalent to 10 minutes, such as 120 blocks (assuming a 5-second block time). This would allow nodes to recover from short-term issues without being unfairly penalized."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"max_mischance"}),": Assuming an expected node uptime of 99% per day (i.e 14.4min of allowed downtime per day) and considering network latency, we can initially set ",(0,t.jsx)(n.code,{children:"max_mischance"})," to 60 blocks (5min) . This means that, after missing 120 blocks, if a node misses another 60 consecutive blocks, its status will change to being ",(0,t.jsx)(n.code,{children:"inactive"})," and its rank will be slashed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"}),": To create a competitive environment that encourages node operators to maintain high performance, we can set the ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," to 20%. This value is significant enough to incentivize operators to address any issues leading to downtime quickly, without being overly punitive for temporary issues."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ec9a31c9c0864679b173c41bd2f6e9b8",children:"Parameters"}),"\n",(0,t.jsx)(n.h4,{id:"036395957b234988b35849522764489c",children:"Validator Signing Info"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"address"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"kira1yq8l"}),"..."]}),(0,t.jsx)(n.td,{children:"The address of the consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"start_height"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1500"})}),(0,t.jsx)(n.td,{children:"The height at which the consensus node was first a candidate OR was activated."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive_until"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2023-05-09T00:00:00Z"})}),(0,t.jsx)(n.td,{children:"The timestamp consensus node cannot be activated until."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"missed_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsx)(n.td,{children:"Total missed blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"produced_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4500"})}),(0,t.jsx)(n.td,{children:"Total produced blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance_confidence"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Mischance confidence counter - counts when node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Missed blocks counter - counts after ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," is reached and if node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"last_present_block"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1575648"})}),(0,t.jsx)(n.td,{children:"The last block height signed by the consensus node."})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",children:"Consensus Nodes Rank"}),"\n",(0,t.jsxs)(n.p,{children:["Nodes rank and statuses are stored in the ",(0,t.jsx)(n.code,{children:"x/staking"})," module and can be queried using ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"})," CLI."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"val_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.ValAddress"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravaloper1yq8lg..."})}),(0,t.jsxs)(n.td,{children:["The validator key, casted to a Cosmos SDK ",(0,t.jsx)(n.code,{children:"ValAddress"})," type."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pub_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.PubKey"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravalconspub1zcjduepqw..."})}),(0,t.jsxs)(n.td,{children:["The public key of the validator, accepted as a ",(0,t.jsx)(n.code,{children:"cosmos.crypto.PubKey"})," interface."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"status"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsx)(n.td,{children:"The current status of the validator."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rank"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"112"})}),(0,t.jsx)(n.td,{children:"A long-term statistic implying the longest streak that a validator ever achieved. This helps to judge real-life performance and reliability of validators."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"streak"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsx)(n.td,{children:"The consecutive number of times that a given validator successfully proposed a block (since the last time they failed) that was accepted into the blockchain state. Similar to kill-streaks in video games, this implies short-term performance."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"f6aa9bcf8b9548e08851342e55526bfa",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"45932a0c158245b491ff1bfa70861f3a",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"pause"})}),(0,t.jsx)(n.th,{children:"Pause a consensus node."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"unpause"})}),(0,t.jsx)(n.td,{children:"Unpause a consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"activate"})}),(0,t.jsx)(n.td,{children:"Activate a consensus node previously inactivated for downtime"})]})]})]}),(0,t.jsx)(n.h4,{id:"93a2e9f8d825484bb2cd185bc9fdd4cf",children:"Pause Validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"bb6f0ac5e8b84c06b9254a10d7b17cda",children:"Unpause Validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"48d5192f5c3142b399d5396a637e7304",children:"Activating an Inactive Node"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,t.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"c752b88fcac34284994386908ab948c0",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"active-staking-pools"})})}),(0,t.jsx)(n.th,{children:"Query active staking pools."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"inactive-staking-pools"})})}),(0,t.jsx)(n.td,{children:"Query inactive staking pools."})]})})]}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Nodes rank and statuses can be queried using the ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus node\u2019s dedicated queries"}),"."]})}),(0,t.jsx)(n.h4,{id:"690a7c0801d741fe998d1384a038f922",children:"Active Staking Pools"}),(0,t.jsx)(n.p,{children:"List all staking pools currently active and accepting delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing active-staking-pools $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"3458f5bf4ec9483888609b767a139118",children:"Inactive Staking Pools"}),(0,t.jsx)(n.p,{children:"List staking pools that are inactive and cannot accept delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing inactive-staking-pools $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9304f58d70a74166a823067103118abe",children:"Governance"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"})}),(0,t.jsx)(n.th,{children:"Proposes to reset the ranking of all validators"})]})})}),(0,t.jsx)(n.h4,{id:"8dfa1ec3611d407a8074848dba5f9cd3",children:"Reset All Validators Ranks"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"}),", is utilized to raise a governance proposal for resetting the whole validator rank."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx custom proposal-reset-whole-validator-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>r});s(7294);var t=s(6905);const i={tabItem:"tabItem_Ymn6"};var a=s(5893);function r(e){let{children:n,hidden:s,className:r}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.Z)(i.tabItem,r),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),i=s(6905),a=s(2466),r=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:i}}=e;return{value:n,label:s,attributes:t,default:i}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const i=(0,r.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(i.location.search);n.set(a,e),i.replace({...i.location,search:n.toString()})}),[a,i])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,a=u(e),[r,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[o,h]=j({queryString:s,groupId:i}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,a]=(0,l.Nk)(s);return[i,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:i}),m=(()=>{const e=o??b;return x({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:r,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=s(5893);function v(e){let{className:n,block:s,selectedValue:t,selectValue:r,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),i=c[s].value;i!==t&&(o(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,i.Z)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:i}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===i));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function k(e){const n=b(e);return(0,p.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(v,{...e,...n}),(0,p.jsx)(g,{...e,...n})]})}function y(e){const n=(0,f.Z)();return(0,p.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>r});var t=s(7294);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/03ac81e5.d83419ed.js b/assets/js/03ac81e5.d83419ed.js deleted file mode 100644 index db7975b..0000000 --- a/assets/js/03ac81e5.d83419ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4533],{8406:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),i=s(1151),a=s(4866),r=s(5162);const c={title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses",title:"Consensus nodes ranks & statuses",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},sidebar:"defaultSidebar",previous:{title:"Jailing & slashing",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},next:{title:"Governance",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"}},l={},h=[{value:"Concept",id:"f34eaf6c97424f8fbb0d31fc614016a3",level:2},{value:"Ranking system",id:"729611044b78402fbb895dd8d0689f8a",level:3},{value:"Ranking reset",id:"859920756f1c4be2a75ab4cdbb9e07b4",level:4},{value:"Node statuses",id:"d8558d49b23249b192b6fa0e826d0b63",level:3},{value:"Pausing node",id:"7c60dcc14b8b4b8cbfdfaae7337efff6",level:4},{value:"Initial framework for determining optimal ranking system values",id:"97a5346b720741029b9847fab7461550",level:3},{value:"Parameters",id:"ec9a31c9c0864679b173c41bd2f6e9b8",level:2},{value:"Validator signing info",id:"036395957b234988b35849522764489c",level:4},{value:"Consensus nodes rank",id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",level:4},{value:"Cli syntax & examples",id:"f6aa9bcf8b9548e08851342e55526bfa",level:2},{value:"Transactions",id:"45932a0c158245b491ff1bfa70861f3a",level:2},{value:"Pause validator",id:"93a2e9f8d825484bb2cd185bc9fdd4cf",level:4},{value:"Unpause validator",id:"bb6f0ac5e8b84c06b9254a10d7b17cda",level:4},{value:"Activating an inactive node",id:"48d5192f5c3142b399d5396a637e7304",level:4},{value:"Queries",id:"c752b88fcac34284994386908ab948c0",level:2},{value:"Active staking pools",id:"690a7c0801d741fe998d1384a038f922",level:4},{value:"Inactive staking pools",id:"3458f5bf4ec9483888609b767a139118",level:4},{value:"Governance",id:"9304f58d70a74166a823067103118abe",level:2},{value:"Reset all validators ranks",id:"8dfa1ec3611d407a8074848dba5f9cd3",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"f34eaf6c97424f8fbb0d31fc614016a3",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The KIRA network encourages consensus nodes uptime (i.e maintain an ",(0,t.jsx)(n.code,{children:"active"})," status) by implementing a ranking system that fosters a dynamic and competitive environment to collectively promote network robustness and high participation levels. KIRA network utilizes the ",(0,t.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," consensus protocol, which ensures liveness by requiring a minimum of 2/3 + 1 of the consensus node set's total voting power to sign a block. While KIRA doesn't employ weighted voting and considers each node as having a single vote, the principle remains that it is not guaranteed for every node to sign every block as up to 1/3 of nodes can miss a block at any given time. This can be due to various factors, such as the random distribution of nodes around the world, limited networking connectivity between them, and the limited time that nodes have to wait for consensus votes. Accordingly, KIRA network's ranking system is designed to adapt to these variables. The system's parameters are fine-tuned by KIRA network governance to align individual node performance with the broader network health. This approach ensures high levels of participation while upholding the robustness of the network."]}),"\n",(0,t.jsx)(n.h3,{id:"729611044b78402fbb895dd8d0689f8a",children:"Ranking system"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"The rank value is a measure of a node's performance and is used to inform the governance system about the node's activity. It does not affect the operation or future revenue of the node, but it may impact the visibility of the node in the public ranking system on the frontend application."})}),"\n",(0,t.jsxs)(n.p,{children:["KIRA network's consensus nodes ranking system and the associated node statuses operates on block production and missed blocks counter and is measured through two performance indicators, ",(0,t.jsx)(n.code,{children:"streak"})," and ",(0,t.jsx)(n.code,{children:"rank"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.code,{children:"streak"})," functions like a short-term performance indicator, showing the sequential number of successful block proposals by a consensus node in real time. This is akin to kill-streaks in video games. A failure to propose a single block resets the ",(0,t.jsx)(n.code,{children:"streak"})," to zero and increases the node\u2019s ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," counter."]}),"\n",(0,t.jsxs)(n.li,{children:["In contrast, the ",(0,t.jsx)(n.code,{children:"rank"})," acts as a long-term performance indicator, reflecting the maximum ",(0,t.jsx)(n.code,{children:"streak"})," a validator has ever achieved. It is the main performance indicator."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["While a node's ",(0,t.jsx)(n.code,{children:"rank"})," may decrease due to missed blocks, the ranking system accommodates for the unpredictability of block production chances and waits until a node misses a ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," number of blocks before considering the node ",(0,t.jsx)(n.code,{children:"offline"}),". When a node\u2019s status becomes ",(0,t.jsx)(n.code,{children:"offline"}),", each subsequent missed block, or ",(0,t.jsx)(n.code,{children:"mischance"})," counter, decreases the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a constant amount, ",(0,t.jsx)(n.code,{children:"mischance_rank_decrease_amount"})," (set to 10 by default). However, if a node's status remains ",(0,t.jsx)(n.code,{children:"offline"})," and their ",(0,t.jsx)(n.code,{children:"mischance"})," score surpasses the ",(0,t.jsx)(n.code,{children:"max_mischance"})," value, defined in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", the system will categorize the node as ",(0,t.jsx)(n.code,{children:"inactive"}),". An ",(0,t.jsx)(n.code,{children:"inactive"})," status triggers a decrease in the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a percentage amount, defined by ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," (set to 50% by default)."]}),"\n",(0,t.jsxs)(n.p,{children:["Consequently, ",(0,t.jsx)(n.code,{children:"inactive"})," consensus nodes get removed from the consensus node set and are barred from producing blocks. They can return to active status only when their operators signal readiness to produce blocks again, having resolved their internal issues, by using the ",(0,t.jsx)(n.code,{children:"activate"})," CLI. The governance can adjust all these ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," to ensure a probabilistically fair decrease in a node's rank."]}),"\n",(0,t.jsx)(n.h4,{id:"859920756f1c4be2a75ab4cdbb9e07b4",children:"Ranking reset"}),"\n",(0,t.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,t.jsx)(n.h3,{id:"d8558d49b23249b192b6fa0e826d0b63",children:"Node statuses"}),"\n",(0,t.jsx)(n.p,{children:"Depending on it\u2019s performance and activity, a consensus node can have one of the following statuses:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"STATUS"}),(0,t.jsx)(n.th,{children:"DESCRIPTION"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsxs)(n.td,{children:["Validator is actively participating in consensus, proposing and signing blocks. Every produced block increases validator rank by ",(0,t.jsx)(n.code,{children:"1"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive"})}),(0,t.jsx)(n.td,{children:"Validator stopped producing blocks and didn't signal to the network any planned maintenance. As the result his rank got slashed."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"paused"})}),(0,t.jsx)(n.td,{children:"Validator node entered maintenance node and is not producing blocks. The rank is not impacted."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"jailed"})}),(0,t.jsxs)(n.td,{children:["Validator is jailed (permanently) due to double signing fault. Governance must investigate reason for the fault and unjail node via ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"proposal"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"7c60dcc14b8b4b8cbfdfaae7337efff6",children:"Pausing node"}),"\n",(0,t.jsxs)(n.p,{children:["For planned maintenance where a consensus node must be offline, it can use the ",(0,t.jsx)(n.code,{children:"pause"})," CLI to remove itself from the consensus node set. This will prevent the its rank from being impacted and the node will not be inactivated. When it is back online, the consensus node can use the ",(0,t.jsx)(n.code,{children:"unpause"})," CLI to signal to the network that it is ready to rejoin the consensus node set."]}),"\n",(0,t.jsx)(n.h3,{id:"97a5346b720741029b9847fab7461550",children:"Initial framework for determining optimal ranking system values"}),"\n",(0,t.jsxs)(n.p,{children:["Determining the optimal values for ",(0,t.jsx)(n.code,{children:"max_mischance"})," and ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," depends on various factors, including the specific network conditions, the desired level of decentralization, average time for automatic recovery and the overall network performance. Based on the average block production rate, expected node uptime, and network latency of existing Cosmos ecosystem chains, the following initial values are proposed."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"mischance_confidence"}),": In the Cosmos ecosystem, the average block time is around 5-7 seconds. To give a node a reasonable amount of time to recover from temporary issues, ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," could be set to a value equivalent to 10 minutes, such as 120 blocks (assuming a 5-second block time). This would allow nodes to recover from short-term issues without being unfairly penalized."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"max_mischance"}),": Assuming an expected node uptime of 99% per day (i.e 14.4min of allowed downtime per day) and considering network latency, we can initially set ",(0,t.jsx)(n.code,{children:"max_mischance"})," to 60 blocks (5min) . This means that, after missing 120 blocks, if a node misses another 60 consecutive blocks, its status will change to being ",(0,t.jsx)(n.code,{children:"inactive"})," and its rank will be slashed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"}),": To create a competitive environment that encourages node operators to maintain high performance, we can set the ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," to 20%. This value is significant enough to incentivize operators to address any issues leading to downtime quickly, without being overly punitive for temporary issues."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ec9a31c9c0864679b173c41bd2f6e9b8",children:"Parameters"}),"\n",(0,t.jsx)(n.h4,{id:"036395957b234988b35849522764489c",children:"Validator signing info"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"address"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"kira1yq8l"}),"..."]}),(0,t.jsx)(n.td,{children:"The address of the consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"start_height"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1500"})}),(0,t.jsx)(n.td,{children:"The height at which the consensus node was first a candidate OR was activated."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive_until"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2023-05-09T00:00:00Z"})}),(0,t.jsx)(n.td,{children:"The timestamp consensus node cannot be activated until."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"missed_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsx)(n.td,{children:"Total missed blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"produced_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4500"})}),(0,t.jsx)(n.td,{children:"Total produced blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance_confidence"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Mischance confidence counter - counts when node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Missed blocks counter - counts after ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," is reached and if node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"last_present_block"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1575648"})}),(0,t.jsx)(n.td,{children:"The last block height signed by the consensus node."})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",children:"Consensus nodes rank"}),"\n",(0,t.jsxs)(n.p,{children:["Nodes rank and statuses are stored in the ",(0,t.jsx)(n.code,{children:"x/staking"})," module and can be queried using ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"})," CLI."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"val_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.ValAddress"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravaloper1yq8lg..."})}),(0,t.jsxs)(n.td,{children:["The validator key, casted to a Cosmos SDK ",(0,t.jsx)(n.code,{children:"ValAddress"})," type."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pub_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.PubKey"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravalconspub1zcjduepqw..."})}),(0,t.jsxs)(n.td,{children:["The public key of the validator, accepted as a ",(0,t.jsx)(n.code,{children:"cosmos.crypto.PubKey"})," interface."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"status"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsx)(n.td,{children:"The current status of the validator."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rank"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"112"})}),(0,t.jsx)(n.td,{children:"A long-term statistic implying the longest streak that a validator ever achieved. This helps to judge real-life performance and reliability of validators."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"streak"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsx)(n.td,{children:"The consecutive number of times that a given validator successfully proposed a block (since the last time they failed) that was accepted into the blockchain state. Similar to kill-streaks in video games, this implies short-term performance."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"f6aa9bcf8b9548e08851342e55526bfa",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"45932a0c158245b491ff1bfa70861f3a",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"pause"})}),(0,t.jsx)(n.th,{children:"Pause a consensus node."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"unpause"})}),(0,t.jsx)(n.td,{children:"Unpause a consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"activate"})}),(0,t.jsx)(n.td,{children:"Activate a consensus node previously inactivated for downtime"})]})]})]}),(0,t.jsx)(n.h4,{id:"93a2e9f8d825484bb2cd185bc9fdd4cf",children:"Pause validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"bb6f0ac5e8b84c06b9254a10d7b17cda",children:"Unpause validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"48d5192f5c3142b399d5396a637e7304",children:"Activating an inactive node"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,t.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"c752b88fcac34284994386908ab948c0",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"active-staking-pools"})})}),(0,t.jsx)(n.th,{children:"Query active staking pools."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"inactive-staking-pools"})})}),(0,t.jsx)(n.td,{children:"Query inactive staking pools."})]})})]}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Nodes rank and statuses can be queried using the ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus node\u2019s dedicated queries"}),"."]})}),(0,t.jsx)(n.h4,{id:"690a7c0801d741fe998d1384a038f922",children:"Active staking pools"}),(0,t.jsx)(n.p,{children:"List all staking pools currently active and accepting delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing active-staking-pools $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"3458f5bf4ec9483888609b767a139118",children:"Inactive staking pools"}),(0,t.jsx)(n.p,{children:"List staking pools that are inactive and cannot accept delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing inactive-staking-pools $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9304f58d70a74166a823067103118abe",children:"Governance"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"})}),(0,t.jsx)(n.th,{children:"Proposes to reset the ranking of all validators"})]})})}),(0,t.jsx)(n.h4,{id:"8dfa1ec3611d407a8074848dba5f9cd3",children:"Reset all validators ranks"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"}),", is utilized to raise a governance proposal for resetting the whole validator rank."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx custom proposal-reset-whole-validator-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>r});s(7294);var t=s(6905);const i={tabItem:"tabItem_Ymn6"};var a=s(5893);function r(e){let{children:n,hidden:s,className:r}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.Z)(i.tabItem,r),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),i=s(6905),a=s(2466),r=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:i}}=e;return{value:n,label:s,attributes:t,default:i}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const i=(0,r.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(i.location.search);n.set(a,e),i.replace({...i.location,search:n.toString()})}),[a,i])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,a=u(e),[r,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[o,h]=j({queryString:s,groupId:i}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,a]=(0,l.Nk)(s);return[i,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:i}),m=(()=>{const e=o??b;return x({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:r,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=s(5893);function v(e){let{className:n,block:s,selectedValue:t,selectValue:r,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),i=c[s].value;i!==t&&(o(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,i.Z)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:i}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===i));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function k(e){const n=b(e);return(0,p.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(v,{...e,...n}),(0,p.jsx)(g,{...e,...n})]})}function y(e){const n=(0,f.Z)();return(0,p.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>r});var t=s(7294);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/088b4ce6.300d5deb.js b/assets/js/088b4ce6.300d5deb.js deleted file mode 100644 index 637003c..0000000 --- a/assets/js/088b4ce6.300d5deb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8631],{5256:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=n(5893),s=n(1151),a=n(4866),o=n(5162);const i={title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers",title:"Governance-regulated Foreign Token Transfers",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},sidebar:"defaultSidebar",previous:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},next:{title:"Token Basketing",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"}},d={},h=[{value:"Concept",id:"22e0f2d993a7488b885efa35c0b62983",level:2},{value:"Filters mechanism",id:"51d0ee0e8c8c41b8914df112534e1a22",level:3},{value:"Parameters",id:"c0b16997472f4eeb8ba46c949fe5c8fc",level:2},{value:"Cli syntax & examples",id:"e11aba2be5c447bb8c11935c4f113602",level:2},{value:"Transactions",id:"d9d37ffa3e5d409ebafdd46a1137665e",level:2},{value:"Queries",id:"2a33689889f04da9889e331913a3d542",level:2},{value:"List blacklisted & whitelisted tokens",id:"00c35df7f2994764862c7136ad5d95ac",level:4},{value:"Governance",id:"68ee4d5375594154b7f930f3ec0d6a17",level:2},{value:"Whitelist and/or blacklist token transfers proposal",id:"45cfb0e749524b7292eb421de9702f07",level:4}];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"22e0f2d993a7488b885efa35c0b62983",children:"Concept"}),"\n",(0,r.jsxs)(t.p,{children:["Foreign tokens can significantly impact the network's economy if they are stolen or originate from a compromised network (i.e. Luna). For instance, should a token experience sudden supply exploitation, it could pose a serious risk to the network's spam protection mechanism if used for fee payments. To mitigate this risk, KIRA\u2019s governance has the ability to create and manage blacklist and whitelist filters for foreign token transfers. These filters can be enabled or disabled through the ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," and ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," ",(0,r.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", and their contents are curated through dedicated governance proposals. In the event that a foreign network becomes compromised and its tokens are deposited into KIRA, these filters can be used to recover funds through a planned hard fork. This process is similar to funds recovery in other Proof-of-Stake and Proof-of-Work chains, but offers on-chain signaling of the network governance's intentions."]}),"\n",(0,r.jsx)(t.h3,{id:"51d0ee0e8c8c41b8914df112534e1a22",children:"Filters mechanism"}),"\n",(0,r.jsxs)(t.p,{children:["When the ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," network property is set to ",(0,r.jsx)(t.code,{children:"true"}),", SEKAI will check whether a given token is whitelisted before allowing it to be transferred. Similarly, when the ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," network property is set to ",(0,r.jsx)(t.code,{children:"true"}),", SEKAI will check whether a given token is blacklisted before allowing it to be transferred. These checks are performed during the ",(0,r.jsx)(t.code,{children:"AnteHandler"})," phase of transaction processing."]}),"\n",(0,r.jsxs)(t.p,{children:["If a token is not on the whitelist (in the case of ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," being set to ",(0,r.jsx)(t.code,{children:"true"}),") or is on the blacklist (in the case of ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," being set to ",(0,r.jsx)(t.code,{children:"true"}),"), then the transaction will fail validation during the ",(0,r.jsx)(t.code,{children:"AnteHandler"})," phase, and the transaction will not be broadcasted to the network or included in any block."]}),"\n",(0,r.jsx)(t.h2,{id:"c0b16997472f4eeb8ba46c949fe5c8fc",children:"Parameters"}),"\n",(0,r.jsx)(t.h2,{id:"e11aba2be5c447bb8c11935c4f113602",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(t.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(t.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(t.em,{children:"documentation for more details."})," ",(0,r.jsx)(t.em,{children:(0,r.jsx)(t.code,{children:"$SIGNER"})})," ",(0,r.jsx)(t.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(t.em,{children:(0,r.jsx)(t.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(t.em,{children:"and"})," ",(0,r.jsxs)(t.em,{children:[(0,r.jsx)(t.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(t.em,{children:"section"})]})}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(t.h2,{id:"d9d37ffa3e5d409ebafdd46a1137665e",children:"Transactions"}),(0,r.jsx)(t.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(t.h2,{id:"2a33689889f04da9889e331913a3d542",children:"Queries"}),(0,r.jsx)(t.table,{children:(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.code,{children:"token-black-whites"})}),(0,r.jsx)(t.th,{children:"Query lists of blacklisted/whitelisted tokens."})]})})}),(0,r.jsx)(t.h4,{id:"00c35df7f2994764862c7136ad5d95ac",children:"List blacklisted & whitelisted tokens"}),(0,r.jsx)(t.p,{children:"The following command is used to lists all blacklisted and whitelisted tokens."}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens token-black-whites $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(t.h2,{id:"68ee4d5375594154b7f930f3ec0d6a17",children:"Governance"}),(0,r.jsx)(t.table,{children:(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.code,{children:"proposal-update-tokens-blackwhite"})}),(0,r.jsx)(t.th,{children:"Create a proposal for whitelisting/blacklisting tokens."})]})})}),(0,r.jsx)(t.h4,{id:"45cfb0e749524b7292eb421de9702f07",children:"Whitelist and/or blacklist token transfers proposal"}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"proposal-update-tokens-blackwhite"})," CLI can be used by accounts with permission 24 to create a proposal for adding or modifying whitelist or blacklist tokens. To vote on the proposal, an account must have permission 25. The ",(0,r.jsx)(t.code,{children:"--is_add"})," flag specifies whether the token should be added (",(0,r.jsx)(t.code,{children:"true"}),") or removed (",(0,r.jsx)(t.code,{children:"false"}),") from the list, while the ",(0,r.jsx)(t.code,{children:"--is_blacklist"})," flag specifies which list to update (",(0,r.jsx)(t.code,{children:"true"})," for blacklist, ",(0,r.jsx)(t.code,{children:"false"})," for whitelist)."]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Flags"})}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$TOKENS"}),": A token or a comma-separated list of tokens (e.g., ",(0,r.jsx)(t.code,{children:"ATOM, KEX, BTC"}),")."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$ISBLACKLIST"}),": Boolean value; ",(0,r.jsx)(t.code,{children:"true"})," to add/modify blacklist, ",(0,r.jsx)(t.code,{children:"false"})," for whitelist."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$ISADD"}),": Boolean value; ",(0,r.jsx)(t.code,{children:"true"})," to add, ",(0,r.jsx)(t.code,{children:"false"})," to remove from the list."]}),"\n"]}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens proposal-update-tokens-blackwhite \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--is_add=$ISADD --is_blacklist=$ISBLACKLIST --tokens=$TOKENS\n"})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var r=n(6905);const s={tabItem:"tabItem_Ymn6"};var a=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var r=n(7294),s=n(6905),a=n(2466),o=n(6550),i=n(469),l=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:s}}=e;return{value:t,label:n,attributes:r,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const s=(0,o.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(a),(0,r.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(s.location.search);t.set(a,e),s.replace({...s.location,search:t.toString()})}),[a,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,a=u(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,h]=b({queryString:n,groupId:s}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,a]=(0,d.Nk)(n);return[s,(0,r.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:s}),k=(()=>{const e=c??p;return f({value:e,tabValues:a})?e:null})();(0,i.Z)((()=>{k&&l(k)}),[k]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=n(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function j(e){let{className:t,block:n,selectedValue:r,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),s=i[n].value;s!==r&&(c(t),o(s))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:h,onClick:d,...a,className:(0,s.Z)("tabs__item",k.tabItem,a?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:s}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function g(e){const t=p(e);return(0,x.jsxs)("div",{className:(0,s.Z)("tabs-container",k.tabList),children:[(0,x.jsx)(j,{...e,...t}),(0,x.jsx)(v,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,x.jsx)(g,{...e,children:h(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var r=n(7294);const s={},a=r.createContext(s);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0a486fbd.a83c598f.js b/assets/js/0a486fbd.a83c598f.js deleted file mode 100644 index b659d36..0000000 --- a/assets/js/0a486fbd.a83c598f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5333],{489:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Auth/index",title:"Auth",description:"cosmos.sdk/x/auth",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Auth/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:17,frontMatter:{title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},sidebar:"defaultSidebar",previous:{title:"Bank",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa"},next:{title:"Transaction validation & processing",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/auth"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b387740.683881f5.js b/assets/js/0b387740.683881f5.js deleted file mode 100644 index 6cb9754..0000000 --- a/assets/js/0b387740.683881f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8467],{9676:e=>{e.exports=JSON.parse('{"pluginId":"docs","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Overview","href":"/docs.kira.network/","docId":"Overview","unlisted":false},{"type":"category","label":"Stack","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"SEKAI | Backend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","docId":"Stack/SEKAI--Backend/System-Requirements","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","docId":"Stack/SEKAI--Backend/Installation","unlisted":false},{"type":"link","label":"Configuration","href":"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","docId":"Stack/SEKAI--Backend/Configuration","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","docId":"Stack/SEKAI--Backend/Command-Line-Interface","unlisted":false},{"type":"category","label":"Modules","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Multistaking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Consensus nodes & staking pools","href":"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","unlisted":false},{"type":"link","label":"Delegators","href":"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","unlisted":false}],"href":"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"},{"type":"category","label":"Slashing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jailing & slashing","href":"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","docId":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","unlisted":false},{"type":"link","label":"Consensus nodes ranks & statuses","href":"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","docId":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","unlisted":false}],"href":"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"},{"type":"category","label":"Governance","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Proposals & governance structure","href":"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","docId":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","unlisted":false},{"type":"link","label":"Councilors & governance ranking","href":"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","docId":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","unlisted":false},{"type":"link","label":"Roles & Permissions","href":"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","docId":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","unlisted":false},{"type":"link","label":"Polls","href":"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","docId":"Stack/SEKAI--Backend/Modules/Governance/Polls","unlisted":false},{"type":"link","label":"Network Properties","href":"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","docId":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","unlisted":false},{"type":"link","label":"Identity Registrar","href":"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","docId":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","unlisted":false},{"type":"link","label":"Data Registry","href":"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","docId":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","unlisted":false},{"type":"link","label":"Poor Network Conditions","href":"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","docId":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","unlisted":false}],"href":"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},{"type":"link","label":"Layer 2","href":"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","docId":"Stack/SEKAI--Backend/Modules/Layer-2/index","unlisted":false},{"type":"category","label":"Distributor ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fees and staking rewards distribution","href":"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","docId":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","unlisted":false}],"href":"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},{"type":"link","label":"Custody","href":"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","docId":"Stack/SEKAI--Backend/Modules/Custody/index","unlisted":false},{"type":"category","label":"Spending Pool","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spending Pools","href":"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","docId":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","unlisted":false}],"href":"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},{"type":"link","label":"Staking Collectives","href":"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","docId":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","unlisted":false},{"type":"category","label":"Universal Basic Income","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Universal Basic Income","href":"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","docId":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","unlisted":false}],"href":"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},{"type":"category","label":"Tokens Module","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Rates Registrar","href":"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","unlisted":false},{"type":"link","label":"Token Aliases Registrar","href":"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","unlisted":false},{"type":"link","label":"Governance-regulated Foreign Token Transfers","href":"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","unlisted":false}],"href":"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},{"type":"category","label":"Token Basketing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Basketing Module","href":"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","docId":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","unlisted":false}],"href":"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"},{"type":"link","label":"Recovery","href":"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","docId":"Stack/SEKAI--Backend/Modules/Recovery/index","unlisted":false},{"type":"category","label":"Upgrade","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Upgrade Module","href":"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","docId":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","unlisted":false}],"href":"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},{"type":"category","label":"Fee processing ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fee processing","href":"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","docId":"Stack/SEKAI--Backend/Modules/Fee-processing/index","unlisted":false}],"href":"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"},{"type":"category","label":"Evidence","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Evidence module","href":"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","docId":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","unlisted":false}],"href":"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"},{"type":"category","label":"BaseApp","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Keys & accounts","href":"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","docId":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","unlisted":false}]},{"type":"link","label":"Bank","href":"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","docId":"Stack/SEKAI--Backend/Modules/Bank","unlisted":false},{"type":"category","label":"Auth ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction validation & processing","href":"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","docId":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","unlisted":false}],"href":"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"},{"type":"category","label":"Params","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Network Parameter Handling","href":"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","docId":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","unlisted":false}],"href":"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}]}],"href":"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"},{"type":"category","label":"INTERX | Middleware","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","docId":"Stack/INTERX--Middleware/System-Requirements","unlisted":false},{"type":"link","label":"Endpoints","href":"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","docId":"Stack/INTERX--Middleware/Endpoints","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","docId":"Stack/INTERX--Middleware/Installation","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","docId":"Stack/INTERX--Middleware/Command-Line-Interface","unlisted":false}],"href":"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"},{"type":"category","label":"MIRO | Frontend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","docId":"Stack/MIRO--Frontend/Installation","unlisted":false}],"href":"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},{"type":"link","label":"TORII | Bridge","href":"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","docId":"Stack/TORII--Bridge","unlisted":false}]},{"type":"link","label":"Community","href":"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","docId":"Community","unlisted":false},{"type":"link","label":"Wallet","href":"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","docId":"Wallet","unlisted":false},{"type":"category","label":"Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Bash-utils","href":"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","docId":"Tools/Bash-utils","unlisted":false},{"type":"link","label":"Cosign","href":"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","docId":"Tools/Cosign","unlisted":false}]}]},"docs":{"Community":{"id":"Community","title":"Community","description":"Coming soon\u2026","sidebar":"defaultSidebar"},"Overview":{"id":"Overview","title":"Overview","description":"KIRA Network combines several modular components to provide a full-stack experience:","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Command-Line-Interface":{"id":"Stack/INTERX--Middleware/Command-Line-Interface","title":"Command Line Interface","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Endpoints":{"id":"Stack/INTERX--Middleware/Endpoints","title":"Endpoints","description":"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/index":{"id":"Stack/INTERX--Middleware/index","title":"INTERX | Middleware","description":"Interx","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Installation":{"id":"Stack/INTERX--Middleware/Installation","title":"Installation","description":"Dependencies","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/System-Requirements":{"id":"Stack/INTERX--Middleware/System-Requirements","title":"System Requirements","description":"To run the interxd application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/index":{"id":"Stack/MIRO--Frontend/index","title":"MIRO | Frontend","description":"Miro","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/Installation":{"id":"Stack/MIRO--Frontend/Installation","title":"Installation","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Command-Line-Interface":{"id":"Stack/SEKAI--Backend/Command-Line-Interface","title":"Command Line Interface","description":"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what\'s currently functional along with examples and additional information: KIRA Network CLI Status.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Configuration":{"id":"Stack/SEKAI--Backend/Configuration","title":"Configuration","description":"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/index":{"id":"Stack/SEKAI--Backend/index","title":"SEKAI | Backend","description":"Sekai","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Installation":{"id":"Stack/SEKAI--Backend/Installation","title":"Installation","description":"Installation","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/index":{"id":"Stack/SEKAI--Backend/Modules/Auth/index","title":"Auth","description":"cosmos.sdk/x/auth","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing":{"id":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","title":"Transaction validation & processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Bank":{"id":"Stack/SEKAI--Backend/Modules/Bank","title":"Bank","description":"cosmos.sdk/x/bank","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts":{"id":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","title":"Keys & accounts","description":"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Custody/index":{"id":"Stack/SEKAI--Backend/Modules/Custody/index","title":"Custody","description":"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution":{"id":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","title":"Fees and staking rewards distribution","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/index":{"id":"Stack/SEKAI--Backend/Modules/Distributor/index","title":"Distributor","description":"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module":{"id":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","title":"Evidence module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/index":{"id":"Stack/SEKAI--Backend/Modules/Evidence/index","title":"Evidence","description":"x/evidence","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing","title":"Fee processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/index":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/index","title":"Fee processing","description":"x/feeprocessing","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking":{"id":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","title":"Councilors & governance ranking","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Data-Registry":{"id":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","title":"Data Registry","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","title":"Identity Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/index":{"id":"Stack/SEKAI--Backend/Modules/Governance/index","title":"Governance","description":"x/gov","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Network-Properties":{"id":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","title":"Network Properties","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Polls":{"id":"Stack/SEKAI--Backend/Modules/Governance/Polls","title":"Polls","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","title":"Poor Network Conditions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure":{"id":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","title":"Proposals & governance structure","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","title":"Roles & Permissions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Layer-2/index":{"id":"Stack/SEKAI--Backend/Modules/Layer-2/index","title":"Layer 2","description":"KIRA\'s Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both \'code is law\' and judgment-based applications. This is more than a platform\u2014it\'s a launchpad for developers to define their own rules and easily iterate on diverse applications.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","title":"Consensus nodes & staking pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Delegators":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","title":"Delegators","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/index":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/index","title":"Multistaking","description":"KIRA\'s consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/index":{"id":"Stack/SEKAI--Backend/Modules/Params/index","title":"Params","description":"cosmos.sdk/x/params","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling":{"id":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","title":"Network Parameter Handling","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Recovery/index":{"id":"Stack/SEKAI--Backend/Modules/Recovery/index","title":"Recovery","description":"x/recovery","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","title":"Consensus nodes ranks & statuses","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/index":{"id":"Stack/SEKAI--Backend/Modules/Slashing/index","title":"Slashing","description":"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","title":"Jailing & slashing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/index":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/index","title":"Spending Pool","description":"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","title":"Spending Pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Staking-Collectives/index":{"id":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","title":"Staking Collectives","description":"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/index":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/index","title":"Token Basketing","description":"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module\'s fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","title":"Token Basketing Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","title":"Governance-regulated Foreign Token Transfers","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/index":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/index","title":"Tokens Module","description":"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira\'s native token\'s value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","title":"Token Aliases Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","title":"Token Rates Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","title":"Universal Basic Income","description":"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants\' engagement by dynamically adjusting the distribution or ensuring fixed intervals.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income","title":"Universal Basic Income","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/index":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/index","title":"Upgrade","description":"x/upgrade","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","title":"Upgrade Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/System-Requirements":{"id":"Stack/SEKAI--Backend/System-Requirements","title":"System Requirements","description":"To run a sekaid application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/TORII--Bridge":{"id":"Stack/TORII--Bridge","title":"TORII | Bridge","description":"Torii","sidebar":"defaultSidebar"},"Tools/Bash-utils":{"id":"Tools/Bash-utils","title":"Bash-utils","description":"https://github.com/KiraCore/tools/releases","sidebar":"defaultSidebar"},"Tools/Cosign":{"id":"Tools/Cosign","title":"Cosign","description":"Cosign","sidebar":"defaultSidebar"},"Wallet":{"id":"Wallet","title":"Wallet","description":"Coming soon\u2026","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/0b387740.cf73f94c.js b/assets/js/0b387740.cf73f94c.js new file mode 100644 index 0000000..49727eb --- /dev/null +++ b/assets/js/0b387740.cf73f94c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8467],{9676:e=>{e.exports=JSON.parse('{"pluginId":"docs","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Overview","href":"/docs.kira.network/docs/","docId":"Overview","unlisted":false},{"type":"category","label":"Stack","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"SEKAI | Backend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/docs/d1a56903-4e24-47ce-b39f-f28be9123399","docId":"Stack/SEKAI--Backend/System-Requirements","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/docs/a026f2da-ef09-4092-af96-aad8db6baf66","docId":"Stack/SEKAI--Backend/Installation","unlisted":false},{"type":"link","label":"Configuration","href":"/docs.kira.network/docs/b85c7808-d42e-474f-a9b6-0f87d1f59e25","docId":"Stack/SEKAI--Backend/Configuration","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/docs/d98b0e99-34c0-4267-a51a-0ec9dab606b9","docId":"Stack/SEKAI--Backend/Command-Line-Interface","unlisted":false},{"type":"category","label":"Modules","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Multistaking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Consensus nodes & staking pools","href":"/docs.kira.network/docs/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","unlisted":false},{"type":"link","label":"Delegators","href":"/docs.kira.network/docs/94e4d0a6-8e45-469c-89a5-8ec65ca16381","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","unlisted":false}],"href":"/docs.kira.network/docs/64eb7e84-ab20-454d-953f-57b1cf457790"},{"type":"category","label":"Slashing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jailing & slashing","href":"/docs.kira.network/docs/d6fee8b3-1948-493e-bbdd-796bcc996c2b","docId":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","unlisted":false},{"type":"link","label":"Consensus nodes ranks & statuses","href":"/docs.kira.network/docs/9f763be9-fbd3-452f-8c6e-6e418f34856f","docId":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","unlisted":false}],"href":"/docs.kira.network/docs/4672bb94-ed2b-4e45-9d33-af999825c193"},{"type":"category","label":"Governance","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Proposals & governance structure","href":"/docs.kira.network/docs/25d26925-50ce-4a4f-836b-fc8486ef8b05","docId":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","unlisted":false},{"type":"link","label":"Councilors & governance ranking","href":"/docs.kira.network/docs/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","docId":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","unlisted":false},{"type":"link","label":"Roles & Permissions","href":"/docs.kira.network/docs/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","docId":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","unlisted":false},{"type":"link","label":"Polls","href":"/docs.kira.network/docs/f5e18e49-927a-4a4f-ae70-bb9fc5606243","docId":"Stack/SEKAI--Backend/Modules/Governance/Polls","unlisted":false},{"type":"link","label":"Network Properties","href":"/docs.kira.network/docs/b9b95792-b936-4603-8a46-15566f24e3c0","docId":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","unlisted":false},{"type":"link","label":"Identity Registrar","href":"/docs.kira.network/docs/d482180d-165a-4c09-8c32-167f061ceb92","docId":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","unlisted":false},{"type":"link","label":"Data Registry","href":"/docs.kira.network/docs/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","docId":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","unlisted":false},{"type":"link","label":"Poor Network Conditions","href":"/docs.kira.network/docs/65e3e6fe-040a-4716-b13b-9e27def6ff9d","docId":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","unlisted":false}],"href":"/docs.kira.network/docs/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},{"type":"link","label":"Layer 2","href":"/docs.kira.network/docs/8aad2626-40b5-42d6-9504-0c1287216a73","docId":"Stack/SEKAI--Backend/Modules/Layer-2/index","unlisted":false},{"type":"category","label":"Distributor ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fees and staking rewards distribution","href":"/docs.kira.network/docs/85d4757d-f36d-4a39-b7ab-62866c1689ba","docId":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","unlisted":false}],"href":"/docs.kira.network/docs/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},{"type":"link","label":"Custody","href":"/docs.kira.network/docs/0e1ccab2-5425-473e-be93-5b4a87de5d00","docId":"Stack/SEKAI--Backend/Modules/Custody/index","unlisted":false},{"type":"category","label":"Spending Pool","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spending Pools","href":"/docs.kira.network/docs/812fdf31-d225-4daf-a4cd-4501cbc00d95","docId":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","unlisted":false}],"href":"/docs.kira.network/docs/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},{"type":"link","label":"Staking Collectives","href":"/docs.kira.network/docs/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","docId":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","unlisted":false},{"type":"category","label":"Universal Basic Income","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Universal Basic Income","href":"/docs.kira.network/docs/865cb42c-7ed4-4607-a446-c7ef3882056e","docId":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","unlisted":false}],"href":"/docs.kira.network/docs/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},{"type":"category","label":"Tokens Module","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Rates Registrar","href":"/docs.kira.network/docs/f19a45b3-88c4-469c-8642-772b941a1b24","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","unlisted":false},{"type":"link","label":"Token Aliases Registrar","href":"/docs.kira.network/docs/e163e1d7-f16e-4c0d-945c-db2efc13ea49","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","unlisted":false},{"type":"link","label":"Governance-regulated Foreign Token Transfers","href":"/docs.kira.network/docs/34367cb0-ee71-418f-9dc5-bcc8823b71e5","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","unlisted":false}],"href":"/docs.kira.network/docs/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},{"type":"category","label":"Token Basketing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Basketing Module","href":"/docs.kira.network/docs/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","docId":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","unlisted":false}],"href":"/docs.kira.network/docs/6c6d144f-f315-43f7-8fe7-289d98890a69"},{"type":"link","label":"Recovery","href":"/docs.kira.network/docs/0b33153c-9b3e-410f-abd7-2877ccb870ce","docId":"Stack/SEKAI--Backend/Modules/Recovery/index","unlisted":false},{"type":"category","label":"Upgrade","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Upgrade Module","href":"/docs.kira.network/docs/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","docId":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","unlisted":false}],"href":"/docs.kira.network/docs/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},{"type":"category","label":"Fee processing ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fee processing","href":"/docs.kira.network/docs/d820877a-9fe7-424f-8866-8e822bf9ba84","docId":"Stack/SEKAI--Backend/Modules/Fee-processing/index","unlisted":false}],"href":"/docs.kira.network/docs/184c11ed-4849-4ec5-acd0-f795b7abf467"},{"type":"category","label":"Evidence","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Evidence module","href":"/docs.kira.network/docs/bd4cce67-2cee-4d9f-9b81-e5643d130438","docId":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","unlisted":false}],"href":"/docs.kira.network/docs/6a318dbd-2d44-4f1f-9729-5e608286289f"},{"type":"category","label":"BaseApp","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Keys & accounts","href":"/docs.kira.network/docs/31613d97-abfb-4911-b17a-0c83cdba58a7","docId":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","unlisted":false}]},{"type":"link","label":"Bank","href":"/docs.kira.network/docs/04e8b755-d259-40f9-b66c-ddf5223c66fa","docId":"Stack/SEKAI--Backend/Modules/Bank","unlisted":false},{"type":"category","label":"Auth ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction validation & processing","href":"/docs.kira.network/docs/f7f02009-1f78-426b-8915-f503cdda9671","docId":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","unlisted":false}],"href":"/docs.kira.network/docs/cb04c86c-93bc-47bd-8a40-510e60bd7115"},{"type":"category","label":"Params","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Network Parameter Handling","href":"/docs.kira.network/docs/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","docId":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","unlisted":false}],"href":"/docs.kira.network/docs/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}]}],"href":"/docs.kira.network/docs/27fe8d79-00c0-4e0b-872b-3d72a246c073"},{"type":"category","label":"INTERX | Middleware","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/docs/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","docId":"Stack/INTERX--Middleware/System-Requirements","unlisted":false},{"type":"link","label":"Endpoints","href":"/docs.kira.network/docs/27ca73f9-ea33-4ca3-994a-cba651a2c896","docId":"Stack/INTERX--Middleware/Endpoints","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/docs/cf419aea-20dc-4421-951b-2579c3026e6b","docId":"Stack/INTERX--Middleware/Installation","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/docs/39242b54-c86a-4406-82f9-49cad4ed7c5a","docId":"Stack/INTERX--Middleware/Command-Line-Interface","unlisted":false}],"href":"/docs.kira.network/docs/be25ed12-b476-4a07-8966-9bc4062bd746"},{"type":"category","label":"MIRO | Frontend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs.kira.network/docs/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","docId":"Stack/MIRO--Frontend/Installation","unlisted":false}],"href":"/docs.kira.network/docs/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},{"type":"link","label":"TORII | Bridge","href":"/docs.kira.network/docs/d5d8036d-f978-4053-b7e8-57d9244c09e9","docId":"Stack/TORII--Bridge","unlisted":false}]},{"type":"link","label":"Community","href":"/docs.kira.network/docs/6196d806-d61d-4013-b317-d9f2f8f4008f","docId":"Community","unlisted":false},{"type":"link","label":"Wallet","href":"/docs.kira.network/docs/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","docId":"Wallet","unlisted":false},{"type":"category","label":"Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Bash-utils","href":"/docs.kira.network/docs/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","docId":"Tools/Bash-utils","unlisted":false},{"type":"link","label":"Cosign","href":"/docs.kira.network/docs/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","docId":"Tools/Cosign","unlisted":false}]}]},"docs":{"Community":{"id":"Community","title":"Community","description":"Coming soon\u2026","sidebar":"defaultSidebar"},"Overview":{"id":"Overview","title":"Overview","description":"KIRA Network combines several modular components to provide a full-stack experience:","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Command-Line-Interface":{"id":"Stack/INTERX--Middleware/Command-Line-Interface","title":"Command Line Interface","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Endpoints":{"id":"Stack/INTERX--Middleware/Endpoints","title":"Endpoints","description":"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/index":{"id":"Stack/INTERX--Middleware/index","title":"INTERX | Middleware","description":"Interx","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Installation":{"id":"Stack/INTERX--Middleware/Installation","title":"Installation","description":"Dependencies","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/System-Requirements":{"id":"Stack/INTERX--Middleware/System-Requirements","title":"System Requirements","description":"To run the interxd application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/index":{"id":"Stack/MIRO--Frontend/index","title":"MIRO | Frontend","description":"Miro","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/Installation":{"id":"Stack/MIRO--Frontend/Installation","title":"Installation","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Command-Line-Interface":{"id":"Stack/SEKAI--Backend/Command-Line-Interface","title":"Command Line Interface","description":"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what\'s currently functional along with examples and additional information: KIRA Network CLI Status.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Configuration":{"id":"Stack/SEKAI--Backend/Configuration","title":"Configuration","description":"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/index":{"id":"Stack/SEKAI--Backend/index","title":"SEKAI | Backend","description":"Sekai","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Installation":{"id":"Stack/SEKAI--Backend/Installation","title":"Installation","description":"Installation","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/index":{"id":"Stack/SEKAI--Backend/Modules/Auth/index","title":"Auth","description":"cosmos.sdk/x/auth","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing":{"id":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","title":"Transaction validation & processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Bank":{"id":"Stack/SEKAI--Backend/Modules/Bank","title":"Bank","description":"cosmos.sdk/x/bank","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts":{"id":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","title":"Keys & accounts","description":"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Custody/index":{"id":"Stack/SEKAI--Backend/Modules/Custody/index","title":"Custody","description":"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution":{"id":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","title":"Fees and staking rewards distribution","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/index":{"id":"Stack/SEKAI--Backend/Modules/Distributor/index","title":"Distributor","description":"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module":{"id":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","title":"Evidence module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/index":{"id":"Stack/SEKAI--Backend/Modules/Evidence/index","title":"Evidence","description":"x/evidence","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing","title":"Fee processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/index":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/index","title":"Fee processing","description":"x/feeprocessing","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking":{"id":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","title":"Councilors & governance ranking","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Data-Registry":{"id":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","title":"Data Registry","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","title":"Identity Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/index":{"id":"Stack/SEKAI--Backend/Modules/Governance/index","title":"Governance","description":"x/gov","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Network-Properties":{"id":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","title":"Network Properties","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Polls":{"id":"Stack/SEKAI--Backend/Modules/Governance/Polls","title":"Polls","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","title":"Poor Network Conditions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure":{"id":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","title":"Proposals & governance structure","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","title":"Roles & Permissions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Layer-2/index":{"id":"Stack/SEKAI--Backend/Modules/Layer-2/index","title":"Layer 2","description":"KIRA\'s Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both \'code is law\' and judgment-based applications. This is more than a platform\u2014it\'s a launchpad for developers to define their own rules and easily iterate on diverse applications.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","title":"Consensus nodes & staking pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Delegators":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","title":"Delegators","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/index":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/index","title":"Multistaking","description":"KIRA\'s consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/index":{"id":"Stack/SEKAI--Backend/Modules/Params/index","title":"Params","description":"cosmos.sdk/x/params","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling":{"id":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","title":"Network Parameter Handling","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Recovery/index":{"id":"Stack/SEKAI--Backend/Modules/Recovery/index","title":"Recovery","description":"x/recovery","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","title":"Consensus nodes ranks & statuses","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/index":{"id":"Stack/SEKAI--Backend/Modules/Slashing/index","title":"Slashing","description":"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","title":"Jailing & slashing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/index":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/index","title":"Spending Pool","description":"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","title":"Spending Pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Staking-Collectives/index":{"id":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","title":"Staking Collectives","description":"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/index":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/index","title":"Token Basketing","description":"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module\'s fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","title":"Token Basketing Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","title":"Governance-regulated Foreign Token Transfers","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/index":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/index","title":"Tokens Module","description":"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira\'s native token\'s value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","title":"Token Aliases Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","title":"Token Rates Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","title":"Universal Basic Income","description":"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants\' engagement by dynamically adjusting the distribution or ensuring fixed intervals.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income","title":"Universal Basic Income","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/index":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/index","title":"Upgrade","description":"x/upgrade","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","title":"Upgrade Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/System-Requirements":{"id":"Stack/SEKAI--Backend/System-Requirements","title":"System Requirements","description":"To run a sekaid application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/TORII--Bridge":{"id":"Stack/TORII--Bridge","title":"TORII | Bridge","description":"Torii","sidebar":"defaultSidebar"},"Tools/Bash-utils":{"id":"Tools/Bash-utils","title":"Bash-utils","description":"https://github.com/KiraCore/tools/releases","sidebar":"defaultSidebar"},"Tools/Cosign":{"id":"Tools/Cosign","title":"Cosign","description":"Cosign","sidebar":"defaultSidebar"},"Wallet":{"id":"Wallet","title":"Wallet","description":"Coming soon\u2026","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/0b82c4a8.ac475a59.js b/assets/js/0b82c4a8.ac475a59.js deleted file mode 100644 index 32cfe24..0000000 --- a/assets/js/0b82c4a8.ac475a59.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3958],{8048:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var s=a(5893),i=a(1151),t=a(4866),r=a(5162);const l={title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},o=void 0,c={id:"Stack/SEKAI--Backend/Installation",title:"Installation",description:"Installation",source:"@site/tabs/docs/Stack/SEKAI--Backend/Installation.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/a026f2da-ef09-4092-af96-aad8db6baf66",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399"},next:{title:"Configuration",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25"}},d={},h=[{value:"Installation",id:"6b4733753b1141ebadec8da43ee6c8fe",level:2},{value:"Linux/ubuntu",id:"b879a02837014f48ac435a1b2d2d2db5",level:2},{value:"Required tools",id:"5629790c26bb4cedb9025ab46dd70fa2",level:2},{value:"Cosign",id:"95ea60da4e6647de9391afabd8b9c38f",level:3},{value:"Bash-utils",id:"229d311718aa4d5bbeeb225e7731cd40",level:3},{value:"Dependencies",id:"07e9d84107ba48fa862297b2bf6acb74",level:2},{value:"Go",id:"974aeb0c853d4a4db37b900d9d0bec7f",level:4},{value:"Systemd alternative (requires python2 package)",id:"74ddeb9a5add46c18c0561f80984473c",level:4},{value:"Others",id:"bec68255b94b4716b936663f8a1aea8f",level:4},{value:"Sekai installation",id:"417da5606683484286cf1ff21a7340fa",level:2},{value:"Alternative installation processes",id:"63e27c2e5af940218ffe572be0f5320c",level:2},{value:"Using binaries",id:"4b2b70902ddb4c879c948bd0c3cf59c1",level:3},{value:"Using kira manager",id:"a8c091760f38469a96d4b86ba746d162",level:3},{value:"(testing) using a docker base-image release",id:"564d5e42582e4067af0b7fcc4d1bbd99",level:3},{value:"Mac",id:"04d8df0144c14d869178f8bcc13787b2",level:2},{value:"Required tools",id:"df90b4ff57684fec83660debdedfba39",level:2},{value:"Bash v5",id:"e12ff19e5f33489d91417d9c4bd8f954",level:3},{value:"Cosign",id:"0069f1f3f89b4b34a56731be349776be",level:3},{value:"Bash-utils",id:"bf886ff931294e1aad96372d39449386",level:3},{value:"Dependencies",id:"4bae39ed625c475494b196975893306b",level:2},{value:"Golang",id:"66072169c89349f79786b5b4c388b676",level:4},{value:"Others",id:"3bbb84dbac5748b5870a1930d94970b6",level:4},{value:"Sekai installation",id:"fec5cf22760f4560b4a43d52328dff3f",level:2},{value:"Alternative installation processes",id:"fd1fa8f22b214af586fab939156eefb5",level:3},{value:"Using binaries",id:"44bd35a00e7d4292bb2cc44bf69f8959",level:4},{value:"Using kira manager",id:"476faf3ef9b24b3e9e26762cb0f1047c",level:4},{value:"Starting & testing",id:"0dbeaabf1c9d400596731df653b604e4",level:2},{value:"Start",id:"0773614fcfd64317bc7ebf0f8255dfb2",level:4},{value:"Stop",id:"1988428569484528bf9071b77a171046",level:4},{value:"Integration tests",id:"00258775c9f4458bb9ca14d0134429a6",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"6b4733753b1141ebadec8da43ee6c8fe",children:"Installation"}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(r.Z,{value:"linux/ubuntu",label:"Linux/Ubuntu",children:[(0,s.jsx)(n.h2,{id:"b879a02837014f48ac435a1b2d2d2db5",children:"Linux/ubuntu"}),(0,s.jsx)(n.h2,{id:"5629790c26bb4cedb9025ab46dd70fa2",children:"Required tools"}),(0,s.jsx)(n.p,{children:"KIRA requires the installation of two tools, Cosign and Bash-utils, in order to secure the network and simplify the execution of various tasks."}),(0,s.jsx)(n.h3,{id:"95ea60da4e6647de9391afabd8b9c38f",children:"Cosign"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),(0,s.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"229d311718aa4d5bbeeb225e7731cd40",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to securely install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#95ea60da4e6647de9391afabd8b9c38f",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Always source /etc/profile with ",(0,s.jsx)(n.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})}),(0,s.jsx)(n.h2,{id:"07e9d84107ba48fa862297b2bf6acb74",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"974aeb0c853d4a4db37b900d9d0bec7f",children:"Go"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv GOROOT /usr/local/go && setGlobEnv GOPATH /home/go && setGlobEnv GOBIN /usr/local/go/bin && \\\nloadGlobEnvs && setGlobPath $GOROOT && setGlobPath $GOPATH && setGlobPath $GOBIN && loadGlobEnvs && \\\n( go clean -modcache -cache -n || : ) && rm -rfv "$GOROOT" "$GOBIN" "$GOPATH" && GO_VERSION="1.18.2" && \\\nGO_TAR="go$GO_VERSION.$(getPlatform)-$(getArch).tar.gz" && cd /tmp && safeWget ./$GO_TAR https://dl.google.com/go/$GO_TAR \\\n"fc4ad28d0501eaa9c9d6190de3888c9d44d8b5fb02183ce4ae93713f67b8a35b,e54bec97a1a5d230fc2f9ad0880fcbabb5888f30ed9666eca4a91c5a32e86cbc" && \\\ntar -C /usr/local -xf $GO_TAR &>/dev/null && go version\n'})}),(0,s.jsx)(n.h4,{id:"74ddeb9a5add46c18c0561f80984473c",children:"Systemd alternative (requires python2 package)"}),(0,s.jsx)(n.p,{children:"Systemd is a useful service manager that detects errors or memory overflow in the Sekai node and keeps it keeps it running even after system restarts or power outages."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py -O /usr/local/bin/systemctl2 && \\\nchmod +x /usr/local/bin/systemctl2 && \\\nsystemctl2 --version\n"})}),(0,s.jsx)(n.h4,{id:"bec68255b94b4716b936663f8a1aea8f",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"apt-get install jq\n"})}),(0,s.jsx)(n.h2,{id:"417da5606683484286cf1ff21a7340fa",children:"Sekai installation"}),(0,s.jsx)(n.p,{children:"Login as admin & load environment variables."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo -s\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo as env variables within ",(0,s.jsx)(n.code,{children:"/etc/profile"})," (with bash-utils or manually). Sourcing ",(0,s.jsx)(n.code,{children:"/etc/profile"})," is necessary."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nsetGlobEnv NETWORK_NAME "test" && \\\nsetGlobEnv SEKAID_HOME "~/.sekaid-$NETWORK_NAME" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repository and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Verify successful installation"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid version --long\n"})}),(0,s.jsx)(n.h2,{id:"63e27c2e5af940218ffe572be0f5320c",children:"Alternative installation processes"}),(0,s.jsx)(n.h3,{id:"4b2b70902ddb4c879c948bd0c3cf59c1",children:"Using binaries"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cd /tmp && \\\nPLATFORM="$(getPlatform)" && \\\nARCHITECURE="$(getArch)" && \\\nBIN_DEST="/usr/local/bin/sekaid" && \\\nsafeWget ./sekaid.deb "https://github.com/KiraCore/sekai/releases/download/$SEKAI_VERSION/sekai-${PLATFORM}-${ARCHITECURE}.deb" \\\n"$KIRA_COSIGN_PUB" && dpkg-deb -x ./sekaid.deb ./sekaid && cp -fv "sekaid/bin/sekaid" $BIN_DEST && chmod -v 755 $BIN_DEST && \\\nechoInfo "INFO: Installed bash-utils: " && bashUtilsVersion && \\\nechoInfo "INFO: Installed sekaid: " && sekaid version\n'})}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"a8c091760f38469a96d4b86ba746d162",children:"Using kira manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.strong,{children:"[Problem Internal Link]"}),"."]}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"564d5e42582e4067af0b7fcc4d1bbd99",children:"(testing) using a docker base-image release"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/docker/pkgs/container/docker%2Fbase-image",children:"Latest base-image version"})}),(0,s.jsxs)(n.p,{children:["Erase previous instances ",(0,s.jsx)(n.em,{children:"(Optional)"})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker rm -f $(docker ps -a -q) && \\\ndocker image prune -a -f\n"})}),(0,s.jsx)(n.p,{children:"Load base-image in container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'IMG_VERSION="v0.13.14"\n\nBASE_NAME="test" && BASE_IMG="[ghcr.io/kiracore/docker/base-image:](http://ghcr.io/kiracore/docker/kira-base:v0.11.4)$IMG_VERSION" && \\\ndocker run -i -t -d --privileged --net bridge --name $BASE_NAME --hostname test.local $BASE_IMG /bin/bash\n'})}),(0,s.jsx)(n.p,{children:"Enter container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker start -i $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})}),(0,s.jsx)(n.p,{children:"Install Sekai"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Delete container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker rm -f $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})})]}),(0,s.jsxs)(r.Z,{value:"mac",label:"Mac",children:[(0,s.jsx)(n.h2,{id:"04d8df0144c14d869178f8bcc13787b2",children:"Mac"}),(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"The installation process on macOS hasn't been fully tested and may have unresolved issues. We encourage users to report any problems and contribute to improvements."})}),(0,s.jsx)(n.h2,{id:"df90b4ff57684fec83660debdedfba39",children:"Required tools"}),(0,s.jsx)(n.h3,{id:"e12ff19e5f33489d91417d9c4bd8f954",children:"Bash v5"}),(0,s.jsx)(n.p,{children:"Bash is the default command line interpreter for many Unix-based operating systems, including macOS. However MacOS, by default, comes with an older version of Bash (version 3.2.57) due to licensing reasons. Bash V5 is the latest major version and offers numerous improvements and features compared to previous versions. In KIRA, some commands used in scripts might require Bash V5 to properly execute."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Bash V5\nbrew install bash\n\n# Add Bash V5 to the list of acceptable shells\necho "/usr/local/bin/bash" | sudo tee -a /etc/shells\n\n# Change your default shell to Bash V5\nchsh -s /usr/local/bin/bash\n\n# Restart your terminal and check version\necho $BASH_VERSION\n'})}),(0,s.jsx)(n.h3,{id:"0069f1f3f89b4b34a56731be349776be",children:"Cosign"}),(0,s.jsx)(n.p,{children:"Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"bf886ff931294e1aad96372d39449386",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#0069f1f3f89b4b34a56731be349776be",children:"COSIGN tool"})," that will guarantee the integrity of the files and ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#e12ff19e5f33489d91417d9c4bd8f954",children:"Bash V5"})," for better compatibility. They MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms."})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts. It provides various functions for managing environment variables, displaying information, and handling errors. Bash-utils is used in KIRA to streamline and simplify the process of executing various tasks within the network."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})}),(0,s.jsx)(n.h2,{id:"4bae39ed625c475494b196975893306b",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"66072169c89349f79786b5b4c388b676",children:"Golang"}),(0,s.jsx)(n.p,{children:"Install Go"}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"$GOBIN is required as environment variable for building SEKAI"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"setGlobEnv"})," and ",(0,s.jsx)(n.code,{children:"setGlobPath"})," are amongst the commands that do not behave properly. Consider adding/editing the environment variable manually."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Go \nbrew install go\n\n# Assume root permissions \nsudo -s\n\n# Set environment variables (manually)\ngoVersion=$(go version | awk \'{print $3}\' | cut -c 3-) && \\\nGOROOT="/usr/local/Cellar/go/$goVersion" && \\\nGOBIN="$GOROOT/bin" && \\\nGOPATH="$HOME/go" && \\\nPATH="$GOBIN:$GOPATH:$PATH"\n\n# Add variables to /etc/profile\necho "export GOROOT=\\"$GOROOT\\"" >> /etc/profile\necho "export GOBIN=\\"$GOBIN\\"" >> /etc/profile\necho "export GOPATH=\\"$GOPATH\\"" >> /etc/profile\necho "export PATH=\\"$PATH\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h4,{id:"3bbb84dbac5748b5870a1930d94970b6",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew install jq\n"})}),(0,s.jsx)(n.h2,{id:"fec5cf22760f4560b4a43d52328dff3f",children:"Sekai installation"}),(0,s.jsxs)(n.p,{children:["Login as admin & load environment variables. Using bash shell and ",(0,s.jsx)(n.em,{children:"sourcing /etc/profile is necessary."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Assume sudo \nsudo -s && . /etc/profile\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo ",(0,s.jsx)(n.em,{children:"(requires bash-utils)."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repo and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.h3,{id:"fd1fa8f22b214af586fab939156eefb5",children:"Alternative installation processes"}),(0,s.jsx)(n.h4,{id:"44bd35a00e7d4292bb2cc44bf69f8959",children:"Using binaries"}),(0,s.jsx)(n.p,{children:"Unfortunately, it is not possible to install .deb packages on MacOS as of now."}),(0,s.jsx)(n.h4,{id:"476faf3ef9b24b3e9e26762cb0f1047c",children:"Using kira manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.a,{href:"https://testnet.kira.network/",children:"testnet.kira.network"}),"."]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"0dbeaabf1c9d400596731df653b604e4",children:"Starting & testing"}),"\n",(0,s.jsx)(n.h4,{id:"0773614fcfd64317bc7ebf0f8255dfb2",children:"Start"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-start\n"})}),"\n",(0,s.jsx)(n.h4,{id:"1988428569484528bf9071b77a171046",children:"Stop"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-stop\n"})}),"\n",(0,s.jsx)(n.h4,{id:"00258775c9f4458bb9ca14d0134429a6",children:"Integration tests"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Full integration test (duration > 1h) :\nmake test-local \n\n# Individual integration test : \n# available integration tests can be found @ sekai/scripts/test-local/\nmake network-start && scripts/test-local/your-test.sh\n"})})]})}function b(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const i={tabItem:"tabItem_Ymn6"};var t=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>A});var s=a(7294),i=a(6905),t=a(2466),r=a(6550),l=a(469),o=a(1980),c=a(7392),d=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:i}}=e;return{value:n,label:a,attributes:s,default:i}}))}(a);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function b(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:a}=e;const i=(0,r.k6)(),t=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(t),(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:a=!1,groupId:i}=e,t=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:t}))),[c,h]=f({queryString:a,groupId:i}),[g,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,d.Nk)(a);return[i,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:i}),m=(()=>{const e=c??g;return b({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=a(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var I=a(5893);function E(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const n=e.currentTarget,a=o.indexOf(n),i=l[a].value;i!==s&&(c(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,I.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},n),children:l.map((e=>{let{value:n,label:a,attributes:t}=e;return(0,I.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:i}=e;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,I.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function x(e){const n=g(e);return(0,I.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,I.jsx)(E,{...e,...n}),(0,I.jsx)(v,{...e,...n})]})}function A(e){const n=(0,p.Z)();return(0,I.jsx)(x,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>r});var s=a(7294);const i={},t=s.createContext(i);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0bf56fa6.62a8064b.js b/assets/js/0bf56fa6.62a8064b.js new file mode 100644 index 0000000..862462a --- /dev/null +++ b/assets/js/0bf56fa6.62a8064b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4542],{4147:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var a=n(5893),t=n(1151);n(4866),n(5162);const r={title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},i=void 0,l={id:"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token",title:"KEX- KIRA\u2019s Native Token",description:"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.",source:"@site/tabs/learn/KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/39d6465e-61d4-4aff-868f-123b65c86326",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},next:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"}},c={},o=[{value:"Kex, Kira\u2019s Native Token",id:"e8a446aeed014fcb831ac0e964d64f8b",level:4},{value:"Kex Economics",id:"51ff3bf8c9e74ba78996a3a596703159",level:4}];function d(e){const s={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",h4:"h4",img:"img",li:"li",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",p:"p",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["For a better understanding regarding network rewards distribution, please refer to the ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," section."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{src:n(5441).Z+"",width:"562",height:"470"})}),"\n",(0,a.jsx)(s.h4,{id:"e8a446aeed014fcb831ac0e964d64f8b",children:"Kex, Kira\u2019s Native Token"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsx)(s.p,{children:"The KIRA network uses a shared clock to define the inflation rate of KEX, rather than relying on the traditional block time. This means that the amount of block rewards given out can fluctuate depending on network latency, block proposer timeouts, and other factors. This design choice was made to prevent consensus nodes from attacking the network by speeding up the block speed in order to increase KEX inflation, while simultaneously rejecting incoming transactions. While this approach may seem unfair at first glance, it ensures that over the long term, everyone participating in the network will receive their fair share of rewards on average."})}),"\n",(0,a.jsxs)(s.p,{children:["The inflation rate of the native asset KEX is determined by the governance of the network. Inflation is used to attract activity and participation on the network, as well as to provide security through incentivizing stakeholders to hold valuable assets. The ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," module also allows the governance to define the distribution of incentives in order to maintain the relevance and value of KEX. This is an important part of the system's design, as it ensures that the native asset remains an attractive and desirable token for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."]}),"\n",(0,a.jsxs)(s.p,{children:["Governance can configure KEX\u2019s inflation rate with the following ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"}),":"]}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_rate"})," - KEX inflation percentage","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsx)(s.li,{children:"Default:"}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"0"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"50"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_period"})," - Period of time in seconds over which current KEX supply is inflated by ",(0,a.jsx)(s.code,{children:"inflation_rate"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Default: ",(0,a.jsx)(s.code,{children:"31557600"})," (=1 year)"]}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"2629800"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.blockquote,{children:["\n",(0,a.jsxs)(s.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,a.jsx)(s.code,{children:"inflation_rate"})," of 15%, and an ",(0,a.jsx)(s.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"3600"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,a.jsxs)(s.mfrac,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mn,{children:"300500000"}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"0.15"})]}),(0,a.jsx)(s.mn,{children:"31557600"})]})}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"3600"}),(0,a.jsx)(s.mo,{children:"\u2248"}),(0,a.jsx)(s.mn,{children:"5142"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,a.jsx)(s.span,{className:"mfrac",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,a.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"mord",children:(0,a.jsx)(s.span,{className:"mord",children:"31557600"})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,a.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord",children:"300500000"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"0.15"})]})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.686em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"\u2248"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,a.jsx)(s.h4,{id:"51ff3bf8c9e74ba78996a3a596703159",children:"Kex Economics"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"Initial token supply"})}),(0,a.jsx)(s.th,{children:"300 000 000"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Current circulating supply"})}),(0,a.jsxs)(s.td,{children:["Real time circulating supply available here: ",(0,a.jsx)(s.a,{href:"http://circ.kira.network/",children:"circ.kira.network"})]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Maximum token supply"})}),(0,a.jsx)(s.td,{children:"None. Can be capped by governance."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Token inflation"})}),(0,a.jsx)(s.td,{children:"18% annual rate by default."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Token allocation & distribution schedule"})}),(0,a.jsxs)(s.td,{children:["All relevant information are available ",(0,a.jsx)(s.a,{href:"https://mirror.xyz/0xEc44c03Ff46cfDB7754bc1c0D39a7C5e0D8fd9B2/2W18Xl0leYT4CtbHiTMlJvK4Y_50kqBCoHU0ZQDvXY8",children:"here"}),"."]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Minimum stake for consensus node"})}),(0,a.jsx)(s.td,{children:"No minimum"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Active set minimum"})}),(0,a.jsx)(s.td,{children:"No minimum"})]})]})]})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var a=n(6905);const t={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>y});var a=n(7294),t=n(6905),r=n(2466),i=n(6550),l=n(469),c=n(1980),o=n(7392),d=n(12);function m(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return m(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:t}}=e;return{value:s,label:n,attributes:a,default:t}}))}(n);return function(e){const s=(0,o.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const t=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,c._X)(r),(0,a.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:t}=e,r=h(e),[i,c]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:r}))),[o,m]=x({queryString:n,groupId:t}),[p,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,d.Nk)(n);return[t,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:t}),f=(()=>{const e=o??p;return u({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{f&&c(f)}),[f]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),m(e),j(e)}),[m,j,r]),tabValues:r}}var j=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:a,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,r.o5)(),d=e=>{const s=e.currentTarget,n=c.indexOf(s),t=l[n].value;t!==a&&(o(s),i(t))},m=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;s=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;s=c[n]??c[c.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>c.push(e),onKeyDown:m,onClick:d,...r,className:(0,t.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:t}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function N(e){const s=p(e);return(0,g.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function y(e){const s=(0,j.Z)();return(0,g.jsx)(N,{...e,children:m(e.children)},String(s))}},5441:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/813946695-23ab7c66f75d95f301b39b68590190f2.png"},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>i});var a=n(7294);const t={},r=a.createContext(t);function i(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d323c38.0bdf1e90.js b/assets/js/0d323c38.afa8b458.js similarity index 96% rename from assets/js/0d323c38.0bdf1e90.js rename to assets/js/0d323c38.afa8b458.js index 5dc44ec..6351316 100644 --- a/assets/js/0d323c38.0bdf1e90.js +++ b/assets/js/0d323c38.afa8b458.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3198],{831:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"testnet-9",sidebar_position:0,slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},l=void 0,i={id:"Testnet-History/testnet-9",title:"testnet-9",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-9.mdx",sourceDirName:"Testnet-History",slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"testnet-9",sidebar_position:0,slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},sidebar:"defaultSidebar",previous:{title:"chaosnet-1",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac"},next:{title:"testnet-7",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"}},o={},c=[{value:"Description",id:"25f6e0293fbd4badbaaa0727b9bd16cf",level:2},{value:"Post mortem",id:"52717a0950f643e8bc66a324b07ddc98",level:2},{value:"Files",id:"32fa751d98004e33aea7780668de1592",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"25f6e0293fbd4badbaaa0727b9bd16cf",children:"Description"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Chain Identifier: ",(0,a.jsx)(t.code,{children:"testnet-9"})]}),"\n",(0,a.jsxs)(t.li,{children:["Expected Hard Fork Date: ",(0,a.jsx)(t.code,{children:"2022-01-07 6:30 PM UTC"})]}),"\n",(0,a.jsxs)(t.li,{children:["Upgrade Proposal Id: ",(0,a.jsx)(t.code,{children:"668"})]}),"\n",(0,a.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,a.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,a.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,a.jsx)(t.code,{children:"0x111567fa0152bc91d72e395d3604510b8425e4b3a9c48cca1e9d019fdde749f8"})]}),"\n",(0,a.jsxs)(t.li,{children:["Initial Block Height: ",(0,a.jsx)(t.code,{children:"920527"})]}),"\n",(0,a.jsxs)(t.li,{children:["Block Height Reached: ",(0,a.jsx)(t.code,{children:"TBD (never stopped)"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"52717a0950f643e8bc66a324b07ddc98",children:"Post mortem"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Planned to be depreciated by testnet-10"}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"32fa751d98004e33aea7780668de1592",children:"Files"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/f8834219-d9e9-4c4d-ae3e-c06ad98ce3f1/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152700Z&X-Amz-Expires=3600&X-Amz-Signature=067b9bf0e9847ccdaeb5116f1075af7cc04ff3620b2f283d09b294f2d227c1fe&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),l=n(6550),i=n(469),o=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[l,o]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??p;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:l,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=o.indexOf(t),r=i[n].value;r!==a&&(c(t),l(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function j(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=p(e);return(0,x.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(j,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,x.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>l});var a=n(7294);const r={},s=a.createContext(r);function l(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3198],{831:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"testnet-9",sidebar_position:0,slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},l=void 0,i={id:"Testnet-History/testnet-9",title:"testnet-9",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-9.mdx",sourceDirName:"Testnet-History",slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"testnet-9",sidebar_position:0,slug:"/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},sidebar:"defaultSidebar",previous:{title:"chaosnet-1",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac"},next:{title:"testnet-7",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"}},o={},c=[{value:"Description",id:"25f6e0293fbd4badbaaa0727b9bd16cf",level:2},{value:"Post Mortem",id:"52717a0950f643e8bc66a324b07ddc98",level:2},{value:"Files",id:"32fa751d98004e33aea7780668de1592",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"25f6e0293fbd4badbaaa0727b9bd16cf",children:"Description"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Chain Identifier: ",(0,a.jsx)(t.code,{children:"testnet-9"})]}),"\n",(0,a.jsxs)(t.li,{children:["Expected Hard Fork Date: ",(0,a.jsx)(t.code,{children:"2022-01-07 6:30 PM UTC"})]}),"\n",(0,a.jsxs)(t.li,{children:["Upgrade Proposal Id: ",(0,a.jsx)(t.code,{children:"668"})]}),"\n",(0,a.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,a.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,a.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,a.jsx)(t.code,{children:"0x111567fa0152bc91d72e395d3604510b8425e4b3a9c48cca1e9d019fdde749f8"})]}),"\n",(0,a.jsxs)(t.li,{children:["Initial Block Height: ",(0,a.jsx)(t.code,{children:"920527"})]}),"\n",(0,a.jsxs)(t.li,{children:["Block Height Reached: ",(0,a.jsx)(t.code,{children:"TBD (never stopped)"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"52717a0950f643e8bc66a324b07ddc98",children:"Post Mortem"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Planned to be depreciated by testnet-10"}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"32fa751d98004e33aea7780668de1592",children:"Files"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/f8834219-d9e9-4c4d-ae3e-c06ad98ce3f1/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165648Z&X-Amz-Expires=3600&X-Amz-Signature=aa10c3d90fe4ea4967cf5ec087b52d50630a086fbeb3c5593603c7177ea353b1&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),l=n(6550),i=n(469),o=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[l,o]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??p;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:l,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=o.indexOf(t),r=i[n].value;r!==a&&(c(t),l(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function j(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=p(e);return(0,x.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(j,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,x.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>l});var a=n(7294);const r={},s=a.createContext(r);function l(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0d6db0d3.4007e6a7.js b/assets/js/0d6db0d3.4007e6a7.js deleted file mode 100644 index 3e30316..0000000 --- a/assets/js/0d6db0d3.4007e6a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2634],{2819:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},l=void 0,o={id:"Stack/SEKAI--Backend/System-Requirements",title:"System Requirements",description:"To run a sekaid application the following system requirements must be met:",source:"@site/tabs/docs/Stack/SEKAI--Backend/System-Requirements.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d1a56903-4e24-47ce-b39f-f28be9123399",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},sidebar:"defaultSidebar",previous:{title:"SEKAI | Backend",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"},next:{title:"Installation",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66"}},i={},u=[{value:"Hardware",id:"284fec99661c42cd9db8e573d918616d",level:2},{value:"Networking",id:"9f4bf9ad9ea64d348aff30013f9d46b8",level:2},{value:"Software",id:"136a440426ad451399a598ee82b6966b",level:2}];function c(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run a ",(0,r.jsx)(t.code,{children:"sekaid"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"284fec99661c42cd9db8e573d918616d",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"4 vCPU"})," cores (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"8GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to persist blockchain state and snapshots (",(0,r.jsx)(t.code,{children:"1TB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32GB+"})," of ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"9f4bf9ad9ea64d348aff30013f9d46b8",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"136a440426ad451399a598ee82b6966b",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),o=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=f(e),[l,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[u,d]=h({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=u??m;return b({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=o[n].value;a!==r&&(u(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(k,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ffaf1e6.bf9ed3f3.js b/assets/js/0ffaf1e6.bf9ed3f3.js deleted file mode 100644 index 7d9205e..0000000 --- a/assets/js/0ffaf1e6.bf9ed3f3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2038],{2445:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(5893),a=n(1151),r=n(4866),i=n(5162);const o={title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},c=void 0,d={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar",title:"Token Rates Registrar",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/f19a45b3-88c4-469c-8642-772b941a1b24",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},sidebar:"defaultSidebar",previous:{title:"Tokens Module",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},next:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49"}},l={},h=[{value:"Concept",id:"27568532b5af487fb7aee6974fab52e4",level:2},{value:"Token management and staking policies",id:"b532e79ee90941d0a948afcfe85cc21f",level:3},{value:"Staking capability",id:"9da78ef9591b4f7eac68e846a77fb81f",level:4},{value:"Fee payment capability",id:"797471526a38443dae4ec626770301dc",level:4},{value:"Fee exchange rate",id:"f011644ddd1c459ca667d0ec6eaef9fb",level:4},{value:"Staking reward cap",id:"d205c9a9cd8c4311a19782ca1206f9ac",level:4},{value:"Dust spam prevention",id:"3731dcd8a65641519adf0409f88261a1",level:4},{value:"Token rate deletion",id:"01dc6c9c4dc74ec198c49856d5435201",level:4},{value:"Parameters",id:"9a67ee6002de4f9cbdeaa4e581a13596",level:2},{value:"Cli syntax & examples",id:"b9982ccb172d481c9392049afc924fe8",level:2},{value:"Transactions",id:"01d5529dd36e4bb8b1194b5834aa5d86",level:2},{value:"Upsert token rate with sudo permission",id:"d44f6bfbf118402292bc11b648093700",level:4},{value:"Queries",id:"41ce65d28ef24009b2241d98839343da",level:2},{value:"List all existing token rates",id:"ec7c6fb56a254751b76e874c976677a4",level:4},{value:"Query a specific token rate",id:"bfecbe47c7584fc1b8364dd96a58febb",level:4},{value:"Query multiple token rates",id:"4469a355daec4eaa94330a03f9551724",level:4},{value:"Governance",id:"2e821403aca7404cbbe24ce849ff77a7",level:2},{value:"Proposal to upsert token rate",id:"66cb1d8f16254f498ca6f97660eddb5e",level:4}];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"27568532b5af487fb7aee6974fab52e4",children:"Concept"}),"\n",(0,s.jsx)(t.p,{children:"The Token Rate Registrar in Kira Network allows governance to whitelist foreign tokens, set exchange rates, and define limits on staking rewards distribution in order to maintain the relevance and value of KEX. This enables users to pay execution fees with any whitelisted token, providing easy onboarding for new users directly from foreign networks without requiring them to use centralized exchanges to acquire KEX or deanonymize themselves. The Token Rate Registrar also allows governance to define the distribution of incentives to maintain the relevance and value of KEX, ensuring that the native token remains attractive and desirable for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."}),"\n",(0,s.jsx)(t.h3,{id:"b532e79ee90941d0a948afcfe85cc21f",children:"Token management and staking policies"}),"\n",(0,s.jsx)(t.h4,{id:"9da78ef9591b4f7eac68e846a77fb81f",children:"Staking capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property determines whether or not a specific token can be used as collateral by delegators. If the ",(0,s.jsx)(t.code,{children:"stake_token"})," property for a token is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to stake that token and earn rewards. If it is set to ",(0,s.jsx)(t.code,{children:"false"}),", then it will not be possible to stake the token and no rewards will be distributed."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property of a specific token can only be set to ",(0,s.jsx)(t.code,{children:"true"})," if the given token is present in the ",(0,s.jsx)(t.strong,{children:"[Problem Internal Link]"}),", which sets the decimals in the lowest denomination. Removal of a token from the token aliases registry will automatically disable it by setting ",(0,s.jsx)(t.code,{children:"stake_token"})," and ",(0,s.jsx)(t.code,{children:"fee_token"})," properties to ",(0,s.jsx)(t.code,{children:"false"}),"."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"797471526a38443dae4ec626770301dc",children:"Fee payment capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_payment"})," property determines if a given token can be used to pay transaction fees on the Kira Network, provided the ",(0,s.jsx)(t.code,{children:"enable_foreign_fee_payments"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," is enabled. If the ",(0,s.jsx)(t.code,{children:"fee_payment"})," property is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to use that token to pay transaction fees based on its ",(0,s.jsx)(t.code,{children:"fee_rate"})," parameter, which sets the exchange rate for the token. By allowing users to pay transaction fees with a variety of different tokens, the network can be more accessible and user-friendly, providing an easy onboarding process for new users and allowing them to pay fees without having to acquire the native KEX token."]}),"\n",(0,s.jsx)(t.h4,{id:"f011644ddd1c459ca667d0ec6eaef9fb",children:"Fee exchange rate"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"fee_rate"})," sets the exchange rates for whitelisted tokens in terms of KEX. ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," is not meant to track the market price of assets accurately as this would be too much of an overhead, but rather provides an easy way to convert between tokens and KEX as a way to protect against transaction spam. For example, if the ",(0,s.jsx)(t.code,{children:"fee_rate"})," for token ",(0,s.jsx)(t.code,{children:"u"})," is 2, it means that 2 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". If the minimum fee payment, as defined by the ",(0,s.jsx)(t.code,{children:"min_tx_fee"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),", is 100 ",(0,s.jsx)(t.code,{children:"ukex"}),", then to make a transfer, the transaction fee should be set to at least 50 ",(0,s.jsx)(t.code,{children:"u"})," tokens. Rates can also be expressed as decimals. For example, a rate of 0.1 would mean that 0.1 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". In this case, the minimum transaction fee payment in our example would be 1000 ",(0,s.jsx)(t.code,{children:"u"})," tokens."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_rate"})," for transactions using tokens other than KEX is expected to be higher in order to ensure the security of the blockchain and prevent transaction spam. This is because KIRA must maintain the security of the chain regardless of the market price of other tokens at any given time. The governance system is responsible for adjusting the exchange rates to account for possible black swan events. KIRA does not and will not use any third-party oracles, and instead relies solely on the capabilities of its own governance system. This is to mitigate any potential risks associated with the use of oracles and third parties."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"d205c9a9cd8c4311a19782ca1206f9ac",children:"Staking reward cap"}),"\n",(0,s.jsxs)(t.p,{children:["Any token eligible for staking has a corresponding ",(0,s.jsx)(t.code,{children:"stake_cap"})," parameter which sets the maximum percentage of staking rewards that it is entitled to receive from a staking pool. For example, if the ",(0,s.jsx)(t.code,{children:"stake_cap"})," for BTC is set to ",(0,s.jsx)(t.code,{children:"0.1"})," (10%), then no matter how much BTC is staked in the pool, only 10% of incoming rewards will be allocated and shared among BTC delegators. This is to prevent a malicious user from diluting the pool with a large amount of a particular token in order to claim all the rewards for themselves. By setting specific shares for each token, the reward distribution process is made simpler and more efficient, as it eliminates the need to track the market value of the staking tokens in terms of a fiat currency such as USD or KEX."]}),"\n",(0,s.jsxs)(t.p,{children:["The cumulative ",(0,s.jsx)(t.code,{children:"stake_cap"})," for all whitelisted tokens in ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," cannot exceed ",(0,s.jsx)(t.code,{children:"1.0"})," (100%). Any additions or updates to a token's ",(0,s.jsx)(t.code,{children:"stake_cap"})," must adhere to this limit. If the combined reward caps surpasses ",(0,s.jsx)(t.code,{children:"1.0"}),", the ",(0,s.jsx)(t.code,{children:"stake_token"})," property of any new token cannot be set to ",(0,s.jsx)(t.code,{children:"true"}),". For tokens where ",(0,s.jsx)(t.code,{children:"stake_token"})," is set to ",(0,s.jsx)(t.code,{children:"false"}),", staking is not permitted\u2014only unstaking. Such tokens also don't receive any rewards (equivalent to ",(0,s.jsx)(t.code,{children:"fee_rate"})," of 0)."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["KEX ",(0,s.jsx)(t.code,{children:"stake_cap"})," cannot be set under 50%."]})}),"\n",(0,s.jsx)(t.h4,{id:"3731dcd8a65641519adf0409f88261a1",children:"Dust spam prevention"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_min"})," property sets the minimum amount of token a user can delegate or undelegate per transaction to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"})," where a malicious user would try to massively delay the block production by adding/withdrawing small amounts of staking tokens with many different accounts (c.f ",(0,s.jsx)(t.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"}),")."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"stake_min"})," cannot be set to 0."]})}),"\n",(0,s.jsx)(t.h4,{id:"01dc6c9c4dc74ec198c49856d5435201",children:"Token rate deletion"}),"\n",(0,s.jsxs)(t.p,{children:["Tokens, once registered in the Token Registrar, cannot be removed because of potential complexities when they're involved in other modules, like ",(0,s.jsx)(t.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"}),". To address this, an ",(0,s.jsx)(t.code,{children:"invalidated"})," flag is available for each token entry. When this flag is set to ",(0,s.jsx)(t.code,{children:"true"}),", it serves as a metadata signal indicating that the token is no longer active within the network, even though it doesn't impose any operational restrictions on the token itself. Conversely, when the flag is set to ",(0,s.jsx)(t.code,{children:"false"}),", it suggests that the token remains active and can be used according to the other parameters' values."]}),"\n",(0,s.jsx)(t.h2,{id:"9a67ee6002de4f9cbdeaa4e581a13596",children:"Parameters"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["For the native KEX token, only the ",(0,s.jsx)(t.code,{children:"stake_cap"})," and ",(0,s.jsx)(t.code,{children:"stake_min"})," parameters can be modified."]})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"NAME"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"TYPE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"EXAMPLE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_token"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines whether or not a specific token can be used as collateral by delegators on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_payment"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines if a given token can be used to pay transaction fees on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_rate"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the exchange rates for whitelisted tokens in terms of KEX."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_cap"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the maximum percentage of staking rewards that a given token is entitled to receive from a staking pool."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_min"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"int"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"10"})}),(0,s.jsxs)(t.td,{children:["Sets the minimum amount per delegations and undelegations for a given token to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"invalidated"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"false"})}),(0,s.jsxs)(t.td,{children:["Indicates the inactive status of a token. If ",(0,s.jsx)(t.code,{children:"true"}),", the token is marked as inactive for network interactions."]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Example of Token Rate registry"})}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'[ {\n\t\t"denom": "ukex", // token denom MUST be present in the Token Aliases Registrar [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"fee_rate": 1.0, // paying 1 ukex in fees is equivalent of paying 1 ukex [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_cap": 0.50, // 50% of all block & fee rewards go to KEX delegators [CAN NOT BE LESS THEN 50% - FOR ukex ONLY]\n "stake_min": 100, // can\'t stake less than 100 ukex [MUST BE GREATER THAN 0 - FOR ANY TOKEN]\n\t\t"fee_payment": true, // can be used as fee token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_token": true // can be used as staking token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t} {\n\t\t"denom": "xbtc",\n\t\t"fee_rate": 175885.0, // paying 1 satoshi in fees is equivalent of paying 175\'885 ukex for a fee transfer\n\t\t"stake_cap": 0.251, // 25.1% of all rewards go to BTC delegators\n "stake_min": 10000, // can\'t stake less than 10k sats\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": true // can be used as staking token\n\t}, {\n\t\t"denom": "xeth",\n\t\t"fee_rate": 0.0000012, // paying 1 wei in fees is equivalent of paying 0.0000012 ukex\n\t\t"stake_cap": 0.1, // 0% of all rewards go to ETH delegators, because stake_token is set to false\n "stake_min": 8333333334, // can\'t stake less than 8\'333\'333\'334 wei\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": false // can NOT be used as staking token\n\t},{ ... }, ... ]\n'})}),"\n",(0,s.jsx)(t.h2,{id:"b9982ccb172d481c9392049afc924fe8",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(t.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(t.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(t.em,{children:"documentation for more details."})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$SIGNER"})})," ",(0,s.jsx)(t.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(t.em,{children:"and"})," ",(0,s.jsxs)(t.em,{children:[(0,s.jsx)(t.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(t.em,{children:"section"})]})}),"\n",(0,s.jsxs)(r.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(t.h2,{id:"01d5529dd36e4bb8b1194b5834aa5d86",children:"Transactions"}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"d44f6bfbf118402292bc11b648093700",children:"Upsert token rate with sudo permission"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"upsert-rate"})," CLI command allows accounts with sudo permission to create or modify a token rate without a proposal."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(t.h2,{id:"41ce65d28ef24009b2241d98839343da",children:"Queries"}),(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"all-rates"})}),(0,s.jsx)(t.th,{children:"Get all token rates in the system."})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rate"})}),(0,s.jsx)(t.td,{children:"Get a specific token rate by denomination."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rates-by-denom"})}),(0,s.jsx)(t.td,{children:"Get token rates of multiple tokens by denomination."})]})]})]}),(0,s.jsx)(t.h4,{id:"ec7c6fb56a254751b76e874c976677a4",children:"List all existing token rates"}),(0,s.jsxs)(t.p,{children:["Use the ",(0,s.jsx)(t.code,{children:"all-rates"})," command to retrieve all token rates."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens all-rates $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"bfecbe47c7584fc1b8364dd96a58febb",children:"Query a specific token rate"}),(0,s.jsxs)(t.p,{children:["To query the rate of a specific token, use the ",(0,s.jsx)(t.code,{children:"rate"})," command."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token whose rate is to be queried."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rate $DENOM $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"4469a355daec4eaa94330a03f9551724",children:"Query multiple token rates"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"rates-by-denom"})," command allows querying rates of multiple tokens."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM_LIST"}),": A comma-separated list of token denominations to query."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rates-by-denom $DENOM_LIST $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(t.h2,{id:"2e821403aca7404cbbe24ce849ff77a7",children:"Governance"}),(0,s.jsx)(t.p,{children:"In order to create a proposal to add or modify entries in the Token Registrar, an account must possess permission 18 or 8. Similarly, for voting on any of the Token Registrar proposals, an account must have permission 19."}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"66cb1d8f16254f498ca6f97660eddb5e",children:"Proposal to upsert token rate"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})," CLI command is used to create or update a token rate registry through a proposal process."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token (e.g., ",(0,s.jsx)(t.code,{children:"tbtc"}),")."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var s=n(6905);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var s=n(7294),a=n(6905),r=n(2466),i=n(6550),o=n(469),c=n(1980),d=n(7392),l=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:a}}=e;return{value:t,label:n,attributes:s,default:a}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function x(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,c._X)(r),(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[i,c]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:r}))),[d,h]=x({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,l.Nk)(n);return[a,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),j=(()=>{const e=d??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,r]),tabValues:r}}var m=n(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function b(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),l=e=>{const t=e.currentTarget,n=c.indexOf(t),a=o[n].value;a!==s&&(d(t),i(a))},h=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>c.push(e),onKeyDown:h,onClick:l,...r,className:(0,a.Z)("tabs__item",j.tabItem,r?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function g(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function v(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,k.jsx)(b,{...e,...t}),(0,k.jsx)(g,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(v,{...e,children:h(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var s=n(7294);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10b3e108.118a6fcf.js b/assets/js/10b3e108.118a6fcf.js deleted file mode 100644 index 2dd6cba..0000000 --- a/assets/js/10b3e108.118a6fcf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3673],{8914:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=t(5893),r=t(1151);t(4866),t(5162);const a={title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},i=void 0,o={id:"Stack/SEKAI--Backend/Command-Line-Interface",title:"Command Line Interface",description:"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: KIRA Network CLI Status.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Command-Line-Interface.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},sidebar:"defaultSidebar",previous:{title:"Configuration",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},next:{title:"Multistaking",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"}},d={},c=[{value:"Commands syntax",id:"e4a1051b836c4dde8929033559feaba1",level:3},{value:"Flags configuration",id:"9aced983c64b4b898302f62c5b06bd78",level:3},{value:"List of flags",id:"17069fece0de4a84bb83b7e16b9a6dba",level:4}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: ",(0,s.jsx)(n.a,{href:"https://github.com/MrLutik/kira2.0/blob/master/docs/sekai.md",children:"KIRA Network CLI Status"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"e4a1051b836c4dde8929033559feaba1",children:"Commands syntax"}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI provides a command-line interface (CLI) that enables users to interact with its modules. Using the CLI, users can create, sign, and submit ",(0,s.jsx)(n.code,{children:"Msg"})," transactions, as well as query the blockchain's state and node information. Each module has its own set of CLI commands, which can be accessed through the main CLI entrypoint ",(0,s.jsx)(n.code,{children:"sekaid"}),". These commands fall into two categories: transactions ",(0,s.jsx)(n.code,{children:"tx"}),", which require signing, and queries ",(0,s.jsx)(n.code,{children:"query"}),", which do not. To create a transaction using the CLI, users need to specify the transaction command, as well as any required arguments and flags. For more information on the available commands for a specific module, users can refer to the module's documentation or use the ",(0,s.jsx)(n.code,{children:"--help"})," flag. For example, to see all available CLI commands for bank module, users can run ",(0,s.jsx)(n.code,{children:"sekaid tx bank --help"})," for transactions or ",(0,s.jsx)(n.code,{children:"sekaid query bank --help"})," for queries."]}),"\n",(0,s.jsx)(n.p,{children:"For example, to send tokens from one account to another, users can run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx bank send $from_key_or_address $to_address $amount --chain-id=$NETWORK_NAME --home=$SEKAID_HOME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json.\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To query the blockchain state or node information, users can use the ",(0,s.jsx)(n.code,{children:"query"})," command followed by the relevant subcommand and arguments. For example, to query the balance of an account, users can run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query bank balance $address --home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"$NETWORK_NAME"})," and ",(0,s.jsx)(n.code,{children:"$SEKAID_HOME"})," env variables should have been set up during ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66",children:"SEKAI installation"})," process and all other flags can be set as env variable. More on this in the section below."]})}),"\n",(0,s.jsx)(n.h3,{id:"9aced983c64b4b898302f62c5b06bd78",children:"Flags configuration"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Some flags may be required by specific CLIs."})}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI CLIs offers a range of flags that can be used to customize the behavior of commands and gather additional information from the transaction signer, such as the amount of ",(0,s.jsx)(n.code,{children:"--fees"})," the user is willing to pay. Some common flags include ",(0,s.jsx)(n.code,{children:"--home"}),", which allows users to specify the location of the data directory, and ",(0,s.jsx)(n.code,{children:"--chain-id"}),", which allows users to specify the chain ID. Additionally, users can specify the keys storage backend with ",(0,s.jsx)(n.code,{children:"--keyring-backend"}),". A full list of available flags can be below or accessed using the ",(0,s.jsx)(n.code,{children:"--help"})," flag with the relevant CLI."]}),"\n",(0,s.jsxs)(n.p,{children:["To streamline the process of specifying flags for transactions, users can use the ",(0,s.jsx)(n.code,{children:"bash-utils"})," tool developed by KIRA. This tool, which has been installed alongside SEKAID, allows users to easily set environment variables for common flags and load them as needed. For example, to set common flags for transactions on the testnet (such as ",(0,s.jsx)(n.code,{children:"--keyring-backend=test"}),"), users can add the following environment variable:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_TX "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Similar to transactions, users can also set environment variables for common flags used in queries. For example, to set common flags for queries, users can add the following environment variable:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_QR "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["To use those newly created environment variables, simply call the ",(0,s.jsx)(n.code,{children:"loadGlobEnvs"})," function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"loadGlobEnvs\n"})}),"\n",(0,s.jsx)(n.h4,{id:"17069fece0de4a84bb83b7e16b9a6dba",children:"List of flags"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"FLAG"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DEFAULT"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--output"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"json"'})}),(0,s.jsxs)(n.td,{children:["Output format (",(0,s.jsx)(n.code,{children:"text"})," or ",(0,s.jsx)(n.code,{children:"json"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-dir"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"The client Keyring directory; if omitted, the default 'home' directory will be used"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--from"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Name or address of private key with which to sign the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--account-number"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The account number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sequence"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The sequence number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--note"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Note to add a description to the transaction (previously ",(0,s.jsx)(n.code,{children:"--memo"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fees"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Fees to pay along with transaction; eg: ",(0,s.jsx)(n.code,{children:"10ukex"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-prices"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Gas prices in decimal format to determine the transaction fee (e.g. ",(0,s.jsx)(n.code,{children:"0.1ukex"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--node"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tcp://localhost:26657"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:":"})," to tendermint rpc interface for this chain"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--ledger"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Use a connected Ledger device"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-adjustment"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultGasAdjustment"})}),(0,s.jsx)(n.td,{children:"adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--broadcast-mode"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"BroadcastSync"})}),(0,s.jsxs)(n.td,{children:["Transaction broadcasting mode (",(0,s.jsx)(n.code,{children:"sync"})," or ",(0,s.jsx)(n.code,{children:"async"})," or ",(0,s.jsx)(n.code,{children:"block"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--dry-run"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsxs)(n.td,{children:["ignore the ",(0,s.jsx)(n.code,{children:"--gas"})," flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--generate-only"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--offline"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Offline mode (does not allow any online functionality)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--yes"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Skip tx broadcasting prompt confirmation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-backend"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultKeyringBackend"})}),(0,s.jsxs)(n.td,{children:["Select keyring's backend (",(0,s.jsx)(n.code,{children:"os"})," or ",(0,s.jsx)(n.code,{children:"file"})," or ",(0,s.jsx)(n.code,{children:"kwallet"})," or ",(0,s.jsx)(n.code,{children:"pass"})," or ",(0,s.jsx)(n.code,{children:"test"})," or ",(0,s.jsx)(n.code,{children:"memory"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sign-mode"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Choose sign mode (",(0,s.jsx)(n.code,{children:"direct"})," or ",(0,s.jsx)(n.code,{children:"amino-json"})," or ",(0,s.jsx)(n.code,{children:"direct-aux"}),"), this is an advanced feature"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--timeout-height"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"Set a block timeout height to prevent the tx from being committed past a certain height"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-payer"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee payer pays fees for the transaction instead of deducting from the signer"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-granter"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee granter grants fees for the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--tip"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Tip is the amount that is going to be transferred to the fee payer on the target chain. ",(0,s.jsx)("br",{}),"This flag is only valid when used with ",(0,s.jsx)(n.code,{children:"--aux"}),", and is ignored if the target chain didn't enable the TipDecorator"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--aux"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Generate aux signer data instead of sending a tx"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:'gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically'})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var s=t(6905);const r={tabItem:"tabItem_Ymn6"};var a=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>k});var s=t(7294),r=t(6905),a=t(2466),i=t(6550),o=t(469),d=t(1980),c=t(7392),l=t(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function x(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,d._X)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=u(e),[i,d]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,h]=f({queryString:t,groupId:r}),[j,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(t);return[r,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),b=(()=>{const e=c??j;return x({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{b&&d(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=t(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function p(e){let{className:n,block:t,selectedValue:s,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),l=e=>{const n=e.currentTarget,t=d.indexOf(n),r=o[t].value;r!==s&&(c(n),i(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",b.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:r}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(p,{...e,...n}),(0,g.jsx)(y,{...e,...n})]})}function k(e){const n=(0,m.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var s=t(7294);const r={},a=s.createContext(r);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10b3e108.9fc01a8a.js b/assets/js/10b3e108.9fc01a8a.js new file mode 100644 index 0000000..d916eac --- /dev/null +++ b/assets/js/10b3e108.9fc01a8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3673],{8914:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=t(5893),r=t(1151);t(4866),t(5162);const a={title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},i=void 0,o={id:"Stack/SEKAI--Backend/Command-Line-Interface",title:"Command Line Interface",description:"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: KIRA Network CLI Status.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Command-Line-Interface.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9",permalink:"/docs.kira.network/docs/d98b0e99-34c0-4267-a51a-0ec9dab606b9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},sidebar:"defaultSidebar",previous:{title:"Configuration",permalink:"/docs.kira.network/docs/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},next:{title:"Multistaking",permalink:"/docs.kira.network/docs/64eb7e84-ab20-454d-953f-57b1cf457790"}},d={},c=[{value:"Commands Syntax",id:"e4a1051b836c4dde8929033559feaba1",level:3},{value:"Flags Configuration",id:"9aced983c64b4b898302f62c5b06bd78",level:3},{value:"List of Flags",id:"17069fece0de4a84bb83b7e16b9a6dba",level:4}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: ",(0,s.jsx)(n.a,{href:"https://github.com/MrLutik/kira2.0/blob/master/docs/sekai.md",children:"KIRA Network CLI Status"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"e4a1051b836c4dde8929033559feaba1",children:"Commands Syntax"}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI provides a command-line interface (CLI) that enables users to interact with its modules. Using the CLI, users can create, sign, and submit ",(0,s.jsx)(n.code,{children:"Msg"})," transactions, as well as query the blockchain's state and node information. Each module has its own set of CLI commands, which can be accessed through the main CLI entrypoint ",(0,s.jsx)(n.code,{children:"sekaid"}),". These commands fall into two categories: transactions ",(0,s.jsx)(n.code,{children:"tx"}),", which require signing, and queries ",(0,s.jsx)(n.code,{children:"query"}),", which do not. To create a transaction using the CLI, users need to specify the transaction command, as well as any required arguments and flags. For more information on the available commands for a specific module, users can refer to the module's documentation or use the ",(0,s.jsx)(n.code,{children:"--help"})," flag. For example, to see all available CLI commands for bank module, users can run ",(0,s.jsx)(n.code,{children:"sekaid tx bank --help"})," for transactions or ",(0,s.jsx)(n.code,{children:"sekaid query bank --help"})," for queries."]}),"\n",(0,s.jsx)(n.p,{children:"For example, to send tokens from one account to another, users can run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx bank send $from_key_or_address $to_address $amount --chain-id=$NETWORK_NAME --home=$SEKAID_HOME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json.\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To query the blockchain state or node information, users can use the ",(0,s.jsx)(n.code,{children:"query"})," command followed by the relevant subcommand and arguments. For example, to query the balance of an account, users can run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query bank balance $address --home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"$NETWORK_NAME"})," and ",(0,s.jsx)(n.code,{children:"$SEKAID_HOME"})," env variables should have been set up during ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66",children:"SEKAI installation"})," process and all other flags can be set as env variable. More on this in the section below."]})}),"\n",(0,s.jsx)(n.h3,{id:"9aced983c64b4b898302f62c5b06bd78",children:"Flags Configuration"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Some flags may be required by specific CLIs."})}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI CLIs offers a range of flags that can be used to customize the behavior of commands and gather additional information from the transaction signer, such as the amount of ",(0,s.jsx)(n.code,{children:"--fees"})," the user is willing to pay. Some common flags include ",(0,s.jsx)(n.code,{children:"--home"}),", which allows users to specify the location of the data directory, and ",(0,s.jsx)(n.code,{children:"--chain-id"}),", which allows users to specify the chain ID. Additionally, users can specify the keys storage backend with ",(0,s.jsx)(n.code,{children:"--keyring-backend"}),". A full list of available flags can be below or accessed using the ",(0,s.jsx)(n.code,{children:"--help"})," flag with the relevant CLI."]}),"\n",(0,s.jsxs)(n.p,{children:["To streamline the process of specifying flags for transactions, users can use the ",(0,s.jsx)(n.code,{children:"bash-utils"})," tool developed by KIRA. This tool, which has been installed alongside SEKAID, allows users to easily set environment variables for common flags and load them as needed. For example, to set common flags for transactions on the testnet (such as ",(0,s.jsx)(n.code,{children:"--keyring-backend=test"}),"), users can add the following environment variable:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_TX "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Similar to transactions, users can also set environment variables for common flags used in queries. For example, to set common flags for queries, users can add the following environment variable:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_QR "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["To use those newly created environment variables, simply call the ",(0,s.jsx)(n.code,{children:"loadGlobEnvs"})," function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"loadGlobEnvs\n"})}),"\n",(0,s.jsx)(n.h4,{id:"17069fece0de4a84bb83b7e16b9a6dba",children:"List of Flags"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"FLAG"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DEFAULT"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--output"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"json"'})}),(0,s.jsxs)(n.td,{children:["Output format (",(0,s.jsx)(n.code,{children:"text"})," or ",(0,s.jsx)(n.code,{children:"json"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-dir"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"The client Keyring directory; if omitted, the default 'home' directory will be used"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--from"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Name or address of private key with which to sign the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--account-number"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The account number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sequence"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The sequence number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--note"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Note to add a description to the transaction (previously ",(0,s.jsx)(n.code,{children:"--memo"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fees"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Fees to pay along with transaction; eg: ",(0,s.jsx)(n.code,{children:"10ukex"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-prices"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Gas prices in decimal format to determine the transaction fee (e.g. ",(0,s.jsx)(n.code,{children:"0.1ukex"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--node"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tcp://localhost:26657"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:":"})," to tendermint rpc interface for this chain"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--ledger"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Use a connected Ledger device"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-adjustment"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultGasAdjustment"})}),(0,s.jsx)(n.td,{children:"adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--broadcast-mode"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"BroadcastSync"})}),(0,s.jsxs)(n.td,{children:["Transaction broadcasting mode (",(0,s.jsx)(n.code,{children:"sync"})," or ",(0,s.jsx)(n.code,{children:"async"})," or ",(0,s.jsx)(n.code,{children:"block"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--dry-run"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsxs)(n.td,{children:["ignore the ",(0,s.jsx)(n.code,{children:"--gas"})," flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--generate-only"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--offline"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Offline mode (does not allow any online functionality)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--yes"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Skip tx broadcasting prompt confirmation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-backend"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultKeyringBackend"})}),(0,s.jsxs)(n.td,{children:["Select keyring's backend (",(0,s.jsx)(n.code,{children:"os"})," or ",(0,s.jsx)(n.code,{children:"file"})," or ",(0,s.jsx)(n.code,{children:"kwallet"})," or ",(0,s.jsx)(n.code,{children:"pass"})," or ",(0,s.jsx)(n.code,{children:"test"})," or ",(0,s.jsx)(n.code,{children:"memory"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sign-mode"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Choose sign mode (",(0,s.jsx)(n.code,{children:"direct"})," or ",(0,s.jsx)(n.code,{children:"amino-json"})," or ",(0,s.jsx)(n.code,{children:"direct-aux"}),"), this is an advanced feature"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--timeout-height"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"Set a block timeout height to prevent the tx from being committed past a certain height"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-payer"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee payer pays fees for the transaction instead of deducting from the signer"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-granter"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee granter grants fees for the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--tip"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Tip is the amount that is going to be transferred to the fee payer on the target chain. ",(0,s.jsx)("br",{}),"This flag is only valid when used with ",(0,s.jsx)(n.code,{children:"--aux"}),", and is ignored if the target chain didn't enable the TipDecorator"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--aux"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Generate aux signer data instead of sending a tx"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:'gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically'})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var s=t(6905);const r={tabItem:"tabItem_Ymn6"};var a=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>k});var s=t(7294),r=t(6905),a=t(2466),i=t(6550),o=t(469),d=t(1980),c=t(7392),l=t(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function x(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,d._X)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=u(e),[i,d]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,h]=f({queryString:t,groupId:r}),[j,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(t);return[r,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),b=(()=>{const e=c??j;return x({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{b&&d(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=t(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function p(e){let{className:n,block:t,selectedValue:s,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),l=e=>{const n=e.currentTarget,t=d.indexOf(n),r=o[t].value;r!==s&&(c(n),i(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",b.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:r}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(p,{...e,...n}),(0,g.jsx)(y,{...e,...n})]})}function k(e){const n=(0,m.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var s=t(7294);const r={},a=s.createContext(r);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/12a56222.641ff770.js b/assets/js/12a56222.641ff770.js new file mode 100644 index 0000000..b4377d3 --- /dev/null +++ b/assets/js/12a56222.641ff770.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9520],{9449:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},i=void 0,o={id:"KIRA\u2019s-Economics/Overview",title:"Overview",description:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.",source:"@site/tabs/learn/KIRA\u2019s-Economics/Overview.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},sidebar:"defaultSidebar",previous:{title:"Building on KIRA",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},next:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326"}},l={},c=[];function u(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers."}),"\n",(0,a.jsx)(t.p,{children:"Central to KIRA's economic architecture are several key mechanisms: the native token (KEX), which facilitates transactions and governance; Multi-Bonded Proof of Stake, a system that enables a diverse range of crypto assets to be staked; the Initial Liquidity Offering (ILO) for seamless dApp integration and liquidity provision, and a suite of economic policies tailored to incentivize participation and foster sustainable growth. These components work synergistically to ensure that KIRA's economy is robust, flexible, and adaptive to the needs of its users and the broader blockchain ecosystem."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. Multi-asset staking increases the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,a.jsxs)(t.li,{children:["I",(0,a.jsx)(t.strong,{children:"LO (Initial Liquidity Offering):"})," The Initial Liquidity Offering (ILO) on KIRA is a strategic mechanism aimed at ensuring sufficient liquidity for decentralized applications (dApps) by engaging developers, users, verifiers, and executors in a unified effort towards the dApp's success. Through a governance proposal process, stakeholders commit KIRA's native token, KEX, to support the dApp, leading to the creation of a liquidity pool based on a Uniswap-style AMM and the issuance of LP tokens. This process is designed to align incentives, facilitate token economics with configurable parameters like token issuance, and maintain dApp operability through a collateral threshold and incentive structures for validators and liquidity providers, thereby fostering a supportive ecosystem for dApp development and launch."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(c(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14fe96fc.498b2530.js b/assets/js/14fe96fc.498b2530.js new file mode 100644 index 0000000..4dce45b --- /dev/null +++ b/assets/js/14fe96fc.498b2530.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4475],{8422:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);t(4866),t(5162);const r={title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},s=void 0,a={id:"Stack/INTERX--Middleware/Endpoints",title:"Endpoints",description:"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Endpoints.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896",permalink:"/docs.kira.network/docs/27ca73f9-ea33-4ca3-994a-cba651a2c896",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/docs/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},next:{title:"Installation",permalink:"/docs.kira.network/docs/cf419aea-20dc-4421-951b-2579c3026e6b"}},p={},d=[];function c(n){const e={code:"code",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(e.p,{children:["Description of all available endpoints including their accepted parameter and expected response format can be queried though ",(0,i.jsx)(e.code,{children:":11000/api/metadata"})," endpoint."]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.strong,{children:"Example Metadata Endpoint Response"})}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-json",children:'{\n "functions": {\n "Broadcast": {\n "endpoint": "/api/kira/txs",\n "description": "Broadcast is a function to broadcast signed transaction.",\n "parameters": {\n "mode": {\n "type": "string",\n "optional": true,\n "description": "This represents the broadcast mode. (block, sync, async)"\n },\n "tx": {\n "type": "byte[]",\n "description": "This represents the transaction bytes."\n }\n },\n "response": null\n },\n "Download": {\n "endpoint": "/download",\n "description": "Download is a function to download a data reference or arbitrary data.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents the reference key. (It saves reference data with hashed name. e.g. 2CEE6B1689EDDDD6F08EB1EAEC7D3C4E.)"\n },\n "module": {\n "type": "string",\n "description": "This represents the module name. (e.g. DRR for data reference registry.)"\n }\n },\n "response": null\n },\n "Faucet": {\n "endpoint": "/api/kira/faucet?",\n "description": "Faucet is a function to claim tokens to the account for free.",\n "parameters": {\n "claim": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "token": {\n "type": "string",\n "optional": true,\n "description": "This represents the token name."\n }\n },\n "response": {\n "hash": {\n "description": "The faucet transaction hash"\n }\n }\n },\n "FaucetInfo": {\n "endpoint": "/api/kira/faucet",\n "description": "FaucetInfo is a function to return the available faucet amount",\n "parameters": null,\n "response": {\n "address": {\n "description": "The faucet kira address"\n },\n "balances": {\n "description": "The balances array (amount \\u0026 denom)"\n }\n }\n },\n "QueryAccount": {\n "endpoint": "/api/kira/accounts/{address}",\n "description": "QueryAccount is a function to query the account info.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n }\n },\n "response": {\n "account": {\n "description": "The account info with address, pubkey and sequence."\n }\n }\n },\n "QueryAllIdentityRecordVerifyRequests": {\n "endpoint": "/api/kira/gov/all_identity_verify_requests",\n "description": "QueryAllIdentityRecordVerifyRequests is a function to query all identity record verify requests.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryAllIdentityRecords": {\n "endpoint": "/api/kira/gov/all_identity_records",\n "description": "QueryAllIdentityRecords is a function to query all identity records.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryBalance": {\n "endpoint": "/api/kira/balances/{address}",\n "description": "QueryBalance is a function to query the account balances.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n },\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": {\n "balances": {\n "type": "Coin[]",\n "description": "The account balances with pagination"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryBlockByHeightOrHash": {\n "endpoint": "/api/blocks/{height}",\n "description": "QueryBlockByHeightOrHash is a function to query block by height or hash.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height or hash."\n }\n },\n "response": {\n "block": {\n "description": "The block information"\n },\n "block_id": {\n "description": "The block hash inforamtion"\n }\n }\n },\n "QueryBlockTransactions": {\n "endpoint": "/api/blocks/{height}/transactions",\n "description": "QueryBlockTransactions is a function to query block transactions by height.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "txs": {\n "description": "The transaction information array"\n }\n }\n },\n "QueryBlocks": {\n "endpoint": "/api/blocks",\n "description": "QueryBlocks is a function to query blocks with pagination.",\n "parameters": {\n "maxHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the maximum block height."\n },\n "minHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the minimum block height."\n }\n },\n "response": {\n "block_metas": {\n "description": "The array of block informations"\n },\n "last_height": {\n "description": "The last block height"\n }\n }\n },\n "QueryConsensus": {\n "endpoint": "/api/consensus",\n "description": "QueryConsensus is a function to query consensus info.",\n "parameters": null,\n "response": {\n "average_block_time": {\n "description": "average block time in seconds"\n },\n "commit_time": {\n "description": "The latest commit timestamp"\n },\n "consensus_stopped": {\n "description": "If the consensus is stopped or not"\n },\n "height": {\n "description": "The latest block height"\n },\n "noncommits": {\n "description": "The validators array with no commits"\n },\n "precommits": {\n "description": "The validators array with pre commits"\n },\n "prevotes": {\n "description": "The validators array with prevotes"\n },\n "proposer": {\n "description": "The current proposer kira address"\n },\n "round": {\n "description": "The consensus round"\n },\n "start_time": {\n "description": "The consensus start timestamp"\n },\n "step": {\n "description": "RoundStepNewHeight"\n },\n "triggered_timeout_precommit": {\n "description": "true or false"\n }\n }\n },\n "QueryDashboard": {\n "endpoint": "/api/dashboard",\n "description": "QueryDashboard is a function to query data for the dashboard.",\n "parameters": null,\n "response": {\n "blocks": {\n "type": "struct",\n "description": "The blocks consensus status",\n "fields": {\n "average_time": {\n "type": "number",\n "description": "The average block confirm time"\n },\n "current_height": {\n "type": "number",\n "description": "The current block height"\n },\n "current_transactions": {\n "type": "number",\n "description": "The count of current transactions"\n },\n "latest_time": {\n "type": "number",\n "description": "The latest block confirm time"\n },\n "pending_transactions": {\n "type": "number",\n "description": "The count of pending transactions"\n },\n "since_genesis": {\n "type": "number",\n "description": "The block count after genesis block"\n }\n }\n },\n "consensus_health": {\n "description": "Float value between 0 and 1, represents the health status of the consensus."\n },\n "current_block_validator": {\n "type": "struct",\n "description": "The current block validator info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The validator\'s address"\n },\n "moniker": {\n "type": "string",\n "description": "The validator\'s moniker"\n }\n }\n },\n "proposals": {\n "type": "struct",\n "description": "The proposals count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active proposals"\n },\n "enacting": {\n "type": "number",\n "description": "The count of enacting proposals"\n },\n "finished": {\n "type": "number",\n "description": "The count of finished proposals"\n },\n "proposers": {\n "type": "number",\n "description": "The count of proposers"\n },\n "successful": {\n "type": "number",\n "description": "The count of successful proposals"\n },\n "total": {\n "type": "number",\n "description": "The count of total proposals"\n },\n "voters": {\n "type": "number",\n "description": "The count of voters"\n }\n }\n },\n "validators": {\n "type": "struct",\n "description": "The validators count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active validators"\n },\n "inactive": {\n "type": "number",\n "description": "The count of in-active validators"\n },\n "jailed": {\n "type": "number",\n "description": "The count of jailed validators"\n },\n "paused": {\n "type": "number",\n "description": "The count of paused validators"\n },\n "total": {\n "type": "number",\n "description": "The count of total validators"\n },\n "waiting": {\n "type": "number",\n "description": "The count of waiting validators"\n }\n }\n }\n }\n },\n "QueryDataReference": {\n "endpoint": "/api/kira/gov/data/{key}",\n "description": "QueryDataReference is a function to query data reference by a key.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents data reference key."\n }\n },\n "response": null\n },\n "QueryDataReferenceKeys": {\n "endpoint": "/api/kira/gov/data_keys",\n "description": "QueryDataReferenceKeys is a function to query data reference keys with pagination.",\n "parameters": {\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": null\n },\n "QueryExecutionFee": {\n "endpoint": "/api/kira/gov/execution_fee",\n "description": "QueryExecutionFee is a function to query execution fee by transaction type.",\n "parameters": {\n "message": {\n "type": "string",\n "description": "This is an option of a transaction type"\n }\n },\n "response": {\n "fee": {\n "description": "The execution fee info"\n }\n }\n },\n "QueryExecutionFees": {\n "endpoint": "/api/kira/gov/execution_fees",\n "description": "QueryExecutionFees is a function to query all execution fees.",\n "parameters": null,\n "response": {\n "fees": {\n "type": "array",\n "description": "All execution fees"\n }\n }\n },\n "QueryGenesis": {\n "endpoint": "/api/genesis",\n "description": "QueryGenesis is a function to query genesis.",\n "parameters": null,\n "response": null\n },\n "QueryGenesisSum": {\n "endpoint": "/api/gensum",\n "description": "QueryGenesisSum is a function to query genesis checksum.",\n "parameters": null,\n "response": null\n },\n "QueryIdentityRecord": {\n "endpoint": "/api/kira/gov/identity_record/{id}",\n "description": "QueryIdentityRecord is a function to query identity record by id.",\n "parameters": {\n "id": {\n "type": "number",\n "description": "This is the identity record id."\n }\n },\n "response": {\n "record": {\n "description": "The identity record info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequest": {\n "endpoint": "/api/kira/gov/identity_verify_record/{request_id}",\n "description": "QueryIdentityRecordVerifyRequest is a function to query identity record verify request.",\n "parameters": {\n "request_id": {\n "type": "number",\n "description": "This is the identity record verify request id."\n }\n },\n "response": {\n "verify_record": {\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByApprover": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_approver/{approver}",\n "description": "QueryIdentityRecordVerifyRequestsByApprover is a function to query identity record verify request by approver.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify request approver address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByRequester": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_requester/{requester}",\n "description": "QueryIdentityRecordVerifyRequestsByRequester is a function to query identity record verify request by requester.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify requester address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordsByAddress": {\n "endpoint": "/api/kira/gov/identity_records/{creator}",\n "description": "QueryIdentityRecordsByAddress is a function to query identity records by address.",\n "parameters": {\n "creator": {\n "type": "string",\n "description": "This is the identity record creator address."\n }\n },\n "response": {\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryInterxFunctions": {\n "endpoint": "/api/metadata",\n "description": "QueryInterxFunctions is a function to query interx functions.",\n "parameters": null,\n "response": null\n },\n "QueryInterxList": {\n "endpoint": "/api/interx_list",\n "description": "QueryInterxList is a function to query all interx list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "faucet": {\n "type": "string",\n "description": "The faucet kira address"\n },\n "id": {\n "type": "string",\n "description": "The interx public key"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "moniker": {\n "type": "string",\n "description": "From interx configuration"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial INTERX and verify pub_key"\n },\n "type": {\n "type": "string",\n "description": "The node type from interx configuration"\n },\n "version": {\n "type": "string",\n "description": "The interx version from interx configuration"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryInterxStatus": {\n "endpoint": "/api/status",\n "description": "QueryInterxStatus is a function to query interx informations.",\n "parameters": null,\n "response": null\n },\n "QueryKiraFunctions": {\n "endpoint": "/api/kira/metadata",\n "description": "QueryKiraFunctions is a function to query kira functions.",\n "parameters": null,\n "response": null\n },\n "QueryKiraStatus": {\n "endpoint": "/api/kira/status",\n "description": "QueryKiraStatus is a function to query the node status",\n "parameters": null,\n "response": {\n "node_info": {\n "description": "The connected node information"\n },\n "sync_info": {\n "description": "The sync status of connected node"\n },\n "validator_info": {\n "description": "The validator information of connect node"\n }\n }\n },\n "QueryKiraTokensAliases": {\n "endpoint": "/api/kira/tokens/aliases",\n "description": "QueryKiraTokensAliases is a function to query all tokens aliases.",\n "parameters": null,\n "response": null\n },\n "QueryKiraTokensRates": {\n "endpoint": "/api/kira/tokens/rates",\n "description": "QueryKiraTokensRates is a function to query all tokens rates.",\n "parameters": null,\n "response": null\n },\n "QueryNetworkProperties": {\n "endpoint": "/api/kira/gov/network_properties",\n "description": "QueryNetworkProperties is a function to query network properties.",\n "parameters": null,\n "response": null\n },\n "QueryPermissionsByAddress": {\n "endpoint": "/api/kira/gov/permissions_by_address/{val_addr}",\n "description": "QueryPermissionsByAddress is a function to query all permissions by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QueryPrivP2PList": {\n "endpoint": "/api/priv_p2p_list",\n "description": "QueryPrivP2PList is a function to query all private nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The private node id"\n },\n "ip": {\n "type": "string",\n "description": "The local ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryProposal": {\n "endpoint": "/api/kira/gov/proposals/{proposal_id}",\n "description": "QueryProposal is a function to query a proposal by a given proposal_id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "proposal": {\n "description": "The proposal information"\n }\n }\n },\n "QueryProposals": {\n "endpoint": "/api/kira/gov/proposals",\n "description": "QueryProposals is a function to query all proposals.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "reverse": {\n "type": "bool",\n "optional": true,\n "description": "This an option to sort proposals."\n },\n "voter": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": {\n "proposals": {\n "description": "The array of proposals information"\n }\n }\n },\n "QueryPubP2PList": {\n "endpoint": "/api/pub_p2p_list",\n "description": "QueryPubP2PList is a function to query all public nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The public node id"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryRPCMethods": {\n "endpoint": "/api/rpc_methods",\n "description": "QueryRPCMethods is a function to query all rpc methods available.",\n "parameters": null,\n "response": null\n },\n "QueryRoles": {\n "endpoint": "/api/kira/gov/all_roles",\n "description": "QueryRoles is a function to query all roles.",\n "parameters": null,\n "response": null\n },\n "QueryRolesByAddress": {\n "endpoint": "/api/kira/gov/roles_by_address/{val_addr}",\n "description": "QueryRolesByAddress is a function to query all roles by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QuerySnapList": {\n "endpoint": "/api/snap_list",\n "description": "QuerySnapList is a function to query all snapshot node list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "checksum": {\n "type": "string",\n "description": "The snapshot checksum (SHA256)"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "port": {\n "type": "number",\n "description": "The interx port number"\n },\n "size": {\n "type": "number",\n "description": "The snapshot size in bytes"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QuerySpendingPoolProposals": {\n "endpoint": "/api/kira/spending-pool-proposals",\n "description": "QuerySpendingPoolProposals is a function to query list of all spending pool proposals.",\n "parameters": null,\n "response": {\n "names": {\n "description": "The list of all spending pool proposals"\n }\n }\n },\n "QuerySpendingPools": {\n "endpoint": "/api/kira/spending-pools",\n "description": "QuerySpendingPools is a function to query list of all spending pool names.",\n "parameters": {\n "account": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "names": {\n "description": "The list of all spending pools"\n }\n }\n },\n "QueryTotalSupply": {\n "endpoint": "/api/kira/supply",\n "description": "QueryTotalSupply is a function to query total supply.",\n "parameters": null,\n "response": {\n "supply": {\n "type": "Coin[]",\n "description": "The total supply of the network"\n }\n }\n },\n "QueryTransactionHash": {\n "endpoint": "/api/kira/txs/{hash}",\n "description": "QueryTransactionHash is a function to query transaction details from transaction hash.",\n "parameters": {\n "hash": {\n "type": "string",\n "description": "This represents the transaction hash. (e.g. 0x20.....)"\n }\n },\n "response": {\n "hash": {\n "description": "The transaction hash"\n },\n "height": {\n "description": "The block height of transation"\n },\n "tx": {\n "description": "The base-64 encoded transaction"\n },\n "tx_result": {\n "description": "The result of transaction with events, gas info, logs and error code"\n }\n }\n },\n "QueryTransactionResult": {\n "endpoint": "/api/transactions/{txHash}",\n "description": "QueryTransactionResult is a function to query transaction result by hash.",\n "parameters": {\n "txHash": {\n "type": "string",\n "optional": true,\n "description": "This is an option of a transaction hash."\n }\n },\n "response": {\n "block_height": {\n "description": "The block height"\n },\n "block_timestamp": {\n "description": "The block timestamp"\n },\n "confirmation": {\n "description": "The block confirmations of this transaction"\n },\n "fees": {\n "description": "The transaction fee"\n },\n "gas_used": {\n "description": "The gas amount used in transaction"\n },\n "gas_wanted": {\n "description": "The gas limit amount for transaction"\n },\n "hash": {\n "description": "The transaction hash"\n },\n "memo": {\n "description": "The transaction memo"\n },\n "msgs": {\n "description": "The transaction msgs"\n },\n "status": {\n "description": "The transaction status"\n }\n }\n },\n "QueryTransactions": {\n "endpoint": "/api/transactions",\n "description": "QueryTransactions is a function to query transactions of the account filtered by various options like msg type, date, and so on.",\n "parameters": {\n "account": {\n "type": "string",\n "description": "This represents the kira account address."\n },\n "dateEnd": {\n "type": "string",\n "optional": true,\n "description": "This represents the ending point in timestamp or date(DD/MM/YY) format."\n },\n "dateStart": {\n "type": "string",\n "optional": true,\n "description": "This represents the starting point in timestamp or date(DD/MM/YY) format."\n },\n "direction": {\n "type": "string",\n "optional": true,\n "description": "This represents direction of the transaction(outbound, inbound)."\n },\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of total results to be shown. (1 ~ 100)"\n },\n "offset": {\n "type": "int",\n "optional": true,\n "description": "This represents the offset of the first transaction."\n },\n "page": {\n "type": "int",\n "optional": true,\n "description": "This represents the page number of results."\n },\n "page_size": {\n "type": "int",\n "optional": true,\n "description": "This represents the pageSize number of results. (1 ~ 100)"\n },\n "sort": {\n "type": "string",\n "optional": true,\n "description": "This represents how the transactions should be sorted(dateASC, dateDESC)."\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction status(pending, confirmed, failed)."\n },\n "type": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction type."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "transactions": {\n "description": "The array of transactions"\n }\n }\n },\n "QueryUBIRecords": {\n "endpoint": "/api/kira/ubi-records",\n "description": "QueryUBIRecords is a function to query ubi records.",\n "parameters": {\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "record": {\n "optional": true,\n "description": "ubi record"\n },\n "records": {\n "optional": true,\n "description": "All ubi records"\n }\n }\n },\n "QueryUnconfirmedTxs": {\n "endpoint": "/api/unconfirmed_txs",\n "description": "QueryUnconfirmedTxs is a function to query unconfirmed transactions.",\n "parameters": {\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of the transaction. (1 ~ 1000)"\n }\n },\n "response": null\n },\n "QueryValidatorInfos": {\n "endpoint": "/api/valoperinfos",\n "description": "QueryValidatorInfos is a function to query validator infos.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n }\n },\n "response": {\n "info": {\n "description": "The array of validators information"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryValidators": {\n "endpoint": "/api/valopers",\n "description": "QueryValidators is a function to query validators.",\n "parameters": {\n "address": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given kira address"\n },\n "all": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query all validators."\n },\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "moniker": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given moniker"\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "proposer": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given proposer address"\n },\n "pubkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given pubkey"\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given status"\n },\n "status_only": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query only status of all validators."\n },\n "valkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given valoper address"\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "validators": {\n "description": "The array of validators information"\n }\n }\n },\n "QueryVoters": {\n "endpoint": "/api/kira/gov/voters/{proposal_id}",\n "description": "QueryVoters is a function to query voters by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": null\n },\n "QueryVotes": {\n "endpoint": "/api/kira/gov/votes/{proposal_id}",\n "description": "QueryVotes is a function to query votes by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "votes": {\n "description": "The array of votes information"\n }\n }\n }\n },\n "response_header": {\n "Interx_block": {\n "type": "number",\n "description": "This represents the current block number."\n },\n "Interx_blocktime": {\n "type": "number",\n "description": "This represents the current block timestamp."\n },\n "Interx_chain_id": {\n "type": "number",\n "description": "This represents the current chain id."\n },\n "Interx_hash": {\n "type": "string",\n "description": "This represents the interx response hash."\n },\n "Interx_ref": {\n "type": "string",\n "description": "This represents link to download the data reference."\n },\n "Interx_request_hash": {\n "type": "string",\n "description": "This represents the hash of request parameters."\n },\n "Interx_signature": {\n "type": "string",\n "description": "This represents the interx response signature."\n },\n "Interx_timestamp": {\n "type": "string",\n "description": "This represents the current interx timestamp."\n }\n }\n}\n'})})]})}function u(n={}){const{wrapper:e}={...(0,o.a)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(c,{...n})}):c(n)}},5162:(n,e,t)=>{t.d(e,{Z:()=>s});t(7294);var i=t(6905);const o={tabItem:"tabItem_Ymn6"};var r=t(5893);function s(n){let{children:e,hidden:t,className:s}=n;return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:t,children:e})}},4866:(n,e,t)=>{t.d(e,{Z:()=>_});var i=t(7294),o=t(6905),r=t(2466),s=t(6550),a=t(469),p=t(1980),d=t(7392),c=t(12);function u(n){return i.Children.toArray(n).filter((n=>"\n"!==n)).map((n=>{if(!n||(0,i.isValidElement)(n)&&function(n){const{props:e}=n;return!!e&&"object"==typeof e&&"value"in e}(n))return n;throw new Error(`Docusaurus error: Bad child <${"string"==typeof n.type?n.type:n.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function l(n){const{values:e,children:t}=n;return(0,i.useMemo)((()=>{const n=e??function(n){return u(n).map((n=>{let{props:{value:e,label:t,attributes:i,default:o}}=n;return{value:e,label:t,attributes:i,default:o}}))}(t);return function(n){const e=(0,d.l)(n,((n,e)=>n.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((n=>n.value)).join(", ")}" found in . Every value needs to be unique.`)}(n),n}),[e,t])}function y(n){let{value:e,tabValues:t}=n;return t.some((n=>n.value===e))}function h(n){let{queryString:e=!1,groupId:t}=n;const o=(0,s.k6)(),r=function(n){let{queryString:e=!1,groupId:t}=n;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,p._X)(r),(0,i.useCallback)((n=>{if(!r)return;const e=new URLSearchParams(o.location.search);e.set(r,n),o.replace({...o.location,search:e.toString()})}),[r,o])]}function f(n){const{defaultValue:e,queryString:t=!1,groupId:o}=n,r=l(n),[s,p]=(0,i.useState)((()=>function(n){let{defaultValue:e,tabValues:t}=n;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!y({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((n=>n.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const i=t.find((n=>n.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:e,tabValues:r}))),[d,u]=h({queryString:t,groupId:o}),[f,m]=function(n){let{groupId:e}=n;const t=function(n){return n?`docusaurus.tab.${n}`:null}(e),[o,r]=(0,c.Nk)(t);return[o,(0,i.useCallback)((n=>{t&&r.set(n)}),[t,r])]}({groupId:o}),g=(()=>{const n=d??f;return y({value:n,tabValues:r})?n:null})();(0,a.Z)((()=>{g&&p(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((n=>{if(!y({value:n,tabValues:r}))throw new Error(`Can't select invalid tab value=${n}`);p(n),u(n),m(n)}),[u,m,r]),tabValues:r}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=t(5893);function T(n){let{className:e,block:t,selectedValue:i,selectValue:s,tabValues:a}=n;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=n=>{const e=n.currentTarget,t=p.indexOf(e),o=a[t].value;o!==i&&(d(e),s(o))},u=n=>{let e=null;switch(n.key){case"Enter":c(n);break;case"ArrowRight":{const t=p.indexOf(n.currentTarget)+1;e=p[t]??p[0];break}case"ArrowLeft":{const t=p.indexOf(n.currentTarget)-1;e=p[t]??p[p.length-1];break}}e?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":t},e),children:a.map((n=>{let{value:e,label:t,attributes:r}=n;return(0,b.jsx)("li",{role:"tab",tabIndex:i===e?0:-1,"aria-selected":i===e,ref:n=>p.push(n),onKeyDown:u,onClick:c,...r,className:(0,o.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":i===e}),children:t??e},e)}))})}function v(n){let{lazy:e,children:t,selectedValue:o}=n;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const n=r.find((n=>n.props.value===o));return n?(0,i.cloneElement)(n,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((n,e)=>(0,i.cloneElement)(n,{key:e,hidden:n.props.value!==o})))})}function k(n){const e=f(n);return(0,b.jsxs)("div",{className:(0,o.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(T,{...n,...e}),(0,b.jsx)(v,{...n,...e})]})}function _(n){const e=(0,m.Z)();return(0,b.jsx)(k,{...n,children:u(n.children)},String(e))}},1151:(n,e,t)=>{t.d(e,{Z:()=>a,a:()=>s});var i=t(7294);const o={},r=i.createContext(o);function s(n){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:s(n.components),i.createElement(r.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/14fe96fc.5e0759a7.js b/assets/js/14fe96fc.5e0759a7.js deleted file mode 100644 index 04d4dca..0000000 --- a/assets/js/14fe96fc.5e0759a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4475],{8422:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);t(4866),t(5162);const r={title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},s=void 0,a={id:"Stack/INTERX--Middleware/Endpoints",title:"Endpoints",description:"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Endpoints.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},next:{title:"Installation",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b"}},p={},d=[];function c(n){const e={code:"code",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(e.p,{children:["Description of all available endpoints including their accepted parameter and expected response format can be queried though ",(0,i.jsx)(e.code,{children:":11000/api/metadata"})," endpoint."]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.strong,{children:"Example Metadata Endpoint Response"})}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-json",children:'{\n "functions": {\n "Broadcast": {\n "endpoint": "/api/kira/txs",\n "description": "Broadcast is a function to broadcast signed transaction.",\n "parameters": {\n "mode": {\n "type": "string",\n "optional": true,\n "description": "This represents the broadcast mode. (block, sync, async)"\n },\n "tx": {\n "type": "byte[]",\n "description": "This represents the transaction bytes."\n }\n },\n "response": null\n },\n "Download": {\n "endpoint": "/download",\n "description": "Download is a function to download a data reference or arbitrary data.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents the reference key. (It saves reference data with hashed name. e.g. 2CEE6B1689EDDDD6F08EB1EAEC7D3C4E.)"\n },\n "module": {\n "type": "string",\n "description": "This represents the module name. (e.g. DRR for data reference registry.)"\n }\n },\n "response": null\n },\n "Faucet": {\n "endpoint": "/api/kira/faucet?",\n "description": "Faucet is a function to claim tokens to the account for free.",\n "parameters": {\n "claim": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "token": {\n "type": "string",\n "optional": true,\n "description": "This represents the token name."\n }\n },\n "response": {\n "hash": {\n "description": "The faucet transaction hash"\n }\n }\n },\n "FaucetInfo": {\n "endpoint": "/api/kira/faucet",\n "description": "FaucetInfo is a function to return the available faucet amount",\n "parameters": null,\n "response": {\n "address": {\n "description": "The faucet kira address"\n },\n "balances": {\n "description": "The balances array (amount \\u0026 denom)"\n }\n }\n },\n "QueryAccount": {\n "endpoint": "/api/kira/accounts/{address}",\n "description": "QueryAccount is a function to query the account info.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n }\n },\n "response": {\n "account": {\n "description": "The account info with address, pubkey and sequence."\n }\n }\n },\n "QueryAllIdentityRecordVerifyRequests": {\n "endpoint": "/api/kira/gov/all_identity_verify_requests",\n "description": "QueryAllIdentityRecordVerifyRequests is a function to query all identity record verify requests.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryAllIdentityRecords": {\n "endpoint": "/api/kira/gov/all_identity_records",\n "description": "QueryAllIdentityRecords is a function to query all identity records.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryBalance": {\n "endpoint": "/api/kira/balances/{address}",\n "description": "QueryBalance is a function to query the account balances.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n },\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": {\n "balances": {\n "type": "Coin[]",\n "description": "The account balances with pagination"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryBlockByHeightOrHash": {\n "endpoint": "/api/blocks/{height}",\n "description": "QueryBlockByHeightOrHash is a function to query block by height or hash.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height or hash."\n }\n },\n "response": {\n "block": {\n "description": "The block information"\n },\n "block_id": {\n "description": "The block hash inforamtion"\n }\n }\n },\n "QueryBlockTransactions": {\n "endpoint": "/api/blocks/{height}/transactions",\n "description": "QueryBlockTransactions is a function to query block transactions by height.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "txs": {\n "description": "The transaction information array"\n }\n }\n },\n "QueryBlocks": {\n "endpoint": "/api/blocks",\n "description": "QueryBlocks is a function to query blocks with pagination.",\n "parameters": {\n "maxHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the maximum block height."\n },\n "minHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the minimum block height."\n }\n },\n "response": {\n "block_metas": {\n "description": "The array of block informations"\n },\n "last_height": {\n "description": "The last block height"\n }\n }\n },\n "QueryConsensus": {\n "endpoint": "/api/consensus",\n "description": "QueryConsensus is a function to query consensus info.",\n "parameters": null,\n "response": {\n "average_block_time": {\n "description": "average block time in seconds"\n },\n "commit_time": {\n "description": "The latest commit timestamp"\n },\n "consensus_stopped": {\n "description": "If the consensus is stopped or not"\n },\n "height": {\n "description": "The latest block height"\n },\n "noncommits": {\n "description": "The validators array with no commits"\n },\n "precommits": {\n "description": "The validators array with pre commits"\n },\n "prevotes": {\n "description": "The validators array with prevotes"\n },\n "proposer": {\n "description": "The current proposer kira address"\n },\n "round": {\n "description": "The consensus round"\n },\n "start_time": {\n "description": "The consensus start timestamp"\n },\n "step": {\n "description": "RoundStepNewHeight"\n },\n "triggered_timeout_precommit": {\n "description": "true or false"\n }\n }\n },\n "QueryDashboard": {\n "endpoint": "/api/dashboard",\n "description": "QueryDashboard is a function to query data for the dashboard.",\n "parameters": null,\n "response": {\n "blocks": {\n "type": "struct",\n "description": "The blocks consensus status",\n "fields": {\n "average_time": {\n "type": "number",\n "description": "The average block confirm time"\n },\n "current_height": {\n "type": "number",\n "description": "The current block height"\n },\n "current_transactions": {\n "type": "number",\n "description": "The count of current transactions"\n },\n "latest_time": {\n "type": "number",\n "description": "The latest block confirm time"\n },\n "pending_transactions": {\n "type": "number",\n "description": "The count of pending transactions"\n },\n "since_genesis": {\n "type": "number",\n "description": "The block count after genesis block"\n }\n }\n },\n "consensus_health": {\n "description": "Float value between 0 and 1, represents the health status of the consensus."\n },\n "current_block_validator": {\n "type": "struct",\n "description": "The current block validator info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The validator\'s address"\n },\n "moniker": {\n "type": "string",\n "description": "The validator\'s moniker"\n }\n }\n },\n "proposals": {\n "type": "struct",\n "description": "The proposals count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active proposals"\n },\n "enacting": {\n "type": "number",\n "description": "The count of enacting proposals"\n },\n "finished": {\n "type": "number",\n "description": "The count of finished proposals"\n },\n "proposers": {\n "type": "number",\n "description": "The count of proposers"\n },\n "successful": {\n "type": "number",\n "description": "The count of successful proposals"\n },\n "total": {\n "type": "number",\n "description": "The count of total proposals"\n },\n "voters": {\n "type": "number",\n "description": "The count of voters"\n }\n }\n },\n "validators": {\n "type": "struct",\n "description": "The validators count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active validators"\n },\n "inactive": {\n "type": "number",\n "description": "The count of in-active validators"\n },\n "jailed": {\n "type": "number",\n "description": "The count of jailed validators"\n },\n "paused": {\n "type": "number",\n "description": "The count of paused validators"\n },\n "total": {\n "type": "number",\n "description": "The count of total validators"\n },\n "waiting": {\n "type": "number",\n "description": "The count of waiting validators"\n }\n }\n }\n }\n },\n "QueryDataReference": {\n "endpoint": "/api/kira/gov/data/{key}",\n "description": "QueryDataReference is a function to query data reference by a key.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents data reference key."\n }\n },\n "response": null\n },\n "QueryDataReferenceKeys": {\n "endpoint": "/api/kira/gov/data_keys",\n "description": "QueryDataReferenceKeys is a function to query data reference keys with pagination.",\n "parameters": {\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": null\n },\n "QueryExecutionFee": {\n "endpoint": "/api/kira/gov/execution_fee",\n "description": "QueryExecutionFee is a function to query execution fee by transaction type.",\n "parameters": {\n "message": {\n "type": "string",\n "description": "This is an option of a transaction type"\n }\n },\n "response": {\n "fee": {\n "description": "The execution fee info"\n }\n }\n },\n "QueryExecutionFees": {\n "endpoint": "/api/kira/gov/execution_fees",\n "description": "QueryExecutionFees is a function to query all execution fees.",\n "parameters": null,\n "response": {\n "fees": {\n "type": "array",\n "description": "All execution fees"\n }\n }\n },\n "QueryGenesis": {\n "endpoint": "/api/genesis",\n "description": "QueryGenesis is a function to query genesis.",\n "parameters": null,\n "response": null\n },\n "QueryGenesisSum": {\n "endpoint": "/api/gensum",\n "description": "QueryGenesisSum is a function to query genesis checksum.",\n "parameters": null,\n "response": null\n },\n "QueryIdentityRecord": {\n "endpoint": "/api/kira/gov/identity_record/{id}",\n "description": "QueryIdentityRecord is a function to query identity record by id.",\n "parameters": {\n "id": {\n "type": "number",\n "description": "This is the identity record id."\n }\n },\n "response": {\n "record": {\n "description": "The identity record info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequest": {\n "endpoint": "/api/kira/gov/identity_verify_record/{request_id}",\n "description": "QueryIdentityRecordVerifyRequest is a function to query identity record verify request.",\n "parameters": {\n "request_id": {\n "type": "number",\n "description": "This is the identity record verify request id."\n }\n },\n "response": {\n "verify_record": {\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByApprover": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_approver/{approver}",\n "description": "QueryIdentityRecordVerifyRequestsByApprover is a function to query identity record verify request by approver.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify request approver address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByRequester": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_requester/{requester}",\n "description": "QueryIdentityRecordVerifyRequestsByRequester is a function to query identity record verify request by requester.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify requester address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordsByAddress": {\n "endpoint": "/api/kira/gov/identity_records/{creator}",\n "description": "QueryIdentityRecordsByAddress is a function to query identity records by address.",\n "parameters": {\n "creator": {\n "type": "string",\n "description": "This is the identity record creator address."\n }\n },\n "response": {\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryInterxFunctions": {\n "endpoint": "/api/metadata",\n "description": "QueryInterxFunctions is a function to query interx functions.",\n "parameters": null,\n "response": null\n },\n "QueryInterxList": {\n "endpoint": "/api/interx_list",\n "description": "QueryInterxList is a function to query all interx list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "faucet": {\n "type": "string",\n "description": "The faucet kira address"\n },\n "id": {\n "type": "string",\n "description": "The interx public key"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "moniker": {\n "type": "string",\n "description": "From interx configuration"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial INTERX and verify pub_key"\n },\n "type": {\n "type": "string",\n "description": "The node type from interx configuration"\n },\n "version": {\n "type": "string",\n "description": "The interx version from interx configuration"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryInterxStatus": {\n "endpoint": "/api/status",\n "description": "QueryInterxStatus is a function to query interx informations.",\n "parameters": null,\n "response": null\n },\n "QueryKiraFunctions": {\n "endpoint": "/api/kira/metadata",\n "description": "QueryKiraFunctions is a function to query kira functions.",\n "parameters": null,\n "response": null\n },\n "QueryKiraStatus": {\n "endpoint": "/api/kira/status",\n "description": "QueryKiraStatus is a function to query the node status",\n "parameters": null,\n "response": {\n "node_info": {\n "description": "The connected node information"\n },\n "sync_info": {\n "description": "The sync status of connected node"\n },\n "validator_info": {\n "description": "The validator information of connect node"\n }\n }\n },\n "QueryKiraTokensAliases": {\n "endpoint": "/api/kira/tokens/aliases",\n "description": "QueryKiraTokensAliases is a function to query all tokens aliases.",\n "parameters": null,\n "response": null\n },\n "QueryKiraTokensRates": {\n "endpoint": "/api/kira/tokens/rates",\n "description": "QueryKiraTokensRates is a function to query all tokens rates.",\n "parameters": null,\n "response": null\n },\n "QueryNetworkProperties": {\n "endpoint": "/api/kira/gov/network_properties",\n "description": "QueryNetworkProperties is a function to query network properties.",\n "parameters": null,\n "response": null\n },\n "QueryPermissionsByAddress": {\n "endpoint": "/api/kira/gov/permissions_by_address/{val_addr}",\n "description": "QueryPermissionsByAddress is a function to query all permissions by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QueryPrivP2PList": {\n "endpoint": "/api/priv_p2p_list",\n "description": "QueryPrivP2PList is a function to query all private nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The private node id"\n },\n "ip": {\n "type": "string",\n "description": "The local ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryProposal": {\n "endpoint": "/api/kira/gov/proposals/{proposal_id}",\n "description": "QueryProposal is a function to query a proposal by a given proposal_id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "proposal": {\n "description": "The proposal information"\n }\n }\n },\n "QueryProposals": {\n "endpoint": "/api/kira/gov/proposals",\n "description": "QueryProposals is a function to query all proposals.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "reverse": {\n "type": "bool",\n "optional": true,\n "description": "This an option to sort proposals."\n },\n "voter": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": {\n "proposals": {\n "description": "The array of proposals information"\n }\n }\n },\n "QueryPubP2PList": {\n "endpoint": "/api/pub_p2p_list",\n "description": "QueryPubP2PList is a function to query all public nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The public node id"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryRPCMethods": {\n "endpoint": "/api/rpc_methods",\n "description": "QueryRPCMethods is a function to query all rpc methods available.",\n "parameters": null,\n "response": null\n },\n "QueryRoles": {\n "endpoint": "/api/kira/gov/all_roles",\n "description": "QueryRoles is a function to query all roles.",\n "parameters": null,\n "response": null\n },\n "QueryRolesByAddress": {\n "endpoint": "/api/kira/gov/roles_by_address/{val_addr}",\n "description": "QueryRolesByAddress is a function to query all roles by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QuerySnapList": {\n "endpoint": "/api/snap_list",\n "description": "QuerySnapList is a function to query all snapshot node list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "checksum": {\n "type": "string",\n "description": "The snapshot checksum (SHA256)"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "port": {\n "type": "number",\n "description": "The interx port number"\n },\n "size": {\n "type": "number",\n "description": "The snapshot size in bytes"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QuerySpendingPoolProposals": {\n "endpoint": "/api/kira/spending-pool-proposals",\n "description": "QuerySpendingPoolProposals is a function to query list of all spending pool proposals.",\n "parameters": null,\n "response": {\n "names": {\n "description": "The list of all spending pool proposals"\n }\n }\n },\n "QuerySpendingPools": {\n "endpoint": "/api/kira/spending-pools",\n "description": "QuerySpendingPools is a function to query list of all spending pool names.",\n "parameters": {\n "account": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "names": {\n "description": "The list of all spending pools"\n }\n }\n },\n "QueryTotalSupply": {\n "endpoint": "/api/kira/supply",\n "description": "QueryTotalSupply is a function to query total supply.",\n "parameters": null,\n "response": {\n "supply": {\n "type": "Coin[]",\n "description": "The total supply of the network"\n }\n }\n },\n "QueryTransactionHash": {\n "endpoint": "/api/kira/txs/{hash}",\n "description": "QueryTransactionHash is a function to query transaction details from transaction hash.",\n "parameters": {\n "hash": {\n "type": "string",\n "description": "This represents the transaction hash. (e.g. 0x20.....)"\n }\n },\n "response": {\n "hash": {\n "description": "The transaction hash"\n },\n "height": {\n "description": "The block height of transation"\n },\n "tx": {\n "description": "The base-64 encoded transaction"\n },\n "tx_result": {\n "description": "The result of transaction with events, gas info, logs and error code"\n }\n }\n },\n "QueryTransactionResult": {\n "endpoint": "/api/transactions/{txHash}",\n "description": "QueryTransactionResult is a function to query transaction result by hash.",\n "parameters": {\n "txHash": {\n "type": "string",\n "optional": true,\n "description": "This is an option of a transaction hash."\n }\n },\n "response": {\n "block_height": {\n "description": "The block height"\n },\n "block_timestamp": {\n "description": "The block timestamp"\n },\n "confirmation": {\n "description": "The block confirmations of this transaction"\n },\n "fees": {\n "description": "The transaction fee"\n },\n "gas_used": {\n "description": "The gas amount used in transaction"\n },\n "gas_wanted": {\n "description": "The gas limit amount for transaction"\n },\n "hash": {\n "description": "The transaction hash"\n },\n "memo": {\n "description": "The transaction memo"\n },\n "msgs": {\n "description": "The transaction msgs"\n },\n "status": {\n "description": "The transaction status"\n }\n }\n },\n "QueryTransactions": {\n "endpoint": "/api/transactions",\n "description": "QueryTransactions is a function to query transactions of the account filtered by various options like msg type, date, and so on.",\n "parameters": {\n "account": {\n "type": "string",\n "description": "This represents the kira account address."\n },\n "dateEnd": {\n "type": "string",\n "optional": true,\n "description": "This represents the ending point in timestamp or date(DD/MM/YY) format."\n },\n "dateStart": {\n "type": "string",\n "optional": true,\n "description": "This represents the starting point in timestamp or date(DD/MM/YY) format."\n },\n "direction": {\n "type": "string",\n "optional": true,\n "description": "This represents direction of the transaction(outbound, inbound)."\n },\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of total results to be shown. (1 ~ 100)"\n },\n "offset": {\n "type": "int",\n "optional": true,\n "description": "This represents the offset of the first transaction."\n },\n "page": {\n "type": "int",\n "optional": true,\n "description": "This represents the page number of results."\n },\n "page_size": {\n "type": "int",\n "optional": true,\n "description": "This represents the pageSize number of results. (1 ~ 100)"\n },\n "sort": {\n "type": "string",\n "optional": true,\n "description": "This represents how the transactions should be sorted(dateASC, dateDESC)."\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction status(pending, confirmed, failed)."\n },\n "type": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction type."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "transactions": {\n "description": "The array of transactions"\n }\n }\n },\n "QueryUBIRecords": {\n "endpoint": "/api/kira/ubi-records",\n "description": "QueryUBIRecords is a function to query ubi records.",\n "parameters": {\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "record": {\n "optional": true,\n "description": "ubi record"\n },\n "records": {\n "optional": true,\n "description": "All ubi records"\n }\n }\n },\n "QueryUnconfirmedTxs": {\n "endpoint": "/api/unconfirmed_txs",\n "description": "QueryUnconfirmedTxs is a function to query unconfirmed transactions.",\n "parameters": {\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of the transaction. (1 ~ 1000)"\n }\n },\n "response": null\n },\n "QueryValidatorInfos": {\n "endpoint": "/api/valoperinfos",\n "description": "QueryValidatorInfos is a function to query validator infos.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n }\n },\n "response": {\n "info": {\n "description": "The array of validators information"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryValidators": {\n "endpoint": "/api/valopers",\n "description": "QueryValidators is a function to query validators.",\n "parameters": {\n "address": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given kira address"\n },\n "all": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query all validators."\n },\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "moniker": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given moniker"\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "proposer": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given proposer address"\n },\n "pubkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given pubkey"\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given status"\n },\n "status_only": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query only status of all validators."\n },\n "valkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given valoper address"\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "validators": {\n "description": "The array of validators information"\n }\n }\n },\n "QueryVoters": {\n "endpoint": "/api/kira/gov/voters/{proposal_id}",\n "description": "QueryVoters is a function to query voters by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": null\n },\n "QueryVotes": {\n "endpoint": "/api/kira/gov/votes/{proposal_id}",\n "description": "QueryVotes is a function to query votes by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "votes": {\n "description": "The array of votes information"\n }\n }\n }\n },\n "response_header": {\n "Interx_block": {\n "type": "number",\n "description": "This represents the current block number."\n },\n "Interx_blocktime": {\n "type": "number",\n "description": "This represents the current block timestamp."\n },\n "Interx_chain_id": {\n "type": "number",\n "description": "This represents the current chain id."\n },\n "Interx_hash": {\n "type": "string",\n "description": "This represents the interx response hash."\n },\n "Interx_ref": {\n "type": "string",\n "description": "This represents link to download the data reference."\n },\n "Interx_request_hash": {\n "type": "string",\n "description": "This represents the hash of request parameters."\n },\n "Interx_signature": {\n "type": "string",\n "description": "This represents the interx response signature."\n },\n "Interx_timestamp": {\n "type": "string",\n "description": "This represents the current interx timestamp."\n }\n }\n}\n'})})]})}function u(n={}){const{wrapper:e}={...(0,o.a)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(c,{...n})}):c(n)}},5162:(n,e,t)=>{t.d(e,{Z:()=>s});t(7294);var i=t(6905);const o={tabItem:"tabItem_Ymn6"};var r=t(5893);function s(n){let{children:e,hidden:t,className:s}=n;return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:t,children:e})}},4866:(n,e,t)=>{t.d(e,{Z:()=>_});var i=t(7294),o=t(6905),r=t(2466),s=t(6550),a=t(469),p=t(1980),d=t(7392),c=t(12);function u(n){return i.Children.toArray(n).filter((n=>"\n"!==n)).map((n=>{if(!n||(0,i.isValidElement)(n)&&function(n){const{props:e}=n;return!!e&&"object"==typeof e&&"value"in e}(n))return n;throw new Error(`Docusaurus error: Bad child <${"string"==typeof n.type?n.type:n.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function l(n){const{values:e,children:t}=n;return(0,i.useMemo)((()=>{const n=e??function(n){return u(n).map((n=>{let{props:{value:e,label:t,attributes:i,default:o}}=n;return{value:e,label:t,attributes:i,default:o}}))}(t);return function(n){const e=(0,d.l)(n,((n,e)=>n.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((n=>n.value)).join(", ")}" found in . Every value needs to be unique.`)}(n),n}),[e,t])}function y(n){let{value:e,tabValues:t}=n;return t.some((n=>n.value===e))}function h(n){let{queryString:e=!1,groupId:t}=n;const o=(0,s.k6)(),r=function(n){let{queryString:e=!1,groupId:t}=n;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,p._X)(r),(0,i.useCallback)((n=>{if(!r)return;const e=new URLSearchParams(o.location.search);e.set(r,n),o.replace({...o.location,search:e.toString()})}),[r,o])]}function f(n){const{defaultValue:e,queryString:t=!1,groupId:o}=n,r=l(n),[s,p]=(0,i.useState)((()=>function(n){let{defaultValue:e,tabValues:t}=n;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!y({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((n=>n.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const i=t.find((n=>n.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:e,tabValues:r}))),[d,u]=h({queryString:t,groupId:o}),[f,m]=function(n){let{groupId:e}=n;const t=function(n){return n?`docusaurus.tab.${n}`:null}(e),[o,r]=(0,c.Nk)(t);return[o,(0,i.useCallback)((n=>{t&&r.set(n)}),[t,r])]}({groupId:o}),g=(()=>{const n=d??f;return y({value:n,tabValues:r})?n:null})();(0,a.Z)((()=>{g&&p(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((n=>{if(!y({value:n,tabValues:r}))throw new Error(`Can't select invalid tab value=${n}`);p(n),u(n),m(n)}),[u,m,r]),tabValues:r}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=t(5893);function T(n){let{className:e,block:t,selectedValue:i,selectValue:s,tabValues:a}=n;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=n=>{const e=n.currentTarget,t=p.indexOf(e),o=a[t].value;o!==i&&(d(e),s(o))},u=n=>{let e=null;switch(n.key){case"Enter":c(n);break;case"ArrowRight":{const t=p.indexOf(n.currentTarget)+1;e=p[t]??p[0];break}case"ArrowLeft":{const t=p.indexOf(n.currentTarget)-1;e=p[t]??p[p.length-1];break}}e?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":t},e),children:a.map((n=>{let{value:e,label:t,attributes:r}=n;return(0,b.jsx)("li",{role:"tab",tabIndex:i===e?0:-1,"aria-selected":i===e,ref:n=>p.push(n),onKeyDown:u,onClick:c,...r,className:(0,o.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":i===e}),children:t??e},e)}))})}function v(n){let{lazy:e,children:t,selectedValue:o}=n;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const n=r.find((n=>n.props.value===o));return n?(0,i.cloneElement)(n,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((n,e)=>(0,i.cloneElement)(n,{key:e,hidden:n.props.value!==o})))})}function k(n){const e=f(n);return(0,b.jsxs)("div",{className:(0,o.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(T,{...n,...e}),(0,b.jsx)(v,{...n,...e})]})}function _(n){const e=(0,m.Z)();return(0,b.jsx)(k,{...n,children:u(n.children)},String(e))}},1151:(n,e,t)=>{t.d(e,{Z:()=>a,a:()=>s});var i=t(7294);const o={},r=i.createContext(o);function s(n){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:s(n.components),i.createElement(r.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/15db6baf.4b09f3bf.js b/assets/js/15db6baf.4b09f3bf.js new file mode 100644 index 0000000..d5838e7 --- /dev/null +++ b/assets/js/15db6baf.4b09f3bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6123],{8737:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),r=s(1151),i=s(4866),a=s(5162);const c={title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing",title:"Transaction validation & processing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/f7f02009-1f78-426b-8915-f503cdda9671",permalink:"/docs.kira.network/docs/f7f02009-1f78-426b-8915-f503cdda9671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},sidebar:"defaultSidebar",previous:{title:"Auth",permalink:"/docs.kira.network/docs/cb04c86c-93bc-47bd-8a40-510e60bd7115"},next:{title:"Params",permalink:"/docs.kira.network/docs/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}},l={},h=[{value:"Concept",id:"369e904c786849559f583b442cf79b77",level:3},{value:"Governance",id:"8f77e772510844c4a585a1ecfdc4b3d7",level:3},{value:"Parameters",id:"cb3a71b9b28f4cceae1ab341101c1feb",level:3},{value:"Standard Decorators",id:"187c1bf7567240508a620dc14c4cce93",level:3},{value:"Custom Decorators",id:"7ae4eacc2b8e4ec780c5b1988f58d815",level:3},{value:"Cli Syntax & Examples",id:"2ec87135e9df43709bc798e10d3f1cf9",level:2},{value:"Transactions",id:"f60ea4930d09400e872edb6979e2ea1d",level:2},{value:"Sign a Transaction",id:"21ca23e3ce3e43d782feb4a7d8e39568",level:4},{value:"Sign Multiple Transactions",id:"f7252dcb2df14b30bf17212b3b223f6a",level:4},{value:"Multi-sign a Transaction",id:"3a887933c2504b16a5fb3f9151fabe7b",level:4},{value:"Multi-sign a Batch of Transactions",id:"22ece625527c4d69aa19526816334088",level:4},{value:"Validate Transaction Signatures",id:"40a39a4b30a843ee8c4c6759dcaf4ea9",level:4},{value:"Broadcast a Transaction",id:"fa061894e92c4158a80861ea974e952c",level:4},{value:"Aux-to-fee",id:"9671efd0273b4424aab5cf5a233621d4",level:4},{value:"Queries",id:"5f7711aaeb824bb0b9f5635eb4c8e38e",level:2},{value:"Query an Account",id:"669879c5100547f0b933d19f39ee6808",level:4},{value:"Query All Accounts",id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",level:4},{value:"Query Auth Parameters",id:"16dbb6704fef42abb49cd92a1280ec83",level:4},{value:"Governance",id:"4d87891f998146c7959256f7ba3bb6b5",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"369e904c786849559f583b442cf79b77",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Auth module in KIRA extends the functionality of the Cosmos SDK's ",(0,t.jsx)(n.code,{children:"auth"})," module, focusing on validating and processing transactions within the network. It utilizes a set of ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," to perform basic transaction validity checks before they are included in the blockchain. These checks involve verifying signatures, ensuring correct nonces, and validating auxiliary fields. The Auth module is also responsible for managing accounts, including their creation, storage, and querying, as well as maintaining associated account information."]}),"\n",(0,t.jsxs)(n.p,{children:["KIRA enriches the standard handlers by introducing custom decorators tailored to its network requirements such as custody rules, poor network conditions and token whitelist/blacklist enforcement.. One key area is fee processing; since KIRA does not have a concept of gas fees, it implements specific decorators for this purpose. More information on KIRA's fee processing can be found in the ",(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module."]}),"\n",(0,t.jsx)(n.h3,{id:"8f77e772510844c4a585a1ecfdc4b3d7",children:"Governance"}),"\n",(0,t.jsx)(n.p,{children:"Currently, there is no mechanism implemented to change the Auth module parameters through governance. These parameters are initialized during the application setup, and there is no built-in procedure available to modify them subsequently."}),"\n",(0,t.jsx)(n.h3,{id:"cb3a71b9b28f4cceae1ab341101c1feb",children:"Parameters"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"All parameters pertaining to gas fees are obsolete."})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_memo_characters"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"512"})}),(0,t.jsx)(n.td,{children:"The maximum permitted number of characters in the memo of a transaction"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_sig_limit"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"7"})}),(0,t.jsx)(n.td,{children:"The maximum number of signers for a transaction. A single transaction can have multiple messages and multiple signers"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_size_cost_per_byte"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsxs)(n.td,{children:["The cost per byte used to compute the gas consumption of a transaction. ",(0,t.jsx)(n.code,{children:"TxSizeCostPerByte * txsize"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_ed25519"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"590"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying ED25519 signatures"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_secp256k1"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying Secp256k1 signatures"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"187c1bf7567240508a620dc14c4cce93",children:"Standard Decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are ",(0,t.jsx)(n.code,{children:"auth"}),"'s standard ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," that are chained together in a specific ",(0,t.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/app/ante/ante.go#L40-L61",children:"order"})," to form an ",(0,t.jsx)(n.code,{children:"AnteHandler"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetUpContextDecorator"})}),(0,t.jsx)(n.td,{children:"Sets up the context and gas meter for transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"RejectExtensionOptionsDecorator"})}),(0,t.jsx)(n.td,{children:"Rejects extension options in protobuf transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MempoolFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Checks if transaction fees meet the minimum fee requirements during CheckTx."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateBasicDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction basics."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"TxTimeoutHeightDecorator"})}),(0,t.jsx)(n.td,{children:"Checks for transaction height timeouts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateMemoDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction memos."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ConsumeGasTxSizeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas proportional to the transaction size."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DeductFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Deducts transaction fees from the signer's account (or fee granter's account if fee grant module is enabled)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetPubKeyDecorator"})}),(0,t.jsx)(n.td,{children:"Sets public keys for signers if not already set in the state machine."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateSigCountDecorator"})}),(0,t.jsx)(n.td,{children:"Validates the number of signatures in the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigGasConsumeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas for each signature."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigVerificationDecorator"})}),(0,t.jsx)(n.td,{children:"Verifies that all signatures are valid."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"IncrementSequenceDecorator"})}),(0,t.jsx)(n.td,{children:"Increments account sequence numbers for each signer to prevent replay attacks."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"7ae4eacc2b8e4ec780c5b1988f58d815",children:"Custom Decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are KIRA\u2019s custom ",(0,t.jsx)(n.code,{children:"AnteDecorators"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})}),(0,t.jsx)(n.th,{children:"MODULE"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CustodyDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator enforces custody rules for users, such as requiring them to have a valid key or a minimum reward amount when sending a transaction. It also checks whether they're using a whitelist, and if so, whether the recipients are on that whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/d6507d16-a726-4383-a84b-85343268b02e",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ZeroGasMeterDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator bypasses gas consumption for transactions by setting the gas limit to 0 and indicating no gas is consumed during processing"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateFeeRangeDecorator"})}),(0,t.jsxs)(n.td,{children:["This decorator checks if the transaction fee is within the range defined by the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),". If the fee is too high or too low, it returns an error"]}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionFeeRegistrationDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator manages the execution fee return process based on the success or failure of a message execution in a block"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PoorNetworkManagementDecorator"})}),(0,t.jsx)(n.td,{children:"Handles the allowed messages when the network is in a poor state"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"BlackWhiteTokensCheckDecorator"})}),(0,t.jsx)(n.td,{children:"Checks and prevents transactions involving frozen tokens based on the token blacklist and whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",children:"Untitled"})})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"2ec87135e9df43709bc798e10d3f1cf9",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(a.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"f60ea4930d09400e872edb6979e2ea1d",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"tx sign"})}),(0,t.jsx)(n.th,{children:"Sign transactions generated offline."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx sign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign multiple offline generated transactions. Combines signed transactions into one file using ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign"})}),(0,t.jsx)(n.td,{children:"Sign transactions by a multisig account offline."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign a batch of transactions for a multisig account. Does not support the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx validate-signatures"})}),(0,t.jsx)(n.td,{children:"Validate the signatures of a signed transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx broadcast"})}),(0,t.jsx)(n.td,{children:"Broadcast a signed transaction to the network."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx aux-to-fee"})}),(0,t.jsx)(n.td,{children:"Include aux signer data in a transaction, broadcast it, and send the tip amount to the broadcaster."})]})]})]}),(0,t.jsx)(n.h4,{id:"21ca23e3ce3e43d782feb4a7d8e39568",children:"Sign a Transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions that were generated offline using the ",(0,t.jsx)(n.code,{children:"sign"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign \\\n--from=$SIGNER $FLAGS_TX \\\ntx.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"f7252dcb2df14b30bf17212b3b223f6a",children:"Sign Multiple Transactions"}),(0,t.jsxs)(n.p,{children:["Sign multiple offline generated transactions (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) using the ",(0,t.jsx)(n.code,{children:"sign-batch"})," command. Transactions can be in one file (one tx per line) or in multiple files. For combining the signed transactions into one transaction, use the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntxs.json > tx.signed.json\n"})}),(0,t.jsx)(n.p,{children:"Or"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntx1.json tx2.json tx3.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"3a887933c2504b16a5fb3f9151fabe7b",children:"Multi-sign a Transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions generated offline (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) by a multisig account using the ",(0,t.jsx)(n.code,{children:"multi-sign"})," command. Where ",(0,t.jsx)(n.code,{children:"multisigk1k2k3"})," is the multisig account address, ",(0,t.jsx)(n.code,{children:"k1sig.json"})," is the signature of the first signer, ",(0,t.jsx)(n.code,{children:"k2sig.json"})," is the signature of the second signer, and ",(0,t.jsx)(n.code,{children:"k3sig.json"})," is the signature of the third signer."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign \\\n$FLAGS_TX transaction.json multisigk1k2k3 k1sig.json k2sig.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"22ece625527c4d69aa19526816334088",children:"Multi-sign a Batch of Transactions"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"multisign-batch"})," works the same way as ",(0,t.jsx)(n.code,{children:"sign-batch"}),", but for multisig accounts. With the difference that the ",(0,t.jsx)(n.code,{children:"--append"})," flag does not exist."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign-batch \\\n$FLAGS_TX transactions.json multisigk1k2k3 k1sigs.json k2sigs.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"40a39a4b30a843ee8c4c6759dcaf4ea9",children:"Validate Transaction Signatures"}),(0,t.jsxs)(n.p,{children:["Validate the signatures of a signed transaction using the ",(0,t.jsx)(n.code,{children:"validate-signatures"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx validate-signatures \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"fa061894e92c4158a80861ea974e952c",children:"Broadcast a Transaction"}),(0,t.jsxs)(n.p,{children:["Broadcast a signed transaction to the network using the ",(0,t.jsx)(n.code,{children:"broadcast"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx broadcast \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"9671efd0273b4424aab5cf5a233621d4",children:"Aux-to-fee"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"aux-to-fee"})," command includes the aux signer data in the tx, broadcasts the tx, and sends the tip amount to the broadcaster. ",(0,t.jsx)(n.a,{href:"https://docs.cosmos.network/main/core/tips",children:"Learn more about tip transaction"}),"."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx aux-to-fee \\\n$FLAGS_TX tx.aux.signed.json\n"})})]}),(0,t.jsxs)(a.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"5f7711aaeb824bb0b9f5635eb4c8e38e",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"auth account"})}),(0,t.jsx)(n.th,{children:"Query an account by its address."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth accounts"})}),(0,t.jsx)(n.td,{children:"Query all available accounts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth params"})}),(0,t.jsx)(n.td,{children:"Query the current authentication parameters."})]})]})]}),(0,t.jsx)(n.h4,{id:"669879c5100547f0b933d19f39ee6808",children:"Query an Account"}),(0,t.jsxs)(n.p,{children:["Query an account by its address using the ",(0,t.jsx)(n.code,{children:"account"})," command."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ADDR"}),": The address of the account to query."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth account $ADDR $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",children:"Query All Accounts"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"accounts"})," command to query all available accounts."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth accounts $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"16dbb6704fef42abb49cd92a1280ec83",children:"Query Auth Parameters"}),(0,t.jsxs)(n.p,{children:["Query the current auth parameters using the ",(0,t.jsx)(n.code,{children:"params"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth params $FLAGS_QR\n"})})]}),(0,t.jsxs)(a.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"4d87891f998146c7959256f7ba3bb6b5",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function x(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>a});s(7294);var t=s(6905);const r={tabItem:"tabItem_Ymn6"};var i=s(5893);function a(e){let{children:n,hidden:s,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,a),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),r=s(6905),i=s(2466),a=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const r=(0,a.k6)(),i=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(r.location.search);n.set(i,e),r.replace({...r.location,search:n.toString()})}),[i,r])]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,i=u(e),[a,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i}))),[o,h]=j({queryString:s,groupId:r}),[f,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,i]=(0,l.Nk)(s);return[r,(0,t.useCallback)((e=>{s&&i.set(e)}),[s,i])]}({groupId:r}),g=(()=>{const e=o??f;return x({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:a,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),b(e)}),[h,b,i]),tabValues:i}}var b=s(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function p(e){let{className:n,block:s,selectedValue:t,selectValue:a,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,i.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==t&&(o(n),a(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:i}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...i,className:(0,r.Z)("tabs__item",g.tabItem,i?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function k(e){const n=f(e);return(0,m.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,m.jsx)(p,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,m.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>a});var t=s(7294);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/15db6baf.63e0fddc.js b/assets/js/15db6baf.63e0fddc.js deleted file mode 100644 index be51c48..0000000 --- a/assets/js/15db6baf.63e0fddc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6123],{8737:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),r=s(1151),a=s(4866),i=s(5162);const c={title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing",title:"Transaction validation & processing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/f7f02009-1f78-426b-8915-f503cdda9671",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},sidebar:"defaultSidebar",previous:{title:"Auth",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"},next:{title:"Params",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}},l={},h=[{value:"Concept",id:"369e904c786849559f583b442cf79b77",level:3},{value:"Governance",id:"8f77e772510844c4a585a1ecfdc4b3d7",level:3},{value:"Parameters",id:"cb3a71b9b28f4cceae1ab341101c1feb",level:3},{value:"Standard decorators",id:"187c1bf7567240508a620dc14c4cce93",level:3},{value:"Custom decorators",id:"7ae4eacc2b8e4ec780c5b1988f58d815",level:3},{value:"Cli syntax & examples",id:"2ec87135e9df43709bc798e10d3f1cf9",level:2},{value:"Transactions",id:"f60ea4930d09400e872edb6979e2ea1d",level:2},{value:"Sign a transaction",id:"21ca23e3ce3e43d782feb4a7d8e39568",level:4},{value:"Sign multiple transactions",id:"f7252dcb2df14b30bf17212b3b223f6a",level:4},{value:"Multi-sign a transaction",id:"3a887933c2504b16a5fb3f9151fabe7b",level:4},{value:"Multi-sign a batch of transactions",id:"22ece625527c4d69aa19526816334088",level:4},{value:"Validate transaction signatures",id:"40a39a4b30a843ee8c4c6759dcaf4ea9",level:4},{value:"Broadcast a transaction",id:"fa061894e92c4158a80861ea974e952c",level:4},{value:"Aux-to-fee",id:"9671efd0273b4424aab5cf5a233621d4",level:4},{value:"Queries",id:"5f7711aaeb824bb0b9f5635eb4c8e38e",level:2},{value:"Query an account",id:"669879c5100547f0b933d19f39ee6808",level:4},{value:"Query all accounts",id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",level:4},{value:"Query auth parameters",id:"16dbb6704fef42abb49cd92a1280ec83",level:4},{value:"Governance",id:"4d87891f998146c7959256f7ba3bb6b5",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"369e904c786849559f583b442cf79b77",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Auth module in KIRA extends the functionality of the Cosmos SDK's ",(0,t.jsx)(n.code,{children:"auth"})," module, focusing on validating and processing transactions within the network. It utilizes a set of ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," to perform basic transaction validity checks before they are included in the blockchain. These checks involve verifying signatures, ensuring correct nonces, and validating auxiliary fields. The Auth module is also responsible for managing accounts, including their creation, storage, and querying, as well as maintaining associated account information."]}),"\n",(0,t.jsxs)(n.p,{children:["KIRA enriches the standard handlers by introducing custom decorators tailored to its network requirements such as custody rules, poor network conditions and token whitelist/blacklist enforcement.. One key area is fee processing; since KIRA does not have a concept of gas fees, it implements specific decorators for this purpose. More information on KIRA's fee processing can be found in the ",(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module."]}),"\n",(0,t.jsx)(n.h3,{id:"8f77e772510844c4a585a1ecfdc4b3d7",children:"Governance"}),"\n",(0,t.jsx)(n.p,{children:"Currently, there is no mechanism implemented to change the Auth module parameters through governance. These parameters are initialized during the application setup, and there is no built-in procedure available to modify them subsequently."}),"\n",(0,t.jsx)(n.h3,{id:"cb3a71b9b28f4cceae1ab341101c1feb",children:"Parameters"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"All parameters pertaining to gas fees are obsolete."})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_memo_characters"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"512"})}),(0,t.jsx)(n.td,{children:"The maximum permitted number of characters in the memo of a transaction"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_sig_limit"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"7"})}),(0,t.jsx)(n.td,{children:"The maximum number of signers for a transaction. A single transaction can have multiple messages and multiple signers"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_size_cost_per_byte"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsxs)(n.td,{children:["The cost per byte used to compute the gas consumption of a transaction. ",(0,t.jsx)(n.code,{children:"TxSizeCostPerByte * txsize"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_ed25519"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"590"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying ED25519 signatures"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_secp256k1"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying Secp256k1 signatures"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"187c1bf7567240508a620dc14c4cce93",children:"Standard decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are ",(0,t.jsx)(n.code,{children:"auth"}),"'s standard ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," that are chained together in a specific ",(0,t.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/app/ante/ante.go#L40-L61",children:"order"})," to form an ",(0,t.jsx)(n.code,{children:"AnteHandler"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetUpContextDecorator"})}),(0,t.jsx)(n.td,{children:"Sets up the context and gas meter for transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"RejectExtensionOptionsDecorator"})}),(0,t.jsx)(n.td,{children:"Rejects extension options in protobuf transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MempoolFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Checks if transaction fees meet the minimum fee requirements during CheckTx."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateBasicDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction basics."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"TxTimeoutHeightDecorator"})}),(0,t.jsx)(n.td,{children:"Checks for transaction height timeouts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateMemoDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction memos."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ConsumeGasTxSizeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas proportional to the transaction size."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DeductFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Deducts transaction fees from the signer's account (or fee granter's account if fee grant module is enabled)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetPubKeyDecorator"})}),(0,t.jsx)(n.td,{children:"Sets public keys for signers if not already set in the state machine."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateSigCountDecorator"})}),(0,t.jsx)(n.td,{children:"Validates the number of signatures in the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigGasConsumeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas for each signature."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigVerificationDecorator"})}),(0,t.jsx)(n.td,{children:"Verifies that all signatures are valid."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"IncrementSequenceDecorator"})}),(0,t.jsx)(n.td,{children:"Increments account sequence numbers for each signer to prevent replay attacks."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"7ae4eacc2b8e4ec780c5b1988f58d815",children:"Custom decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are KIRA\u2019s custom ",(0,t.jsx)(n.code,{children:"AnteDecorators"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})}),(0,t.jsx)(n.th,{children:"MODULE"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CustodyDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator enforces custody rules for users, such as requiring them to have a valid key or a minimum reward amount when sending a transaction. It also checks whether they're using a whitelist, and if so, whether the recipients are on that whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/d6507d16-a726-4383-a84b-85343268b02e",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ZeroGasMeterDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator bypasses gas consumption for transactions by setting the gas limit to 0 and indicating no gas is consumed during processing"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateFeeRangeDecorator"})}),(0,t.jsxs)(n.td,{children:["This decorator checks if the transaction fee is within the range defined by the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),". If the fee is too high or too low, it returns an error"]}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionFeeRegistrationDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator manages the execution fee return process based on the success or failure of a message execution in a block"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PoorNetworkManagementDecorator"})}),(0,t.jsx)(n.td,{children:"Handles the allowed messages when the network is in a poor state"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"BlackWhiteTokensCheckDecorator"})}),(0,t.jsx)(n.td,{children:"Checks and prevents transactions involving frozen tokens based on the token blacklist and whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",children:"Untitled"})})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"2ec87135e9df43709bc798e10d3f1cf9",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"f60ea4930d09400e872edb6979e2ea1d",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"tx sign"})}),(0,t.jsx)(n.th,{children:"Sign transactions generated offline."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx sign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign multiple offline generated transactions. Combines signed transactions into one file using ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign"})}),(0,t.jsx)(n.td,{children:"Sign transactions by a multisig account offline."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign a batch of transactions for a multisig account. Does not support the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx validate-signatures"})}),(0,t.jsx)(n.td,{children:"Validate the signatures of a signed transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx broadcast"})}),(0,t.jsx)(n.td,{children:"Broadcast a signed transaction to the network."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx aux-to-fee"})}),(0,t.jsx)(n.td,{children:"Include aux signer data in a transaction, broadcast it, and send the tip amount to the broadcaster."})]})]})]}),(0,t.jsx)(n.h4,{id:"21ca23e3ce3e43d782feb4a7d8e39568",children:"Sign a transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions that were generated offline using the ",(0,t.jsx)(n.code,{children:"sign"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign \\\n--from=$SIGNER $FLAGS_TX \\\ntx.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"f7252dcb2df14b30bf17212b3b223f6a",children:"Sign multiple transactions"}),(0,t.jsxs)(n.p,{children:["Sign multiple offline generated transactions (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) using the ",(0,t.jsx)(n.code,{children:"sign-batch"})," command. Transactions can be in one file (one tx per line) or in multiple files. For combining the signed transactions into one transaction, use the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntxs.json > tx.signed.json\n"})}),(0,t.jsx)(n.p,{children:"Or"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntx1.json tx2.json tx3.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"3a887933c2504b16a5fb3f9151fabe7b",children:"Multi-sign a transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions generated offline (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) by a multisig account using the ",(0,t.jsx)(n.code,{children:"multi-sign"})," command. Where ",(0,t.jsx)(n.code,{children:"multisigk1k2k3"})," is the multisig account address, ",(0,t.jsx)(n.code,{children:"k1sig.json"})," is the signature of the first signer, ",(0,t.jsx)(n.code,{children:"k2sig.json"})," is the signature of the second signer, and ",(0,t.jsx)(n.code,{children:"k3sig.json"})," is the signature of the third signer."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign \\\n$FLAGS_TX transaction.json multisigk1k2k3 k1sig.json k2sig.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"22ece625527c4d69aa19526816334088",children:"Multi-sign a batch of transactions"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"multisign-batch"})," works the same way as ",(0,t.jsx)(n.code,{children:"sign-batch"}),", but for multisig accounts. With the difference that the ",(0,t.jsx)(n.code,{children:"--append"})," flag does not exist."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign-batch \\\n$FLAGS_TX transactions.json multisigk1k2k3 k1sigs.json k2sigs.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"40a39a4b30a843ee8c4c6759dcaf4ea9",children:"Validate transaction signatures"}),(0,t.jsxs)(n.p,{children:["Validate the signatures of a signed transaction using the ",(0,t.jsx)(n.code,{children:"validate-signatures"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx validate-signatures \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"fa061894e92c4158a80861ea974e952c",children:"Broadcast a transaction"}),(0,t.jsxs)(n.p,{children:["Broadcast a signed transaction to the network using the ",(0,t.jsx)(n.code,{children:"broadcast"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx broadcast \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"9671efd0273b4424aab5cf5a233621d4",children:"Aux-to-fee"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"aux-to-fee"})," command includes the aux signer data in the tx, broadcasts the tx, and sends the tip amount to the broadcaster. ",(0,t.jsx)(n.a,{href:"https://docs.cosmos.network/main/core/tips",children:"Learn more about tip transaction"}),"."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx aux-to-fee \\\n$FLAGS_TX tx.aux.signed.json\n"})})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"5f7711aaeb824bb0b9f5635eb4c8e38e",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"auth account"})}),(0,t.jsx)(n.th,{children:"Query an account by its address."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth accounts"})}),(0,t.jsx)(n.td,{children:"Query all available accounts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth params"})}),(0,t.jsx)(n.td,{children:"Query the current authentication parameters."})]})]})]}),(0,t.jsx)(n.h4,{id:"669879c5100547f0b933d19f39ee6808",children:"Query an account"}),(0,t.jsxs)(n.p,{children:["Query an account by its address using the ",(0,t.jsx)(n.code,{children:"account"})," command."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ADDR"}),": The address of the account to query."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth account $ADDR $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",children:"Query all accounts"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"accounts"})," command to query all available accounts."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth accounts $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"16dbb6704fef42abb49cd92a1280ec83",children:"Query auth parameters"}),(0,t.jsxs)(n.p,{children:["Query the current auth parameters using the ",(0,t.jsx)(n.code,{children:"params"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth params $FLAGS_QR\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"4d87891f998146c7959256f7ba3bb6b5",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function x(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var t=s(6905);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),r=s(6905),a=s(2466),i=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const r=(0,i.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[i,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[o,h]=j({queryString:s,groupId:r}),[f,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(s);return[r,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),g=(()=>{const e=o??f;return x({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),b(e)}),[h,b,a]),tabValues:a}}var b=s(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function p(e){let{className:n,block:s,selectedValue:t,selectValue:i,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==t&&(o(n),i(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function k(e){const n=f(e);return(0,m.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,m.jsx)(p,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,m.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>i});var t=s(7294);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1824c5ff.4091cd4d.js b/assets/js/1824c5ff.4091cd4d.js deleted file mode 100644 index 90cbaf4..0000000 --- a/assets/js/1824c5ff.4091cd4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9745],{52:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},s=void 0,l={id:"Stack/TORII--Bridge",title:"TORII | Bridge",description:"Torii",source:"@site/tabs/docs/Stack/TORII--Bridge.mdx",sourceDirName:"Stack",slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},next:{title:"Community",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f"}},u={},i=[{value:"Torii",id:"396dda4a15df42768188046bcf26c324",level:2}];function c(e){const t={em:"em",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"396dda4a15df42768188046bcf26c324",children:"Torii"}),"\n",(0,n.jsx)(t.p,{children:"Torii (\u9ce5\u5c45) - is a KIRA Network bridge application. It enables users to perform cross-chain transfers between the KIRA blockchain and Ethereum, as well as other compatible networks, using Threshold Signature Schemes."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Documentation coming soon\u2026"})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=l[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function I(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/18a5fb55.2f65ff02.js b/assets/js/18a5fb55.2f65ff02.js deleted file mode 100644 index cf00b3d..0000000 --- a/assets/js/18a5fb55.2f65ff02.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7199],{7784:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=r(5893),n=r(1151);r(4866),r(5162);const s={title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling",title:"Network Parameter Handling",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},sidebar:"defaultSidebar",previous:{title:"Params",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},next:{title:"INTERX | Middleware",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"}},u={},i=[{value:"Concept",id:"f1e5640fc58341d29bd64a960ce143c5",level:3}];function c(e){const t={code:"code",h3:"h3",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h3,{id:"f1e5640fc58341d29bd64a960ce143c5",children:"Concept"}),"\n",(0,a.jsxs)(t.p,{children:["The Params module is extended from the Cosmos SDK's ",(0,a.jsx)(t.code,{children:"params"})," module. It provides a global parameter store for modules within the network. The module comprises two key types: Keeper and Subspace. Subspace allows for isolated namespaces in the parameter store, where keys are prefixed with a designated namespace, while the Keeper has permission to access all existing namespaces."]}),"\n",(0,a.jsxs)(t.p,{children:["Currently, KIRA only uses the Params module as it is a dependency of the Auth module. The Params module ensures that the Auth module parameters can be modified as needed through the ",(0,a.jsx)(t.code,{children:"x/gov"})," router via a proposal. However, as these parameters are not currently being utilized, the Params module might be deprecated in the future."]}),"\n",(0,a.jsx)(t.p,{children:"For example, here is how the Auth module's Params structure is defined in the Protobuf message format:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-protobuf",children:"protoCopy code\nmessage Params {\n uint64 max_memo_characters = 1;\n uint64 tx_sig_limit = 2;\n uint64 tx_size_cost_per_byte = 3;\n uint64 sig_verify_cost_ed25519 = 4;\n uint64 sig_verify_cost_secp256k1 = 5;\n}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),s=r(2466),o=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,s=m(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[i,d]=f({queryString:r,groupId:n}),[h,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,s]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:n}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,s]),tabValues:s}}var b=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:o,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),n=l[r].value;n!==a&&(i(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,n.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>o});var a=r(7294);const n={},s=a.createContext(n);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a8bf60c.ba195bd8.js b/assets/js/1a8bf60c.ba195bd8.js new file mode 100644 index 0000000..457ded4 --- /dev/null +++ b/assets/js/1a8bf60c.ba195bd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4272],{3354:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(5893),i=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},r=void 0,s={id:"What-is-KIRA/Layer-2/Overview",title:"Overview",description:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.",source:"@site/tabs/learn/What-is-KIRA/Layer-2/Overview.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},sidebar:"defaultSidebar",previous:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f"},next:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671"}},l={},c=[{value:"Application Submission",id:"4b45b29d9f7147f69322eab08f6c271c",level:2},{value:"Permissioned Execution, Permissionless Verification",id:"63a067c5526f4b7eb220c71b554da361",level:2},{value:"Sessions",id:"08087f31d2204472be584c32733b9a2f",level:2}];function u(e){const t={a:"a",admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified."}),"\n",(0,a.jsx)(t.p,{children:"KIRA by default pessimistically assumes incorrectness of all L2 computations. It only allows for application state settlement if the developer-programmable consensus of nodes verifies the application execution. This is in contrast to optimistic rollup systems which by default assume the correctness of all computations unless fraud proofs are presented which unnecessarily prolong the settlement process even if all network participants agree that the application state transitions are correct."}),"\n",(0,a.jsx)(t.h2,{id:"4b45b29d9f7147f69322eab08f6c271c",children:"Application Submission"}),"\n",(0,a.jsx)(t.p,{children:"Before a dApp can be deployed on the KIRA network, it must go through an on-chain governance proposal process. This prevents spam applications and ineffective code from launching. The proposal is submitted by controllers; this proposal also signals the requirements for running the application. A minimum bond in KEX tokens is required to raise the proposal, ensuring developer commitment. A minimum bond must also be reached before the proposal duration ends for the application to be accepted. The minimum bond can be crowdsourced across collaborators. If it is not reached before the end of the proposal period, the dApp is rejected and bonds are returned. There is also a maximum bond that caps total deposits. Once approved through governance, dApp tokens representing ownership are minted and paired with the bonded KEX in a v2 Uniswap pool."}),"\n",(0,a.jsx)(t.p,{children:"This permissionless, crowdsourced process is similar to Polkadot parachain auctions. However, the bonded KEX crowdsourced through the proposal remain liquid: Upon approval, dApp tokens representing ownership are minted and paired with the bonded KEX in a Uniswap v2-like pool and the LP tokens are distributed to all investors who contributed to crowdsource."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["More information about the crowdsourcing mechanism is described in ",(0,a.jsx)(t.a,{href:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",children:"Initial Liquidity Offering "}),"page."]})}),"\n",(0,a.jsx)(t.h2,{id:"63a067c5526f4b7eb220c71b554da361",children:"Permissioned Execution, Permissionless Verification"}),"\n",(0,a.jsx)(t.p,{children:"There are two primary roles for participation in a RollApp execution process - Executors and Verifiers, also referred to as Fishermen."}),"\n",(0,a.jsx)(t.p,{children:"KIRA\u2019s Validators have the option to take on either or both of these roles, they are not compelled and do not need to post a bond to take these roles. This is to ensure they can adapt their hardware to suit the application's needs and avoid running content that may pose legal issues in their operating region. However their participation is subject to approval by controllers (application owners), and they can be evicted from SEKAI validator set if acting maliciously. If a validator becomes an Executor, they will run the execution container and serve as Leader for Sessions, proposing state changes while also automatically taking on the role of Verifier when not actively leading a Session."}),"\n",(0,a.jsx)(t.p,{children:"Any users can permissionlessly become Fishermen, i.e. if they have vested interest in this application. They are not subject to approval by controllers, but must submit a bond in the dApp's liquidity pool tokens. The bond amount is set via governance, defaulting to 0.1% of the pool\u2019s total LP tokens circulating supply. In summary, validators can opt-in to run as Executors or Verifiers, pending approval. Other users can freely become Fishermen verifiers by providing a bond."}),"\n",(0,a.jsx)(t.p,{children:"The key difference between the Executor and Verifier lies in their responsibilities and how each role is held accountable. Only Executors can become Leaders and propose state changes for an application, while Fishermen solely verify its integrity. Executors are held accountable by risking their validation role and income if removed for misconduct. Fishermen are accountable through the verifier bond they post in tokens, which can be slashed for faulty verification."}),"\n",(0,a.jsx)(t.h2,{id:"08087f31d2204472be584c32733b9a2f",children:"Sessions"}),"\n",(0,a.jsx)(t.p,{children:'In KIRA\'s Layer 2, computation occurs in timed periods called Sessions, similar to the "challenge periods" in Ethereum optimistic rollups. However, unlike Ethereum rollups which optimistically assume correct execution, KIRA pessimistically assumes incorrect results, and only settles state if sufficient verifications occur in a given Session.'}),"\n",(0,a.jsx)(t.p,{children:"A session proceeds as follows:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"A single Executor acts as the Session leader and performs computation, proposing a new application state root (the hash of the new app database state) and account balances changes on SEKAI. The leader can only be an active validator and is chosen in equal round-robin fashion among existing application\u2019s Executors."}),"\n",(0,a.jsx)(t.li,{children:"Immediately after the current Executor finishes execution, the next leader optimistically start executing its own session. This mechanism allows for continuous execution without waiting for the prior session's full verification to complete. In rare scenarios where a session was skipped (i.e. Leader timed out) and the following one was not properly executed, both sessions can be discarded, although this is unlikely to occur."}),"\n",(0,a.jsx)(t.li,{children:"Other Executors act as Verifier and collect the leader results and cast their approval on proposed state changes. The end of the session and settlement requires over 2/3 Executor participation and unanimous agreement. In cases where the application has only one Executor, the end of the session relies on the approval of no less than 2/3 of all active Verifiers."}),"\n",(0,a.jsx)(t.li,{children:"Meanwhile multiple verifier nodes (Fishermen) verify integrity of the leader's execution. They can halt settlement if they find incorrect state transitions, but cannot finalize settlement, only Executors can."}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"The number of Verifiers (fishermen) is uncapped and can be much greater than the number of Executors. However, there is only one Leader at any point in time,"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var o=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),i=n(6905),o=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,o=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:i}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=s[n].value;i!==a&&(c(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const i={},o=a.createContext(i);function r(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1c403f1d.9c248033.js b/assets/js/1c403f1d.9c248033.js new file mode 100644 index 0000000..66e8a38 --- /dev/null +++ b/assets/js/1c403f1d.9c248033.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8644],{6638:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var a=n(5893),t=n(1151);n(4866),n(5162);const r={title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},i=void 0,l={id:"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token",title:"KEX- KIRA\u2019s Native Token",description:"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/39d6465e-61d4-4aff-868f-123b65c86326",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},next:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"}},c={},o=[{value:"Kex, Kira\u2019s Native Token",id:"e8a446aeed014fcb831ac0e964d64f8b",level:4},{value:"Kex Economics",id:"51ff3bf8c9e74ba78996a3a596703159",level:4}];function d(e){const s={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",h4:"h4",img:"img",li:"li",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",p:"p",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["For a better understanding regarding network rewards distribution, please refer to the ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," section."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{src:n(5441).Z+"",width:"562",height:"470"})}),"\n",(0,a.jsx)(s.h4,{id:"e8a446aeed014fcb831ac0e964d64f8b",children:"Kex, Kira\u2019s Native Token"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsx)(s.p,{children:"The KIRA network uses a shared clock to define the inflation rate of KEX, rather than relying on the traditional block time. This means that the amount of block rewards given out can fluctuate depending on network latency, block proposer timeouts, and other factors. This design choice was made to prevent consensus nodes from attacking the network by speeding up the block speed in order to increase KEX inflation, while simultaneously rejecting incoming transactions. While this approach may seem unfair at first glance, it ensures that over the long term, everyone participating in the network will receive their fair share of rewards on average."})}),"\n",(0,a.jsxs)(s.p,{children:["The inflation rate of the native asset KEX is determined by the governance of the network. Inflation is used to attract activity and participation on the network, as well as to provide security through incentivizing stakeholders to hold valuable assets. The ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," module also allows the governance to define the distribution of incentives in order to maintain the relevance and value of KEX. This is an important part of the system's design, as it ensures that the native asset remains an attractive and desirable token for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."]}),"\n",(0,a.jsxs)(s.p,{children:["Governance can configure KEX\u2019s inflation rate with the following ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"}),":"]}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_rate"})," - KEX inflation percentage","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsx)(s.li,{children:"Default:"}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"0"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"50"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_period"})," - Period of time in seconds over which current KEX supply is inflated by ",(0,a.jsx)(s.code,{children:"inflation_rate"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Default: ",(0,a.jsx)(s.code,{children:"31557600"})," (=1 year)"]}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"2629800"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.blockquote,{children:["\n",(0,a.jsxs)(s.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,a.jsx)(s.code,{children:"inflation_rate"})," of 15%, and an ",(0,a.jsx)(s.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"3600"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,a.jsxs)(s.mfrac,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mn,{children:"300500000"}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"0.15"})]}),(0,a.jsx)(s.mn,{children:"31557600"})]})}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"3600"}),(0,a.jsx)(s.mo,{children:"\u2248"}),(0,a.jsx)(s.mn,{children:"5142"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,a.jsx)(s.span,{className:"mfrac",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,a.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"mord",children:(0,a.jsx)(s.span,{className:"mord",children:"31557600"})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,a.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord",children:"300500000"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"0.15"})]})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.686em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"\u2248"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,a.jsx)(s.h4,{id:"51ff3bf8c9e74ba78996a3a596703159",children:"Kex Economics"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"Initial token supply"})}),(0,a.jsx)(s.th,{children:"300 000 000"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Current circulating supply"})}),(0,a.jsxs)(s.td,{children:["Real time circulating supply available here: ",(0,a.jsx)(s.a,{href:"http://circ.kira.network/",children:"circ.kira.network"})]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Maximum token supply"})}),(0,a.jsx)(s.td,{children:"None. Can be capped by governance."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Token inflation"})}),(0,a.jsx)(s.td,{children:"18% annual rate by default."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Token allocation & distribution schedule"})}),(0,a.jsxs)(s.td,{children:["All relevant information are available ",(0,a.jsx)(s.a,{href:"https://mirror.xyz/0xEc44c03Ff46cfDB7754bc1c0D39a7C5e0D8fd9B2/2W18Xl0leYT4CtbHiTMlJvK4Y_50kqBCoHU0ZQDvXY8",children:"here"}),"."]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Minimum stake for consensus node"})}),(0,a.jsx)(s.td,{children:"No minimum"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.strong,{children:"Active set minimum"})}),(0,a.jsx)(s.td,{children:"No minimum"})]})]})]})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var a=n(6905);const t={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>y});var a=n(7294),t=n(6905),r=n(2466),i=n(6550),l=n(469),c=n(1980),o=n(7392),d=n(12);function m(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return m(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:t}}=e;return{value:s,label:n,attributes:a,default:t}}))}(n);return function(e){const s=(0,o.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const t=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,c._X)(r),(0,a.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:t}=e,r=h(e),[i,c]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:r}))),[o,m]=x({queryString:n,groupId:t}),[p,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,d.Nk)(n);return[t,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:t}),f=(()=>{const e=o??p;return u({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{f&&c(f)}),[f]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),m(e),j(e)}),[m,j,r]),tabValues:r}}var j=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:a,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,r.o5)(),d=e=>{const s=e.currentTarget,n=c.indexOf(s),t=l[n].value;t!==a&&(o(s),i(t))},m=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;s=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;s=c[n]??c[c.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>c.push(e),onKeyDown:m,onClick:d,...r,className:(0,t.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:t}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function N(e){const s=p(e);return(0,g.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function y(e){const s=(0,j.Z)();return(0,g.jsx)(N,{...e,children:m(e.children)},String(s))}},5441:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/813946695-23ab7c66f75d95f301b39b68590190f2.png"},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>i});var a=n(7294);const t={},r=a.createContext(t);function i(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1c403f1d.a4fff9c4.js b/assets/js/1c403f1d.a4fff9c4.js deleted file mode 100644 index a6d9d8b..0000000 --- a/assets/js/1c403f1d.a4fff9c4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8644],{6638:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var a=n(5893),t=n(1151);n(4866),n(5162);const r={title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},i=void 0,l={id:"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token",title:"KEX- KIRA\u2019s Native Token",description:"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/39d6465e-61d4-4aff-868f-123b65c86326",permalink:"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"KEX- KIRA\u2019s Native Token",sidebar_position:1,slug:"/39d6465e-61d4-4aff-868f-123b65c86326"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},next:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"}},c={},o=[{value:"Kex, kira\u2019s native token",id:"e8a446aeed014fcb831ac0e964d64f8b",level:4},{value:"Kex economics",id:"51ff3bf8c9e74ba78996a3a596703159",level:4}];function d(e){const s={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",h4:"h4",img:"img",li:"li",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",p:"p",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["For a better understanding regarding network rewards distribution, please refer to the ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," section."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{src:n(5441).Z+"",width:"562",height:"470"})}),"\n",(0,a.jsx)(s.h4,{id:"e8a446aeed014fcb831ac0e964d64f8b",children:"Kex, kira\u2019s native token"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsx)(s.p,{children:"The KIRA network uses a shared clock to define the inflation rate of KEX, rather than relying on the traditional block time. This means that the amount of block rewards given out can fluctuate depending on network latency, block proposer timeouts, and other factors. This design choice was made to prevent consensus nodes from attacking the network by speeding up the block speed in order to increase KEX inflation, while simultaneously rejecting incoming transactions. While this approach may seem unfair at first glance, it ensures that over the long term, everyone participating in the network will receive their fair share of rewards on average."})}),"\n",(0,a.jsxs)(s.p,{children:["The inflation rate of the native asset KEX is determined by the governance of the network. Inflation is used to attract activity and participation on the network, as well as to provide security through incentivizing stakeholders to hold valuable assets. The ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"})," module also allows the governance to define the distribution of incentives in order to maintain the relevance and value of KEX. This is an important part of the system's design, as it ensures that the native asset remains an attractive and desirable token for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."]}),"\n",(0,a.jsxs)(s.p,{children:["Governance can configure KEX\u2019s inflation rate with the following ",(0,a.jsx)(s.strong,{children:"[Problem Internal Link]"}),":"]}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_rate"})," - KEX inflation percentage","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsx)(s.li,{children:"Default:"}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"0"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"50"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"inflation_period"})," - Period of time in seconds over which current KEX supply is inflated by ",(0,a.jsx)(s.code,{children:"inflation_rate"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Default: ",(0,a.jsx)(s.code,{children:"31557600"})," (=1 year)"]}),"\n",(0,a.jsxs)(s.li,{children:["Minimum: ",(0,a.jsx)(s.code,{children:"2629800"})]}),"\n",(0,a.jsxs)(s.li,{children:["Maximum: ",(0,a.jsx)(s.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.blockquote,{children:["\n",(0,a.jsxs)(s.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,a.jsx)(s.code,{children:"inflation_rate"})," of 15%, and an ",(0,a.jsx)(s.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"1"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"3600"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"1"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,a.jsxs)(s.mfrac,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mn,{children:"300500000"}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"0.15"})]}),(0,a.jsx)(s.mn,{children:"31557600"})]})}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsx)(s.mn,{children:"3600"}),(0,a.jsx)(s.mo,{children:"\u2248"}),(0,a.jsx)(s.mn,{children:"5142"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,a.jsx)(s.span,{className:"mfrac",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,a.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"mord",children:(0,a.jsx)(s.span,{className:"mord",children:"31557600"})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,a.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord",children:"300500000"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"0.15"})]})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.686em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord",children:"3600"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"\u2248"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsx)(s.mstyle,{mathsize:"0.9em",children:(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mn,{children:"2"})]})})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,a.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.615em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,a.jsx)(s.h4,{id:"51ff3bf8c9e74ba78996a3a596703159",children:"Kex economics"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:"Initial token supply"}),(0,a.jsx)(s.th,{children:"300 000 000"}),(0,a.jsx)(s.th,{})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Current circulating supply"}),(0,a.jsxs)(s.td,{children:["Real time circulating supply available here: ",(0,a.jsx)(s.a,{href:"http://circ.kira.network/",children:"circ.kira.network"})]}),(0,a.jsx)(s.td,{})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Maximum token supply"}),(0,a.jsx)(s.td,{children:"None. Can be capped by governance."}),(0,a.jsx)(s.td,{})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Token inflation"}),(0,a.jsx)(s.td,{children:"18% annual rate by default."}),(0,a.jsx)(s.td,{})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Token allocation & distribution schedule"}),(0,a.jsxs)(s.td,{children:["All relevant information are available ",(0,a.jsx)(s.a,{href:"https://docs.google.com/spreadsheets/d/e/2PACX-1vSe6mco2ZTTy5oKDWmLvmcW-STXjduZ8o-GUnqn3D6Nsrk75Z8Kex97VF0yaMKHVNWH0fMwqYy97fpx/pubhtml",children:"here"}),"."]}),(0,a.jsx)(s.td,{})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Minimum stake for consensus node"}),(0,a.jsx)(s.td,{children:"No minimum"}),(0,a.jsx)(s.td,{})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:"Active set minimum"}),(0,a.jsx)(s.td,{children:"No minimum"}),(0,a.jsx)(s.td,{})]})]})]})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var a=n(6905);const t={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>N});var a=n(7294),t=n(6905),r=n(2466),i=n(6550),l=n(469),c=n(1980),o=n(7392),d=n(12);function m(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return m(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:t}}=e;return{value:s,label:n,attributes:a,default:t}}))}(n);return function(e){const s=(0,o.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const t=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,c._X)(r),(0,a.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:t}=e,r=h(e),[i,c]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:r}))),[o,m]=x({queryString:n,groupId:t}),[p,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,d.Nk)(n);return[t,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:t}),f=(()=>{const e=o??p;return u({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{f&&c(f)}),[f]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),m(e),j(e)}),[m,j,r]),tabValues:r}}var j=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:a,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,r.o5)(),d=e=>{const s=e.currentTarget,n=c.indexOf(s),t=l[n].value;t!==a&&(o(s),i(t))},m=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;s=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;s=c[n]??c[c.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>c.push(e),onKeyDown:m,onClick:d,...r,className:(0,t.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:t}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function y(e){const s=p(e);return(0,g.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function N(e){const s=(0,j.Z)();return(0,g.jsx)(y,{...e,children:m(e.children)},String(s))}},5441:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/813946695-23ab7c66f75d95f301b39b68590190f2.png"},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>i});var a=n(7294);const t={},r=a.createContext(t);function i(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1e8ac2c0.2ee0f1a4.js b/assets/js/1e8ac2c0.2ee0f1a4.js deleted file mode 100644 index a47e2fc..0000000 --- a/assets/js/1e8ac2c0.2ee0f1a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2288],{3196:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},i=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/index",title:"Slashing",description:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/4672bb94-ed2b-4e45-9d33-af999825c193",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},sidebar:"defaultSidebar",previous:{title:"Delegators",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},next:{title:"Jailing & slashing",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/slashing",children:(0,a.jsx)(t.code,{children:"x/slashing"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[u,d]=p({queryString:n,groupId:r}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),m=(()=>{const e=u??h;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,s]),tabValues:s}}var g=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(u(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",m.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,v.jsx)(k,{...e,...t}),(0,v.jsx)(y,{...e,...t})]})}function w(e){const t=(0,g.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1ebd32ca.285aeb28.js b/assets/js/1ebd32ca.285aeb28.js deleted file mode 100644 index 578a451..0000000 --- a/assets/js/1ebd32ca.285aeb28.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3666],{5258:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/index",title:"Tokens Module",description:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e"},next:{title:"Token Rates Registrar",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24"}},i={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/tokens",children:(0,r.jsx)(t.code,{children:"x/tokens"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(u(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1ebd32ca.2c24d1b6.js b/assets/js/1ebd32ca.2c24d1b6.js new file mode 100644 index 0000000..35e5162 --- /dev/null +++ b/assets/js/1ebd32ca.2c24d1b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3666],{5258:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/index",title:"Tokens Module",description:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19",permalink:"/docs.kira.network/docs/b57b0d4e-7c38-4969-9654-d9193eb7fa19",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/docs/865cb42c-7ed4-4607-a446-c7ef3882056e"},next:{title:"Token Rates Registrar",permalink:"/docs.kira.network/docs/f19a45b3-88c4-469c-8642-772b941a1b24"}},i={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/tokens",children:(0,r.jsx)(t.code,{children:"x/tokens"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(u(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2220f485.891ca688.js b/assets/js/2220f485.3e22c4b1.js similarity index 98% rename from assets/js/2220f485.891ca688.js rename to assets/js/2220f485.3e22c4b1.js index f98a040..c7e5ce0 100644 --- a/assets/js/2220f485.891ca688.js +++ b/assets/js/2220f485.3e22c4b1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5520],{9703:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=n(5893),a=n(1151);n(4866),n(5162);const r={title:"Overview",sidebar_position:0,slug:"/"},i=void 0,s={id:"Overview",title:"Overview",description:"Before proceeding please ensure that you are meeting the minimum system & software requirements to operate a node. As long as those requirements are met it should be possible to launch a validator and other types of KIRA nodes in a home environment and use off-the-shelf single-board computers such as a Raspberry PI. There are no slashing penalties for validators going offline or becoming temporarily inaccessible. Nodes that go offline for a prolonged period of time will become inactivate and removed from the consensus automatically by the state machine.",source:"@site/tabs/Testnet/Overview.mdx",sourceDirName:".",slug:"/",permalink:"/docs.kira.network/testnet/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"chaosnet-1",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac"}},l={},d=[{value:"How to become a tester?",id:"ce166438b50a4b1fa0797eb69f3a8264",level:2},{value:"Setup",id:"059134a4048f44368753b199cd162ee8",level:2},{value:"Seed nodes",id:"d21e624c2a1e420c8648e030abde917a",level:2},{value:"Recovery",id:"946c79548c724eeea70f363e7a5ad96d",level:2},{value:"Joining validator set",id:"319f717ddac24b0e91d689dbc1d30073",level:2},{value:"Upgrades",id:"726d221d3cb8401587dd8b5f21895ad3",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:["Before proceeding please ensure that you are meeting the ",(0,o.jsx)(t.a,{href:"/3525f452-8421-48ce-aab6-10a2955a3e03",children:(0,o.jsx)(t.strong,{children:"minimum system & software requirements"})})," to operate a node. As long as those requirements are met it should be possible to launch a validator and other types of KIRA nodes in a home environment and use off-the-shelf single-board computers such as a Raspberry PI. There are no slashing penalties for validators going offline or becoming temporarily inaccessible. Nodes that go offline for a prolonged period of time will become ",(0,o.jsx)(t.code,{children:"inactivate"})," and removed from the consensus automatically by the state machine."]}),"\n",(0,o.jsxs)(t.p,{children:["The network is designed to halt in the case where \u2265 1/3 of consensus nodes suddenly become unresponsive, however in the case of individual nodes leaving and entering the consensus randomly there should be no interruption to the network operation. As long as the number of validators does not fall below ",(0,o.jsx)(t.code,{children:"min_validators"})," as defined in ",(0,o.jsx)(t.strong,{children:"[Problem Internal Link]"}),", the chain will continue producing new blocks."]}),"\n",(0,o.jsx)(t.h2,{id:"ce166438b50a4b1fa0797eb69f3a8264",children:"How to become a tester?"}),"\n",(0,o.jsxs)(t.p,{children:["To ensure the security of the network, we must have Sybil-resistance in place. For this reason, all our testers undergo screening to identify them as unique individuals. Our testers are not just testers; they are recognized as official KIRA ",(0,o.jsx)(t.a,{href:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",children:"Evangelists"}),". ",(0,o.jsx)(t.strong,{children:"This status qualifies them for benefits like grants, bounties, potential validator seats, governance roles, and Universal Basic Income (UBI)"}),". They also get access to the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"private testers chat"})," and more."]}),"\n",(0,o.jsx)(t.p,{children:"On the mainnet, a dedicated governance body can identify non-Sybil operators without the need for Know Your Customer (KYC) protocols or any other personal identification. It's worth noting that there's no limit to the number of validators on either the testnet or the mainnet."}),"\n",(0,o.jsxs)(t.p,{children:["To learn more about the role of an Evangelist or to preview your application, please visit our ",(0,o.jsx)(t.a,{href:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",children:"whitelist page"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"https://evangelist.kira.network/",children:"Whitelist Request Form"})})}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Regardless of your decision to participate in our tester's community, KIRA extends a warm welcome to all who wish to join our open and public network. To kick-start your journey, simply install our validator or sentry node software, available on our ",(0,o.jsx)(t.a,{href:"https://git.kira.network/",children:"GitHub"}),". As an alternative, you could also download our infrastructure management tool, KIRA Manager. We heartily invite everyone with a shared passion for decentralized systems and fundamental freedoms to delve into KIRA and discover its ability to run and secure the next generation web3 apps."]})}),"\n",(0,o.jsx)(t.h2,{id:"059134a4048f44368753b199cd162ee8",children:"Setup"}),"\n",(0,o.jsxs)(t.p,{children:["Using ",(0,o.jsx)(t.a,{href:"https://github.com/KiraCore/kira",children:"KIRA Manager (KM)"})," is the quickest way to run your node, as it is a straightforward bash-shell script that can easily create a new personal network or join an existing one on your behalf. However, it is important to note that KM is only intended for internal testing and should not be used on the mainnet. For operating each aspect of the infrastructure manually on the mainnet, please refer to our ",(0,o.jsx)(t.a,{href:"https://docs.kira.network/",children:"public documentation page"})," after you have become comfortable and familiar with the process. At present, KM can only be installed on Ubuntu. If you prefer to use a Mac, you will need to install ",(0,o.jsx)(t.a,{href:"https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html",children:"VMware"})," and virtualize the Ubuntu OS. On Windows, ",(0,o.jsx)(t.a,{href:"/fc224b7a-3406-46db-ad7a-5c179d06703c",children:"WSL2 is supported"}),"."]}),"\n",(0,o.jsx)(t.p,{children:'To join an existing network, you will require knowledge of the specific software version you need to run and the IP address of a trusted node operator within that network. You can find all of this information conveniently located in the "Active Testnets" section below, so there is no need to worry. Let us now examine some simple setup examples.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Terms & Conditions",src:n(8922).Z+"",width:"754",height:"482"})}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.em,{children:"Validators do not store the entire block history in order to conserve disk space. This task should only be performed by sentry and archival nodes. If you are syncing your node from an exposed validator instead of a full node, it is important to ensure that you are connecting to a legitimate network and that the party you are connecting to is trustworthy. It is also important to note that during fast sync mode, the blockchain history will not be replayed which might pose additional risks."})})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Simple Interactive KM Setup from GitHub Releases"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Example installation from github releases, please copy entire code section from below.\n# You will be prompted do enter release version. Each testnet has a different KM version.\n# Example release version is v0.11.14, see "Active Testnets" for the correct version to use.\n\ncd /tmp && apt-get install -y wget && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n echo -ne "\\033[1;32m\\nPlease enter version of KM to install: \\033[0m" && read V && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/KiraCore/kira/releases/download/${V}/init.sh -O ./i.sh && \\\n chmod +x -v ./i.sh && ./i.sh --infra-src="$V" --init-mode="interactive" || echo -e "\\033[1;31mERROR: KM setup failed, error code \'$?\'\\033[0m"\n'})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Simple Interactive KM Setup from IPFS"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Example installation from IPFS CID, please copy entire code section from below.\n# You will be prompted do enter CID. Each testnet has a different KM CID.\n# Example CID is bafybeiczsnbmbf4pvpbbxk3gnjlieno4vinrku4e5c32q7wqqjbw6t2ctu\n# Please see "Active Testnets" for the correct CID to use.\n\ncd /tmp && apt-get install -y wget && \\\n echo -ne "\\033[1;32m\\nPlease enter CID of the KM release you want to install: \\033[0m" && read CID && \\\n wget https://ipfs.kira.network/ipfs/$CID/init.sh -O ./i.sh && chmod +x -v ./i.sh && \\\n ./i.sh --infra-src="$CID" --init-mode="interactive" || echo -e "\\033[1;31mERROR: KM setup failed, error code \'$?\'\\033[0m"\n'})}),"\n",(0,o.jsx)(t.h2,{id:"d21e624c2a1e420c8648e030abde917a",children:"Seed nodes"}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.em,{children:"When connecting to a new network, it is important to pay attention to certain details to ensure that you are joining the correct chain. One of the key factors to consider is the number of peers in the network, as this can give you an idea in regards to the legitimacy of the chain (it is unlikely the attacker would be hosting hundreds of active nodes). In addition, it is crucial to verify both the Genesis Hash and network name to confirm that you are connecting to the intended chain. To find the hash of the genesis file, you can refer to the active testnet information page, which should provide all the necessary information to help you make an informed decision about joining the network."})})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have accepted the initial terms and conditions, you will be presented with the Launcher Menu, which enables you to configure your node, manage networking settings, download snapshots, and preview the hash of a genesis file. Within the Node Launcher Menu, you will need to specify the IP address of a trusted seed node or another validator. Your node will use this connection to synchronize with other nodes on the network and keep its copy of the blockchain up to date. You can request an IP address from any of the fellow validators in the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"testers\u2019 chat"}),", or use an address of a genesis validator that is listed in the corresponding testnet section below."]}),"\n",(0,o.jsxs)(t.p,{children:["Every node has a connection limit and the official genesis validator may be targeted by the DOS/DDOS, and thus become non-operational or non-responsive to the new peers. If this happens, node operators will need to coordinate via the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"testers\u2019 chat"})," and share between each other IP or DNS addresses of their personal validator, seed, or sentry nodes. Alternatively, testers can utilize any endpoint of an active INTERX node at ",(0,o.jsx)(t.code,{children:":11000/api/pub_p2p_list"})," where ",(0,o.jsx)(t.code,{children:""})," is an IP of any public testnet node to discover more IP addresses."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Launcher Menu",src:n(4673).Z+"",width:"733",height:"440"})}),"\n",(0,o.jsx)(t.h2,{id:"946c79548c724eeea70f363e7a5ad96d",children:"Recovery"}),"\n",(0,o.jsx)(t.admonition,{type:"caution",children:(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"You should never under any circumstances provide anyone with your private keys or mnemonic words. Keep them stored on a piece of paper offline and keep an online copy only on your validator node. It is also recommended to set up a recovery address that can be used to rotate your validator key in case you suspect that your node might have been compromised. You can learn more about that process from our"})," ",(0,o.jsx)(t.a,{href:"https://docs.kira.network/",children:(0,o.jsx)(t.em,{children:"public docs page"})}),(0,o.jsx)(t.em,{children:"."})]})}),"\n",(0,o.jsxs)(t.p,{children:["As a validator, your most important role is to stay online, be an active participant in the testers\u2019 community, and preserve the cryptographic secrets that your node will use to sign new blocks being proposed to the network. There can be many of those \u201ccryptographic secrets\u201d that you need to know about and archive, so we simplified the entire process into just a single set of bip39 mnemonic words that you need to write down. You can visit the ",(0,o.jsx)(t.a,{href:"/775c220a-d41a-481c-9de9-febc1d08a17d",children:"Key Management"})," page to learn more or utilize KM to generate it all for you automatically. If you choose to go with KM, please make sure to select option ",(0,o.jsx)(t.code,{children:"[M] View or Modify Mnemonic"})," before leaving the \u201cNode Launcher Menu\u201d and follow up with ",(0,o.jsx)(t.code,{children:"[V] Display master mnemonic from keystore"})," within the menu of the \u201cSecrets Manager\u201d."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Example of a Mater Mnemonic Preview",src:n(545).Z+"",width:"734",height:"450"})}),"\n",(0,o.jsxs)(t.p,{children:["If by mistake you forgot to write down your mnemonic words, you can always display them by typing the following command in your console window:\xa0",(0,o.jsx)(t.code,{children:'tryGetVar MASTER_MNEMONIC "$KIRA_SECRETS/mnemonics.env"'}),". If your node fails or needs to be recovered, you can regenerate all the secrets by providing the master mnemonic to the KM within the \u201cNode Launcher Menu\u201d. Otherwise, your node will generate a new set of secrets every time you set up a new node on a fresh instance."]}),"\n",(0,o.jsxs)(t.p,{children:["If you ever need to fully recover your validator node, including all its secrets and private keys, you can do so by importing the mnemonic that you previously wrote down. To access this option, simply select",(0,o.jsx)(t.code,{children:"[M] Modify master mnemonic and DELETE all secrets"})," from the main menu of the \u201cSecrets Manager\u201d. However, it is important to note that this process will destroy all auto-generated secrets and replace them with the ones derived from your master mnemonic. You should be very careful when using this option and ensure that you have a backup of your master mnemonic in a secure location. It is also crucial to never attempt to recover your validator or reuse your secrets on two machines simultaneously. Doing so will result in the double signing of a block and lead to your node being jailed."]}),"\n",(0,o.jsx)(t.h2,{id:"319f717ddac24b0e91d689dbc1d30073",children:"Joining validator set"}),"\n",(0,o.jsx)(t.p,{children:"To join the validator set you will need to become an official KIRA tester first. Your initial goal will be to determine your validator public address, which you will need to submit as part of the application process to become whitelisted."}),"\n",(0,o.jsxs)(t.p,{children:["Once you have completed the installation process, you can easily find your validator address by typing ",(0,o.jsx)(t.code,{children:"kira"})," into your terminal window to open KIRA Manager. From there, simply press the corresponding number on your keypad to designate your validator container (usually ",(0,o.jsx)(t.code,{children:"[0]"})," by default). You will then be presented with a container manager that provides statistics about your node, including your Validator Address."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"KM - Container Manager",src:n(9283).Z+"",width:"732",height:"444"})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have been whitelisted by the testnet support team, you will be presented with an explicit option to ",(0,o.jsx)(t.code,{children:"[J] Join Validator Set"})," in the main menu of KIRA Manager. Upon executing this option, your node will begin to produce and sign proposed blocks. In addition to this, the main menu of KIRA Manager provides many other options such as configuring the firewall or creating snapshots."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"KM - Main Menu",src:n(8387).Z+"",width:"740",height:"461"})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"NOTE: One of the most useful functions is the maintenance mode. Whenever you need to upgrade your node, move it to another instance, or perform any other operations that might result in your validator signing process stopping, you can select an option to"})," ",(0,o.jsxs)(t.em,{children:[(0,o.jsx)(t.code,{children:"[E] Enter Maintenance Mode"}),"__. This will prevent your validator's on-chain statistics from being reset and entering an"]})," ",(0,o.jsx)(t.em,{children:(0,o.jsx)(t.code,{children:"inactive"})})," ",(0,o.jsx)(t.em,{children:"state. Once you have completed your maintenance operation, you can simply disable the maintenance mode by selecting the"})," ",(0,o.jsx)(t.em,{children:(0,o.jsx)(t.code,{children:"[D] Disable Maintenance Mode"})})," ",(0,o.jsx)(t.em,{children:"option."})]}),"\n",(0,o.jsx)(t.h2,{id:"726d221d3cb8401587dd8b5f21895ad3",children:"Upgrades"}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"To ensure a smooth and coordinated upgrade process, all upgrades will be coordinated by the KIRA testnet support team. Any notifications regarding governance proposals or software changes will be communicated through the"})," ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:(0,o.jsx)(t.em,{children:"testers\u2019 chat"})}),(0,o.jsx)(t.em,{children:". Therefore, it is important to regularly monitor the pinned posts in the chat to stay up to date with the latest information."})]})}),"\n",(0,o.jsxs)(t.p,{children:["The main highlight of all KIRA testnets is collaboration on performing automated on-chain upgrades. Our upgrade module is a blockchain application that allows validators to coordinate soft & hard forks as well as agree on the integrity and content of each new KIRA release. KIRA Manager will automatically detect upcoming changes, delete all containers, perform snapshots & genesis file exports then rebuild the environment and launch a new release without your assistance. You can enable or disable automated upgrades from within your KM, by selecting option ",(0,o.jsx)(t.code,{children:"[U]"}),". You will also be notified via the KM of the exact time of the upcoming upgrade. All upgrades are scheduled according to timestamps predefined in the upgrade proposals and NOT block-height based thus making it way more predictable to coordinate and apply changes regardless if you plan to use KM or a dedicated continuous deployment (CD) pipeline for your infrastructure."]}),"\n",(0,o.jsxs)(t.p,{children:["It is mandatory for ALL validators to vote on upgrade proposals. If you skip the vote then the on-chain status after the upgrade will be changed to ",(0,o.jsx)(t.code,{children:"inactive"})," and you will not be producing blocks while your validator leaderboard rank will significantly decrease."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Governance proposals voting example"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"# With KM (voting in favor)\nvoteYes \n# With KM (voting against)\nvoteNo \n\n# Without KM (voting in favor)\nsekaid tx customgov proposal vote 1 --from=$ACCOUNT --chain-id=$NETWORK_NAME \\\n --keyring-backend=test --fees=100ukex --yes --log_format=json --broadcast-mode=async --output=json\n# Without KM (voting against)\nsekaid tx customgov proposal vote 0 --from=$ACCOUNT --chain-id=$NETWORK_NAME \\\n --keyring-backend=test --fees=100ukex --yes --log_format=json --broadcast-mode=async --output=json\n"})}),"\n",(0,o.jsxs)(t.p,{children:["If you do not wish to use KM and instead utilize your own dedicated continuous deployment (CD) tools, then you can acquire informations about upcoming upgrades from either the ",(0,o.jsx)(t.code,{children:"sekai"})," CLI or the following two INTERX endpoints:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:":11000/api/kira/upgrade/current_plan"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:":11000/api/kira/upgrade/next_plan"})}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["The \u201ccurrent\u201d plan contains informations & resources regarding the current release while the \u201cnext\u201d plan contains informations & resources regarding upcoming releases. You can also use resource references specified in the \u201ccurrent\u201d plan endpoint of a trusted node while joining the network for the very first time. If you choose not to use KM and a new genesis file is required (hard fork), you can create it by first exporting genesis at the height where the network stopped (your node daemon should be shut down) and then passing it through a dedicated ",(0,o.jsx)(t.code,{children:"new-genesis-from-exported"})," command."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Genesis file upgrade example"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"# export genesis after ensuring your node is stopped\nsekaid export --home=$SEKAID_HOME > ./genesis-export.json\n\n# upgrade release of sekai to the version defined in the on-chain upgrade plan\n\n# execute conversion of the exported genesis file and launch your node using the newly generated genesis\nsekaid new-genesis-from-exported ./genesis-export.json ./new-genesis.json --json-minimize=true\n"})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var o=n(6905);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>j});var o=n(7294),a=n(6905),r=n(2466),i=n(6550),s=n(469),l=n(1980),d=n(7392),c=n(12);function h(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:o,default:a}}=e;return{value:t,label:n,attributes:o,default:a}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const o=n.find((e=>e.default))??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:t,tabValues:r}))),[d,h]=m({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),y=(()=>{const e=d??f;return p({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{y&&l(y)}),[y]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),g(e)}),[h,g,r]),tabValues:r}}var g=n(2389);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function v(e){let{className:t,block:n,selectedValue:o,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==o&&(d(t),i(a))},h=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,ref:e=>l.push(e),onKeyDown:h,onClick:c,...r,className:(0,a.Z)("tabs__item",y.tabItem,r?.className,{"tabs__item--active":o===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=f(e);return(0,b.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,b.jsx)(v,{...e,...t}),(0,b.jsx)(w,{...e,...t})]})}function j(e){const t=(0,g.Z)();return(0,b.jsx)(x,{...e,children:h(e.children)},String(t))}},8387:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1122854462-19a4591ae1e68c5a0afe0d33969d3e3d.png"},9283:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1428085886-119116dfc573c922319ef8f797bc8eb1.png"},545:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1803436744-9fd40fcc1b3a9ab919e6b15a7585f41d.png"},4673:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/2032290687-fd4b339e9c40cec2401d37335fc08dc1.png"},8922:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/593913258-edcd4e7706fa842b385e721c1190ec44.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var o=n(7294);const a={},r=o.createContext(a);function i(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5520],{9703:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=n(5893),a=n(1151);n(4866),n(5162);const r={title:"Overview",sidebar_position:0,slug:"/"},i=void 0,s={id:"Overview",title:"Overview",description:"Before proceeding please ensure that you are meeting the minimum system & software requirements to operate a node. As long as those requirements are met it should be possible to launch a validator and other types of KIRA nodes in a home environment and use off-the-shelf single-board computers such as a Raspberry PI. There are no slashing penalties for validators going offline or becoming temporarily inaccessible. Nodes that go offline for a prolonged period of time will become inactivate and removed from the consensus automatically by the state machine.",source:"@site/tabs/Testnet/Overview.mdx",sourceDirName:".",slug:"/",permalink:"/docs.kira.network/testnet/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"chaosnet-1",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac"}},l={},d=[{value:"How to Become a Tester?",id:"ce166438b50a4b1fa0797eb69f3a8264",level:2},{value:"Setup",id:"059134a4048f44368753b199cd162ee8",level:2},{value:"Seed Nodes",id:"d21e624c2a1e420c8648e030abde917a",level:2},{value:"Recovery",id:"946c79548c724eeea70f363e7a5ad96d",level:2},{value:"Joining Validator Set",id:"319f717ddac24b0e91d689dbc1d30073",level:2},{value:"Upgrades",id:"726d221d3cb8401587dd8b5f21895ad3",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:["Before proceeding please ensure that you are meeting the ",(0,o.jsx)(t.a,{href:"/3525f452-8421-48ce-aab6-10a2955a3e03",children:(0,o.jsx)(t.strong,{children:"minimum system & software requirements"})})," to operate a node. As long as those requirements are met it should be possible to launch a validator and other types of KIRA nodes in a home environment and use off-the-shelf single-board computers such as a Raspberry PI. There are no slashing penalties for validators going offline or becoming temporarily inaccessible. Nodes that go offline for a prolonged period of time will become ",(0,o.jsx)(t.code,{children:"inactivate"})," and removed from the consensus automatically by the state machine."]}),"\n",(0,o.jsxs)(t.p,{children:["The network is designed to halt in the case where \u2265 1/3 of consensus nodes suddenly become unresponsive, however in the case of individual nodes leaving and entering the consensus randomly there should be no interruption to the network operation. As long as the number of validators does not fall below ",(0,o.jsx)(t.code,{children:"min_validators"})," as defined in ",(0,o.jsx)(t.strong,{children:"[Problem Internal Link]"}),", the chain will continue producing new blocks."]}),"\n",(0,o.jsx)(t.h2,{id:"ce166438b50a4b1fa0797eb69f3a8264",children:"How to Become a Tester?"}),"\n",(0,o.jsxs)(t.p,{children:["To ensure the security of the network, we must have Sybil-resistance in place. For this reason, all our testers undergo screening to identify them as unique individuals. Our testers are not just testers; they are recognized as official KIRA ",(0,o.jsx)(t.a,{href:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",children:"Evangelists"}),". ",(0,o.jsx)(t.strong,{children:"This status qualifies them for benefits like grants, bounties, potential validator seats, governance roles, and Universal Basic Income (UBI)"}),". They also get access to the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"private testers chat"})," and more."]}),"\n",(0,o.jsx)(t.p,{children:"On the mainnet, a dedicated governance body can identify non-Sybil operators without the need for Know Your Customer (KYC) protocols or any other personal identification. It's worth noting that there's no limit to the number of validators on either the testnet or the mainnet."}),"\n",(0,o.jsxs)(t.p,{children:["To learn more about the role of an Evangelist or to preview your application, please visit our ",(0,o.jsx)(t.a,{href:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",children:"whitelist page"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"https://evangelist.kira.network/",children:"Whitelist Request Form"})})}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Regardless of your decision to participate in our tester's community, KIRA extends a warm welcome to all who wish to join our open and public network. To kick-start your journey, simply install our validator or sentry node software, available on our ",(0,o.jsx)(t.a,{href:"https://git.kira.network/",children:"GitHub"}),". As an alternative, you could also download our infrastructure management tool, KIRA Manager. We heartily invite everyone with a shared passion for decentralized systems and fundamental freedoms to delve into KIRA and discover its ability to run and secure the next generation web3 apps."]})}),"\n",(0,o.jsx)(t.h2,{id:"059134a4048f44368753b199cd162ee8",children:"Setup"}),"\n",(0,o.jsxs)(t.p,{children:["Using ",(0,o.jsx)(t.a,{href:"https://github.com/KiraCore/kira",children:"KIRA Manager (KM)"})," is the quickest way to run your node, as it is a straightforward bash-shell script that can easily create a new personal network or join an existing one on your behalf. However, it is important to note that KM is only intended for internal testing and should not be used on the mainnet. For operating each aspect of the infrastructure manually on the mainnet, please refer to our ",(0,o.jsx)(t.a,{href:"https://docs.kira.network/",children:"public documentation page"})," after you have become comfortable and familiar with the process. At present, KM can only be installed on Ubuntu. If you prefer to use a Mac, you will need to install ",(0,o.jsx)(t.a,{href:"https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html",children:"VMware"})," and virtualize the Ubuntu OS. On Windows, ",(0,o.jsx)(t.a,{href:"/fc224b7a-3406-46db-ad7a-5c179d06703c",children:"WSL2 is supported"}),"."]}),"\n",(0,o.jsx)(t.p,{children:'To join an existing network, you will require knowledge of the specific software version you need to run and the IP address of a trusted node operator within that network. You can find all of this information conveniently located in the "Active Testnets" section below, so there is no need to worry. Let us now examine some simple setup examples.'}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Terms & Conditions",src:n(8922).Z+"",width:"754",height:"482"})}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.em,{children:"Validators do not store the entire block history in order to conserve disk space. This task should only be performed by sentry and archival nodes. If you are syncing your node from an exposed validator instead of a full node, it is important to ensure that you are connecting to a legitimate network and that the party you are connecting to is trustworthy. It is also important to note that during fast sync mode, the blockchain history will not be replayed which might pose additional risks."})})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Simple Interactive KM Setup from GitHub Releases"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Example installation from github releases, please copy entire code section from below.\n# You will be prompted do enter release version. Each testnet has a different KM version.\n# Example release version is v0.11.14, see "Active Testnets" for the correct version to use.\n\ncd /tmp && apt-get install -y wget && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n echo -ne "\\033[1;32m\\nPlease enter version of KM to install: \\033[0m" && read V && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/KiraCore/kira/releases/download/${V}/init.sh -O ./i.sh && \\\n chmod +x -v ./i.sh && ./i.sh --infra-src="$V" --init-mode="interactive" || echo -e "\\033[1;31mERROR: KM setup failed, error code \'$?\'\\033[0m"\n'})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Simple Interactive KM Setup from IPFS"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Example installation from IPFS CID, please copy entire code section from below.\n# You will be prompted do enter CID. Each testnet has a different KM CID.\n# Example CID is bafybeiczsnbmbf4pvpbbxk3gnjlieno4vinrku4e5c32q7wqqjbw6t2ctu\n# Please see "Active Testnets" for the correct CID to use.\n\ncd /tmp && apt-get install -y wget && \\\n echo -ne "\\033[1;32m\\nPlease enter CID of the KM release you want to install: \\033[0m" && read CID && \\\n wget https://ipfs.kira.network/ipfs/$CID/init.sh -O ./i.sh && chmod +x -v ./i.sh && \\\n ./i.sh --infra-src="$CID" --init-mode="interactive" || echo -e "\\033[1;31mERROR: KM setup failed, error code \'$?\'\\033[0m"\n'})}),"\n",(0,o.jsx)(t.h2,{id:"d21e624c2a1e420c8648e030abde917a",children:"Seed Nodes"}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsx)(t.p,{children:(0,o.jsx)(t.em,{children:"When connecting to a new network, it is important to pay attention to certain details to ensure that you are joining the correct chain. One of the key factors to consider is the number of peers in the network, as this can give you an idea in regards to the legitimacy of the chain (it is unlikely the attacker would be hosting hundreds of active nodes). In addition, it is crucial to verify both the Genesis Hash and network name to confirm that you are connecting to the intended chain. To find the hash of the genesis file, you can refer to the active testnet information page, which should provide all the necessary information to help you make an informed decision about joining the network."})})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have accepted the initial terms and conditions, you will be presented with the Launcher Menu, which enables you to configure your node, manage networking settings, download snapshots, and preview the hash of a genesis file. Within the Node Launcher Menu, you will need to specify the IP address of a trusted seed node or another validator. Your node will use this connection to synchronize with other nodes on the network and keep its copy of the blockchain up to date. You can request an IP address from any of the fellow validators in the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"testers\u2019 chat"}),", or use an address of a genesis validator that is listed in the corresponding testnet section below."]}),"\n",(0,o.jsxs)(t.p,{children:["Every node has a connection limit and the official genesis validator may be targeted by the DOS/DDOS, and thus become non-operational or non-responsive to the new peers. If this happens, node operators will need to coordinate via the ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:"testers\u2019 chat"})," and share between each other IP or DNS addresses of their personal validator, seed, or sentry nodes. Alternatively, testers can utilize any endpoint of an active INTERX node at ",(0,o.jsx)(t.code,{children:":11000/api/pub_p2p_list"})," where ",(0,o.jsx)(t.code,{children:""})," is an IP of any public testnet node to discover more IP addresses."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Launcher Menu",src:n(4673).Z+"",width:"733",height:"440"})}),"\n",(0,o.jsx)(t.h2,{id:"946c79548c724eeea70f363e7a5ad96d",children:"Recovery"}),"\n",(0,o.jsx)(t.admonition,{type:"caution",children:(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"You should never under any circumstances provide anyone with your private keys or mnemonic words. Keep them stored on a piece of paper offline and keep an online copy only on your validator node. It is also recommended to set up a recovery address that can be used to rotate your validator key in case you suspect that your node might have been compromised. You can learn more about that process from our"})," ",(0,o.jsx)(t.a,{href:"https://docs.kira.network/",children:(0,o.jsx)(t.em,{children:"public docs page"})}),(0,o.jsx)(t.em,{children:"."})]})}),"\n",(0,o.jsxs)(t.p,{children:["As a validator, your most important role is to stay online, be an active participant in the testers\u2019 community, and preserve the cryptographic secrets that your node will use to sign new blocks being proposed to the network. There can be many of those \u201ccryptographic secrets\u201d that you need to know about and archive, so we simplified the entire process into just a single set of bip39 mnemonic words that you need to write down. You can visit the ",(0,o.jsx)(t.a,{href:"/775c220a-d41a-481c-9de9-febc1d08a17d",children:"Key Management"})," page to learn more or utilize KM to generate it all for you automatically. If you choose to go with KM, please make sure to select option ",(0,o.jsx)(t.code,{children:"[M] View or Modify Mnemonic"})," before leaving the \u201cNode Launcher Menu\u201d and follow up with ",(0,o.jsx)(t.code,{children:"[V] Display master mnemonic from keystore"})," within the menu of the \u201cSecrets Manager\u201d."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Interactive KM Setup - Example of a Mater Mnemonic Preview",src:n(545).Z+"",width:"734",height:"450"})}),"\n",(0,o.jsxs)(t.p,{children:["If by mistake you forgot to write down your mnemonic words, you can always display them by typing the following command in your console window:\xa0",(0,o.jsx)(t.code,{children:'tryGetVar MASTER_MNEMONIC "$KIRA_SECRETS/mnemonics.env"'}),". If your node fails or needs to be recovered, you can regenerate all the secrets by providing the master mnemonic to the KM within the \u201cNode Launcher Menu\u201d. Otherwise, your node will generate a new set of secrets every time you set up a new node on a fresh instance."]}),"\n",(0,o.jsxs)(t.p,{children:["If you ever need to fully recover your validator node, including all its secrets and private keys, you can do so by importing the mnemonic that you previously wrote down. To access this option, simply select",(0,o.jsx)(t.code,{children:"[M] Modify master mnemonic and DELETE all secrets"})," from the main menu of the \u201cSecrets Manager\u201d. However, it is important to note that this process will destroy all auto-generated secrets and replace them with the ones derived from your master mnemonic. You should be very careful when using this option and ensure that you have a backup of your master mnemonic in a secure location. It is also crucial to never attempt to recover your validator or reuse your secrets on two machines simultaneously. Doing so will result in the double signing of a block and lead to your node being jailed."]}),"\n",(0,o.jsx)(t.h2,{id:"319f717ddac24b0e91d689dbc1d30073",children:"Joining Validator Set"}),"\n",(0,o.jsx)(t.p,{children:"To join the validator set you will need to become an official KIRA tester first. Your initial goal will be to determine your validator public address, which you will need to submit as part of the application process to become whitelisted."}),"\n",(0,o.jsxs)(t.p,{children:["Once you have completed the installation process, you can easily find your validator address by typing ",(0,o.jsx)(t.code,{children:"kira"})," into your terminal window to open KIRA Manager. From there, simply press the corresponding number on your keypad to designate your validator container (usually ",(0,o.jsx)(t.code,{children:"[0]"})," by default). You will then be presented with a container manager that provides statistics about your node, including your Validator Address."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"KM - Container Manager",src:n(9283).Z+"",width:"732",height:"444"})}),"\n",(0,o.jsxs)(t.p,{children:["Once you have been whitelisted by the testnet support team, you will be presented with an explicit option to ",(0,o.jsx)(t.code,{children:"[J] Join Validator Set"})," in the main menu of KIRA Manager. Upon executing this option, your node will begin to produce and sign proposed blocks. In addition to this, the main menu of KIRA Manager provides many other options such as configuring the firewall or creating snapshots."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"KM - Main Menu",src:n(8387).Z+"",width:"740",height:"461"})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"NOTE: One of the most useful functions is the maintenance mode. Whenever you need to upgrade your node, move it to another instance, or perform any other operations that might result in your validator signing process stopping, you can select an option to"})," ",(0,o.jsxs)(t.em,{children:[(0,o.jsx)(t.code,{children:"[E] Enter Maintenance Mode"}),"__. This will prevent your validator's on-chain statistics from being reset and entering an"]})," ",(0,o.jsx)(t.em,{children:(0,o.jsx)(t.code,{children:"inactive"})})," ",(0,o.jsx)(t.em,{children:"state. Once you have completed your maintenance operation, you can simply disable the maintenance mode by selecting the"})," ",(0,o.jsx)(t.em,{children:(0,o.jsx)(t.code,{children:"[D] Disable Maintenance Mode"})})," ",(0,o.jsx)(t.em,{children:"option."})]}),"\n",(0,o.jsx)(t.h2,{id:"726d221d3cb8401587dd8b5f21895ad3",children:"Upgrades"}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.em,{children:"To ensure a smooth and coordinated upgrade process, all upgrades will be coordinated by the KIRA testnet support team. Any notifications regarding governance proposals or software changes will be communicated through the"})," ",(0,o.jsx)(t.a,{href:"https://testers.kira.network/",children:(0,o.jsx)(t.em,{children:"testers\u2019 chat"})}),(0,o.jsx)(t.em,{children:". Therefore, it is important to regularly monitor the pinned posts in the chat to stay up to date with the latest information."})]})}),"\n",(0,o.jsxs)(t.p,{children:["The main highlight of all KIRA testnets is collaboration on performing automated on-chain upgrades. Our upgrade module is a blockchain application that allows validators to coordinate soft & hard forks as well as agree on the integrity and content of each new KIRA release. KIRA Manager will automatically detect upcoming changes, delete all containers, perform snapshots & genesis file exports then rebuild the environment and launch a new release without your assistance. You can enable or disable automated upgrades from within your KM, by selecting option ",(0,o.jsx)(t.code,{children:"[U]"}),". You will also be notified via the KM of the exact time of the upcoming upgrade. All upgrades are scheduled according to timestamps predefined in the upgrade proposals and NOT block-height based thus making it way more predictable to coordinate and apply changes regardless if you plan to use KM or a dedicated continuous deployment (CD) pipeline for your infrastructure."]}),"\n",(0,o.jsxs)(t.p,{children:["It is mandatory for ALL validators to vote on upgrade proposals. If you skip the vote then the on-chain status after the upgrade will be changed to ",(0,o.jsx)(t.code,{children:"inactive"})," and you will not be producing blocks while your validator leaderboard rank will significantly decrease."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Governance proposals voting example"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"# With KM (voting in favor)\nvoteYes \n# With KM (voting against)\nvoteNo \n\n# Without KM (voting in favor)\nsekaid tx customgov proposal vote 1 --from=$ACCOUNT --chain-id=$NETWORK_NAME \\\n --keyring-backend=test --fees=100ukex --yes --log_format=json --broadcast-mode=async --output=json\n# Without KM (voting against)\nsekaid tx customgov proposal vote 0 --from=$ACCOUNT --chain-id=$NETWORK_NAME \\\n --keyring-backend=test --fees=100ukex --yes --log_format=json --broadcast-mode=async --output=json\n"})}),"\n",(0,o.jsxs)(t.p,{children:["If you do not wish to use KM and instead utilize your own dedicated continuous deployment (CD) tools, then you can acquire informations about upcoming upgrades from either the ",(0,o.jsx)(t.code,{children:"sekai"})," CLI or the following two INTERX endpoints:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:":11000/api/kira/upgrade/current_plan"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:":11000/api/kira/upgrade/next_plan"})}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["The \u201ccurrent\u201d plan contains informations & resources regarding the current release while the \u201cnext\u201d plan contains informations & resources regarding upcoming releases. You can also use resource references specified in the \u201ccurrent\u201d plan endpoint of a trusted node while joining the network for the very first time. If you choose not to use KM and a new genesis file is required (hard fork), you can create it by first exporting genesis at the height where the network stopped (your node daemon should be shut down) and then passing it through a dedicated ",(0,o.jsx)(t.code,{children:"new-genesis-from-exported"})," command."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Genesis file upgrade example"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"# export genesis after ensuring your node is stopped\nsekaid export --home=$SEKAID_HOME > ./genesis-export.json\n\n# upgrade release of sekai to the version defined in the on-chain upgrade plan\n\n# execute conversion of the exported genesis file and launch your node using the newly generated genesis\nsekaid new-genesis-from-exported ./genesis-export.json ./new-genesis.json --json-minimize=true\n"})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var o=n(6905);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>j});var o=n(7294),a=n(6905),r=n(2466),i=n(6550),s=n(469),l=n(1980),d=n(7392),c=n(12);function h(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:o,default:a}}=e;return{value:t,label:n,attributes:o,default:a}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const o=n.find((e=>e.default))??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:t,tabValues:r}))),[d,h]=m({queryString:n,groupId:a}),[f,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),y=(()=>{const e=d??f;return p({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{y&&l(y)}),[y]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),g(e)}),[h,g,r]),tabValues:r}}var g=n(2389);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function v(e){let{className:t,block:n,selectedValue:o,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==o&&(d(t),i(a))},h=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,ref:e=>l.push(e),onKeyDown:h,onClick:c,...r,className:(0,a.Z)("tabs__item",y.tabItem,r?.className,{"tabs__item--active":o===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=f(e);return(0,b.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,b.jsx)(v,{...e,...t}),(0,b.jsx)(w,{...e,...t})]})}function j(e){const t=(0,g.Z)();return(0,b.jsx)(x,{...e,children:h(e.children)},String(t))}},8387:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1122854462-19a4591ae1e68c5a0afe0d33969d3e3d.png"},9283:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1428085886-119116dfc573c922319ef8f797bc8eb1.png"},545:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/1803436744-9fd40fcc1b3a9ab919e6b15a7585f41d.png"},4673:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/2032290687-fd4b339e9c40cec2401d37335fc08dc1.png"},8922:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/593913258-edcd4e7706fa842b385e721c1190ec44.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var o=n(7294);const a={},r=o.createContext(a);function i(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24dd8673.f6b25a6c.js b/assets/js/24dd8673.f6b25a6c.js new file mode 100644 index 0000000..8ec5c6c --- /dev/null +++ b/assets/js/24dd8673.f6b25a6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5412],{5250:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=a(5893),r=a(1151);a(4866),a(5162);const i={title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},o=void 0,s={id:"What-is-KIRA/Layer-2/Building-on-KIRA",title:"Building on KIRA",description:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.",source:"@site/tabs/learn/What-is-KIRA/Layer-2/Building-on-KIRA.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},sidebar:"defaultSidebar",previous:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671"},next:{title:"Overview",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"}},l={},c=[];function u(e){const t={li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps."}),"\n",(0,n.jsx)(t.p,{children:"To create an example KIRA application, a developer would:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Create a deterministic server application and expose a protocol-defined endpoint for receiving user input from the INTERX. The next step is then to package the server application into a docker container."}),"\n",(0,n.jsx)(t.li,{children:"Develop a secondary containerized \u201cverification\u201d application that can either re-compute the same results given the same set of ordered inputs from the INTERX or use other techniques, such as ZK proofs, for lightweight verification of the correct execution."}),"\n",(0,n.jsx)(t.li,{children:"Develop a frontend application that can communicate with the server application for users to be able to experience the app."}),"\n",(0,n.jsx)(t.li,{children:"Submit a transaction to the KIRA blockchain specifying the location of execution and verification docker containers, configuration file defining ports to be exposed/proxied via INTERX, and resources necessary to run the application."}),"\n",(0,n.jsx)(t.li,{children:"Await sufficient KEX amount to be bonded into ILO and validators with sufficient hardware resources to signal they are willing to run the app."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"If all the conditions above are met users will be able to query any of the INTERX nodes available on the KIRA network to locate a subnet of INTERX nodes that provide access to the app and expose its interfaces thus making interaction possible in a classical Web2 client-server manner."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var i=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),i=a(2466),o=a(6550),s=a(469),l=a(1980),c=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function h(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,i=p(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:a,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:r}),v=(()=>{const e=c??b;return h({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,i]),tabValues:i}}var m=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function w(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,a=l.indexOf(t),r=s[a].value;r!==n&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,r.Z)("tabs__item",v.tabItem,i?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(7294);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/257c4ba5.387b2665.js b/assets/js/257c4ba5.387b2665.js deleted file mode 100644 index bcada8d..0000000 --- a/assets/js/257c4ba5.387b2665.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8977],{9467:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var a=t(5893),s=t(1151),o=t(4866),r=t(5162);const i={title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},l=void 0,c={id:"Tools/Cosign",title:"Cosign",description:"Cosign",source:"@site/tabs/docs/Tools/Cosign.mdx",sourceDirName:"Tools",slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",permalink:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},sidebar:"defaultSidebar",previous:{title:"Bash-utils",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},u={},d=[{value:"Cosign",id:"faa8ba9b83214b5da78e490484eac301",level:3},{value:"Linux",id:"f93ac041ccba411091571fe5e8875c20",level:2},{value:"Macos",id:"117db8dd77564de1896b82e210f453fb",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h3,{id:"faa8ba9b83214b5da78e490484eac301",children:"Cosign"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),"\n",(0,a.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(r.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(n.h2,{id:"f93ac041ccba411091571fe5e8875c20",children:"Linux"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]}),(0,a.jsxs)(r.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(n.h2,{id:"117db8dd77564de1896b82e210f453fb",children:"Macos"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>r});t(7294);var a=t(6905);const s={tabItem:"tabItem_Ymn6"};var o=t(5893);function r(e){let{children:n,hidden:t,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,r),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),s=t(6905),o=t(2466),r=t(6550),i=t(469),l=t(1980),c=t(7392),u=t(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:s}}=e;return{value:n,label:t,attributes:a,default:s}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const s=(0,r.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,d]=b({queryString:t,groupId:s}),[g,p]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,u.Nk)(t);return[s,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),I=(()=>{const e=c??g;return f({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{I&&l(I)}),[I]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var p=t(2389);const I={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=t(5893);function E(e){let{className:n,block:t,selectedValue:a,selectValue:r,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=l.indexOf(n),s=i[t].value;s!==a&&(c(n),r(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.Z)("tabs__item",I.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function A(e){const n=g(e);return(0,m.jsxs)("div",{className:(0,s.Z)("tabs-container",I.tabList),children:[(0,m.jsx)(E,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,m.jsx)(A,{...e,children:d(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>r});var a=t(7294);const s={},o=a.createContext(s);function r(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/27883f5b.73a2f66a.js b/assets/js/27883f5b.73a2f66a.js deleted file mode 100644 index cf162f5..0000000 --- a/assets/js/27883f5b.73a2f66a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[786],{3523:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/index",title:"Spending Pool",description:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Spending-Pool/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},sidebar:"defaultSidebar",previous:{title:"Custody",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00"},next:{title:"Spending Pools",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/spending",children:(0,a.jsx)(t.code,{children:"x/spending"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28861665.96f0c699.js b/assets/js/28861665.96f0c699.js new file mode 100644 index 0000000..e95fe95 --- /dev/null +++ b/assets/js/28861665.96f0c699.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4845],{2873:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},s=void 0,i={id:"What-is-KIRA/-Frontend---MIRO",title:"Frontend - MIRO",description:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.",source:"@site/tabs/learn/What-is-KIRA/-Frontend---MIRO.mdx",sourceDirName:"What-is-KIRA",slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},sidebar:"defaultSidebar",previous:{title:"Middleware - INTERX",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},next:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f"}},l={},u=[];function c(e){const t={a:"a",admonition:"admonition",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets."}),"\n",(0,a.jsx)(t.p,{children:"The defining feature of MIRO is its self-contained design. Once the MIRO page is loaded into a user's browser, it operates entirely locally on the user's computer. This means all actions taken within MIRO, from transactions to account management, happen within the user's device without the need reliance on external hosting servers. The only requirement is a connection to at least one local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:"Notably, MIRO does not rely on light clients and leverages the security of INTERX for blockchain communication. This is possible thanks to INTERX\u2019s swarm request feature, which is designed to work optimally when MIRO interfaces with multiple INTERX nodes, ideally operated by different entities. While it's possible to connect MIRO to a single node, the real strength of swarm requests lies in their ability to cross check signed responses from multiple nodes to identify any inconsistencies and allow the creation of fraud proofs against false data. Such a strategy achieves a level of security comparable to that of light clients, with the safeguard that even one honest node among several can uphold the integrity of the system."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive explanation of how INTERX's swarm requests leverage signed responses to bolster security, refer to the ",(0,a.jsx)(t.a,{href:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",children:"Middleware - INTERX"})," page."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??p;return h({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28a3620e.364d1565.js b/assets/js/28a3620e.364d1565.js deleted file mode 100644 index 623887b..0000000 --- a/assets/js/28a3620e.364d1565.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2296],{2623:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},l=void 0,i={id:"Stack/INTERX--Middleware/System-Requirements",title:"System Requirements",description:"To run the interxd application the following system requirements must be met:",source:"@site/tabs/docs/Stack/INTERX--Middleware/System-Requirements.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},sidebar:"defaultSidebar",previous:{title:"INTERX | Middleware",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"},next:{title:"Endpoints",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896"}},o={},c=[{value:"Hardware",id:"409839eed65943ba928a73c6843e3082",level:2},{value:"Networking",id:"37b99c5f80ab438dbeb94966ed21b251",level:2},{value:"Software",id:"d7ff0322b24a4d31851b072779d27c2f",level:2}];function u(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run the ",(0,r.jsx)(t.code,{children:"interxd"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"409839eed65943ba928a73c6843e3082",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"1 vCPU"})," core (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"4 GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to cache (",(0,r.jsx)(t.code,{children:"256 GB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32 GB+"})," of the ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"37b99c5f80ab438dbeb94966ed21b251",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS (DDNS)"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n",(0,r.jsxs)(t.li,{children:["Exposed port ",(0,r.jsx)(t.code,{children:"11000"})]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"d7ff0322b24a4d31851b072779d27c2f",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n",(0,r.jsx)(t.li,{children:"Pre-installed latest release of docker"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),i=n(469),o=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=b(e),[l,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,d]=f({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=o.indexOf(t),a=i[n].value;a!==r&&(c(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(w,{...e,...t})]})}function k(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a16d87b.8c95af41.js b/assets/js/2a16d87b.8c95af41.js new file mode 100644 index 0000000..47459fe --- /dev/null +++ b/assets/js/2a16d87b.8c95af41.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1227],{4452:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var a=n(5893),i=n(1151);n(4866),n(5162);const r={title:"Overview",sidebar_position:0,slug:"/"},o=void 0,s={id:"What-is-KIRA/Overview",title:"Overview",description:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.",source:"@site/tabs/learn/What-is-KIRA/Overview.mdx",sourceDirName:"What-is-KIRA",slug:"/",permalink:"/docs.kira.network/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"Overview",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e"}},l={},c=[{value:"Key Components of KIRA Network",id:"688908768d9540f7aeadc964ce849d56",level:3},{value:"Economic Model and Liquidity",id:"f158579a4606412e9fccf9f64d4a14d7",level:3},{value:"Why Kira?",id:"a7c50e68381848c1a94eb42f4f597725",level:3}];function u(e){const t={h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.\nWhile adhering to the principles of modular blockchain design, KIRA provides the full stack necessary to serve a new generation of trustless applications by fulfilling their needs for infrastructure, resources, DA, sequencing, and shared security. KIRA applications run virtualized inside dedicated Docker containers, operated by its unbounded set of validators who individually manage applications while collectively securing and managing the entire KIRA network, which helps to orchestrate and compose these apps. They additionally inherit the benefits of the Virtual Finality Gadget (VFG).\nThis architecture enables application development in any programming language and allows for any customized finality rules, including optimistic and pessimistic verification, ZK proofs, or any bespoke verification logic. KIRA empowers its applications to rival Web2 in user access scale, ease of building, deployment time, and operational costs, with independence from traditional blockchain infrastructures and Virtual Machines (VMs)."}),"\n",(0,a.jsx)(t.h3,{id:"688908768d9540f7aeadc964ce849d56",children:"Key Components of KIRA Network"}),"\n",(0,a.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"f158579a4606412e9fccf9f64d4a14d7",children:"Economic Model and Liquidity"}),"\n",(0,a.jsx)(t.p,{children:"KIRA introduces a novel economic model known as the Initial Liquidity Offering (ILO)[link], designed to ensure that applications launched on the network meet user demand and their ownership tokens have access to sufficient liquidity post-launch. By aligning the incentives of users, developers, Executors, and Verifiers (Fishermen), the ILO model fosters the development and enjoyment of high-quality dApps while enabling all stakeholders to share in these applications' success."}),"\n",(0,a.jsx)(t.h3,{id:"a7c50e68381848c1a94eb42f4f597725",children:"Why Kira?"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Virtual Finality Gadget (VFG) - VFG enables next-gen blockchain-less and resource-heavy apps to exist without the the coordination overhead associated with creation of new networks for every single new use case such as AI, streaming, or gaming."}),"\n",(0,a.jsx)(t.li,{children:"Infrastructure - KIRA provides the infrastructure necessary to run applications alongside essential resources such as CPU or GPU. Paired with decentralized middleware (INTERX) apps do not have to depend on third-party RPC providers, Executor networks, and DA as all is provided out of the box while developers focus only on what is important - client and server-side logic."}),"\n",(0,a.jsx)(t.li,{children:"Shared Security - All applications inherit base-layer security. By supporting native LSDs, which enable any token to participate in restaking, KIRA can match the security of user deposits from external networks while preserving liquidity."}),"\n",(0,a.jsx)(t.li,{children:"Hypermodularity - All components of the KIRA stack adhere to modular design principles while offering full-stack support. Sequencing, Data Availability, Application Hosting, Middleware, Proxy, Caching, Autoscaling, and Infrastructure Management come out of the box. Hardware providers can focus fully on supplying highly available resources while developers can focus on user experience without having to reason about infrastructure or spending months or years learning about and integrating multiple modular products with questionable LTS into a single coherent application."}),"\n"]}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var r=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),i=n(6905),r=n(2466),o=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,o.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,r=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=f({queryString:n,groupId:i}),[m,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:i}),b=(()=>{const e=c??m;return p({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,r]),tabValues:r}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=s[n].value;i!==a&&(c(t),o(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,i.Z)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",b.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function I(e){const t=(0,g.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var a=n(7294);const i={},r=a.createContext(i);function o(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c292493.3a7e0e3a.js b/assets/js/2c292493.3a7e0e3a.js deleted file mode 100644 index b3c9f44..0000000 --- a/assets/js/2c292493.3a7e0e3a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3172],{1041:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index",title:"Universal Basic Income",description:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},next:{title:"Tokens Module",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/ubi",children:(0,n.jsx)(t.code,{children:"x/ubi"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),s=a(2466),o=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[u,d]=f({queryString:a,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=u??p;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function k(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(u(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>o});var n=a(7294);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e2d1ac9.7ba35900.js b/assets/js/2e2d1ac9.7ba35900.js deleted file mode 100644 index a6d6f48..0000000 --- a/assets/js/2e2d1ac9.7ba35900.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[709],{7683:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var r=n(5893),a=n(1151),t=n(4866),i=n(5162);const l={title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},o=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar",title:"Token Aliases Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},sidebar:"defaultSidebar",previous:{title:"Token Rates Registrar",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24"},next:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5"}},d={},h=[{value:"Concept",id:"84215f46b44147a1ba6665006b16c6cb",level:2},{value:"Parameters",id:"f93deb668b36407dbebb40eb08c034ad",level:2},{value:"Cli syntax & examples",id:"0c07ea2abed84b64a7d3e8dffb42147e",level:2},{value:"Transactions",id:"7e749ea08fa54f69ae420982dd493a8c",level:2},{value:"Upsert token alias with sudo permission",id:"f79ed1469a804d07a5917982c1a7aef3",level:4},{value:"Queries",id:"283adf4202e046ff93eb8328b8f8676b",level:2},{value:"List all existing aliases",id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",level:4},{value:"Query a token alias using its symbol",id:"edaf0cb0e0e24dcc8f69459f4b986ef1",level:4},{value:"Query a token alias using its denom",id:"3122601581b042d1953a39257f5ba64b",level:4},{value:"Governance",id:"a7b028b5f5b143079a28c52580f96808",level:2},{value:"Proposal to upsert token alias",id:"c4185c208f2c4b7dacb8eafcaf71b79b",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"84215f46b44147a1ba6665006b16c6cb",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"The Token Aliases enables the creation of friendly on-chain metadata for various cryptocurrencies on the KIRA network. The network governance is responsible for associating metadata with tokens, ensuring the integrity of this information for use in frontend applications. This makes it easier to identify and track different cryptocurrencies on the network."}),"\n",(0,r.jsx)(s.h2,{id:"f93deb668b36407dbebb40eb08c034ad",children:"Parameters"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["Removal of a token from the token aliases registry will automatically disable it by setting its ",(0,r.jsx)(s.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," properties ",(0,r.jsx)(s.code,{children:"stake_token"})," and ",(0,r.jsx)(s.code,{children:"fee_token"})," properties to ",(0,r.jsx)(s.code,{children:"false"}),"."]})}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"symbol"})}),(0,r.jsxs)(s.td,{children:['The currency code or otherwise short abbreviation of a "single" token in its default denomination. For example: ',(0,r.jsx)(s.code,{children:"KEX"}),", ",(0,r.jsx)(s.code,{children:"ETH"}),", ",(0,r.jsx)(s.code,{children:"BTC"}),", ",(0,r.jsx)(s.code,{children:"DOT"}),", ",(0,r.jsx)(s.code,{children:"ATOM"})," ...."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"name"})}),(0,r.jsxs)(s.td,{children:["Full, explicit name of the currency, for example: ",(0,r.jsx)(s.code,{children:"Bitcoin"}),", ",(0,r.jsx)(s.code,{children:"Ethereum"}),"..."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"icon"})}),(0,r.jsxs)(s.td,{children:["URL to\xa0",(0,r.jsx)(s.strong,{children:".SVG"}),"\xa0image (256kB max) representing currency or network logo"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"decimals"})}),(0,r.jsx)(s.td,{children:"Number of currency decimals in the base of 10. For example value 3 would imply that the smallest unit of currency in it's default denomination would be 0.001"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"denoms"})}),(0,r.jsxs)(s.td,{children:["Array of possible denomination names of the token, such as ",(0,r.jsx)(s.code,{children:"satoshi"}),", ",(0,r.jsx)(s.code,{children:"cent"})," ..."]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"0c07ea2abed84b64a7d3e8dffb42147e",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(t.Z,{children:[(0,r.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"7e749ea08fa54f69ae420982dd493a8c",children:"Transactions"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or modify token aliases with sudo permission."})]})})}),(0,r.jsx)(s.h4,{id:"f79ed1469a804d07a5917982c1a7aef3",children:"Upsert token alias with sudo permission"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"upsert-alias"})," CLI command allows accounts with sudo permission to create or modify token aliases without a proposal."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--symbol=$SYM --name=$NAME --icon=$ICON --decimals=$DEC --denoms=$DENOM\n"})})]}),(0,r.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(s.h2,{id:"283adf4202e046ff93eb8328b8f8676b",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"all-aliases"})}),(0,r.jsx)(s.th,{children:"List all existing token aliases."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"alias"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its symbol."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"aliases-by-denom"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its denomination."})]})]})]}),(0,r.jsx)(s.h4,{id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",children:"List all existing aliases"}),(0,r.jsxs)(s.p,{children:["Use the ",(0,r.jsx)(s.code,{children:"all-aliases"})," command to retrieve all token aliases."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens all-aliases $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"edaf0cb0e0e24dcc8f69459f4b986ef1",children:"Query a token alias using its symbol"}),(0,r.jsxs)(s.p,{children:["To query a token alias using its symbol, use the ",(0,r.jsx)(s.code,{children:"alias"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens alias $SYM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"3122601581b042d1953a39257f5ba64b",children:"Query a token alias using its denom"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"aliases-by-denom"})," command allows querying a token alias using its denomination."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denomination of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens aliases-by-denom $DENOM $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"a7b028b5f5b143079a28c52580f96808",children:"Governance"}),(0,r.jsxs)(s.p,{children:["In order to create a proposal to add or modify aliases, an account must possess permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," . Similarly, for voting on any alias proposals, an account must have permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or update a token alias through a proposal process."})]})})}),(0,r.jsx)(s.h4,{id:"c4185c208f2c4b7dacb8eafcaf71b79b",children:"Proposal to upsert token alias"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})," CLI command is used to create or update a token alias through a proposal process."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token (e.g., ",(0,r.jsx)(s.code,{children:"BTC"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias (e.g., ",(0,r.jsx)(s.code,{children:"Bitcoin"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token (e.g., ",(0,r.jsx)(s.code,{children:"satoshi"}),")."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--symbol=$SYM --name=$NAME --icon=$ICON \\\n--decimals=$DEC --denoms=$DENOM\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>y});var r=n(7294),a=n(6905),t=n(2466),i=n(6550),l=n(469),o=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:a}}=e;return{value:s,label:n,attributes:r,default:a}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function b(e){let{queryString:s=!1,groupId:n}=e;const a=(0,i.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(a.location.search);s.set(t,e),a.replace({...a.location,search:s.toString()})}),[t,a])]}function f(e){const{defaultValue:s,queryString:n=!1,groupId:a}=e,t=u(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[c,h]=b({queryString:n,groupId:a}),[f,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,t]=(0,d.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:a}),m=(()=>{const e=c??f;return x({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),j(e)}),[h,j,t]),tabValues:t}}var j=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=n(5893);function k(e){let{className:s,block:n,selectedValue:r,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const s=e.currentTarget,n=o.indexOf(s),a=l[n].value;a!==r&&(c(s),i(a))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>o.push(e),onKeyDown:h,onClick:d,...t,className:(0,a.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function g(e){let{lazy:s,children:n,selectedValue:a}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=f(e);return(0,p.jsxs)("div",{className:(0,a.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(k,{...e,...s}),(0,p.jsx)(g,{...e,...s})]})}function y(e){const s=(0,j.Z)();return(0,p.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>i});var r=n(7294);const a={},t=r.createContext(a);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e2d1ac9.e2475a2d.js b/assets/js/2e2d1ac9.e2475a2d.js new file mode 100644 index 0000000..73b829e --- /dev/null +++ b/assets/js/2e2d1ac9.e2475a2d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[709],{7683:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var r=n(5893),a=n(1151),i=n(4866),t=n(5162);const l={title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},o=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar",title:"Token Aliases Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49",permalink:"/docs.kira.network/docs/e163e1d7-f16e-4c0d-945c-db2efc13ea49",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},sidebar:"defaultSidebar",previous:{title:"Token Rates Registrar",permalink:"/docs.kira.network/docs/f19a45b3-88c4-469c-8642-772b941a1b24"},next:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/docs/34367cb0-ee71-418f-9dc5-bcc8823b71e5"}},d={},h=[{value:"Concept",id:"84215f46b44147a1ba6665006b16c6cb",level:2},{value:"Parameters",id:"f93deb668b36407dbebb40eb08c034ad",level:2},{value:"Cli Syntax & Examples",id:"0c07ea2abed84b64a7d3e8dffb42147e",level:2},{value:"Transactions",id:"7e749ea08fa54f69ae420982dd493a8c",level:2},{value:"Upsert Token Alias With Sudo Permission",id:"f79ed1469a804d07a5917982c1a7aef3",level:4},{value:"Queries",id:"283adf4202e046ff93eb8328b8f8676b",level:2},{value:"List All Existing Aliases",id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",level:4},{value:"Query a Token Alias Using Its Symbol",id:"edaf0cb0e0e24dcc8f69459f4b986ef1",level:4},{value:"Query a Token Alias Using Its Denom",id:"3122601581b042d1953a39257f5ba64b",level:4},{value:"Governance",id:"a7b028b5f5b143079a28c52580f96808",level:2},{value:"Proposal to Upsert Token Alias",id:"c4185c208f2c4b7dacb8eafcaf71b79b",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"84215f46b44147a1ba6665006b16c6cb",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"The Token Aliases enables the creation of friendly on-chain metadata for various cryptocurrencies on the KIRA network. The network governance is responsible for associating metadata with tokens, ensuring the integrity of this information for use in frontend applications. This makes it easier to identify and track different cryptocurrencies on the network."}),"\n",(0,r.jsx)(s.h2,{id:"f93deb668b36407dbebb40eb08c034ad",children:"Parameters"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["Removal of a token from the token aliases registry will automatically disable it by setting its ",(0,r.jsx)(s.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," properties ",(0,r.jsx)(s.code,{children:"stake_token"})," and ",(0,r.jsx)(s.code,{children:"fee_token"})," properties to ",(0,r.jsx)(s.code,{children:"false"}),"."]})}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"symbol"})}),(0,r.jsxs)(s.td,{children:['The currency code or otherwise short abbreviation of a "single" token in its default denomination. For example: ',(0,r.jsx)(s.code,{children:"KEX"}),", ",(0,r.jsx)(s.code,{children:"ETH"}),", ",(0,r.jsx)(s.code,{children:"BTC"}),", ",(0,r.jsx)(s.code,{children:"DOT"}),", ",(0,r.jsx)(s.code,{children:"ATOM"})," ...."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"name"})}),(0,r.jsxs)(s.td,{children:["Full, explicit name of the currency, for example: ",(0,r.jsx)(s.code,{children:"Bitcoin"}),", ",(0,r.jsx)(s.code,{children:"Ethereum"}),"..."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"icon"})}),(0,r.jsxs)(s.td,{children:["URL to\xa0",(0,r.jsx)(s.strong,{children:".SVG"}),"\xa0image (256kB max) representing currency or network logo"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"decimals"})}),(0,r.jsx)(s.td,{children:"Number of currency decimals in the base of 10. For example value 3 would imply that the smallest unit of currency in it's default denomination would be 0.001"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"denoms"})}),(0,r.jsxs)(s.td,{children:["Array of possible denomination names of the token, such as ",(0,r.jsx)(s.code,{children:"satoshi"}),", ",(0,r.jsx)(s.code,{children:"cent"})," ..."]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"0c07ea2abed84b64a7d3e8dffb42147e",children:"Cli Syntax & Examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"7e749ea08fa54f69ae420982dd493a8c",children:"Transactions"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or modify token aliases with sudo permission."})]})})}),(0,r.jsx)(s.h4,{id:"f79ed1469a804d07a5917982c1a7aef3",children:"Upsert Token Alias With Sudo Permission"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"upsert-alias"})," CLI command allows accounts with sudo permission to create or modify token aliases without a proposal."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--symbol=$SYM --name=$NAME --icon=$ICON --decimals=$DEC --denoms=$DENOM\n"})})]}),(0,r.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(s.h2,{id:"283adf4202e046ff93eb8328b8f8676b",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"all-aliases"})}),(0,r.jsx)(s.th,{children:"List all existing token aliases."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"alias"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its symbol."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"aliases-by-denom"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its denomination."})]})]})]}),(0,r.jsx)(s.h4,{id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",children:"List All Existing Aliases"}),(0,r.jsxs)(s.p,{children:["Use the ",(0,r.jsx)(s.code,{children:"all-aliases"})," command to retrieve all token aliases."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens all-aliases $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"edaf0cb0e0e24dcc8f69459f4b986ef1",children:"Query a Token Alias Using Its Symbol"}),(0,r.jsxs)(s.p,{children:["To query a token alias using its symbol, use the ",(0,r.jsx)(s.code,{children:"alias"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens alias $SYM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"3122601581b042d1953a39257f5ba64b",children:"Query a Token Alias Using Its Denom"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"aliases-by-denom"})," command allows querying a token alias using its denomination."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denomination of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens aliases-by-denom $DENOM $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"a7b028b5f5b143079a28c52580f96808",children:"Governance"}),(0,r.jsxs)(s.p,{children:["In order to create a proposal to add or modify aliases, an account must possess permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," . Similarly, for voting on any alias proposals, an account must have permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or update a token alias through a proposal process."})]})})}),(0,r.jsx)(s.h4,{id:"c4185c208f2c4b7dacb8eafcaf71b79b",children:"Proposal to Upsert Token Alias"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})," CLI command is used to create or update a token alias through a proposal process."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token (e.g., ",(0,r.jsx)(s.code,{children:"BTC"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias (e.g., ",(0,r.jsx)(s.code,{children:"Bitcoin"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token (e.g., ",(0,r.jsx)(s.code,{children:"satoshi"}),")."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--symbol=$SYM --name=$NAME --icon=$ICON \\\n--decimals=$DEC --denoms=$DENOM\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>t});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var i=n(5893);function t(e){let{children:s,hidden:n,className:t}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,t),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>y});var r=n(7294),a=n(6905),i=n(2466),t=n(6550),l=n(469),o=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:a}}=e;return{value:s,label:n,attributes:r,default:a}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function b(e){let{queryString:s=!1,groupId:n}=e;const a=(0,t.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(a.location.search);s.set(i,e),a.replace({...a.location,search:s.toString()})}),[i,a])]}function f(e){const{defaultValue:s,queryString:n=!1,groupId:a}=e,i=u(e),[t,o]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:i}))),[c,h]=b({queryString:n,groupId:a}),[f,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,i]=(0,d.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:a}),m=(()=>{const e=c??f;return x({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:t,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),j(e)}),[h,j,i]),tabValues:i}}var j=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=n(5893);function k(e){let{className:s,block:n,selectedValue:r,selectValue:t,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const s=e.currentTarget,n=o.indexOf(s),a=l[n].value;a!==r&&(c(s),t(a))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>o.push(e),onKeyDown:h,onClick:d,...i,className:(0,a.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function g(e){let{lazy:s,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=f(e);return(0,p.jsxs)("div",{className:(0,a.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(k,{...e,...s}),(0,p.jsx)(g,{...e,...s})]})}function y(e){const s=(0,j.Z)();return(0,p.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>t});var r=n(7294);const a={},i=r.createContext(a);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/308d30b5.1dec96ce.js b/assets/js/308d30b5.1dec96ce.js deleted file mode 100644 index 5888f20..0000000 --- a/assets/js/308d30b5.1dec96ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[814],{280:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=a(5893),i=a(1151);a(4866),a(5162);const o={title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},r=void 0,s={id:"What-is-KIRA/Layer-2/Virtual-Finality-Gadget",title:"Virtual Finality Gadget",description:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Virtual-Finality-Gadget.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671",permalink:"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},next:{title:"Building on KIRA",permalink:"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"}},c={},l=[{value:"How it works",id:"ff43eea4d8e2429780e1edad7145a61b",level:3}];function u(e){const t={h3:"h3",img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually."}),"\n",(0,n.jsx)(t.h3,{id:"ff43eea4d8e2429780e1edad7145a61b",children:"How it works"}),"\n",(0,n.jsx)(t.p,{children:"In KIRA, dApps (L2s) are simply packaged binaries within Docker containers. This ensures security by isolating dApps from the host OS to prevent malware risks and enabling precise management of resources like CPU, GPU, RAM, and disk space per each individual application."}),"\n",(0,n.jsx)(t.p,{children:"Each application is architecturally divided into two distinct components: the execution logic and the verification logic, each encapsulated within its own Docker container. The execution logic container, managed by Executors (who MUST be ACTIVE validators), is responsible for running the application's code such as state machine or zkVM, while the verification logic container, overseen by Fishermen (who are assigned to said role or have a sufficient stake), assesses the integrity of the changes that one of the dApp Executors (the Leader) is proposing to the KIRA base layer."}),"\n",(0,n.jsx)(t.p,{children:"From a high-level perspective, Docker containers are executed and monitored by Consensus nodes within KIRA, facilitated by RYOKAI for operational management and coordination. The containers interact with the network through local INTERX nodes (serving as decentralized APIs or DAPI/DA) and SEKAI nodes (connecting to the KIRA blockchain), ensuring seamless integration and communication within the ecosystem."}),"\n",(0,n.jsx)(t.p,{children:"The role of the execution container is to accept input sequenced by INTERX into one of the ports and execute commands from that input according to the code embedded within the container. Since there might be many executors (Multi-Party Computation) one of them is round-robin elected as leader who can then publish state root - publishing the hash of the new app database state and proposing changes to dApp account balances on the KIRA base layer. The application lifecycle has a form of forever changing states (sessions) from one KIRA base layer block to another proposed by a single leader. The proposed changes must then be approved by the verifiers through a process in which a threshold of approvals must be reached. If even a single Fisherman disagrees with the state transition the app is stopped and KIRA governance steps in to resolve the issues."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(846).Z+"",width:"1161",height:"592"})}),"\n",(0,n.jsx)(t.p,{children:"The VFG does not enforce any specific way of evaluating the shift from one application state to another. Instead, it empowers developers and all who participate in the verification of the application execution process to customize the method in which a binary verification outcome is produced \u2014 either 'yes' or 'no' \u2014 to affirm or challenge the transition's validity. This approach presents a strong contrast to current rollup systems, where the verification process relies on an execution binary or container that must remain identical and public among all Executors of a specific application. In the case of the verification container, although a single shared and public version must be provided by developers, possible bounties for catching issues provide an additional economic incentive for Fishermen to customize the verification container."}),"\n",(0,n.jsx)(t.p,{children:"We have to assume that in the future there will always be better and more efficient ways to trustlessly verify computations. Today that might be something as simple as re-execution or zkVM and using GPUs to generate ZK proofs. Tomorrow, it might be something completely different. The VFG protocol was created so that application developers can long-term support their applications without being locked into a single framework or protocol. Our intention is also to signal that Fishermen should not blindly trust developer teams, especially in an era of ever-present bugs and stegomalware. These can turn even seemingly deterministic code into unpredictable chaos, against which no one has yet proposed a reliable method to protect users."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(2457).Z+"",width:"1634",height:"822"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var o=a(5893);function r(e){let{children:t,hidden:a,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,r),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),o=a(2466),r=a(6550),s=a(469),c=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,o=h(e),[r,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:a,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:i}),g=(()=>{const e=l??m;return p({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:r,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:r,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),i=s[a].value;i!==n&&(l(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},846:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/319785771-75f434ada59642501ced598ca43d2996.png"},2457:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/422487827-6652d0807ee6ec2c6e40bc12547d0739.png"},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(7294);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/308d30b5.be1ab94b.js b/assets/js/308d30b5.be1ab94b.js new file mode 100644 index 0000000..542087a --- /dev/null +++ b/assets/js/308d30b5.be1ab94b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[814],{280:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=a(5893),i=a(1151);a(4866),a(5162);const o={title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},r=void 0,s={id:"What-is-KIRA/Layer-2/Virtual-Finality-Gadget",title:"Virtual Finality Gadget",description:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Virtual-Finality-Gadget.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},next:{title:"Building on KIRA",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"}},c={},l=[{value:"How It Works",id:"ff43eea4d8e2429780e1edad7145a61b",level:3}];function u(e){const t={h3:"h3",img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually."}),"\n",(0,n.jsx)(t.h3,{id:"ff43eea4d8e2429780e1edad7145a61b",children:"How It Works"}),"\n",(0,n.jsx)(t.p,{children:"In KIRA, dApps (L2s) are simply packaged binaries within Docker containers. This ensures security by isolating dApps from the host OS to prevent malware risks and enabling precise management of resources like CPU, GPU, RAM, and disk space per each individual application."}),"\n",(0,n.jsx)(t.p,{children:"Each application is architecturally divided into two distinct components: the execution logic and the verification logic, each encapsulated within its own Docker container. The execution logic container, managed by Executors (who MUST be ACTIVE validators), is responsible for running the application's code such as state machine or zkVM, while the verification logic container, overseen by Fishermen (who are assigned to said role or have a sufficient stake), assesses the integrity of the changes that one of the dApp Executors (the Leader) is proposing to the KIRA base layer."}),"\n",(0,n.jsx)(t.p,{children:"From a high-level perspective, Docker containers are executed and monitored by Consensus nodes within KIRA, facilitated by RYOKAI for operational management and coordination. The containers interact with the network through local INTERX nodes (serving as decentralized APIs or DAPI/DA) and SEKAI nodes (connecting to the KIRA blockchain), ensuring seamless integration and communication within the ecosystem."}),"\n",(0,n.jsx)(t.p,{children:"The role of the execution container is to accept input sequenced by INTERX into one of the ports and execute commands from that input according to the code embedded within the container. Since there might be many executors (Multi-Party Computation) one of them is round-robin elected as leader who can then publish state root - publishing the hash of the new app database state and proposing changes to dApp account balances on the KIRA base layer. The application lifecycle has a form of forever changing states (sessions) from one KIRA base layer block to another proposed by a single leader. The proposed changes must then be approved by the verifiers through a process in which a threshold of approvals must be reached. If even a single Fisherman disagrees with the state transition the app is stopped and KIRA governance steps in to resolve the issues."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(846).Z+"",width:"1161",height:"592"})}),"\n",(0,n.jsx)(t.p,{children:"The VFG does not enforce any specific way of evaluating the shift from one application state to another. Instead, it empowers developers and all who participate in the verification of the application execution process to customize the method in which a binary verification outcome is produced \u2014 either 'yes' or 'no' \u2014 to affirm or challenge the transition's validity. This approach presents a strong contrast to current rollup systems, where the verification process relies on an execution binary or container that must remain identical and public among all Executors of a specific application. In the case of the verification container, although a single shared and public version must be provided by developers, possible bounties for catching issues provide an additional economic incentive for Fishermen to customize the verification container."}),"\n",(0,n.jsx)(t.p,{children:"We have to assume that in the future there will always be better and more efficient ways to trustlessly verify computations. Today that might be something as simple as re-execution or zkVM and using GPUs to generate ZK proofs. Tomorrow, it might be something completely different. The VFG protocol was created so that application developers can long-term support their applications without being locked into a single framework or protocol. Our intention is also to signal that Fishermen should not blindly trust developer teams, especially in an era of ever-present bugs and stegomalware. These can turn even seemingly deterministic code into unpredictable chaos, against which no one has yet proposed a reliable method to protect users."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(2457).Z+"",width:"1634",height:"822"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var o=a(5893);function r(e){let{children:t,hidden:a,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,r),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),o=a(2466),r=a(6550),s=a(469),c=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,o=h(e),[r,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:a,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:i}),g=(()=>{const e=l??m;return p({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:r,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:r,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),i=s[a].value;i!==n&&(l(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},846:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/319785771-75f434ada59642501ced598ca43d2996.png"},2457:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/422487827-6652d0807ee6ec2c6e40bc12547d0739.png"},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(7294);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/31b14546.b33f3cf2.js b/assets/js/31b14546.b33f3cf2.js new file mode 100644 index 0000000..13504ae --- /dev/null +++ b/assets/js/31b14546.b33f3cf2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9211],{2500:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Evidence/index",title:"Evidence",description:"x/evidence",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f",permalink:"/docs.kira.network/docs/6a318dbd-2d44-4f1f-9729-5e608286289f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:14,frontMatter:{title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/docs/d820877a-9fe7-424f-8866-8e822bf9ba84"},next:{title:"Evidence module",permalink:"/docs.kira.network/docs/bd4cce67-2cee-4d9f-9b81-e5643d130438"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/evidence",children:(0,r.jsx)(t.code,{children:"x/evidence"})})}),"\n",(0,r.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),u=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=u[n].value;a!==r&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/31b14546.fa5f0844.js b/assets/js/31b14546.fa5f0844.js deleted file mode 100644 index 678720a..0000000 --- a/assets/js/31b14546.fa5f0844.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9211],{2500:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Evidence/index",title:"Evidence",description:"x/evidence",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:14,frontMatter:{title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84"},next:{title:"Evidence module",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/evidence",children:(0,r.jsx)(t.code,{children:"x/evidence"})})}),"\n",(0,r.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),u=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=u[n].value;a!==r&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32268a14.813a4fd9.js b/assets/js/32268a14.813a4fd9.js deleted file mode 100644 index b958fbf..0000000 --- a/assets/js/32268a14.813a4fd9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7135],{1834:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>o});var a=n(5893),i=n(1151),t=n(4866),r=n(5162);const l={title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module",title:"Token Basketing Module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},sidebar:"defaultSidebar",previous:{title:"Token Basketing",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"},next:{title:"Recovery",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce"}},h={},o=[{value:"Concept",id:"dee6d8b2107344fe995e07952c58450a",level:2},{value:"Tokens weight assignment in baskets",id:"e52c86f592f54948a7e9d56035887420",level:3},{value:"How users deposits translate to basket derivatives tokens",id:"c6b93328531d4437b4fd633cfc0bd1ec",level:4},{value:"Maximum weight-adjusted tokens shares",id:"742d96e2022c4aaeb0f8afc88d4eef4d",level:4},{value:"Operational controls and limits",id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",level:3},{value:"Basket composition and balance maintenance",id:"f303da5b316c4e78b187c8a27d7037fd",level:3},{value:"Aggregated tokens swapping mechanisms",id:"310bf045cb5b40b0a87eb0ea67e056e4",level:3},{value:"Surplus: a basket\u2019s insurance funds",id:"7a4d7fa663774bb284c6578bd17412d6",level:3},{value:"Kira's unique staking derivatives & rewards handling",id:"7fb7ac4e4df74fcd8d3d7a386b847006",level:3},{value:"Block rewards",id:"5976fae452a2415fab9163a3992765fd",level:4},{value:"Fee rewards",id:"26b6027e680241218a5ba007479be9ea",level:4},{value:"Parameters",id:"2ce953f4d8764a9a918cb72cf7ac1307",level:2},{value:"Token basket",id:"187f22edd8b24181bfef12a3df57f1a5",level:4},{value:"Cli syntax & examples",id:"097ff40bd32544e69bd7c9d4748f8df7",level:2},{value:"Transactions",id:"30bfcd03f11d4db7861628860a95e7b6",level:2},{value:"Deposit aggregated tokens into basket",id:"3a7f68279fba4c2d91b2428de6ba5276",level:4},{value:"Withdraw aggregated tokens from basket",id:"90d712248db44c1bbc09d5f2317af4f0",level:4},{value:"Swap basket tokens",id:"eb2c7bea02754d51a72b2e60257835b5",level:4},{value:"Disable basket deposits, withdrawals, and swaps (emergency)",id:"8645486cd3d84de4acf812a490aefcb7",level:4},{value:"Claim derivatives basket rewards",id:"d302bf9450344b4b8959aa731d8f6bce",level:4},{value:"Queries",id:"7d27c0249006442d9cb2d2d7f6829c95",level:2},{value:"Query basket by denomination",id:"73a9aefa563946c58360b0d0fe187f35",level:4},{value:"Query basket by id",id:"960d7be6739e4d8ba45956c94d2f1653",level:4},{value:"List token baskets",id:"e83b30b0043148e3be023e966ef67bba",level:4},{value:"Query historical mints",id:"6bd3ad80788a49bf89968bfdd4d993c1",level:4},{value:"Query historical burns",id:"e4c7b1471e6a425098e9757badb898bd",level:4},{value:"Query historical swaps",id:"5223c1d7ab66430a9cc477b185a62642",level:4},{value:"Governance",id:"775c6181c6754e6a8f53f1202e2ff4ca",level:2},{value:"Creating and updating a token basket proposal",id:"07ad892215ee4b78a824587f8ab87eb8",level:4},{value:"Editing an existing token basket proposal",id:"76b8b2489e2241c8bd45e9076798e1df",level:4},{value:"Withdrawing surplus from a basket proposal",id:"618b95deb0154e119dd71f4e98cf02e4",level:4}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h2,{id:"dee6d8b2107344fe995e07952c58450a",children:"Concept"}),"\n",(0,a.jsxs)(s.p,{children:["The Token Basketing Module allows users to combine multiple individual derivatives with the same denomination into a single, easily tradable and exchangeable token. For example, KIRA native liquid staking derivatives ",(0,a.jsx)(s.code,{children:"V/"})," that are issued when staking tokens in KIRA network and which are specific to the consensus node ",(0,a.jsx)(s.code,{children:"V"}),", can be aggregated using a basket. An other use case would be to aggregate different foreign tokens such as various USD stablecoins like ",(0,a.jsx)(s.code,{children:"usdt"})," or ",(0,a.jsx)(s.code,{children:"usdc"})," (similarly to Curve\u2019s 3pool), or IBC wrapped tokens, into a single, more easily tradable and stakable asset."]}),"\n",(0,a.jsx)(s.p,{children:"However, unlike common liquidity pools like Curve or Uniswap, Token Baskets do not depend on a bonding curve equation to determine the price and are simply based on fixed weights assigned to each individual token. They are only intended to consolidate the liquidity of tokens that are collateralized/pegged by the same underlying asset. In addition, one of the unique properties of Token Baskets compared to liquidity pools is that the list of tokens in the basket can be expanded or contracted over time, while the name of the basket token representing the aggregated assets remains the same."}),"\n",(0,a.jsx)(s.p,{children:"Token Baskets facilitate token swaps, which are subject to daily limits and are executed at fixed ratios with a programmed slippage. The surplus between the actual exchange ratio and the slippage serves as an insurance fund controlled by governance to protect token holders in the event of a depeg. Overall, the Token Basketing Module is not intended to operate as an exchange, but rather as a tool for insurance and risk management, allowing users to distribute their risks among multiple assets with the same underlying peg."}),"\n",(0,a.jsx)(s.h3,{id:"e52c86f592f54948a7e9d56035887420",children:"Tokens weight assignment in baskets"}),"\n",(0,a.jsxs)(s.p,{children:['The specific tokens that can be deposited into a basket are pre-determined. To ensure that different tokens collateralized by the same underlying asset can be accurately represented in the basket, weights are assigned to each token. These weights define the corresponding amount of the underlying derivative for a given amount of the token. For example, a "USD fiat basket" can be created by assigning a weight of ',(0,a.jsx)(s.code,{children:"1/3.6725 = 0.2722940776"})," to the ",(0,a.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/United_Arab_Emirates_dirham#:~:text=USD%5B1%5D-,1%20USD%20%3D%203.6725%20AED,-The%20United%20Arab",children:"United Arab Emirates dirham"}),", which is pegged to 1 USD at a rate of 1 USD = 3.6725 AED. The weight of a token can also be used to unify the number of decimal places among multiple aggregate coins with different decimal places. For instance, if two tokens, ",(0,a.jsx)(s.code,{children:"A"})," and ",(0,a.jsx)(s.code,{children:"B"}),", both collateralized by the same underlying asset have different numbers of decimal places (e.g. ",(0,a.jsx)(s.code,{children:"A"})," has 3 decimal places, ",(0,a.jsx)(s.code,{children:"B"})," has 2 decimal places), weights we can be assigned to each token to unify their decimal places. For example, a weight of ",(0,a.jsx)(s.code,{children:"1.00"})," can be assigned to ",(0,a.jsx)(s.code,{children:"A"})," and a weight of ",(0,a.jsx)(s.code,{children:"0.01"})," to ",(0,a.jsx)(s.code,{children:"B"}),". This means that 1 unit of ",(0,a.jsx)(s.code,{children:"A"})," is equal to 100 units of ",(0,a.jsx)(s.code,{children:"B"}),", and the basket will be expressed in terms of ",(0,a.jsx)(s.code,{children:"A"}),", which has 3 decimal places. This allows the basket to represent the underlying value of both tokens in a consistent way, using a single number of decimal places."]}),"\n",(0,a.jsxs)(s.p,{children:["The governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," otherwise there will not be enough tokens in the basket to redeem. For example, if the basket ",(0,a.jsx)(s.code,{children:"B"})," includes tokens A, B, and C, the governance must ensure that ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsxs)(s.mstyle,{mathsize:"0.9em",children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"\u2265"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"d"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"l"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"d"})]})]})]})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small \\left(A_{amount} \\times A_{weight}\\right) + \\left(B_{amount} \\times B_{weight}\\right) + \\left(C_{amount} \\times C_{weight}\\right) \\geq B_{\\_.total\\_amount\\_issued}"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel sizing reset-size6 size5",children:"\u2265"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.936em",verticalAlign:"-0.321em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"m"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"ss"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.3567em"},children:(0,a.jsx)(s.span,{})})})]})})]})]})]})]}),". If the weights are not correctly configured, the governance proposal to update the basket weights will fail."]}),"\n",(0,a.jsx)(s.h4,{id:"c6b93328531d4437b4fd633cfc0bd1ec",children:"How users deposits translate to basket derivatives tokens"}),"\n",(0,a.jsxs)(s.p,{children:["When users deposit a combination of tokens ",(0,a.jsx)(s.code,{children:"A, B, C\u2026"})," which have the same underlying asset/peg ",(0,a.jsx)(s.code,{children:""})," into the corresponding basket ",(0,a.jsx)(s.code,{children:"B"}),", they receive an amount of token ",(0,a.jsx)(s.code,{children:"B/"})," which represent their weight-adjusted share of the total basket pool, similarly to Uniswap LP tokens. For instance, if a user deposits 100 units of token ",(0,a.jsx)(s.code,{children:"A"})," with a weight of 0.5 into the basket ",(0,a.jsx)(s.code,{children:"B5/ABC"}),", they will receive 50 units of tokens."]}),"\n",(0,a.jsx)(s.h4,{id:"742d96e2022c4aaeb0f8afc88d4eef4d",children:"Maximum weight-adjusted tokens shares"}),"\n",(0,a.jsxs)(s.p,{children:["To prevent scenarios where one or more of the aggregated tokens becomes worthless or loses its peg, a ",(0,a.jsx)(s.code,{children:"tokens_cap"})," field sets the maximum percentage of the total ",(0,a.jsx)(s.strong,{children:"weight-adjusted"})," supply that can be deposited for a given aggregated token (default 1, or 100%). If the amount of tokens to be deposited or swapped would result in the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," being exceeded for any of the aggregated tokens, the transaction interacting with the basket will fail."]}),"\n",(0,a.jsx)(s.h3,{id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",children:"Operational controls and limits"}),"\n",(0,a.jsxs)(s.p,{children:["Token baskets include ",(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," boolean fields that can globally prohibit deposits, withdraws, or swaps of one or more specific tokens in the basket. ",(0,a.jsx)(s.strong,{children:"These fields can be disabled without the need to go through a governance proposal"}),", although only accounts with the permission 61 can perform this action. This is meant to allow necessary flexibility in managing the basket, i.e. responding to potential depeg scenarios or other time-sensitive issues with individual tokens which require quick intervention."]}),"\n",(0,a.jsxs)(s.p,{children:["To prevent abuse or manipulation of the Token Baskets (i.e. infinite supply of one of the aggregated tokens being flooded into the basket until the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," is reached), Token Baskets have limits on the amount of tokens that can be minted (created), burned (redeemed for tokens), or swapped over a defined period ",(0,a.jsx)(s.code,{children:"limits_period"}),". These limits are defined by the ",(0,a.jsx)(s.code,{children:"mints_max"}),", ",(0,a.jsx)(s.code,{children:"burns_max"}),", and ",(0,a.jsx)(s.code,{children:"swaps_max"})," fields, respectively.\nTo prevent dust spam attacks, minimum amounts of the aggregate and basket tokens that must be minted, burned, or swapped in a single transaction are also defined by the ",(0,a.jsx)(s.code,{children:"mints_min"}),", ",(0,a.jsx)(s.code,{children:"burns_min"}),", and ",(0,a.jsx)(s.code,{children:"swaps_min"})," fields, respectively. Transactions that do not meet these minimum amounts will not be processed."]}),"\n",(0,a.jsx)(s.h3,{id:"f303da5b316c4e78b187c8a27d7037fd",children:"Basket composition and balance maintenance"}),"\n",(0,a.jsx)(s.p,{children:"The claim process is designed to ensure that the basket remains balanced at all time by calculating the ratio at which each token should be credited to the withdrawing user to restore, or at least improve, the proper weighting of the pool\u2019s balances after a withdrawal. This means that the redemption of pooled tokens against the pool\u2019s derivative will always be adjusted based on the current pool balances, potentially resulting in a higher proportion of a specific token if the pool is imbalanced due to previous selective swaps and withdrawals."}),"\n",(0,a.jsx)(s.h3,{id:"310bf045cb5b40b0a87eb0ea67e056e4",children:"Aggregated tokens swapping mechanisms"}),"\n",(0,a.jsxs)(s.p,{children:["Token Baskets implement a simple swap mechanism that enables users to exchange one or multiple aggregated tokens for a set of specific ones. This function provides a convenient way for users to consolidate their holdings into a desired set of tokens. However, the swap incurs a fixed ",(0,a.jsx)(s.code,{children:"swap_fee"})," and a variable ",(0,a.jsx)(s.code,{children:"slippage_fee"})," with a minimum ",(0,a.jsx)(s.code,{children:"slippage-fee-min"}),' defined in the basket properties. The fees are calculated dynamically based on the degree to which the swap is disbalancing the basket. The greater the disbalance, the higher the "slippage" penalty will be. The slippage is a programmatic function and do not result from a changes in token value as seen in Liquidity Pools, as the value of all tokens remains constant.']}),"\n",(0,a.jsx)(s.p,{children:"A crucial aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,a.jsx)(s.span,{className:"katex-display",children:(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"\u230a"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.munderover,{children:[(0,a.jsx)(s.mo,{children:"\u2211"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"0"})]}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mn,{children:"1"})]})]}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mo,{children:"\u22c5"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.mo,{fence:"true",children:"\u230b"})]}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mi,{children:"c"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\left \\lfloor{ \\sum_{i=0}^{tokens.Length - 1}tokens[i].weight \\cdot tokens[i].amount}\\right \\rfloor = constant"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"3.1609em",verticalAlign:"-1.2777em"}}),(0,a.jsxs)(s.span,{className:"minner",children:[(0,a.jsx)(s.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230a"})}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mop op-limits",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.8832em"},children:[(0,a.jsxs)(s.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"="}),(0,a.jsx)(s.span,{className:"mord mtight",children:"0"})]})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.05em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{children:(0,a.jsx)(s.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,a.jsxs)(s.span,{style:{top:"-4.3471em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"s"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mbin mtight",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"1.2777em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]}),(0,a.jsx)(s.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230b"})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.6151em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"co"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"an"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]})}),"\n",(0,a.jsxs)(s.p,{children:["This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the ",(0,a.jsx)(s.code,{children:"surplus"}),", while the ",(0,a.jsx)(s.code,{children:"basket_swap_fee"})," is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."]}),"\n",(0,a.jsx)(s.h3,{id:"7a4d7fa663774bb284c6578bd17412d6",children:"Surplus: a basket\u2019s insurance funds"}),"\n",(0,a.jsxs)(s.p,{children:["Unlike Uniswap, where swap fees are given to LP providers by issuing LP tokens proportionally, baskets swap fees paid by users and deposits from the governance are recorded in a separate ",(0,a.jsx)(s.code,{children:"surplus"})," and do not issue additional basket tokens ",(0,a.jsx)(s.code,{children:"B/"}),". These ",(0,a.jsx)(s.code,{children:"surplus"}),' serve as insurance funds to protect users against depeg events and can also collect any potential staking rewards yielded by aggregated tokens and "donations". In the event of a token losing its peg, the ',(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," properties of the depegged token may be set to ",(0,a.jsx)(s.code,{children:"false"}),", and the governance will deposit the necessary amount of tokens from the ",(0,a.jsx)(s.code,{children:"surplus"})," and/or the community treasury into the basket to re-adjust the weights, so that the remaining basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," can redeem the equivalent value in the form of all aggregate tokens. Although ",(0,a.jsx)(s.code,{children:"surplus"})," funds are dedicated to their corresponding basket, the governance has the ability to redeem their entire content for redistribution to other baskets if necessary."]}),"\n",(0,a.jsx)(s.h3,{id:"7fb7ac4e4df74fcd8d3d7a386b847006",children:"Kira's unique staking derivatives & rewards handling"}),"\n",(0,a.jsxs)(s.p,{children:["The Token basketing module deals with a unique scenario regarding KIRA's staking derivatives ",(0,a.jsx)(s.code,{children:"V/"}),", which accumulate block and fee rewards for their holders over time. Users pooling their ",(0,a.jsx)(s.code,{children:"V/"})," tokens to the corresponding basket are only entitled to the block rewards accumulated by the basket on their behalf. However, it is important to note that, due to how the basket token operates, block rewards become mutualized once the derivative is pooled, meaning users may gain or lose some percentage of block rewards (compared to simply holding the individual ",(0,a.jsx)(s.code,{children:"V/"})," itself) based on consensus nodes performance and commission rate. That being said, in KIRA, a consensus node cannot set it\u2019s commission above 50% (or lower, depending on current network properties), hence any potential loss is minimized and should be viewed as a reasonable fee for the superior liquidity service offered by the basket."]}),"\n",(0,a.jsx)(s.h4,{id:"5976fae452a2415fab9163a3992765fd",children:"Block rewards"}),"\n",(0,a.jsxs)(s.p,{children:["Staking derivative baskets do not track the ",(0,a.jsx)(s.code,{children:"B/"})," holdings of individual users over time, nor do they issue new ones to account for block rewards. Instead, they accommodate the earnings from block rewards by adjusting the weight of the different ",(0,a.jsx)(s.code,{children:"V/"})," pooled in the basket. As a result, the value that a ",(0,a.jsx)(s.code,{children:"B/"})," can redeem for the pooled tokens increases over time as block rewards accumulate, while the total number of issued ",(0,a.jsx)(s.code,{children:"B/"})," tokens remains unchanged."]}),"\n",(0,a.jsx)(s.h4,{id:"26b6027e680241218a5ba007479be9ea",children:"Fee rewards"}),"\n",(0,a.jsxs)(s.p,{children:["On the other hand, fee rewards are not accounted for and are simply sent to the pool's ",(0,a.jsx)(s.code,{children:"surplus"})," insurance fund."]}),"\n",(0,a.jsx)(s.h2,{id:"2ce953f4d8764a9a918cb72cf7ac1307",children:"Parameters"}),"\n",(0,a.jsx)(s.h4,{id:"187f22edd8b24181bfef12a3df57f1a5",children:"Token basket"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"id"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1"})}),(0,a.jsx)(s.td,{children:"Basket identifier"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"suffix"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usd"})}),(0,a.jsxs)(s.td,{children:["Basket token denom suffix. Resulting basket token denom would be ",(0,a.jsx)(s.code,{children:"B1/usd"}),' if suffix value is "usd"']})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:"Basket description"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]BasketToken"})}),(0,a.jsx)(s.td,{}),(0,a.jsx)(s.td,{children:"Array of aggregated tokens with their corresponding weights, current basket balance and transaction abilities status"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Total supply of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that can be minted"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens_cap"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.9"})}),(0,a.jsx)(s.td,{children:"The maximum percentage of the basket supply that a single aggregated token can represent. Transactions such as minting, burning, and swapping will fail if they cause an aggregated token's supply to exceed this percentage. Decimal from 0 to 1"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"limits_period"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"86400"})}),(0,a.jsx)(s.td,{children:"Period after which all mint, swap & burn limits are reset (in Unix time/seconds, default 1 day)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable all aggregated token deposits (",(0,a.jsx)(s.code,{children:"B1/usd"})," minting is disabled)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that must be minted per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily ",(0,a.jsx)(s.code,{children:"B1/usd"})," issuance"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemption per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable basket swaps"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of aggregate tokens, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"}),", that must be swapped in a single transaction"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of basket swaps, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"})]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap_fee"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Percentage fee to be paid for swapping tokens. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"slippage_fee_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Minimum percentage to be paid as penalty for disbalancing the basket. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"surplus"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]sdk.Coin"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:'["1000ukex","20000ueth"]'})}),(0,a.jsx)(s.td,{children:"Insurance funds from excess tokens accumulated as result of fee rewards from KIRA\u2019s staking derivative and/or swaps fees"})]})]})]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"BasketToken type"})}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"denom"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usdt"})}),(0,a.jsx)(s.td,{children:"Denom of one of the aggregate tokens"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"weight"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.99"})}),(0,a.jsx)(s.td,{children:"Relative value of the token to its underlying derivative. Here, 100 deposit should result in 99 issuance."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000"})}),(0,a.jsxs)(s.td,{children:["Total deposited amount of ",(0,a.jsx)(s.code,{children:"usdt"})," available for withdrawal"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"deposits"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if deposits of ",(0,a.jsx)(s.code,{children:"usdt"})," resulting in minting are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"withdraws"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if withdrawals of ",(0,a.jsx)(s.code,{children:"usdt"})," as result of burns are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if swaps of ",(0,a.jsx)(s.code,{children:"usdt"})," for other tokens are allowed"]})]})]})]}),"\n",(0,a.jsx)(s.h2,{id:"097ff40bd32544e69bd7c9d4748f8df7",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(s.em,{children:"documentation for more details."})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$SIGNER"})})," ",(0,a.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(s.em,{children:"and"})," ",(0,a.jsxs)(s.em,{children:[(0,a.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(s.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(s.h2,{id:"30bfcd03f11d4db7861628860a95e7b6",children:"Transactions"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"mint-basket-tokens"})}),(0,a.jsx)(s.th,{children:"Deposit aggregated tokens into a basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burn-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Withdraw aggregated tokens from a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Swap tokens within a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-deposits"})}),(0,a.jsx)(s.td,{children:"Disable deposits into baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-withdraws"})}),(0,a.jsx)(s.td,{children:"Disable withdrawals from baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-swaps"})}),(0,a.jsx)(s.td,{children:"Disable swaps in baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"basket-claim-rewards"})}),(0,a.jsx)(s.td,{children:"Claim rewards from staking derivative baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"3a7f68279fba4c2d91b2428de6ba5276",children:"Deposit aggregated tokens into basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"mint-basket-tokens"})," command is used to deposit aggregated tokens into a specific basket, identified by ",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DEPOSIT_AMOUNTS"}),": Coin denomination and amount to be deposited, formatted as ",(0,a.jsx)(s.code,{children:""})," or as a comma-separated list."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket mint-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DEPOSIT_AMOUNTS\n"})}),(0,a.jsx)(s.h4,{id:"90d712248db44c1bbc09d5f2317af4f0",children:"Withdraw aggregated tokens from basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"burn-basket-tokens"})," command allows for the withdrawal of aggregated tokens from a basket by burning the corresponding amount of basket token ",(0,a.jsx)(s.code,{children:"$REDEMPTION"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$REDEMPTION"}),": Amount of basket token to be redeemed, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket burn-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $REDEMPTION\n"})}),(0,a.jsx)(s.h4,{id:"eb2c7bea02754d51a72b2e60257835b5",children:"Swap basket tokens"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"swap-basket-tokens"})," command is used for swapping tokens within a basket, alternating pairs of input token amounts and their corresponding desired output tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IN_AMOUNTn"})," and ",(0,a.jsx)(s.code,{children:"$OUT_TOKENn"}),": Pairs of the amount of a token to swap from and the token to swap to, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket swap-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $IN_AMOUNT1 $OUT_TOKEN1 $IN_AMOUNT2 $OUT_TOKEN2 (...)\n"})}),(0,a.jsx)(s.h4,{id:"8645486cd3d84de4acf812a490aefcb7",children:"Disable basket deposits, withdrawals, and swaps (emergency)"}),(0,a.jsxs)(s.p,{children:["Commands like ",(0,a.jsx)(s.code,{children:"disable-basket-deposits"}),", ",(0,a.jsx)(s.code,{children:"disable-basket-withdraws"}),", and ",(0,a.jsx)(s.code,{children:"disable-basket-swaps"})," are used to globally disable respective basket abilities, requiring sudo permission 61."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DISABLED"}),": Boolean (",(0,a.jsx)(s.code,{children:"true"})," to disable the ability)."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket disable-basket-deposits \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DISABLED\n"})}),(0,a.jsx)(s.h4,{id:"d302bf9450344b4b8959aa731d8f6bce",children:"Claim derivatives basket rewards"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"basket-claim-rewards"})," command is used to claim outstanding rewards of staking derivative baskets for one or many aggregate ",(0,a.jsx)(s.code,{children:"V"})," tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS"}),": A list of coins specifying the amount and denomination."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket basket-claim-rewards \\\n--from=$SIGNER $FLAGS_TX \\\n$TOKENS\n"})})]}),(0,a.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(s.h2,{id:"7d27c0249006442d9cb2d2d7f6829c95",children:"Queries"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"token-basket-by-denom"})}),(0,a.jsx)(s.th,{children:"Query a single basket by its denominat"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-basket-by-id"})}),(0,a.jsx)(s.td,{children:"Query details of a basket by its ID."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-baskets"})}),(0,a.jsx)(s.td,{children:"List baskets filtered by denominations/derivatives."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-mints"})}),(0,a.jsx)(s.td,{children:"Query historical mints for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-burns"})}),(0,a.jsx)(s.td,{children:"Query historical burns for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-swaps"})}),(0,a.jsx)(s.td,{children:"Query historical swaps made in a basket."})]})]})]}),(0,a.jsx)(s.h4,{id:"73a9aefa563946c58360b0d0fe187f35",children:"Query basket by denomination"}),(0,a.jsxs)(s.p,{children:["Retrieve a single token basket based on its denomination using the ",(0,a.jsx)(s.code,{children:"token-basket-by-denom"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOM"}),": The token denomination of the basket, formatted as ",(0,a.jsx)(s.code,{children:"B/"}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-denom $DENOM $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"960d7be6739e4d8ba45956c94d2f1653",children:"Query basket by id"}),(0,a.jsxs)(s.p,{children:["Retrieve details of a token basket using its unique ID with the ",(0,a.jsx)(s.code,{children:"token-basket-by-id"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The unique identifier of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-id $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e83b30b0043148e3be023e966ef67bba",children:"List token baskets"}),(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If ",(0,a.jsx)(s.code,{children:"$DENOMS"})," is not provided, it returns all token baskets."]})}),(0,a.jsxs)(s.p,{children:["Retrieve token baskets by filtering them based on aggregated token denominations and staking derivatives using the ",(0,a.jsx)(s.code,{children:"token-baskets"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOMS"}),": A comma-separated list of token denominations."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IS_DERIVATIVE"}),": Specify if the tokens are staking derivatives (",(0,a.jsx)(s.code,{children:"true"})," or ",(0,a.jsx)(s.code,{children:"false"}),")."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-baskets $DENOMS $IS_DERIVATIVE $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"6bd3ad80788a49bf89968bfdd4d993c1",children:"Query historical mints"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical mints for a token basket within the specified ",(0,a.jsx)(s.code,{children:"limits_period"})," using the ",(0,a.jsx)(s.code,{children:"historical-mints"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-mints $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e4c7b1471e6a425098e9757badb898bd",children:"Query historical burns"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical burns for a token basket using the ",(0,a.jsx)(s.code,{children:"historical-burns"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-burns $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"5223c1d7ab66430a9cc477b185a62642",children:"Query historical swaps"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical swaps made in a token basket with the ",(0,a.jsx)(s.code,{children:"historical-swaps"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-swaps $BASKET_ID $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(s.h2,{id:"775c6181c6754e6a8f53f1202e2ff4ca",children:"Governance"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"proposal-create-basket"})}),(0,a.jsx)(s.th,{children:"Create a proposal to create a new token basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-edit-basket"})}),(0,a.jsx)(s.td,{children:"Create a proposal to edit an existing token basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})}),(0,a.jsx)(s.td,{children:"Create a proposal to withdraw surplus from baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"07ad892215ee4b78a824587f8ab87eb8",children:"Creating and updating a token basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-create-basket"})," CLI command creates a token basket proposal. To vote on this proposal, accounts require permission 59. This command allows for specifying various parameters related to the basket such as its suffix, description, tokens included, and various limits and fees associated with the basket."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_SUFFIX"}),": The suffix of the basket token."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_DESCRIPTION"}),": The description of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_TOKENS"}),": Comma-separated list of aggregated tokens with corresponding rates and abilities."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS_CAP"}),": Tokens cap on the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$LIMITS_PERIOD"}),": Period after which limits are reset."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_DISABLED"}),": Disable all basket\u2019s deposits."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MIN"}),": Minimum amount of basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MAX"}),": Maximum cumulative daily basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_DISABLED"}),": Disable all basket\u2019s redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MIN"}),": Minimum amount of basket token redemption."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MAX"}),": Maximum cumulative daily amount of basket token redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_DISABLED"}),": Disable all basket swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MIN"}),": Minimum amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MAX"}),": Maximum cumulative daily amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAP_FEE"}),": Percentage fee for swapping tokens."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SLIPPAGE_FEE_MIN"}),": Minimum percentage penalty for disbalancing the basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-create-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"76b8b2489e2241c8bd45e9076798e1df",children:"Editing an existing token basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-edit-basket"})," CLI command is used to edit existing baskets. This editing process requires governance permissions similar to those required for creating a basket, and the basket\u2019s ID (",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),") must be specified."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Similar flags to ",(0,a.jsx)(s.code,{children:"proposal-create-basket"}),"."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the basket to be edited."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-edit-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"618b95deb0154e119dd71f4e98cf02e4",children:"Withdrawing surplus from a basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})," CLI command is for creating a proposal to withdraw surplus from specific baskets."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_IDS"}),": A comma-separated list of basket IDs from which the surplus will be withdrawn."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$RECEIVER_ADDR"}),": The target address for the surplus withdrawal."]}),"\n"]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal-basket-withdraw-surplus \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function r(e){let{children:s,hidden:n,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>v});var a=n(7294),i=n(6905),t=n(2466),r=n(6550),l=n(469),d=n(1980),c=n(7392),h=n(12);function o(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return o(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:i}}=e;return{value:s,label:n,attributes:a,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function j(e){let{queryString:s=!1,groupId:n}=e;const i=(0,r.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(t),(0,a.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=m(e),[r,d]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:t}))),[c,o]=j({queryString:n,groupId:i}),[p,u]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,h.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),g=(()=>{const e=c??p;return x({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);d(e),o(e),u(e)}),[o,u,t]),tabValues:t}}var u=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function f(e){let{className:s,block:n,selectedValue:a,selectValue:r,tabValues:l}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),h=e=>{const s=e.currentTarget,n=d.indexOf(s),i=l[n].value;i!==a&&(c(s),r(i))},o=e=>{let s=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>d.push(e),onKeyDown:o,onClick:h,...t,className:(0,i.Z)("tabs__item",g.tabItem,t?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function k(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function N(e){const s=p(e);return(0,b.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(f,{...e,...s}),(0,b.jsx)(k,{...e,...s})]})}function v(e){const s=(0,u.Z)();return(0,b.jsx)(N,{...e,children:o(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>r});var a=n(7294);const i={},t=a.createContext(i);function r(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32268a14.f1974cbb.js b/assets/js/32268a14.f1974cbb.js new file mode 100644 index 0000000..8e43a68 --- /dev/null +++ b/assets/js/32268a14.f1974cbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7135],{1834:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>o});var a=n(5893),i=n(1151),t=n(4866),r=n(5162);const l={title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module",title:"Token Basketing Module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",permalink:"/docs.kira.network/docs/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},sidebar:"defaultSidebar",previous:{title:"Token Basketing",permalink:"/docs.kira.network/docs/6c6d144f-f315-43f7-8fe7-289d98890a69"},next:{title:"Recovery",permalink:"/docs.kira.network/docs/0b33153c-9b3e-410f-abd7-2877ccb870ce"}},h={},o=[{value:"Concept",id:"dee6d8b2107344fe995e07952c58450a",level:2},{value:"Tokens Weight Assignment in Baskets",id:"e52c86f592f54948a7e9d56035887420",level:3},{value:"How Users Deposits Translate to Basket Derivatives Tokens",id:"c6b93328531d4437b4fd633cfc0bd1ec",level:4},{value:"Maximum Weight-adjusted Tokens Shares",id:"742d96e2022c4aaeb0f8afc88d4eef4d",level:4},{value:"Operational Controls and Limits",id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",level:3},{value:"Basket Composition and Balance Maintenance",id:"f303da5b316c4e78b187c8a27d7037fd",level:3},{value:"Aggregated Tokens Swapping Mechanisms",id:"310bf045cb5b40b0a87eb0ea67e056e4",level:3},{value:"Surplus: a Basket\u2019s Insurance Funds",id:"7a4d7fa663774bb284c6578bd17412d6",level:3},{value:"Kira's Unique Staking Derivatives & Rewards Handling",id:"7fb7ac4e4df74fcd8d3d7a386b847006",level:3},{value:"Block Rewards",id:"5976fae452a2415fab9163a3992765fd",level:4},{value:"Fee Rewards",id:"26b6027e680241218a5ba007479be9ea",level:4},{value:"Parameters",id:"2ce953f4d8764a9a918cb72cf7ac1307",level:2},{value:"Token Basket",id:"187f22edd8b24181bfef12a3df57f1a5",level:4},{value:"Cli Syntax & Examples",id:"097ff40bd32544e69bd7c9d4748f8df7",level:2},{value:"Transactions",id:"30bfcd03f11d4db7861628860a95e7b6",level:2},{value:"Deposit Aggregated Tokens Into Basket",id:"3a7f68279fba4c2d91b2428de6ba5276",level:4},{value:"Withdraw Aggregated Tokens From Basket",id:"90d712248db44c1bbc09d5f2317af4f0",level:4},{value:"Swap Basket Tokens",id:"eb2c7bea02754d51a72b2e60257835b5",level:4},{value:"Disable Basket Deposits, Withdrawals, and Swaps (emergency)",id:"8645486cd3d84de4acf812a490aefcb7",level:4},{value:"Claim Derivatives Basket Rewards",id:"d302bf9450344b4b8959aa731d8f6bce",level:4},{value:"Queries",id:"7d27c0249006442d9cb2d2d7f6829c95",level:2},{value:"Query Basket by Denomination",id:"73a9aefa563946c58360b0d0fe187f35",level:4},{value:"Query Basket by Id",id:"960d7be6739e4d8ba45956c94d2f1653",level:4},{value:"List Token Baskets",id:"e83b30b0043148e3be023e966ef67bba",level:4},{value:"Query Historical Mints",id:"6bd3ad80788a49bf89968bfdd4d993c1",level:4},{value:"Query Historical Burns",id:"e4c7b1471e6a425098e9757badb898bd",level:4},{value:"Query Historical Swaps",id:"5223c1d7ab66430a9cc477b185a62642",level:4},{value:"Governance",id:"775c6181c6754e6a8f53f1202e2ff4ca",level:2},{value:"Creating and Updating a Token Basket Proposal",id:"07ad892215ee4b78a824587f8ab87eb8",level:4},{value:"Editing an Existing Token Basket Proposal",id:"76b8b2489e2241c8bd45e9076798e1df",level:4},{value:"Withdrawing Surplus From a Basket Proposal",id:"618b95deb0154e119dd71f4e98cf02e4",level:4}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h2,{id:"dee6d8b2107344fe995e07952c58450a",children:"Concept"}),"\n",(0,a.jsxs)(s.p,{children:["The Token Basketing Module allows users to combine multiple individual derivatives with the same denomination into a single, easily tradable and exchangeable token. For example, KIRA native liquid staking derivatives ",(0,a.jsx)(s.code,{children:"V/"})," that are issued when staking tokens in KIRA network and which are specific to the consensus node ",(0,a.jsx)(s.code,{children:"V"}),", can be aggregated using a basket. An other use case would be to aggregate different foreign tokens such as various USD stablecoins like ",(0,a.jsx)(s.code,{children:"usdt"})," or ",(0,a.jsx)(s.code,{children:"usdc"})," (similarly to Curve\u2019s 3pool), or IBC wrapped tokens, into a single, more easily tradable and stakable asset."]}),"\n",(0,a.jsx)(s.p,{children:"However, unlike common liquidity pools like Curve or Uniswap, Token Baskets do not depend on a bonding curve equation to determine the price and are simply based on fixed weights assigned to each individual token. They are only intended to consolidate the liquidity of tokens that are collateralized/pegged by the same underlying asset. In addition, one of the unique properties of Token Baskets compared to liquidity pools is that the list of tokens in the basket can be expanded or contracted over time, while the name of the basket token representing the aggregated assets remains the same."}),"\n",(0,a.jsx)(s.p,{children:"Token Baskets facilitate token swaps, which are subject to daily limits and are executed at fixed ratios with a programmed slippage. The surplus between the actual exchange ratio and the slippage serves as an insurance fund controlled by governance to protect token holders in the event of a depeg. Overall, the Token Basketing Module is not intended to operate as an exchange, but rather as a tool for insurance and risk management, allowing users to distribute their risks among multiple assets with the same underlying peg."}),"\n",(0,a.jsx)(s.h3,{id:"e52c86f592f54948a7e9d56035887420",children:"Tokens Weight Assignment in Baskets"}),"\n",(0,a.jsxs)(s.p,{children:['The specific tokens that can be deposited into a basket are pre-determined. To ensure that different tokens collateralized by the same underlying asset can be accurately represented in the basket, weights are assigned to each token. These weights define the corresponding amount of the underlying derivative for a given amount of the token. For example, a "USD fiat basket" can be created by assigning a weight of ',(0,a.jsx)(s.code,{children:"1/3.6725 = 0.2722940776"})," to the ",(0,a.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/United_Arab_Emirates_dirham#:~:text=USD%5B1%5D-,1%20USD%20%3D%203.6725%20AED,-The%20United%20Arab",children:"United Arab Emirates dirham"}),", which is pegged to 1 USD at a rate of 1 USD = 3.6725 AED. The weight of a token can also be used to unify the number of decimal places among multiple aggregate coins with different decimal places. For instance, if two tokens, ",(0,a.jsx)(s.code,{children:"A"})," and ",(0,a.jsx)(s.code,{children:"B"}),", both collateralized by the same underlying asset have different numbers of decimal places (e.g. ",(0,a.jsx)(s.code,{children:"A"})," has 3 decimal places, ",(0,a.jsx)(s.code,{children:"B"})," has 2 decimal places), weights we can be assigned to each token to unify their decimal places. For example, a weight of ",(0,a.jsx)(s.code,{children:"1.00"})," can be assigned to ",(0,a.jsx)(s.code,{children:"A"})," and a weight of ",(0,a.jsx)(s.code,{children:"0.01"})," to ",(0,a.jsx)(s.code,{children:"B"}),". This means that 1 unit of ",(0,a.jsx)(s.code,{children:"A"})," is equal to 100 units of ",(0,a.jsx)(s.code,{children:"B"}),", and the basket will be expressed in terms of ",(0,a.jsx)(s.code,{children:"A"}),", which has 3 decimal places. This allows the basket to represent the underlying value of both tokens in a consistent way, using a single number of decimal places."]}),"\n",(0,a.jsxs)(s.p,{children:["The governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," otherwise there will not be enough tokens in the basket to redeem. For example, if the basket ",(0,a.jsx)(s.code,{children:"B"})," includes tokens A, B, and C, the governance must ensure that ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsxs)(s.mstyle,{mathsize:"0.9em",children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"\u2265"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"d"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"l"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"d"})]})]})]})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small \\left(A_{amount} \\times A_{weight}\\right) + \\left(B_{amount} \\times B_{weight}\\right) + \\left(C_{amount} \\times C_{weight}\\right) \\geq B_{\\_.total\\_amount\\_issued}"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel sizing reset-size6 size5",children:"\u2265"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.936em",verticalAlign:"-0.321em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"m"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"ss"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.3567em"},children:(0,a.jsx)(s.span,{})})})]})})]})]})]})]}),". If the weights are not correctly configured, the governance proposal to update the basket weights will fail."]}),"\n",(0,a.jsx)(s.h4,{id:"c6b93328531d4437b4fd633cfc0bd1ec",children:"How Users Deposits Translate to Basket Derivatives Tokens"}),"\n",(0,a.jsxs)(s.p,{children:["When users deposit a combination of tokens ",(0,a.jsx)(s.code,{children:"A, B, C\u2026"})," which have the same underlying asset/peg ",(0,a.jsx)(s.code,{children:""})," into the corresponding basket ",(0,a.jsx)(s.code,{children:"B"}),", they receive an amount of token ",(0,a.jsx)(s.code,{children:"B/"})," which represent their weight-adjusted share of the total basket pool, similarly to Uniswap LP tokens. For instance, if a user deposits 100 units of token ",(0,a.jsx)(s.code,{children:"A"})," with a weight of 0.5 into the basket ",(0,a.jsx)(s.code,{children:"B5/ABC"}),", they will receive 50 units of tokens."]}),"\n",(0,a.jsx)(s.h4,{id:"742d96e2022c4aaeb0f8afc88d4eef4d",children:"Maximum Weight-adjusted Tokens Shares"}),"\n",(0,a.jsxs)(s.p,{children:["To prevent scenarios where one or more of the aggregated tokens becomes worthless or loses its peg, a ",(0,a.jsx)(s.code,{children:"tokens_cap"})," field sets the maximum percentage of the total ",(0,a.jsx)(s.strong,{children:"weight-adjusted"})," supply that can be deposited for a given aggregated token (default 1, or 100%). If the amount of tokens to be deposited or swapped would result in the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," being exceeded for any of the aggregated tokens, the transaction interacting with the basket will fail."]}),"\n",(0,a.jsx)(s.h3,{id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",children:"Operational Controls and Limits"}),"\n",(0,a.jsxs)(s.p,{children:["Token baskets include ",(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," boolean fields that can globally prohibit deposits, withdraws, or swaps of one or more specific tokens in the basket. ",(0,a.jsx)(s.strong,{children:"These fields can be disabled without the need to go through a governance proposal"}),", although only accounts with the permission 61 can perform this action. This is meant to allow necessary flexibility in managing the basket, i.e. responding to potential depeg scenarios or other time-sensitive issues with individual tokens which require quick intervention."]}),"\n",(0,a.jsxs)(s.p,{children:["To prevent abuse or manipulation of the Token Baskets (i.e. infinite supply of one of the aggregated tokens being flooded into the basket until the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," is reached), Token Baskets have limits on the amount of tokens that can be minted (created), burned (redeemed for tokens), or swapped over a defined period ",(0,a.jsx)(s.code,{children:"limits_period"}),". These limits are defined by the ",(0,a.jsx)(s.code,{children:"mints_max"}),", ",(0,a.jsx)(s.code,{children:"burns_max"}),", and ",(0,a.jsx)(s.code,{children:"swaps_max"})," fields, respectively.\nTo prevent dust spam attacks, minimum amounts of the aggregate and basket tokens that must be minted, burned, or swapped in a single transaction are also defined by the ",(0,a.jsx)(s.code,{children:"mints_min"}),", ",(0,a.jsx)(s.code,{children:"burns_min"}),", and ",(0,a.jsx)(s.code,{children:"swaps_min"})," fields, respectively. Transactions that do not meet these minimum amounts will not be processed."]}),"\n",(0,a.jsx)(s.h3,{id:"f303da5b316c4e78b187c8a27d7037fd",children:"Basket Composition and Balance Maintenance"}),"\n",(0,a.jsx)(s.p,{children:"The claim process is designed to ensure that the basket remains balanced at all time by calculating the ratio at which each token should be credited to the withdrawing user to restore, or at least improve, the proper weighting of the pool\u2019s balances after a withdrawal. This means that the redemption of pooled tokens against the pool\u2019s derivative will always be adjusted based on the current pool balances, potentially resulting in a higher proportion of a specific token if the pool is imbalanced due to previous selective swaps and withdrawals."}),"\n",(0,a.jsx)(s.h3,{id:"310bf045cb5b40b0a87eb0ea67e056e4",children:"Aggregated Tokens Swapping Mechanisms"}),"\n",(0,a.jsxs)(s.p,{children:["Token Baskets implement a simple swap mechanism that enables users to exchange one or multiple aggregated tokens for a set of specific ones. This function provides a convenient way for users to consolidate their holdings into a desired set of tokens. However, the swap incurs a fixed ",(0,a.jsx)(s.code,{children:"swap_fee"})," and a variable ",(0,a.jsx)(s.code,{children:"slippage_fee"})," with a minimum ",(0,a.jsx)(s.code,{children:"slippage-fee-min"}),' defined in the basket properties. The fees are calculated dynamically based on the degree to which the swap is disbalancing the basket. The greater the disbalance, the higher the "slippage" penalty will be. The slippage is a programmatic function and do not result from a changes in token value as seen in Liquidity Pools, as the value of all tokens remains constant.']}),"\n",(0,a.jsx)(s.p,{children:"A crucial aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,a.jsx)(s.span,{className:"katex-display",children:(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"\u230a"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.munderover,{children:[(0,a.jsx)(s.mo,{children:"\u2211"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"0"})]}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mn,{children:"1"})]})]}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mo,{children:"\u22c5"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.mo,{fence:"true",children:"\u230b"})]}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mi,{children:"c"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\left \\lfloor{ \\sum_{i=0}^{tokens.Length - 1}tokens[i].weight \\cdot tokens[i].amount}\\right \\rfloor = constant"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"3.1609em",verticalAlign:"-1.2777em"}}),(0,a.jsxs)(s.span,{className:"minner",children:[(0,a.jsx)(s.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230a"})}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mop op-limits",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.8832em"},children:[(0,a.jsxs)(s.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"="}),(0,a.jsx)(s.span,{className:"mord mtight",children:"0"})]})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.05em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{children:(0,a.jsx)(s.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,a.jsxs)(s.span,{style:{top:"-4.3471em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"s"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mbin mtight",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"1.2777em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]}),(0,a.jsx)(s.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230b"})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.6151em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"co"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"an"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]})}),"\n",(0,a.jsxs)(s.p,{children:["This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the ",(0,a.jsx)(s.code,{children:"surplus"}),", while the ",(0,a.jsx)(s.code,{children:"basket_swap_fee"})," is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."]}),"\n",(0,a.jsx)(s.h3,{id:"7a4d7fa663774bb284c6578bd17412d6",children:"Surplus: a Basket\u2019s Insurance Funds"}),"\n",(0,a.jsxs)(s.p,{children:["Unlike Uniswap, where swap fees are given to LP providers by issuing LP tokens proportionally, baskets swap fees paid by users and deposits from the governance are recorded in a separate ",(0,a.jsx)(s.code,{children:"surplus"})," and do not issue additional basket tokens ",(0,a.jsx)(s.code,{children:"B/"}),". These ",(0,a.jsx)(s.code,{children:"surplus"}),' serve as insurance funds to protect users against depeg events and can also collect any potential staking rewards yielded by aggregated tokens and "donations". In the event of a token losing its peg, the ',(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," properties of the depegged token may be set to ",(0,a.jsx)(s.code,{children:"false"}),", and the governance will deposit the necessary amount of tokens from the ",(0,a.jsx)(s.code,{children:"surplus"})," and/or the community treasury into the basket to re-adjust the weights, so that the remaining basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," can redeem the equivalent value in the form of all aggregate tokens. Although ",(0,a.jsx)(s.code,{children:"surplus"})," funds are dedicated to their corresponding basket, the governance has the ability to redeem their entire content for redistribution to other baskets if necessary."]}),"\n",(0,a.jsx)(s.h3,{id:"7fb7ac4e4df74fcd8d3d7a386b847006",children:"Kira's Unique Staking Derivatives & Rewards Handling"}),"\n",(0,a.jsxs)(s.p,{children:["The Token basketing module deals with a unique scenario regarding KIRA's staking derivatives ",(0,a.jsx)(s.code,{children:"V/"}),", which accumulate block and fee rewards for their holders over time. Users pooling their ",(0,a.jsx)(s.code,{children:"V/"})," tokens to the corresponding basket are only entitled to the block rewards accumulated by the basket on their behalf. However, it is important to note that, due to how the basket token operates, block rewards become mutualized once the derivative is pooled, meaning users may gain or lose some percentage of block rewards (compared to simply holding the individual ",(0,a.jsx)(s.code,{children:"V/"})," itself) based on consensus nodes performance and commission rate. That being said, in KIRA, a consensus node cannot set it\u2019s commission above 50% (or lower, depending on current network properties), hence any potential loss is minimized and should be viewed as a reasonable fee for the superior liquidity service offered by the basket."]}),"\n",(0,a.jsx)(s.h4,{id:"5976fae452a2415fab9163a3992765fd",children:"Block Rewards"}),"\n",(0,a.jsxs)(s.p,{children:["Staking derivative baskets do not track the ",(0,a.jsx)(s.code,{children:"B/"})," holdings of individual users over time, nor do they issue new ones to account for block rewards. Instead, they accommodate the earnings from block rewards by adjusting the weight of the different ",(0,a.jsx)(s.code,{children:"V/"})," pooled in the basket. As a result, the value that a ",(0,a.jsx)(s.code,{children:"B/"})," can redeem for the pooled tokens increases over time as block rewards accumulate, while the total number of issued ",(0,a.jsx)(s.code,{children:"B/"})," tokens remains unchanged."]}),"\n",(0,a.jsx)(s.h4,{id:"26b6027e680241218a5ba007479be9ea",children:"Fee Rewards"}),"\n",(0,a.jsxs)(s.p,{children:["On the other hand, fee rewards are not accounted for and are simply sent to the pool's ",(0,a.jsx)(s.code,{children:"surplus"})," insurance fund."]}),"\n",(0,a.jsx)(s.h2,{id:"2ce953f4d8764a9a918cb72cf7ac1307",children:"Parameters"}),"\n",(0,a.jsx)(s.h4,{id:"187f22edd8b24181bfef12a3df57f1a5",children:"Token Basket"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"id"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1"})}),(0,a.jsx)(s.td,{children:"Basket identifier"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"suffix"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usd"})}),(0,a.jsxs)(s.td,{children:["Basket token denom suffix. Resulting basket token denom would be ",(0,a.jsx)(s.code,{children:"B1/usd"}),' if suffix value is "usd"']})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:"Basket description"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]BasketToken"})}),(0,a.jsx)(s.td,{}),(0,a.jsx)(s.td,{children:"Array of aggregated tokens with their corresponding weights, current basket balance and transaction abilities status"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Total supply of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that can be minted"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens_cap"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.9"})}),(0,a.jsx)(s.td,{children:"The maximum percentage of the basket supply that a single aggregated token can represent. Transactions such as minting, burning, and swapping will fail if they cause an aggregated token's supply to exceed this percentage. Decimal from 0 to 1"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"limits_period"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"86400"})}),(0,a.jsx)(s.td,{children:"Period after which all mint, swap & burn limits are reset (in Unix time/seconds, default 1 day)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable all aggregated token deposits (",(0,a.jsx)(s.code,{children:"B1/usd"})," minting is disabled)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that must be minted per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily ",(0,a.jsx)(s.code,{children:"B1/usd"})," issuance"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemption per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable basket swaps"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of aggregate tokens, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"}),", that must be swapped in a single transaction"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of basket swaps, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"})]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap_fee"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Percentage fee to be paid for swapping tokens. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"slippage_fee_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Minimum percentage to be paid as penalty for disbalancing the basket. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"surplus"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]sdk.Coin"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:'["1000ukex","20000ueth"]'})}),(0,a.jsx)(s.td,{children:"Insurance funds from excess tokens accumulated as result of fee rewards from KIRA\u2019s staking derivative and/or swaps fees"})]})]})]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"BasketToken type"})}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"denom"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usdt"})}),(0,a.jsx)(s.td,{children:"Denom of one of the aggregate tokens"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"weight"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.99"})}),(0,a.jsx)(s.td,{children:"Relative value of the token to its underlying derivative. Here, 100 deposit should result in 99 issuance."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000"})}),(0,a.jsxs)(s.td,{children:["Total deposited amount of ",(0,a.jsx)(s.code,{children:"usdt"})," available for withdrawal"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"deposits"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if deposits of ",(0,a.jsx)(s.code,{children:"usdt"})," resulting in minting are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"withdraws"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if withdrawals of ",(0,a.jsx)(s.code,{children:"usdt"})," as result of burns are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if swaps of ",(0,a.jsx)(s.code,{children:"usdt"})," for other tokens are allowed"]})]})]})]}),"\n",(0,a.jsx)(s.h2,{id:"097ff40bd32544e69bd7c9d4748f8df7",children:"Cli Syntax & Examples"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(s.em,{children:"documentation for more details."})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$SIGNER"})})," ",(0,a.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(s.em,{children:"and"})," ",(0,a.jsxs)(s.em,{children:[(0,a.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(s.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(s.h2,{id:"30bfcd03f11d4db7861628860a95e7b6",children:"Transactions"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"mint-basket-tokens"})}),(0,a.jsx)(s.th,{children:"Deposit aggregated tokens into a basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burn-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Withdraw aggregated tokens from a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Swap tokens within a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-deposits"})}),(0,a.jsx)(s.td,{children:"Disable deposits into baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-withdraws"})}),(0,a.jsx)(s.td,{children:"Disable withdrawals from baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-swaps"})}),(0,a.jsx)(s.td,{children:"Disable swaps in baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"basket-claim-rewards"})}),(0,a.jsx)(s.td,{children:"Claim rewards from staking derivative baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"3a7f68279fba4c2d91b2428de6ba5276",children:"Deposit Aggregated Tokens Into Basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"mint-basket-tokens"})," command is used to deposit aggregated tokens into a specific basket, identified by ",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DEPOSIT_AMOUNTS"}),": Coin denomination and amount to be deposited, formatted as ",(0,a.jsx)(s.code,{children:""})," or as a comma-separated list."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket mint-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DEPOSIT_AMOUNTS\n"})}),(0,a.jsx)(s.h4,{id:"90d712248db44c1bbc09d5f2317af4f0",children:"Withdraw Aggregated Tokens From Basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"burn-basket-tokens"})," command allows for the withdrawal of aggregated tokens from a basket by burning the corresponding amount of basket token ",(0,a.jsx)(s.code,{children:"$REDEMPTION"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$REDEMPTION"}),": Amount of basket token to be redeemed, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket burn-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $REDEMPTION\n"})}),(0,a.jsx)(s.h4,{id:"eb2c7bea02754d51a72b2e60257835b5",children:"Swap Basket Tokens"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"swap-basket-tokens"})," command is used for swapping tokens within a basket, alternating pairs of input token amounts and their corresponding desired output tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IN_AMOUNTn"})," and ",(0,a.jsx)(s.code,{children:"$OUT_TOKENn"}),": Pairs of the amount of a token to swap from and the token to swap to, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket swap-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $IN_AMOUNT1 $OUT_TOKEN1 $IN_AMOUNT2 $OUT_TOKEN2 (...)\n"})}),(0,a.jsx)(s.h4,{id:"8645486cd3d84de4acf812a490aefcb7",children:"Disable Basket Deposits, Withdrawals, and Swaps (emergency)"}),(0,a.jsxs)(s.p,{children:["Commands like ",(0,a.jsx)(s.code,{children:"disable-basket-deposits"}),", ",(0,a.jsx)(s.code,{children:"disable-basket-withdraws"}),", and ",(0,a.jsx)(s.code,{children:"disable-basket-swaps"})," are used to globally disable respective basket abilities, requiring sudo permission 61."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DISABLED"}),": Boolean (",(0,a.jsx)(s.code,{children:"true"})," to disable the ability)."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket disable-basket-deposits \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DISABLED\n"})}),(0,a.jsx)(s.h4,{id:"d302bf9450344b4b8959aa731d8f6bce",children:"Claim Derivatives Basket Rewards"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"basket-claim-rewards"})," command is used to claim outstanding rewards of staking derivative baskets for one or many aggregate ",(0,a.jsx)(s.code,{children:"V"})," tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS"}),": A list of coins specifying the amount and denomination."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket basket-claim-rewards \\\n--from=$SIGNER $FLAGS_TX \\\n$TOKENS\n"})})]}),(0,a.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(s.h2,{id:"7d27c0249006442d9cb2d2d7f6829c95",children:"Queries"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"token-basket-by-denom"})}),(0,a.jsx)(s.th,{children:"Query a single basket by its denominat"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-basket-by-id"})}),(0,a.jsx)(s.td,{children:"Query details of a basket by its ID."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-baskets"})}),(0,a.jsx)(s.td,{children:"List baskets filtered by denominations/derivatives."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-mints"})}),(0,a.jsx)(s.td,{children:"Query historical mints for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-burns"})}),(0,a.jsx)(s.td,{children:"Query historical burns for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-swaps"})}),(0,a.jsx)(s.td,{children:"Query historical swaps made in a basket."})]})]})]}),(0,a.jsx)(s.h4,{id:"73a9aefa563946c58360b0d0fe187f35",children:"Query Basket by Denomination"}),(0,a.jsxs)(s.p,{children:["Retrieve a single token basket based on its denomination using the ",(0,a.jsx)(s.code,{children:"token-basket-by-denom"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOM"}),": The token denomination of the basket, formatted as ",(0,a.jsx)(s.code,{children:"B/"}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-denom $DENOM $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"960d7be6739e4d8ba45956c94d2f1653",children:"Query Basket by Id"}),(0,a.jsxs)(s.p,{children:["Retrieve details of a token basket using its unique ID with the ",(0,a.jsx)(s.code,{children:"token-basket-by-id"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The unique identifier of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-id $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e83b30b0043148e3be023e966ef67bba",children:"List Token Baskets"}),(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If ",(0,a.jsx)(s.code,{children:"$DENOMS"})," is not provided, it returns all token baskets."]})}),(0,a.jsxs)(s.p,{children:["Retrieve token baskets by filtering them based on aggregated token denominations and staking derivatives using the ",(0,a.jsx)(s.code,{children:"token-baskets"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOMS"}),": A comma-separated list of token denominations."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IS_DERIVATIVE"}),": Specify if the tokens are staking derivatives (",(0,a.jsx)(s.code,{children:"true"})," or ",(0,a.jsx)(s.code,{children:"false"}),")."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-baskets $DENOMS $IS_DERIVATIVE $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"6bd3ad80788a49bf89968bfdd4d993c1",children:"Query Historical Mints"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical mints for a token basket within the specified ",(0,a.jsx)(s.code,{children:"limits_period"})," using the ",(0,a.jsx)(s.code,{children:"historical-mints"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-mints $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e4c7b1471e6a425098e9757badb898bd",children:"Query Historical Burns"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical burns for a token basket using the ",(0,a.jsx)(s.code,{children:"historical-burns"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-burns $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"5223c1d7ab66430a9cc477b185a62642",children:"Query Historical Swaps"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical swaps made in a token basket with the ",(0,a.jsx)(s.code,{children:"historical-swaps"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-swaps $BASKET_ID $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(s.h2,{id:"775c6181c6754e6a8f53f1202e2ff4ca",children:"Governance"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"proposal-create-basket"})}),(0,a.jsx)(s.th,{children:"Create a proposal to create a new token basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-edit-basket"})}),(0,a.jsx)(s.td,{children:"Create a proposal to edit an existing token basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})}),(0,a.jsx)(s.td,{children:"Create a proposal to withdraw surplus from baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"07ad892215ee4b78a824587f8ab87eb8",children:"Creating and Updating a Token Basket Proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-create-basket"})," CLI command creates a token basket proposal. To vote on this proposal, accounts require permission 59. This command allows for specifying various parameters related to the basket such as its suffix, description, tokens included, and various limits and fees associated with the basket."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_SUFFIX"}),": The suffix of the basket token."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_DESCRIPTION"}),": The description of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_TOKENS"}),": Comma-separated list of aggregated tokens with corresponding rates and abilities."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS_CAP"}),": Tokens cap on the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$LIMITS_PERIOD"}),": Period after which limits are reset."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_DISABLED"}),": Disable all basket\u2019s deposits."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MIN"}),": Minimum amount of basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MAX"}),": Maximum cumulative daily basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_DISABLED"}),": Disable all basket\u2019s redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MIN"}),": Minimum amount of basket token redemption."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MAX"}),": Maximum cumulative daily amount of basket token redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_DISABLED"}),": Disable all basket swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MIN"}),": Minimum amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MAX"}),": Maximum cumulative daily amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAP_FEE"}),": Percentage fee for swapping tokens."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SLIPPAGE_FEE_MIN"}),": Minimum percentage penalty for disbalancing the basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-create-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"76b8b2489e2241c8bd45e9076798e1df",children:"Editing an Existing Token Basket Proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-edit-basket"})," CLI command is used to edit existing baskets. This editing process requires governance permissions similar to those required for creating a basket, and the basket\u2019s ID (",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),") must be specified."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Similar flags to ",(0,a.jsx)(s.code,{children:"proposal-create-basket"}),"."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the basket to be edited."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-edit-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"618b95deb0154e119dd71f4e98cf02e4",children:"Withdrawing Surplus From a Basket Proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})," CLI command is for creating a proposal to withdraw surplus from specific baskets."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_IDS"}),": A comma-separated list of basket IDs from which the surplus will be withdrawn."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$RECEIVER_ADDR"}),": The target address for the surplus withdrawal."]}),"\n"]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal-basket-withdraw-surplus \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function r(e){let{children:s,hidden:n,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>v});var a=n(7294),i=n(6905),t=n(2466),r=n(6550),l=n(469),d=n(1980),c=n(7392),h=n(12);function o(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return o(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:i}}=e;return{value:s,label:n,attributes:a,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function j(e){let{queryString:s=!1,groupId:n}=e;const i=(0,r.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(t),(0,a.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=m(e),[r,d]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:t}))),[c,o]=j({queryString:n,groupId:i}),[p,u]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,h.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),g=(()=>{const e=c??p;return x({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);d(e),o(e),u(e)}),[o,u,t]),tabValues:t}}var u=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function f(e){let{className:s,block:n,selectedValue:a,selectValue:r,tabValues:l}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),h=e=>{const s=e.currentTarget,n=d.indexOf(s),i=l[n].value;i!==a&&(c(s),r(i))},o=e=>{let s=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>d.push(e),onKeyDown:o,onClick:h,...t,className:(0,i.Z)("tabs__item",g.tabItem,t?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function k(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function N(e){const s=p(e);return(0,b.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(f,{...e,...s}),(0,b.jsx)(k,{...e,...s})]})}function v(e){const s=(0,u.Z)();return(0,b.jsx)(N,{...e,children:o(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>r});var a=n(7294);const i={},t=a.createContext(i);function r(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3299a548.025cf079.js b/assets/js/3299a548.025cf079.js new file mode 100644 index 0000000..6e7b711 --- /dev/null +++ b/assets/js/3299a548.025cf079.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2656],{1634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var a=n(5893),i=n(1151);n(4866),n(5162);const r={title:"Overview",sidebar_position:0,slug:"/"},o=void 0,s={id:"What-is-KIRA/Overview",title:"Overview",description:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.",source:"@site/tabs/Learn/What-is-KIRA/Overview.mdx",sourceDirName:"What-is-KIRA",slug:"/",permalink:"/docs.kira.network/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"Overview",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e"}},l={},c=[{value:"Key Components of KIRA Network",id:"688908768d9540f7aeadc964ce849d56",level:3},{value:"Economic Model and Liquidity",id:"f158579a4606412e9fccf9f64d4a14d7",level:3},{value:"Why Kira?",id:"a7c50e68381848c1a94eb42f4f597725",level:3}];function u(e){const t={h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.\nWhile adhering to the principles of modular blockchain design, KIRA provides the full stack necessary to serve a new generation of trustless applications by fulfilling their needs for infrastructure, resources, DA, sequencing, and shared security. KIRA applications run virtualized inside dedicated Docker containers, operated by its unbounded set of validators who individually manage applications while collectively securing and managing the entire KIRA network, which helps to orchestrate and compose these apps. They additionally inherit the benefits of the Virtual Finality Gadget (VFG).\nThis architecture enables application development in any programming language and allows for any customized finality rules, including optimistic and pessimistic verification, ZK proofs, or any bespoke verification logic. KIRA empowers its applications to rival Web2 in user access scale, ease of building, deployment time, and operational costs, with independence from traditional blockchain infrastructures and Virtual Machines (VMs)."}),"\n",(0,a.jsx)(t.h3,{id:"688908768d9540f7aeadc964ce849d56",children:"Key Components of KIRA Network"}),"\n",(0,a.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"f158579a4606412e9fccf9f64d4a14d7",children:"Economic Model and Liquidity"}),"\n",(0,a.jsx)(t.p,{children:"KIRA introduces a novel economic model known as the Initial Liquidity Offering (ILO)[link], designed to ensure that applications launched on the network meet user demand and their ownership tokens have access to sufficient liquidity post-launch. By aligning the incentives of users, developers, Executors, and Verifiers (Fishermen), the ILO model fosters the development and enjoyment of high-quality dApps while enabling all stakeholders to share in these applications' success."}),"\n",(0,a.jsx)(t.h3,{id:"a7c50e68381848c1a94eb42f4f597725",children:"Why Kira?"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Virtual Finality Gadget (VFG) - VFG enables next-gen blockchain-less and resource-heavy apps to exist without the the coordination overhead associated with creation of new networks for every single new use case such as AI, streaming, or gaming."}),"\n",(0,a.jsx)(t.li,{children:"Infrastructure - KIRA provides the infrastructure necessary to run applications alongside essential resources such as CPU or GPU. Paired with decentralized middleware (INTERX) apps do not have to depend on third-party RPC providers, Executor networks, and DA as all is provided out of the box while developers focus only on what is important - client and server-side logic."}),"\n",(0,a.jsx)(t.li,{children:"Shared Security - All applications inherit base-layer security. By supporting native LSDs, which enable any token to participate in restaking, KIRA can match the security of user deposits from external networks while preserving liquidity."}),"\n",(0,a.jsx)(t.li,{children:"Hypermodularity - All components of the KIRA stack adhere to modular design principles while offering full-stack support. Sequencing, Data Availability, Application Hosting, Middleware, Proxy, Caching, Autoscaling, and Infrastructure Management come out of the box. Hardware providers can focus fully on supplying highly available resources while developers can focus on user experience without having to reason about infrastructure or spending months or years learning about and integrating multiple modular products with questionable LTS into a single coherent application."}),"\n"]}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var r=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),i=n(6905),r=n(2466),o=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,o.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,r=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=f({queryString:n,groupId:i}),[m,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:i}),b=(()=>{const e=c??m;return p({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,r]),tabValues:r}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=s[n].value;i!==a&&(c(t),o(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,i.Z)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",b.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function I(e){const t=(0,g.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var a=n(7294);const i={},r=a.createContext(i);function o(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3299a548.ebf71abd.js b/assets/js/3299a548.ebf71abd.js deleted file mode 100644 index a7c81e8..0000000 --- a/assets/js/3299a548.ebf71abd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2656],{1634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const i={title:"Overview",sidebar_position:0,slug:"/"},o=void 0,s={id:"What-is-KIRA/Overview",title:"Overview",description:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.",source:"@site/tabs/Learn/What-is-KIRA/Overview.mdx",sourceDirName:"What-is-KIRA",slug:"/",permalink:"/docs.kira.network/learn/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"Overview",permalink:"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e"}},l={},c=[{value:"Key components of kira network",id:"688908768d9540f7aeadc964ce849d56",level:3},{value:"Economic model and liquidity",id:"f158579a4606412e9fccf9f64d4a14d7",level:3},{value:"Why kira?",id:"a7c50e68381848c1a94eb42f4f597725",level:3}];function u(e){const t={h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.\nWhile adhering to the principles of modular blockchain design, KIRA provides the full stack necessary to serve a new generation of trustless applications by fulfilling their needs for infrastructure, resources, DA, sequencing, and shared security. KIRA applications run virtualized inside dedicated Docker containers, operated by its unbounded set of validators who individually manage applications while collectively securing and managing the entire KIRA network, which helps to orchestrate and compose these apps. They additionally inherit the benefits of the Virtual Finality Gadget (VFG).\nThis architecture enables application development in any programming language and allows for any customized finality rules, including optimistic and pessimistic verification, ZK proofs, or any bespoke verification logic. KIRA empowers its applications to rival Web2 in user access scale, ease of building, deployment time, and operational costs, with independence from traditional blockchain infrastructures and Virtual Machines (VMs)."}),"\n",(0,a.jsx)(t.h3,{id:"688908768d9540f7aeadc964ce849d56",children:"Key components of kira network"}),"\n",(0,a.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"f158579a4606412e9fccf9f64d4a14d7",children:"Economic model and liquidity"}),"\n",(0,a.jsx)(t.p,{children:"KIRA introduces a novel economic model known as the Initial Liquidity Offering (ILO)[link], designed to ensure that applications launched on the network meet user demand and their ownership tokens have access to sufficient liquidity post-launch. By aligning the incentives of users, developers, Executors, and Verifiers (Fishermen), the ILO model fosters the development and enjoyment of high-quality dApps while enabling all stakeholders to share in these applications' success."}),"\n",(0,a.jsx)(t.h3,{id:"a7c50e68381848c1a94eb42f4f597725",children:"Why kira?"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Virtual Finality Gadget (VFG) - VFG enables next-gen blockchain-less and resource-heavy apps to exist without the the coordination overhead associated with creation of new networks for every single new use case such as AI, streaming, or gaming."}),"\n",(0,a.jsx)(t.li,{children:"Infrastructure - KIRA provides the infrastructure necessary to run applications alongside essential resources such as CPU or GPU. Paired with decentralized middleware (INTERX) apps do not have to depend on third-party RPC providers, Executor networks, and DA as all is provided out of the box while developers focus only on what is important - client and server-side logic."}),"\n",(0,a.jsx)(t.li,{children:"Shared Security - All applications inherit base-layer security. By supporting native LSDs, which enable any token to participate in restaking, KIRA can match the security of user deposits from external networks while preserving liquidity."}),"\n",(0,a.jsx)(t.li,{children:"Hypermodularity - All components of the KIRA stack adhere to modular design principles while offering full-stack support. Sequencing, Data Availability, Application Hosting, Middleware, Proxy, Caching, Autoscaling, and Infrastructure Management come out of the box. Hardware providers can focus fully on supplying highly available resources while developers can focus on user experience without having to reason about infrastructure or spending months or years learning about and integrating multiple modular products with questionable LTS into a single coherent application."}),"\n"]}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),i=n(2466),o=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,i=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:n,groupId:r}),[m,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),b=(()=>{const e=c??m;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,i]),tabValues:i}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=s[n].value;r!==a&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,r.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function I(e){const t=(0,g.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var a=n(7294);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32afdd64.0f4699c9.js b/assets/js/32afdd64.0f4699c9.js deleted file mode 100644 index 4f71340..0000000 --- a/assets/js/32afdd64.0f4699c9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4748],{1843:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>c,metadata:()=>o,toc:()=>u});var t=a(5893),s=a(1151),r=a(4866),i=a(5162);const c={title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},l=void 0,o={id:"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module",title:"Evidence module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/Evidence-module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},sidebar:"defaultSidebar",previous:{title:"Evidence",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"},next:{title:"Keys & accounts",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7"}},d={},u=[{value:"Concept",id:"9da6c82434ad47c5908a9dd18371ae39",level:3},{value:"Cli syntax & examples",id:"f2eddfbd285d437cab18755acfd6fab9",level:2},{value:"Transactions",id:"723e137d9712400c842928f221446573",level:2},{value:"Queries",id:"fce8b27770f04b908c78f06bd198ef57",level:2},{value:"List all submitted evidence (paginated)",id:"3f5710a330774094b495f67a3c3ab6f4",level:4},{value:"Query specific evidence by its hash",id:"a4fd48a0733f4fce8bd47809d8a6dedc",level:4},{value:"Governance",id:"9a2dbce1f8ac4af589baf48fa108385f",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"9da6c82434ad47c5908a9dd18371ae39",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:"The Evidence module, extended from the Cosmos SDK's, enhances existing evidence handling that relies on the underlying consensus engine to automatically submit evidence upon discovery. It achieves this by implementing abstractions and interfaces that enable developers to define custom evidence messages and methods for penalizing misbehaving consensus nodes. Tendermint detects double-signing by consensus nodes and reports this to the Evidence module, which then manages the verification process and determines the appropriate penalty for the offending consensus nodes. Penalties may include slashing a portion of their stake and removing them from the active consensus node set."}),"\n",(0,t.jsxs)(n.p,{children:["In KIRA, the only misbehavior that is handled is double signing. In this case the consensus node is automatically jailed upon detection but not automatically slashed. Instead, the slashing process is managed by governance through the slashing module. ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"Jailing & slashing"})," provides all the necessary information regarding how this process works."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-go",children:"// https://github.com/KiraCore/sekai/blob/master/x/evidence/keeper/infraction.go\n// (...)\n\nif !validator.IsJailed() {\n k.slashingKeeper.Jail(ctx, consAddr)\n}\nk.slashingKeeper.JailUntil(ctx, consAddr, ctx.BlockTime())\nk.SetEvidence(ctx, evidence)\n"})}),"\n",(0,t.jsx)(n.h2,{id:"f2eddfbd285d437cab18755acfd6fab9",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(n.h2,{id:"723e137d9712400c842928f221446573",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"fce8b27770f04b908c78f06bd198ef57",children:"Queries"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"evidence"})}),(0,t.jsx)(n.th,{children:"List all submitted evidence in a paginated format."})]})})}),(0,t.jsx)(n.h4,{id:"3f5710a330774094b495f67a3c3ab6f4",children:"List all submitted evidence (paginated)"}),(0,t.jsxs)(n.p,{children:["This command lists all submitted evidence in a paginated format. Replace ",(0,t.jsx)(n.code,{children:""})," with the desired page number and ",(0,t.jsx)(n.code,{children:""})," with the number of items per page. Default values will be used if these are not provided."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $FLAGS_QR --page= --limit= | jq\n"})}),(0,t.jsx)(n.h4,{id:"a4fd48a0733f4fce8bd47809d8a6dedc",children:"Query specific evidence by its hash"}),(0,t.jsx)(n.p,{children:"To query a specific piece of evidence by its hash, use the following command."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $HASH $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9a2dbce1f8ac4af589baf48fa108385f",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>i});a(7294);var t=a(6905);const s={tabItem:"tabItem_Ymn6"};var r=a(5893);function i(e){let{children:n,hidden:a,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(7294),s=a(6905),r=a(2466),i=a(6550),c=a(469),l=a(1980),o=a(7392),d=a(12);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:s}}=e;return{value:n,label:a,attributes:t,default:s}}))}(a);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function f(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:a}=e;const s=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,l._X)(r),(0,t.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function m(e){const{defaultValue:n,queryString:a=!1,groupId:s}=e,r=h(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[o,u]=b({queryString:a,groupId:s}),[m,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,d.Nk)(a);return[s,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:s}),v=(()=>{const e=o??m;return f({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:n,block:a,selectedValue:t,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,r.o5)(),d=e=>{const n=e.currentTarget,a=l.indexOf(n),s=c[a].value;s!==t&&(o(n),i(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;n=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;n=l[a]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},n),children:c.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,s.Z)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":t===n}),children:a??n},n)}))})}function j(e){let{lazy:n,children:a,selectedValue:s}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=m(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...n}),(0,g.jsx)(j,{...e,...n})]})}function k(e){const n=(0,p.Z)();return(0,g.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>c,a:()=>i});var t=a(7294);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32afdd64.aa6e4802.js b/assets/js/32afdd64.aa6e4802.js new file mode 100644 index 0000000..e9ef701 --- /dev/null +++ b/assets/js/32afdd64.aa6e4802.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4748],{1843:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>l,toc:()=>u});var t=a(5893),s=a(1151),r=a(4866),i=a(5162);const c={title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module",title:"Evidence module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/Evidence-module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438",permalink:"/docs.kira.network/docs/bd4cce67-2cee-4d9f-9b81-e5643d130438",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},sidebar:"defaultSidebar",previous:{title:"Evidence",permalink:"/docs.kira.network/docs/6a318dbd-2d44-4f1f-9729-5e608286289f"},next:{title:"Keys & accounts",permalink:"/docs.kira.network/docs/31613d97-abfb-4911-b17a-0c83cdba58a7"}},d={},u=[{value:"Concept",id:"9da6c82434ad47c5908a9dd18371ae39",level:3},{value:"Cli Syntax & Examples",id:"f2eddfbd285d437cab18755acfd6fab9",level:2},{value:"Transactions",id:"723e137d9712400c842928f221446573",level:2},{value:"Queries",id:"fce8b27770f04b908c78f06bd198ef57",level:2},{value:"List All Submitted Evidence (paginated)",id:"3f5710a330774094b495f67a3c3ab6f4",level:4},{value:"Query Specific Evidence by Its Hash",id:"a4fd48a0733f4fce8bd47809d8a6dedc",level:4},{value:"Governance",id:"9a2dbce1f8ac4af589baf48fa108385f",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"9da6c82434ad47c5908a9dd18371ae39",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:"The Evidence module, extended from the Cosmos SDK's, enhances existing evidence handling that relies on the underlying consensus engine to automatically submit evidence upon discovery. It achieves this by implementing abstractions and interfaces that enable developers to define custom evidence messages and methods for penalizing misbehaving consensus nodes. Tendermint detects double-signing by consensus nodes and reports this to the Evidence module, which then manages the verification process and determines the appropriate penalty for the offending consensus nodes. Penalties may include slashing a portion of their stake and removing them from the active consensus node set."}),"\n",(0,t.jsxs)(n.p,{children:["In KIRA, the only misbehavior that is handled is double signing. In this case the consensus node is automatically jailed upon detection but not automatically slashed. Instead, the slashing process is managed by governance through the slashing module. ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"Jailing & slashing"})," provides all the necessary information regarding how this process works."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-go",children:"// https://github.com/KiraCore/sekai/blob/master/x/evidence/keeper/infraction.go\n// (...)\n\nif !validator.IsJailed() {\n k.slashingKeeper.Jail(ctx, consAddr)\n}\nk.slashingKeeper.JailUntil(ctx, consAddr, ctx.BlockTime())\nk.SetEvidence(ctx, evidence)\n"})}),"\n",(0,t.jsx)(n.h2,{id:"f2eddfbd285d437cab18755acfd6fab9",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(n.h2,{id:"723e137d9712400c842928f221446573",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"fce8b27770f04b908c78f06bd198ef57",children:"Queries"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"evidence"})}),(0,t.jsx)(n.th,{children:"List all submitted evidence in a paginated format."})]})})}),(0,t.jsx)(n.h4,{id:"3f5710a330774094b495f67a3c3ab6f4",children:"List All Submitted Evidence (paginated)"}),(0,t.jsxs)(n.p,{children:["This command lists all submitted evidence in a paginated format. Replace ",(0,t.jsx)(n.code,{children:""})," with the desired page number and ",(0,t.jsx)(n.code,{children:""})," with the number of items per page. Default values will be used if these are not provided."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $FLAGS_QR --page= --limit= | jq\n"})}),(0,t.jsx)(n.h4,{id:"a4fd48a0733f4fce8bd47809d8a6dedc",children:"Query Specific Evidence by Its Hash"}),(0,t.jsx)(n.p,{children:"To query a specific piece of evidence by its hash, use the following command."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $HASH $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9a2dbce1f8ac4af589baf48fa108385f",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>i});a(7294);var t=a(6905);const s={tabItem:"tabItem_Ymn6"};var r=a(5893);function i(e){let{children:n,hidden:a,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(7294),s=a(6905),r=a(2466),i=a(6550),c=a(469),o=a(1980),l=a(7392),d=a(12);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:s}}=e;return{value:n,label:a,attributes:t,default:s}}))}(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function f(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:a}=e;const s=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(r),(0,t.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function m(e){const{defaultValue:n,queryString:a=!1,groupId:s}=e,r=h(e),[i,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[l,u]=b({queryString:a,groupId:s}),[m,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,d.Nk)(a);return[s,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:s}),v=(()=>{const e=l??m;return f({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:n,block:a,selectedValue:t,selectValue:i,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.o5)(),d=e=>{const n=e.currentTarget,a=o.indexOf(n),s=c[a].value;s!==t&&(l(n),i(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},n),children:c.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...r,className:(0,s.Z)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":t===n}),children:a??n},n)}))})}function j(e){let{lazy:n,children:a,selectedValue:s}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=m(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...n}),(0,g.jsx)(j,{...e,...n})]})}function k(e){const n=(0,p.Z)();return(0,g.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>c,a:()=>i});var t=a(7294);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/334589a4.26379643.js b/assets/js/334589a4.26379643.js deleted file mode 100644 index 8cfeab5..0000000 --- a/assets/js/334589a4.26379643.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5259],{6784:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Bank",title:"Bank",description:"cosmos.sdk/x/bank",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Bank.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules",slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:16,frontMatter:{title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},sidebar:"defaultSidebar",previous:{title:"Keys & accounts",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7"},next:{title:"Auth",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/bank"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/334589a4.c92033fa.js b/assets/js/334589a4.c92033fa.js new file mode 100644 index 0000000..d082212 --- /dev/null +++ b/assets/js/334589a4.c92033fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5259],{6784:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Bank",title:"Bank",description:"cosmos.sdk/x/bank",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Bank.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules",slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa",permalink:"/docs.kira.network/docs/04e8b755-d259-40f9-b66c-ddf5223c66fa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:16,frontMatter:{title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},sidebar:"defaultSidebar",previous:{title:"Keys & accounts",permalink:"/docs.kira.network/docs/31613d97-abfb-4911-b17a-0c83cdba58a7"},next:{title:"Auth",permalink:"/docs.kira.network/docs/cb04c86c-93bc-47bd-8a40-510e60bd7115"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/bank"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),u=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=u[n].value;a!==r&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33e81a2f.5d19c2a8.js b/assets/js/33e81a2f.5d19c2a8.js new file mode 100644 index 0000000..9ebf8d8 --- /dev/null +++ b/assets/js/33e81a2f.5d19c2a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8011],{3575:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Staking-Collectives/index",title:"Staking Collectives",description:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Staking-Collectives/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Staking-Collectives",slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",permalink:"/docs.kira.network/docs/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},sidebar:"defaultSidebar",previous:{title:"Spending Pools",permalink:"/docs.kira.network/docs/812fdf31-d225-4daf-a4cd-4501cbc00d95"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/docs/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"}},i={},c=[];function u(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/collectives",children:(0,r.jsx)(t.code,{children:"x/collectives"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33e81a2f.e1e74aa4.js b/assets/js/33e81a2f.e1e74aa4.js deleted file mode 100644 index 520cc13..0000000 --- a/assets/js/33e81a2f.e1e74aa4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8011],{3575:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Staking-Collectives/index",title:"Staking Collectives",description:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Staking-Collectives/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Staking-Collectives",slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},sidebar:"defaultSidebar",previous:{title:"Spending Pools",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"}},i={},c=[];function u(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/collectives",children:(0,r.jsx)(t.code,{children:"x/collectives"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/34220abf.6ff79a66.js b/assets/js/34220abf.6ff79a66.js deleted file mode 100644 index 5474964..0000000 --- a/assets/js/34220abf.6ff79a66.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2721],{8451:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var a=t(5893),s=t(1151),o=t(4866),r=t(5162);const i={title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},l=void 0,c={id:"Tools/Cosign",title:"Cosign",description:"Cosign",source:"@site/tabs/Docs/Tools/Cosign.mdx",sourceDirName:"Tools",slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",permalink:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},sidebar:"defaultSidebar",previous:{title:"Bash-utils",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},u={},d=[{value:"Cosign",id:"faa8ba9b83214b5da78e490484eac301",level:3},{value:"Linux",id:"f93ac041ccba411091571fe5e8875c20",level:2},{value:"Macos",id:"117db8dd77564de1896b82e210f453fb",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h3,{id:"faa8ba9b83214b5da78e490484eac301",children:"Cosign"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),"\n",(0,a.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(r.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(n.h2,{id:"f93ac041ccba411091571fe5e8875c20",children:"Linux"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]}),(0,a.jsxs)(r.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(n.h2,{id:"117db8dd77564de1896b82e210f453fb",children:"Macos"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>r});t(7294);var a=t(6905);const s={tabItem:"tabItem_Ymn6"};var o=t(5893);function r(e){let{children:n,hidden:t,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,r),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),s=t(6905),o=t(2466),r=t(6550),i=t(469),l=t(1980),c=t(7392),u=t(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:s}}=e;return{value:n,label:t,attributes:a,default:s}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const s=(0,r.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,d]=b({queryString:t,groupId:s}),[g,p]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,u.Nk)(t);return[s,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),I=(()=>{const e=c??g;return f({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{I&&l(I)}),[I]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var p=t(2389);const I={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=t(5893);function E(e){let{className:n,block:t,selectedValue:a,selectValue:r,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=l.indexOf(n),s=i[t].value;s!==a&&(c(n),r(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.Z)("tabs__item",I.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function A(e){const n=g(e);return(0,m.jsxs)("div",{className:(0,s.Z)("tabs-container",I.tabList),children:[(0,m.jsx)(E,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,m.jsx)(A,{...e,children:d(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>r});var a=t(7294);const s={},o=a.createContext(s);function r(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/34220abf.e1d1ad7f.js b/assets/js/34220abf.e1d1ad7f.js new file mode 100644 index 0000000..5daccca --- /dev/null +++ b/assets/js/34220abf.e1d1ad7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2721],{8451:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var a=t(5893),s=t(1151),o=t(4866),r=t(5162);const i={title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},l=void 0,c={id:"Tools/Cosign",title:"Cosign",description:"Cosign",source:"@site/tabs/Docs/Tools/Cosign.mdx",sourceDirName:"Tools",slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",permalink:"/docs.kira.network/docs/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Cosign",sidebar_position:1,slug:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"},sidebar:"defaultSidebar",previous:{title:"Bash-utils",permalink:"/docs.kira.network/docs/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},u={},d=[{value:"Cosign",id:"faa8ba9b83214b5da78e490484eac301",level:3},{value:"Linux",id:"f93ac041ccba411091571fe5e8875c20",level:2},{value:"Macos",id:"117db8dd77564de1896b82e210f453fb",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h3,{id:"faa8ba9b83214b5da78e490484eac301",children:"Cosign"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),"\n",(0,a.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,a.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(r.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(n.h2,{id:"f93ac041ccba411091571fe5e8875c20",children:"Linux"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]}),(0,a.jsxs)(r.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(n.h2,{id:"117db8dd77564de1896b82e210f453fb",children:"Macos"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,a.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>r});t(7294);var a=t(6905);const s={tabItem:"tabItem_Ymn6"};var o=t(5893);function r(e){let{children:n,hidden:t,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,r),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),s=t(6905),o=t(2466),r=t(6550),i=t(469),l=t(1980),c=t(7392),u=t(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:s}}=e;return{value:n,label:t,attributes:a,default:s}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const s=(0,r.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,d]=b({queryString:t,groupId:s}),[g,p]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,u.Nk)(t);return[s,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),I=(()=>{const e=c??g;return f({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{I&&l(I)}),[I]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var p=t(2389);const I={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=t(5893);function E(e){let{className:n,block:t,selectedValue:a,selectValue:r,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=l.indexOf(n),s=i[t].value;s!==a&&(c(n),r(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.Z)("tabs__item",I.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function A(e){const n=g(e);return(0,m.jsxs)("div",{className:(0,s.Z)("tabs-container",I.tabList),children:[(0,m.jsx)(E,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,m.jsx)(A,{...e,children:d(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>r});var a=t(7294);const s={},o=a.createContext(s);function r(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/34520de9.97be6581.js b/assets/js/34520de9.97be6581.js deleted file mode 100644 index 32c7d43..0000000 --- a/assets/js/34520de9.97be6581.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8086],{8957:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},o=void 0,u={id:"Stack/SEKAI--Backend/Modules/Fee-processing/index",title:"Fee processing",description:"x/feeprocessing",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Fee-processing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:13,frontMatter:{title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"},next:{title:"Evidence",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/feeprocessing",children:(0,n.jsx)(t.code,{children:"x/feeprocessing"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),s=r(2466),o=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:r}=e;const a=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=f(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=b({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:o,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>o});var n=r(7294);const a={},s=n.createContext(a);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/352b6c34.c6db5dfe.js b/assets/js/352b6c34.c6db5dfe.js deleted file mode 100644 index 08dfd9b..0000000 --- a/assets/js/352b6c34.c6db5dfe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3384],{3426:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var n=a(5893),i=a(1151);a(4866),a(5162);const r={title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},s=void 0,o={id:"What-is-KIRA/Middleware---INTERX",title:"Middleware - INTERX",description:"Overview",source:"@site/tabs/Learn/What-is-KIRA/Middleware---INTERX.mdx",sourceDirName:"What-is-KIRA",slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",permalink:"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},next:{title:"Frontend - MIRO",permalink:"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a"}},l={},c=[{value:"Overview",id:"eb2dd95b428040f69624153b50823d71",level:2},{value:"Kira\u2019s approach to data availability",id:"3c497e92703a473c871d03e7972516cf",level:3},{value:"Decentralized api gateway through swarm request",id:"64165f6d3db54be68a8aa002dfb06fa1",level:2}];function d(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"eb2dd95b428040f69624153b50823d71",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"INTERX (\u30a4\u30f3\u30bf\u30fc\u30a8\u30c3\u30af\u30b9) is KIRA's decentralized middleware service and is often referred to as KIRA\u2019s Content Availability Layer. It is responsible for node monitoring, peer discovery, response caching, proxy, load balancing, storage, sequencing, and propagation (targeted gossiping) of data and transactions between client-facing applications and KIRA\u2019s back-end services such as L2 apps or SEKAI. It optimizes communication across users, nodes, and Rollapps by enabling the formation of well-connected network subnets dedicated to each application."}),"\n",(0,n.jsx)(t.p,{children:"INTERX simplifies the transition from Web2 to Web3 for developers by removing the complexity of blockchain interactions. Web3 interactions often involve dealing with smart contracts and complex interfaces that must be queried and interpreted like Ethereum's ABI or decoded like SCALE encoded metadata for Substrate RPC, an overwhelming and cumbersome change from the straightforward API calls typical for Web2 environments. By offering a familiar Web2-like API interface and acting as the default 'Sequencer' for applications, INTERX reduces the learning curve of Web3, empowering developers to focus more on their business logic."}),"\n",(0,n.jsx)(t.p,{children:"One of INTERX's most important features is its combination of digital signatures and fraud proofs to effectively function as a decentralized API. This feature eliminates the need for light client implementations and maintenance, as well as dependence on centralized SSL certificate authorities."}),"\n",(0,n.jsx)(t.h3,{id:"3c497e92703a473c871d03e7972516cf",children:"Kira\u2019s approach to data availability"}),"\n",(0,n.jsx)(t.p,{children:"Traditional systems often treat all application data uniformly\u2014both user balances and arbitrary data\u2014 a method that compromises UX and practicality. This is particularly true when quick access to essential and trusted information, like user balances, is required during unexpected interruptions in the application\u2019s sequencing process (e.g. requests rate limiting). KIRA addresses this by clearly distinguishing these types of data. Specifically, user balances can be directly settled on SEKAI, KIRA\u2019s base layer, leveraging account abstraction. This arrangement allows Layer 2 applications to be treated similarly to user accounts, enabling them to perform on-chain actions such as issuing tokens, participating in governance, staking, and even communicating with other applications as if they were autonomous humans."}),"\n",(0,n.jsx)(t.p,{children:"In managing and ensuring the availability of arbitrary application data, INTERX adopts a specialized implementation designed to enhance the data replication versus network overhead ratio. This implementation is underpinned by four foundational concepts:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Integrated Data Management:"})," Consensus nodes operate and autoscale INTERX containers alongside their RollApp execution containers, akin to how edge nodes function within traditional Web2 networks. An edge node serves as a conduit between local environments (SEKAI and RollApp containers in KIRA\u2019s case) and the external world. In this setup, essential data is directly accessible on the same devices that execute the application, thus reducing latency and the dependency issues seen when DA is handled by an external network."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Dedicated DA Sub-networks"}),": Leveraging its node discovery capabilities, INTERX assigns each RollApp its own firewalled and rate-limited DA 'subnet'. This architecture optimizes bandwidth utilization and resource allocation by reducing the exchange and management of the application\u2019s data only to the nodes directly relevant to the application\u2014namely, its executors and verifiers."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Adaptive Data Replication"}),": Traditional DA systems often employ a one-size-fits-all replication factor. Essentially, they define the level of redundancy through a fixed number of copies distributed within the network to ensure data availability. In practice, however, individual applications have distinct requirements for data access speed and replication based on the data type. With INTERX, RollApp data is replicated based on the individual needs of executors and verifiers. Developers can scale this replication level to align precisely with their application's needs, such as minimum bandwidth utilization for noncritical data and/or maximum possible security for application-critical data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Caching:"})," INTERX implements a caching mechanism to efficiently manage high-demand scenarios and prevent system overload. This feature is especially important in KIRA, where SEKAI\u2019s block time can be extended based on the number of consensus nodes involved, influencing the likelihood of data being queried multiple times before any updates occur. By storing data after its initial retrieval, INTERX can swiftly respond to duplicate requests, conserving resources required to perform complex queries and thus maintaining network responsiveness."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"64165f6d3db54be68a8aa002dfb06fa1",children:"Decentralized api gateway through swarm request"}),"\n",(0,n.jsx)(t.p,{children:"A distinctive feature of INTERX is its functionality as a decentralized RPC gateway. This capability stems from its unique setup where each INTERX node, regardless of its associated subnet, is linked to a KIRA account address, with all responses being digitally signed. This architecture allows users to query multiple nodes simultaneously and evaluate the responses against each other. Such a mechanism enables users to identify nodes that consistently deliver precise responses and craft off-chain fraud proofs against nodes disseminating fraudulent or inconsistent data."}),"\n",(0,n.jsx)(t.p,{children:"While light clients theoretically offer higher security through block-by-block consensus verification (without storing data), they fall short due to the maintenance they require. This maintenance challenge becomes particularly pronounced across hundreds or thousands of applications in a growing multi-chain world. By enabling the creation of fraud proofs, INTERX introduces a practical alternative for decentralization. It establishes a balance between the security offered by light clients and the convenience of Infura-style RPC providers. Through repeated queries to a broad spectrum of INTERX nodes, users can achieve a level of security comparable to that of light clients, assuming these nodes are either verified through the Identity Registrar or have stakes involved. This system underscores that even a single honest INTERX node in the query batch can trigger the eviction or slashing of dishonest ones. However, for maximum safety, users are recommended to operate their own INTERX node as well as a SEKAI instance, essentially running a full node."})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var r=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),r=a(2466),s=a(6550),o=a(469),l=a(1980),c=a(7392),d=a(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,r=h(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,u]=f({queryString:a,groupId:i}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,d.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:i}),g=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var m=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const t=e.currentTarget,a=l.indexOf(t),i=o[a].value;i!==n&&(c(t),s(i))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function I(e){const t=b(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,v.jsx)(I,{...e,children:u(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>s});var n=a(7294);const i={},r=n.createContext(i);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/352b6c34.ecc23313.js b/assets/js/352b6c34.ecc23313.js new file mode 100644 index 0000000..e5e494b --- /dev/null +++ b/assets/js/352b6c34.ecc23313.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3384],{3426:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var n=a(5893),i=a(1151);a(4866),a(5162);const r={title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},s=void 0,o={id:"What-is-KIRA/Middleware---INTERX",title:"Middleware - INTERX",description:"Overview",source:"@site/tabs/Learn/What-is-KIRA/Middleware---INTERX.mdx",sourceDirName:"What-is-KIRA",slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},next:{title:"Frontend - MIRO",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a"}},l={},c=[{value:"Overview",id:"eb2dd95b428040f69624153b50823d71",level:2},{value:"Kira\u2019s Approach to Data Availability",id:"3c497e92703a473c871d03e7972516cf",level:3},{value:"Decentralized Api Gateway Through Swarm Request",id:"64165f6d3db54be68a8aa002dfb06fa1",level:2}];function d(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"eb2dd95b428040f69624153b50823d71",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"INTERX (\u30a4\u30f3\u30bf\u30fc\u30a8\u30c3\u30af\u30b9) is KIRA's decentralized middleware service and is often referred to as KIRA\u2019s Content Availability Layer. It is responsible for node monitoring, peer discovery, response caching, proxy, load balancing, storage, sequencing, and propagation (targeted gossiping) of data and transactions between client-facing applications and KIRA\u2019s back-end services such as L2 apps or SEKAI. It optimizes communication across users, nodes, and Rollapps by enabling the formation of well-connected network subnets dedicated to each application."}),"\n",(0,n.jsx)(t.p,{children:"INTERX simplifies the transition from Web2 to Web3 for developers by removing the complexity of blockchain interactions. Web3 interactions often involve dealing with smart contracts and complex interfaces that must be queried and interpreted like Ethereum's ABI or decoded like SCALE encoded metadata for Substrate RPC, an overwhelming and cumbersome change from the straightforward API calls typical for Web2 environments. By offering a familiar Web2-like API interface and acting as the default 'Sequencer' for applications, INTERX reduces the learning curve of Web3, empowering developers to focus more on their business logic."}),"\n",(0,n.jsx)(t.p,{children:"One of INTERX's most important features is its combination of digital signatures and fraud proofs to effectively function as a decentralized API. This feature eliminates the need for light client implementations and maintenance, as well as dependence on centralized SSL certificate authorities."}),"\n",(0,n.jsx)(t.h3,{id:"3c497e92703a473c871d03e7972516cf",children:"Kira\u2019s Approach to Data Availability"}),"\n",(0,n.jsx)(t.p,{children:"Traditional systems often treat all application data uniformly\u2014both user balances and arbitrary data\u2014 a method that compromises UX and practicality. This is particularly true when quick access to essential and trusted information, like user balances, is required during unexpected interruptions in the application\u2019s sequencing process (e.g. requests rate limiting). KIRA addresses this by clearly distinguishing these types of data. Specifically, user balances can be directly settled on SEKAI, KIRA\u2019s base layer, leveraging account abstraction. This arrangement allows Layer 2 applications to be treated similarly to user accounts, enabling them to perform on-chain actions such as issuing tokens, participating in governance, staking, and even communicating with other applications as if they were autonomous humans."}),"\n",(0,n.jsx)(t.p,{children:"In managing and ensuring the availability of arbitrary application data, INTERX adopts a specialized implementation designed to enhance the data replication versus network overhead ratio. This implementation is underpinned by four foundational concepts:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Integrated Data Management:"})," Consensus nodes operate and autoscale INTERX containers alongside their RollApp execution containers, akin to how edge nodes function within traditional Web2 networks. An edge node serves as a conduit between local environments (SEKAI and RollApp containers in KIRA\u2019s case) and the external world. In this setup, essential data is directly accessible on the same devices that execute the application, thus reducing latency and the dependency issues seen when DA is handled by an external network."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Dedicated DA Sub-networks"}),": Leveraging its node discovery capabilities, INTERX assigns each RollApp its own firewalled and rate-limited DA 'subnet'. This architecture optimizes bandwidth utilization and resource allocation by reducing the exchange and management of the application\u2019s data only to the nodes directly relevant to the application\u2014namely, its executors and verifiers."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Adaptive Data Replication"}),": Traditional DA systems often employ a one-size-fits-all replication factor. Essentially, they define the level of redundancy through a fixed number of copies distributed within the network to ensure data availability. In practice, however, individual applications have distinct requirements for data access speed and replication based on the data type. With INTERX, RollApp data is replicated based on the individual needs of executors and verifiers. Developers can scale this replication level to align precisely with their application's needs, such as minimum bandwidth utilization for noncritical data and/or maximum possible security for application-critical data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Caching:"})," INTERX implements a caching mechanism to efficiently manage high-demand scenarios and prevent system overload. This feature is especially important in KIRA, where SEKAI\u2019s block time can be extended based on the number of consensus nodes involved, influencing the likelihood of data being queried multiple times before any updates occur. By storing data after its initial retrieval, INTERX can swiftly respond to duplicate requests, conserving resources required to perform complex queries and thus maintaining network responsiveness."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"64165f6d3db54be68a8aa002dfb06fa1",children:"Decentralized Api Gateway Through Swarm Request"}),"\n",(0,n.jsx)(t.p,{children:"A distinctive feature of INTERX is its functionality as a decentralized RPC gateway. This capability stems from its unique setup where each INTERX node, regardless of its associated subnet, is linked to a KIRA account address, with all responses being digitally signed. This architecture allows users to query multiple nodes simultaneously and evaluate the responses against each other. Such a mechanism enables users to identify nodes that consistently deliver precise responses and craft off-chain fraud proofs against nodes disseminating fraudulent or inconsistent data."}),"\n",(0,n.jsx)(t.p,{children:"While light clients theoretically offer higher security through block-by-block consensus verification (without storing data), they fall short due to the maintenance they require. This maintenance challenge becomes particularly pronounced across hundreds or thousands of applications in a growing multi-chain world. By enabling the creation of fraud proofs, INTERX introduces a practical alternative for decentralization. It establishes a balance between the security offered by light clients and the convenience of Infura-style RPC providers. Through repeated queries to a broad spectrum of INTERX nodes, users can achieve a level of security comparable to that of light clients, assuming these nodes are either verified through the Identity Registrar or have stakes involved. This system underscores that even a single honest INTERX node in the query batch can trigger the eviction or slashing of dishonest ones. However, for maximum safety, users are recommended to operate their own INTERX node as well as a SEKAI instance, essentially running a full node."})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var r=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),r=a(2466),s=a(6550),o=a(469),l=a(1980),c=a(7392),d=a(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,r=h(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,u]=f({queryString:a,groupId:i}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,d.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:i}),g=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var m=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const t=e.currentTarget,a=l.indexOf(t),i=o[a].value;i!==n&&(c(t),s(i))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function I(e){const t=b(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,v.jsx)(I,{...e,children:u(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>s});var n=a(7294);const i={},r=n.createContext(i);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/360afd07.5830ce3c.js b/assets/js/360afd07.5830ce3c.js deleted file mode 100644 index f30fe93..0000000 --- a/assets/js/360afd07.5830ce3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1070],{6801:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},u=void 0,l={id:"Stack/INTERX--Middleware/Command-Line-Interface",title:"Command Line Interface",description:"Documentation coming soon\u2026",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Command-Line-Interface.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b"},next:{title:"MIRO | Frontend",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,r.a)(),...e.components};return(0,a.jsx)(t.p,{children:(0,a.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(7294),r=n(6905),o=n(2466),u=n(6550),l=n(469),s=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[u,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=b({queryString:n,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return m({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:u,tabValues:l}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=s.indexOf(t),r=l[n].value;r!==a&&(i(t),u(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>u});var a=n(7294);const r={},o=a.createContext(r);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/360afd07.97010d32.js b/assets/js/360afd07.97010d32.js new file mode 100644 index 0000000..fc275cc --- /dev/null +++ b/assets/js/360afd07.97010d32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1070],{6801:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},u=void 0,s={id:"Stack/INTERX--Middleware/Command-Line-Interface",title:"Command Line Interface",description:"Documentation coming soon\u2026",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Command-Line-Interface.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a",permalink:"/docs.kira.network/docs/39242b54-c86a-4406-82f9-49cad4ed7c5a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/docs/cf419aea-20dc-4421-951b-2579c3026e6b"},next:{title:"MIRO | Frontend",permalink:"/docs.kira.network/docs/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"}},l={},i=[];function c(e){const t={em:"em",p:"p",...(0,r.a)(),...e.components};return(0,a.jsx)(t.p,{children:(0,a.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(7294),r=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[u,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=b({queryString:n,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return m({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=s[n].value;r!==a&&(i(t),u(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var a=n(7294);const r={},o=a.createContext(r);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b54d8e9.0d9ac4fc.js b/assets/js/3b54d8e9.0d9ac4fc.js deleted file mode 100644 index a2615a3..0000000 --- a/assets/js/3b54d8e9.0d9ac4fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9198],{2772:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},u=void 0,s={id:"Community",title:"Community",description:"Coming soon\u2026",source:"@site/tabs/Docs/Community.mdx",sourceDirName:".",slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},sidebar:"defaultSidebar",previous:{title:"TORII | Bridge",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9"},next:{title:"Wallet",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"}},l={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:n,groupId:a}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(i(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b54d8e9.59cecb6d.js b/assets/js/3b54d8e9.59cecb6d.js new file mode 100644 index 0000000..f19661d --- /dev/null +++ b/assets/js/3b54d8e9.59cecb6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9198],{2772:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},u=void 0,s={id:"Community",title:"Community",description:"Coming soon\u2026",source:"@site/tabs/Docs/Community.mdx",sourceDirName:".",slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f",permalink:"/docs.kira.network/docs/6196d806-d61d-4013-b317-d9f2f8f4008f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},sidebar:"defaultSidebar",previous:{title:"TORII | Bridge",permalink:"/docs.kira.network/docs/d5d8036d-f978-4053-b7e8-57d9244c09e9"},next:{title:"Wallet",permalink:"/docs.kira.network/docs/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"}},l={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:n,groupId:a}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(i(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e84f229.6a175e24.js b/assets/js/3e84f229.6a175e24.js deleted file mode 100644 index 40b3cb5..0000000 --- a/assets/js/3e84f229.6a175e24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4923],{4497:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>f,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var s=i(5893),n=i(1151),t=i(4866),d=i(5162);const c={title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},a=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar",title:"Identity Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d482180d-165a-4c09-8c32-167f061ceb92",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},sidebar:"defaultSidebar",previous:{title:"Network Properties",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0"},next:{title:"Data Registry",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"}},l={},h=[{value:"Concept",id:"9c97a6c6054d453c8245d2973adc7759",level:2},{value:"Record verification process",id:"5c2105975b574720828df7a8b4e61ce6",level:3},{value:"Unique identity keys",id:"7cc44d12adbc452199448907f6756306",level:3},{value:"Consensus node records examples",id:"2c29fae12274406b915c3f6df714c39a",level:4},{value:"Users records examples",id:"cef2ddb6fb744ca5a8f7312f2246bc20",level:4},{value:"Parameters",id:"026f178a01804399a7ebb999934c01ad",level:2},{value:"Cli syntax & examples",id:"f1fb0aad90ad4d53978864b33ac263c9",level:2},{value:"Transactions",id:"335766cd9511406e99cbaeea5b6428cc",level:2},{value:"Adding & editing records",id:"62956e6786bf4d3a96b5cd70654c92a9",level:4},{value:"Deleting records",id:"af09186bc0ce40109ee7c1ac05b80266",level:4},{value:"Requesting record verification",id:"bb0d96fae6004b9e8492e36357643c77",level:4},{value:"Verifying or rejecting records verification requests",id:"9da55fa53fea4987bed3cbc06d80d56d",level:4},{value:"Queries",id:"d13c14d8a80f46f4a2ad26e3cbe8b859",level:2},{value:"Query identity record by id",id:"6776be81baeb48ba8b1e36ff2925d5ff",level:4},{value:"Query identity records by address",id:"865325fc4b494eec95bcd7d9a9743a6f",level:4},{value:"Query specific record id of a specific account",id:"6c3f59a1538f4b6c82b64b5789c3b2a8",level:4},{value:"Query specific record key of a specific account",id:"56dc6e36f358439c9a4cebcebea4995e",level:4},{value:"Query all pending requests of a specific record id",id:"a14eba53930948d0ab0aff5289e8084f",level:4},{value:"Query all pending record requests as requester",id:"2b3f53912b494d66a3c351452df7d8d8",level:4},{value:"Query all pending record requests as verifier/approver",id:"89c15277298943eea39981e1bbe61449",level:4},{value:"Governance",id:"f1324a890dd64b178343e16d2b8e8127",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h2,{id:"9c97a6c6054d453c8245d2973adc7759",children:"Concept"}),"\n",(0,s.jsx)(r.p,{children:'The Identity Registrar (IR) is a central component of the KIRA network, designed to bolster the integrity and authenticity of user accounts. It addresses the critical challenge of "Sybil attacks", where a single entity poses as multiple users. Through the IR, KIRA emphasizes the significance of genuine, unique user representation, ensuring a more democratic and fair governance structure.'}),"\n",(0,s.jsxs)(r.p,{children:["At its core, the IR provides a mechanism for users to authenticate assertions about themselves, such as ownership of a website or an online handle. Unlike traditional centralized verification systems, the IR operates on mutual verification principles within the community. Users within the KIRA network can endorse the validity of claims made by others by giving their attestation, fostering an environment of collective trust. The framework of the IR is akin to a digital dictionary, allowing users to define key-value pairs relevant to their identity. For instance, associating a key ",(0,s.jsx)(r.code,{children:"website"})," with the value ",(0,s.jsx)(r.code,{children:"example.com"})," serves as proof of ownership of said website. Importantly, any alteration to these authenticated records necessitates re-verification, preserving the integrity of claims."]}),"\n",(0,s.jsx)(r.p,{children:"The essence of IR transcends mere claim verification. Addressing concerns of true sovereignty, IR refines the concept of social attestations. Instead of uniformly weighing attestations, the focus pivots to the trustworthiness of the attestor from an individual or application's perspective. This subjectivity highlights that in the vast sea of approvals, the ones deemed trustworthy to the user or a specific application are the ones that truly matter. It recognizes that while multiple individuals may appear non-sovereign from a network's viewpoint, in reality, their distinct identities hold weight. The IR thus fosters a nuanced, relative view of identity that adapts across applications and purposes, emphasizing the notion that when it comes to digital identity, objective truths are often overshadowed by the diverse perspectives they cater to."}),"\n",(0,s.jsx)(r.h3,{id:"5c2105975b574720828df7a8b4e61ce6",children:"Record verification process"}),"\n",(0,s.jsx)(r.p,{children:"The process of verifying an identity record involves a few steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"An user creates an on-chain transaction that includes the desired key and value for the identity record."}),"\n",(0,s.jsx)(r.li,{children:"It then requests verification from a publicly trusted KIRA account for the key-value pair, and include a tip as payment for the service provided."}),"\n",(0,s.jsx)(r.li,{children:"If the verification is successful, the record will remain verified unless any changes are made to the verified key."}),"\n",(0,s.jsx)(r.li,{children:"If any changes are made to the key after the verification process, the record will no longer be considered verified."}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["It is important to note that verification requests must include a tip, which cannot be less than the ",(0,s.jsx)(r.code,{children:"min_identity_approval_tip"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," (default: 2x the transaction cost of the approval/rejection transaction). This tip is meant to incentivize other accounts to verify identity records, or at least provide them with a refund of the transaction cost. Tips are paid regardless of whether the records are rejected or approved, ensuring that approvers are honest and trusted, rather than motivated solely by financial gain. The network governance can also choose to distrust any account at any time through a proposal process, marking them as potentially malicious and referencing the evidence."]}),"\n",(0,s.jsx)(r.h3,{id:"7cc44d12adbc452199448907f6756306",children:"Unique identity keys"}),"\n",(0,s.jsxs)(r.p,{children:["KIRA offers a range of dedicated identity keys designed to make interactions with the network more user-friendly. These keys store various user-related information that can be interpreted by wallets, explorers, visualizers, and other front-end applications. Notably, KIRA allows for the creation of ",(0,s.jsx)(r.strong,{children:"any"})," custom key within the Identity Registrar, but it reserves certain key names like ",(0,s.jsx)(r.code,{children:"username"})," and ",(0,s.jsx)(r.code,{children:"moniker"})," by default. These reserved keys have special significance, affecting the visibility of nodes or accounts across different applications. What's more, the governance of the KIRA network can enforce these key-value pairs to remain globally unique, provided they do not already exist, which is managed by modifying the ",(0,s.jsx)(r.code,{children:"unique_identity_keys"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". As a result, users can send assets not just to a KIRA address, but also by simply providing a unique username or moniker. Once these unique keys are created, they cannot be deleted, ensuring a more streamlined and user-friendly experience."]}),"\n",(0,s.jsx)(r.h4,{id:"2c29fae12274406b915c3f6df714c39a",children:"Consensus node records examples"}),"\n",(0,s.jsx)(r.p,{children:"Governance can create one or more of the following keys in the Identity Registrar as unique to increase consensus node public recognition and trust"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"moniker"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Identifies validator name as seen on the leaderboard table."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"description"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"A longer description of validator node"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to the validator website"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"logo"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image (256kB max) representing validator entity"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"social"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Any social profiles such as Twitter, Telegram, etc\u2026"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"contact"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Email address, url, or another emergency contact"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"validator_node_id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Node ID of the validator node. Required to identify the node in the network visualizer."})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"cef2ddb6fb744ca5a8f7312f2246bc20",children:"Users records examples"}),"\n",(0,s.jsx)(r.p,{children:"Users can create one or several of the following keys in the Identity Registrar in order to make their account easier to identify and recognize by other users."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"username"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsxs)(r.td,{children:["Identifies your name as seen on the network explorer. The value can be used for the purpose of sending transactions similarly to ",(0,s.jsx)(r.a,{href:"https://ens.domains/",children:"ENS domain"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"avatar"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image or gif (256kB max)"})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"026f178a01804399a7ebb999934c01ad",children:"Parameters"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"NAME"}),(0,s.jsx)(r.th,{children:"TYPE"}),(0,s.jsx)(r.th,{children:"EXAMPLE"}),(0,s.jsx)(r.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"uint64"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"153789"})}),(0,s.jsx)(r.td,{children:"A unique identifier for the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"address"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"kira1vgy0v6l593lxghv9v8a98nl87x4y2uvfn0yn7r"})}),(0,s.jsx)(r.td,{children:"The address of the user associated with the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"key"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsxs)(r.td,{children:['The key representing the type of identity information, e.g., "website" for website ownership. Can be custom or reserved such as ',(0,s.jsx)(r.code,{children:"username"})," or ",(0,s.jsx)(r.code,{children:"moniker"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"value"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"example.com"})}),(0,s.jsxs)(r.td,{children:["The value associated with the key, serving as proof of ownership or association, e.g., a website URL for a ",(0,s.jsx)(r.code,{children:"website"})," key."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"date"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"google.protobuf.Timestamp"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"2023-09-28T12:34:56Z"})}),(0,s.jsx)(r.td,{children:"The timestamp indicating when the Identity Record was created."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"verifiers"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"[]string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:'[kira1vgy0v6l59\u2026, kira1gurt0g67y9\u2026"]'})}),(0,s.jsx)(r.td,{children:"A list of addresses of users who have verified the validity of the Identity Record."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"f1fb0aad90ad4d53978864b33ac263c9",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(r.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(r.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(r.em,{children:"documentation for more details."})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$SIGNER"})})," ",(0,s.jsx)(r.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(r.em,{children:"and"})," ",(0,s.jsxs)(r.em,{children:[(0,s.jsx)(r.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(r.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(r.h2,{id:"335766cd9511406e99cbaeea5b6428cc",children:"Transactions"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"register-identity-records"})}),(0,s.jsx)(r.th,{children:"Add or edit identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"delete-identity-records"})}),(0,s.jsx)(r.td,{children:"Delete one or several identity records."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"request-identity-record-verify"})}),(0,s.jsx)(r.td,{children:"Request verification for an identity record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})}),(0,s.jsx)(r.td,{children:"Verify or reject requests for identity record verification."})]})]})]}),(0,s.jsx)(r.h4,{id:"62956e6786bf4d3a96b5cd70654c92a9",children:"Adding & editing records"}),(0,s.jsxs)(r.p,{children:["To add or edit identity records, use the ",(0,s.jsx)(r.code,{children:"register-identity-records"})," CLI command. Provide the desired key-value pairs either in a JSON file by specifying its path with the ",(0,s.jsx)(r.code,{children:"--infos-file"})," flag, or directly in the command as a JSON string using the ",(0,s.jsx)(r.code,{children:"--infos-json"})," flag. Note that certain key names are reserved and may be required to be unique within the Identity Registrar."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSFILE"}),": The path to the file containing information for the identity request."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSJSON"}),": The JSON string containing information for the identity request."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n[ --infos-file=$INFOSFILE || --infos-json=$INFOSJSON ]\n"})}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# Example\n# from an id.json file with below content : \n# {\n# "key1": "value1",\n# "key2": "value2"\n# }\nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--infos-file="path-to-id.json" \n\n# providing json format manually \nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\ \n--infos-json="{\\"$KEY1\\":\\"$VAL1\\",\\"$KEY2\\":\\"$VAL2\\"}"\n'})}),(0,s.jsx)(r.h4,{id:"af09186bc0ce40109ee7c1ac05b80266",children:"Deleting records"}),(0,s.jsxs)(r.p,{children:["To delete one or several identity records, use the ",(0,s.jsx)(r.code,{children:"delete-identity-records"})," CLI command and provide the keys to be deleted as a comma-separated list using the ",(0,s.jsx)(r.code,{children:"--keys"})," flag. Note that the keys ",(0,s.jsx)(r.code,{children:"moniker"})," and ",(0,s.jsx)(r.code,{children:"username"})," cannot be deleted."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEYS"}),": Comma-separated list of keys."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov delete-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--keys=$KEYS\n"})}),(0,s.jsx)(r.h4,{id:"bb0d96fae6004b9e8492e36357643c77",children:"Requesting record verification"}),(0,s.jsxs)(r.p,{children:["To verify an identity record, use the ",(0,s.jsx)(r.code,{children:"request-identity-record-verify"})," CLI command. Provide the address of the verifier using the ",(0,s.jsx)(r.code,{children:"--verifier"})," flag, and the desired key(s) or record ID(s) using the ",(0,s.jsx)(r.code,{children:"--record-ids"})," flag. Users can also provide a tip using the ",(0,s.jsx)(r.code,{children:"--tip"})," flag to incentivize the verifier to review the request. Note that the tip value must be greater than twice the transaction fee value."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$RECORDIDS"}),": Comma-separated list of identity record ids."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$TIP"}),": The tip to be given to the verifier."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov request-identity-record-verify \\\n--from=$SIGNER $FLAGS_TX \\\n--verifier=$VERIFIER --record-ids=$RECORDIDS --tip=$TIP\n"})}),(0,s.jsx)(r.h4,{id:"9da55fa53fea4987bed3cbc06d80d56d",children:"Verifying or rejecting records verification requests"}),(0,s.jsxs)(r.p,{children:["To verify or reject a request for identity record verification, use the ",(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})," CLI command. To approve the request, include the ",(0,s.jsx)(r.code,{children:"--approve"})," flag and set its value to ",(0,s.jsx)(r.code,{children:"true"}),". To reject the request, set the value of ",(0,s.jsx)(r.code,{children:"--approve"})," to ",(0,s.jsx)(r.code,{children:"false"}),". The ID of the request must also be provided. Only the verifier specified in the original request can approve or reject it."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": Id of the key to be approved/rejected."]}),"\n"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$APPROVE"}),": The flag to approve or reject the verification request. Defaults to ",(0,s.jsx)(r.code,{children:"true"}),"."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov handle-identity-records-verify-request \\\n--from=$SIGNER $FLAGS_TX \\\n$ID --approve=$APPROVE\n"})})]}),(0,s.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(r.h2,{id:"d13c14d8a80f46f4a2ad26e3cbe8b859",children:"Queries"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"all-identity-records"})}),(0,s.jsx)(r.th,{children:"Query all identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record"})}),(0,s.jsx)(r.td,{children:"Query identity record by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-records-by-addr"})}),(0,s.jsx)(r.td,{children:"Query identity records by owner."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-request"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-requester"})}),(0,s.jsx)(r.td,{children:"Query identity records verify requests by requester."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by verifier/approver."})]})]})]}),(0,s.jsx)(r.h4,{id:"6776be81baeb48ba8b1e36ff2925d5ff",children:"Query identity record by id"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific identity record using the ",(0,s.jsx)(r.code,{children:"identity-record"})," subcommand followed by the record\u2019s identifier."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"865325fc4b494eec95bcd7d9a9743a6f",children:"Query identity records by address"}),(0,s.jsxs)(r.p,{children:["Fetch all identity records associated with a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand followed by the account\u2019s address."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The account\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"6c3f59a1538f4b6c82b64b5789c3b2a8",children:"Query specific record id of a specific account"}),(0,s.jsxs)(r.p,{children:["To query a specific record ID of a specific account, utilize the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand in conjunction with ",(0,s.jsx)(r.code,{children:"jq"})," filtering using the specific record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.id==\\\\"$ID\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"56dc6e36f358439c9a4cebcebea4995e",children:"Query specific record key of a specific account"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific record key of a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand and ",(0,s.jsx)(r.code,{children:"jq"})," filtering."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEY"}),": The key of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.key==\\\\"$KEY\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"a14eba53930948d0ab0aff5289e8084f",children:"Query all pending requests of a specific record id"}),(0,s.jsxs)(r.p,{children:["Fetch all pending requests of a specific record ID using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests"})," subcommand followed by the record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record-verify-requests-by-requester $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"2b3f53912b494d66a3c351452df7d8d8",children:"Query all pending record requests as requester"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests of a requester account using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$VERIFIER"})," argument may be provided to filter the results to only display pending requests sent to a specific verifier/approver account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": Account\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": (Optional) The specific verifier\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all pending requests of a requester account\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq\n\n# For all pending requests of a requester account sent to a specific verifier\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq ".verify_records | .[] | select(.verifier==\\\\"$VERIFIER\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"89c15277298943eea39981e1bbe61449",children:"Query all pending record requests as verifier/approver"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests for a verifier using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$ACCOUNT"})," argument may be provided to filter the results to only display requests from a specific requester account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": (Optional) The specific requester\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all requests of a verifier\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq\n\n# For all requests of a verifier of a specific requester account\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq ".verify_records | .[] | select(.address==\\\\"$ACCOUNT\\\\")"\n'})})]}),(0,s.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(r.h2,{id:"f1324a890dd64b178343e16d2b8e8127",children:"Governance"}),(0,s.jsx)(r.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,r,i)=>{i.d(r,{Z:()=>d});i(7294);var s=i(6905);const n={tabItem:"tabItem_Ymn6"};var t=i(5893);function d(e){let{children:r,hidden:i,className:d}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(n.tabItem,d),hidden:i,children:r})}},4866:(e,r,i)=>{i.d(r,{Z:()=>I});var s=i(7294),n=i(6905),t=i(2466),d=i(6550),c=i(469),a=i(1980),o=i(7392),l=i(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:r,children:i}=e;return(0,s.useMemo)((()=>{const e=r??function(e){return h(e).map((e=>{let{props:{value:r,label:i,attributes:s,default:n}}=e;return{value:r,label:i,attributes:s,default:n}}))}(i);return function(e){const r=(0,o.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,i])}function f(e){let{value:r,tabValues:i}=e;return i.some((e=>e.value===r))}function x(e){let{queryString:r=!1,groupId:i}=e;const n=(0,d.k6)(),t=function(e){let{queryString:r=!1,groupId:i}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:r,groupId:i});return[(0,a._X)(t),(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace({...n.location,search:r.toString()})}),[t,n])]}function j(e){const{defaultValue:r,queryString:i=!1,groupId:n}=e,t=u(e),[d,a]=(0,s.useState)((()=>function(e){let{defaultValue:r,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(r){if(!f({value:r,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const s=i.find((e=>e.default))??i[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:t}))),[o,h]=x({queryString:i,groupId:n}),[j,p]=function(e){let{groupId:r}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(r),[n,t]=(0,l.Nk)(i);return[n,(0,s.useCallback)((e=>{i&&t.set(e)}),[i,t])]}({groupId:n}),y=(()=>{const e=o??j;return f({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{y&&a(y)}),[y]);return{selectedValue:d,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=i(2389);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=i(5893);function b(e){let{className:r,block:i,selectedValue:s,selectValue:d,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),l=e=>{const r=e.currentTarget,i=a.indexOf(r),n=c[i].value;n!==s&&(o(r),d(n))},h=e=>{let r=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const i=a.indexOf(e.currentTarget)+1;r=a[i]??a[0];break}case"ArrowLeft":{const i=a.indexOf(e.currentTarget)-1;r=a[i]??a[a.length-1];break}}r?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":i},r),children:c.map((e=>{let{value:r,label:i,attributes:t}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:s===r?0:-1,"aria-selected":s===r,ref:e=>a.push(e),onKeyDown:h,onClick:l,...t,className:(0,n.Z)("tabs__item",y.tabItem,t?.className,{"tabs__item--active":s===r}),children:i??r},r)}))})}function g(e){let{lazy:r,children:i,selectedValue:n}=e;const t=(Array.isArray(i)?i:[i]).filter(Boolean);if(r){const e=t.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:t.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function m(e){const r=j(e);return(0,v.jsxs)("div",{className:(0,n.Z)("tabs-container",y.tabList),children:[(0,v.jsx)(b,{...e,...r}),(0,v.jsx)(g,{...e,...r})]})}function I(e){const r=(0,p.Z)();return(0,v.jsx)(m,{...e,children:h(e.children)},String(r))}},1151:(e,r,i)=>{i.d(r,{Z:()=>c,a:()=>d});var s=i(7294);const n={},t=s.createContext(n);function d(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e84f229.f39e13b1.js b/assets/js/3e84f229.f39e13b1.js new file mode 100644 index 0000000..ddc27a0 --- /dev/null +++ b/assets/js/3e84f229.f39e13b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4923],{4497:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>f,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var s=i(5893),n=i(1151),t=i(4866),d=i(5162);const c={title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},a=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar",title:"Identity Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d482180d-165a-4c09-8c32-167f061ceb92",permalink:"/docs.kira.network/docs/d482180d-165a-4c09-8c32-167f061ceb92",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},sidebar:"defaultSidebar",previous:{title:"Network Properties",permalink:"/docs.kira.network/docs/b9b95792-b936-4603-8a46-15566f24e3c0"},next:{title:"Data Registry",permalink:"/docs.kira.network/docs/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"}},l={},h=[{value:"Concept",id:"9c97a6c6054d453c8245d2973adc7759",level:2},{value:"Record Verification Process",id:"5c2105975b574720828df7a8b4e61ce6",level:3},{value:"Unique Identity Keys",id:"7cc44d12adbc452199448907f6756306",level:3},{value:"Consensus Node Records Examples",id:"2c29fae12274406b915c3f6df714c39a",level:4},{value:"Users Records Examples",id:"cef2ddb6fb744ca5a8f7312f2246bc20",level:4},{value:"Parameters",id:"026f178a01804399a7ebb999934c01ad",level:2},{value:"Cli Syntax & Examples",id:"f1fb0aad90ad4d53978864b33ac263c9",level:2},{value:"Transactions",id:"335766cd9511406e99cbaeea5b6428cc",level:2},{value:"Adding & Editing Records",id:"62956e6786bf4d3a96b5cd70654c92a9",level:4},{value:"Deleting Records",id:"af09186bc0ce40109ee7c1ac05b80266",level:4},{value:"Requesting Record Verification",id:"bb0d96fae6004b9e8492e36357643c77",level:4},{value:"Verifying or Rejecting Records Verification Requests",id:"9da55fa53fea4987bed3cbc06d80d56d",level:4},{value:"Queries",id:"d13c14d8a80f46f4a2ad26e3cbe8b859",level:2},{value:"Query Identity Record by Id",id:"6776be81baeb48ba8b1e36ff2925d5ff",level:4},{value:"Query Identity Records by Address",id:"865325fc4b494eec95bcd7d9a9743a6f",level:4},{value:"Query Specific Record Id of a Specific Account",id:"6c3f59a1538f4b6c82b64b5789c3b2a8",level:4},{value:"Query Specific Record Key of a Specific Account",id:"56dc6e36f358439c9a4cebcebea4995e",level:4},{value:"Query All Pending Requests of a Specific Record Id",id:"a14eba53930948d0ab0aff5289e8084f",level:4},{value:"Query All Pending Record Requests as Requester",id:"2b3f53912b494d66a3c351452df7d8d8",level:4},{value:"Query All Pending Record Requests as Verifier/approver",id:"89c15277298943eea39981e1bbe61449",level:4},{value:"Governance",id:"f1324a890dd64b178343e16d2b8e8127",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h2,{id:"9c97a6c6054d453c8245d2973adc7759",children:"Concept"}),"\n",(0,s.jsx)(r.p,{children:'The Identity Registrar (IR) is a central component of the KIRA network, designed to bolster the integrity and authenticity of user accounts. It addresses the critical challenge of "Sybil attacks", where a single entity poses as multiple users. Through the IR, KIRA emphasizes the significance of genuine, unique user representation, ensuring a more democratic and fair governance structure.'}),"\n",(0,s.jsxs)(r.p,{children:["At its core, the IR provides a mechanism for users to authenticate assertions about themselves, such as ownership of a website or an online handle. Unlike traditional centralized verification systems, the IR operates on mutual verification principles within the community. Users within the KIRA network can endorse the validity of claims made by others by giving their attestation, fostering an environment of collective trust. The framework of the IR is akin to a digital dictionary, allowing users to define key-value pairs relevant to their identity. For instance, associating a key ",(0,s.jsx)(r.code,{children:"website"})," with the value ",(0,s.jsx)(r.code,{children:"example.com"})," serves as proof of ownership of said website. Importantly, any alteration to these authenticated records necessitates re-verification, preserving the integrity of claims."]}),"\n",(0,s.jsx)(r.p,{children:"The essence of IR transcends mere claim verification. Addressing concerns of true sovereignty, IR refines the concept of social attestations. Instead of uniformly weighing attestations, the focus pivots to the trustworthiness of the attestor from an individual or application's perspective. This subjectivity highlights that in the vast sea of approvals, the ones deemed trustworthy to the user or a specific application are the ones that truly matter. It recognizes that while multiple individuals may appear non-sovereign from a network's viewpoint, in reality, their distinct identities hold weight. The IR thus fosters a nuanced, relative view of identity that adapts across applications and purposes, emphasizing the notion that when it comes to digital identity, objective truths are often overshadowed by the diverse perspectives they cater to."}),"\n",(0,s.jsx)(r.h3,{id:"5c2105975b574720828df7a8b4e61ce6",children:"Record Verification Process"}),"\n",(0,s.jsx)(r.p,{children:"The process of verifying an identity record involves a few steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"An user creates an on-chain transaction that includes the desired key and value for the identity record."}),"\n",(0,s.jsx)(r.li,{children:"It then requests verification from a publicly trusted KIRA account for the key-value pair, and include a tip as payment for the service provided."}),"\n",(0,s.jsx)(r.li,{children:"If the verification is successful, the record will remain verified unless any changes are made to the verified key."}),"\n",(0,s.jsx)(r.li,{children:"If any changes are made to the key after the verification process, the record will no longer be considered verified."}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["It is important to note that verification requests must include a tip, which cannot be less than the ",(0,s.jsx)(r.code,{children:"min_identity_approval_tip"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," (default: 2x the transaction cost of the approval/rejection transaction). This tip is meant to incentivize other accounts to verify identity records, or at least provide them with a refund of the transaction cost. Tips are paid regardless of whether the records are rejected or approved, ensuring that approvers are honest and trusted, rather than motivated solely by financial gain. The network governance can also choose to distrust any account at any time through a proposal process, marking them as potentially malicious and referencing the evidence."]}),"\n",(0,s.jsx)(r.h3,{id:"7cc44d12adbc452199448907f6756306",children:"Unique Identity Keys"}),"\n",(0,s.jsxs)(r.p,{children:["KIRA offers a range of dedicated identity keys designed to make interactions with the network more user-friendly. These keys store various user-related information that can be interpreted by wallets, explorers, visualizers, and other front-end applications. Notably, KIRA allows for the creation of ",(0,s.jsx)(r.strong,{children:"any"})," custom key within the Identity Registrar, but it reserves certain key names like ",(0,s.jsx)(r.code,{children:"username"})," and ",(0,s.jsx)(r.code,{children:"moniker"})," by default. These reserved keys have special significance, affecting the visibility of nodes or accounts across different applications. What's more, the governance of the KIRA network can enforce these key-value pairs to remain globally unique, provided they do not already exist, which is managed by modifying the ",(0,s.jsx)(r.code,{children:"unique_identity_keys"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". As a result, users can send assets not just to a KIRA address, but also by simply providing a unique username or moniker. Once these unique keys are created, they cannot be deleted, ensuring a more streamlined and user-friendly experience."]}),"\n",(0,s.jsx)(r.h4,{id:"2c29fae12274406b915c3f6df714c39a",children:"Consensus Node Records Examples"}),"\n",(0,s.jsx)(r.p,{children:"Governance can create one or more of the following keys in the Identity Registrar as unique to increase consensus node public recognition and trust"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"moniker"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Identifies validator name as seen on the leaderboard table."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"description"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"A longer description of validator node"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to the validator website"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"logo"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image (256kB max) representing validator entity"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"social"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Any social profiles such as Twitter, Telegram, etc\u2026"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"contact"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Email address, url, or another emergency contact"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"validator_node_id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Node ID of the validator node. Required to identify the node in the network visualizer."})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"cef2ddb6fb744ca5a8f7312f2246bc20",children:"Users Records Examples"}),"\n",(0,s.jsx)(r.p,{children:"Users can create one or several of the following keys in the Identity Registrar in order to make their account easier to identify and recognize by other users."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"username"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsxs)(r.td,{children:["Identifies your name as seen on the network explorer. The value can be used for the purpose of sending transactions similarly to ",(0,s.jsx)(r.a,{href:"https://ens.domains/",children:"ENS domain"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"avatar"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image or gif (256kB max)"})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"026f178a01804399a7ebb999934c01ad",children:"Parameters"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"NAME"}),(0,s.jsx)(r.th,{children:"TYPE"}),(0,s.jsx)(r.th,{children:"EXAMPLE"}),(0,s.jsx)(r.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"uint64"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"153789"})}),(0,s.jsx)(r.td,{children:"A unique identifier for the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"address"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"kira1vgy0v6l593lxghv9v8a98nl87x4y2uvfn0yn7r"})}),(0,s.jsx)(r.td,{children:"The address of the user associated with the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"key"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsxs)(r.td,{children:['The key representing the type of identity information, e.g., "website" for website ownership. Can be custom or reserved such as ',(0,s.jsx)(r.code,{children:"username"})," or ",(0,s.jsx)(r.code,{children:"moniker"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"value"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"example.com"})}),(0,s.jsxs)(r.td,{children:["The value associated with the key, serving as proof of ownership or association, e.g., a website URL for a ",(0,s.jsx)(r.code,{children:"website"})," key."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"date"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"google.protobuf.Timestamp"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"2023-09-28T12:34:56Z"})}),(0,s.jsx)(r.td,{children:"The timestamp indicating when the Identity Record was created."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"verifiers"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"[]string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:'[kira1vgy0v6l59\u2026, kira1gurt0g67y9\u2026"]'})}),(0,s.jsx)(r.td,{children:"A list of addresses of users who have verified the validity of the Identity Record."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"f1fb0aad90ad4d53978864b33ac263c9",children:"Cli Syntax & Examples"}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(r.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(r.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(r.em,{children:"documentation for more details."})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$SIGNER"})})," ",(0,s.jsx)(r.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(r.em,{children:"and"})," ",(0,s.jsxs)(r.em,{children:[(0,s.jsx)(r.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(r.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(r.h2,{id:"335766cd9511406e99cbaeea5b6428cc",children:"Transactions"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"register-identity-records"})}),(0,s.jsx)(r.th,{children:"Add or edit identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"delete-identity-records"})}),(0,s.jsx)(r.td,{children:"Delete one or several identity records."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"request-identity-record-verify"})}),(0,s.jsx)(r.td,{children:"Request verification for an identity record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})}),(0,s.jsx)(r.td,{children:"Verify or reject requests for identity record verification."})]})]})]}),(0,s.jsx)(r.h4,{id:"62956e6786bf4d3a96b5cd70654c92a9",children:"Adding & Editing Records"}),(0,s.jsxs)(r.p,{children:["To add or edit identity records, use the ",(0,s.jsx)(r.code,{children:"register-identity-records"})," CLI command. Provide the desired key-value pairs either in a JSON file by specifying its path with the ",(0,s.jsx)(r.code,{children:"--infos-file"})," flag, or directly in the command as a JSON string using the ",(0,s.jsx)(r.code,{children:"--infos-json"})," flag. Note that certain key names are reserved and may be required to be unique within the Identity Registrar."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSFILE"}),": The path to the file containing information for the identity request."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSJSON"}),": The JSON string containing information for the identity request."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n[ --infos-file=$INFOSFILE || --infos-json=$INFOSJSON ]\n"})}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# Example\n# from an id.json file with below content : \n# {\n# "key1": "value1",\n# "key2": "value2"\n# }\nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--infos-file="path-to-id.json" \n\n# providing json format manually \nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\ \n--infos-json="{\\"$KEY1\\":\\"$VAL1\\",\\"$KEY2\\":\\"$VAL2\\"}"\n'})}),(0,s.jsx)(r.h4,{id:"af09186bc0ce40109ee7c1ac05b80266",children:"Deleting Records"}),(0,s.jsxs)(r.p,{children:["To delete one or several identity records, use the ",(0,s.jsx)(r.code,{children:"delete-identity-records"})," CLI command and provide the keys to be deleted as a comma-separated list using the ",(0,s.jsx)(r.code,{children:"--keys"})," flag. Note that the keys ",(0,s.jsx)(r.code,{children:"moniker"})," and ",(0,s.jsx)(r.code,{children:"username"})," cannot be deleted."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEYS"}),": Comma-separated list of keys."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov delete-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--keys=$KEYS\n"})}),(0,s.jsx)(r.h4,{id:"bb0d96fae6004b9e8492e36357643c77",children:"Requesting Record Verification"}),(0,s.jsxs)(r.p,{children:["To verify an identity record, use the ",(0,s.jsx)(r.code,{children:"request-identity-record-verify"})," CLI command. Provide the address of the verifier using the ",(0,s.jsx)(r.code,{children:"--verifier"})," flag, and the desired key(s) or record ID(s) using the ",(0,s.jsx)(r.code,{children:"--record-ids"})," flag. Users can also provide a tip using the ",(0,s.jsx)(r.code,{children:"--tip"})," flag to incentivize the verifier to review the request. Note that the tip value must be greater than twice the transaction fee value."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$RECORDIDS"}),": Comma-separated list of identity record ids."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$TIP"}),": The tip to be given to the verifier."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov request-identity-record-verify \\\n--from=$SIGNER $FLAGS_TX \\\n--verifier=$VERIFIER --record-ids=$RECORDIDS --tip=$TIP\n"})}),(0,s.jsx)(r.h4,{id:"9da55fa53fea4987bed3cbc06d80d56d",children:"Verifying or Rejecting Records Verification Requests"}),(0,s.jsxs)(r.p,{children:["To verify or reject a request for identity record verification, use the ",(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})," CLI command. To approve the request, include the ",(0,s.jsx)(r.code,{children:"--approve"})," flag and set its value to ",(0,s.jsx)(r.code,{children:"true"}),". To reject the request, set the value of ",(0,s.jsx)(r.code,{children:"--approve"})," to ",(0,s.jsx)(r.code,{children:"false"}),". The ID of the request must also be provided. Only the verifier specified in the original request can approve or reject it."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": Id of the key to be approved/rejected."]}),"\n"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$APPROVE"}),": The flag to approve or reject the verification request. Defaults to ",(0,s.jsx)(r.code,{children:"true"}),"."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov handle-identity-records-verify-request \\\n--from=$SIGNER $FLAGS_TX \\\n$ID --approve=$APPROVE\n"})})]}),(0,s.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(r.h2,{id:"d13c14d8a80f46f4a2ad26e3cbe8b859",children:"Queries"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"all-identity-records"})}),(0,s.jsx)(r.th,{children:"Query all identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record"})}),(0,s.jsx)(r.td,{children:"Query identity record by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-records-by-addr"})}),(0,s.jsx)(r.td,{children:"Query identity records by owner."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-request"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-requester"})}),(0,s.jsx)(r.td,{children:"Query identity records verify requests by requester."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by verifier/approver."})]})]})]}),(0,s.jsx)(r.h4,{id:"6776be81baeb48ba8b1e36ff2925d5ff",children:"Query Identity Record by Id"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific identity record using the ",(0,s.jsx)(r.code,{children:"identity-record"})," subcommand followed by the record\u2019s identifier."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"865325fc4b494eec95bcd7d9a9743a6f",children:"Query Identity Records by Address"}),(0,s.jsxs)(r.p,{children:["Fetch all identity records associated with a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand followed by the account\u2019s address."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The account\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"6c3f59a1538f4b6c82b64b5789c3b2a8",children:"Query Specific Record Id of a Specific Account"}),(0,s.jsxs)(r.p,{children:["To query a specific record ID of a specific account, utilize the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand in conjunction with ",(0,s.jsx)(r.code,{children:"jq"})," filtering using the specific record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.id==\\\\"$ID\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"56dc6e36f358439c9a4cebcebea4995e",children:"Query Specific Record Key of a Specific Account"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific record key of a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand and ",(0,s.jsx)(r.code,{children:"jq"})," filtering."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEY"}),": The key of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.key==\\\\"$KEY\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"a14eba53930948d0ab0aff5289e8084f",children:"Query All Pending Requests of a Specific Record Id"}),(0,s.jsxs)(r.p,{children:["Fetch all pending requests of a specific record ID using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests"})," subcommand followed by the record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record-verify-requests-by-requester $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"2b3f53912b494d66a3c351452df7d8d8",children:"Query All Pending Record Requests as Requester"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests of a requester account using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$VERIFIER"})," argument may be provided to filter the results to only display pending requests sent to a specific verifier/approver account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": Account\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": (Optional) The specific verifier\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all pending requests of a requester account\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq\n\n# For all pending requests of a requester account sent to a specific verifier\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq ".verify_records | .[] | select(.verifier==\\\\"$VERIFIER\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"89c15277298943eea39981e1bbe61449",children:"Query All Pending Record Requests as Verifier/approver"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests for a verifier using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$ACCOUNT"})," argument may be provided to filter the results to only display requests from a specific requester account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": (Optional) The specific requester\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all requests of a verifier\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq\n\n# For all requests of a verifier of a specific requester account\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq ".verify_records | .[] | select(.address==\\\\"$ACCOUNT\\\\")"\n'})})]}),(0,s.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(r.h2,{id:"f1324a890dd64b178343e16d2b8e8127",children:"Governance"}),(0,s.jsx)(r.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,r,i)=>{i.d(r,{Z:()=>d});i(7294);var s=i(6905);const n={tabItem:"tabItem_Ymn6"};var t=i(5893);function d(e){let{children:r,hidden:i,className:d}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(n.tabItem,d),hidden:i,children:r})}},4866:(e,r,i)=>{i.d(r,{Z:()=>I});var s=i(7294),n=i(6905),t=i(2466),d=i(6550),c=i(469),a=i(1980),o=i(7392),l=i(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:r,children:i}=e;return(0,s.useMemo)((()=>{const e=r??function(e){return h(e).map((e=>{let{props:{value:r,label:i,attributes:s,default:n}}=e;return{value:r,label:i,attributes:s,default:n}}))}(i);return function(e){const r=(0,o.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,i])}function f(e){let{value:r,tabValues:i}=e;return i.some((e=>e.value===r))}function x(e){let{queryString:r=!1,groupId:i}=e;const n=(0,d.k6)(),t=function(e){let{queryString:r=!1,groupId:i}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:r,groupId:i});return[(0,a._X)(t),(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace({...n.location,search:r.toString()})}),[t,n])]}function j(e){const{defaultValue:r,queryString:i=!1,groupId:n}=e,t=u(e),[d,a]=(0,s.useState)((()=>function(e){let{defaultValue:r,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(r){if(!f({value:r,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const s=i.find((e=>e.default))??i[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:t}))),[o,h]=x({queryString:i,groupId:n}),[j,p]=function(e){let{groupId:r}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(r),[n,t]=(0,l.Nk)(i);return[n,(0,s.useCallback)((e=>{i&&t.set(e)}),[i,t])]}({groupId:n}),y=(()=>{const e=o??j;return f({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{y&&a(y)}),[y]);return{selectedValue:d,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=i(2389);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=i(5893);function v(e){let{className:r,block:i,selectedValue:s,selectValue:d,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),l=e=>{const r=e.currentTarget,i=a.indexOf(r),n=c[i].value;n!==s&&(o(r),d(n))},h=e=>{let r=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const i=a.indexOf(e.currentTarget)+1;r=a[i]??a[0];break}case"ArrowLeft":{const i=a.indexOf(e.currentTarget)-1;r=a[i]??a[a.length-1];break}}r?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":i},r),children:c.map((e=>{let{value:r,label:i,attributes:t}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===r?0:-1,"aria-selected":s===r,ref:e=>a.push(e),onKeyDown:h,onClick:l,...t,className:(0,n.Z)("tabs__item",y.tabItem,t?.className,{"tabs__item--active":s===r}),children:i??r},r)}))})}function g(e){let{lazy:r,children:i,selectedValue:n}=e;const t=(Array.isArray(i)?i:[i]).filter(Boolean);if(r){const e=t.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:t.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function m(e){const r=j(e);return(0,b.jsxs)("div",{className:(0,n.Z)("tabs-container",y.tabList),children:[(0,b.jsx)(v,{...e,...r}),(0,b.jsx)(g,{...e,...r})]})}function I(e){const r=(0,p.Z)();return(0,b.jsx)(m,{...e,children:h(e.children)},String(r))}},1151:(e,r,i)=>{i.d(r,{Z:()=>c,a:()=>d});var s=i(7294);const n={},t=s.createContext(n);function d(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42c1b037.e96ad1c8.js b/assets/js/42c1b037.e96ad1c8.js deleted file mode 100644 index 1106a41..0000000 --- a/assets/js/42c1b037.e96ad1c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3771],{8149:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Recovery/index",title:"Recovery",description:"x/recovery",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Recovery/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Recovery",slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},sidebar:"defaultSidebar",previous:{title:"Token Basketing Module",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},next:{title:"Upgrade",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/recovery",children:(0,n.jsx)(t.code,{children:"x/recovery"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>u});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function u(e){let{children:t,hidden:r,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,u),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),o=r(2466),u=r(6550),s=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[u,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=r(5893);function g(e){let{className:t,block:r,selectedValue:n,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),a=s[r].value;a!==n&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,k.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>u});var n=r(7294);const a={},o=n.createContext(a);function u(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42e9d411.2fe11786.js b/assets/js/42e9d411.2fe11786.js deleted file mode 100644 index 751dafa..0000000 --- a/assets/js/42e9d411.2fe11786.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1229],{3858:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var a=n(5893),s=n(1151),r=n(4866),i=n(5162);const o={title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},l=void 0,c={id:"Tools/Bash-utils",title:"Bash-utils",description:"https://github.com/KiraCore/tools/releases",source:"@site/tabs/docs/Tools/Bash-utils.mdx",sourceDirName:"Tools",slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},sidebar:"defaultSidebar",previous:{title:"Wallet",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},next:{title:"Cosign",permalink:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"}},u={},d=[{value:"Linux",id:"437350f2feaf480b8319b68a2666e5dc",level:2},{value:"Macos",id:"fd030ddb84a245fda72e29dc7ddec525",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),"\n",(0,a.jsx)(t.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),"\n",(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["The prerequisite to securely install BU is ",(0,a.jsx)(t.a,{href:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Always source /etc/profile with ",(0,a.jsx)(t.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(t.h2,{id:"437350f2feaf480b8319b68a2666e5dc",children:"Linux"}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})})]}),(0,a.jsxs)(i.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(t.h2,{id:"fd030ddb84a245fda72e29dc7ddec525",children:"Macos"}),(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms. If you wish to contribute in addressing these compatibility issues, contact us !"})}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7294),s=n(6905),r=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(s.location.search);t.set(r,e),s.replace({...s.location,search:t.toString()})}),[r,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,r=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=b({queryString:n,groupId:s}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,r]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:s}),g=(()=>{const e=c??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,r]),tabValues:r}}var m=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=o[n].value;s!==a&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,s.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function E(e){let{lazy:t,children:n,selectedValue:s}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function x(e){const t=p(e);return(0,v.jsxs)("div",{className:(0,s.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(I,{...e,...t}),(0,v.jsx)(E,{...e,...t})]})}function _(e){const t=(0,m.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const s={},r=a.createContext(s);function i(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4345186d.17d20001.js b/assets/js/4345186d.17d20001.js new file mode 100644 index 0000000..5906924 --- /dev/null +++ b/assets/js/4345186d.17d20001.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9637],{5376:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/"},i=void 0,s={id:"Overview",title:"Overview",description:"KIRA Network combines several modular components to provide a full-stack experience:",source:"@site/tabs/Docs/Overview.mdx",sourceDirName:".",slug:"/",permalink:"/docs.kira.network/docs/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"SEKAI | Backend",permalink:"/docs.kira.network/docs/27fe8d79-00c0-4e0b-872b-3d72a246c073"}},l={},u=[];function c(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=p(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=f({queryString:n,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??b;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function I(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4345186d.4a10f83b.js b/assets/js/4345186d.4a10f83b.js deleted file mode 100644 index 73c145f..0000000 --- a/assets/js/4345186d.4a10f83b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9637],{5376:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/"},i=void 0,s={id:"Overview",title:"Overview",description:"KIRA Network combines several modular components to provide a full-stack experience:",source:"@site/tabs/Docs/Overview.mdx",sourceDirName:".",slug:"/",permalink:"/docs.kira.network/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"SEKAI | Backend",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"}},l={},u=[];function c(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=p(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=f({queryString:n,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??b;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function I(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43724f32.96f65f61.js b/assets/js/43724f32.96f65f61.js new file mode 100644 index 0000000..eac6880 --- /dev/null +++ b/assets/js/43724f32.96f65f61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2139],{2692:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const o={title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},s=void 0,i={id:"What-is-KIRA/Orchestrator---RYOKAI",title:"Orchestrator - RYOKAI",description:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.",source:"@site/tabs/Learn/What-is-KIRA/Orchestrator---RYOKAI.mdx",sourceDirName:"What-is-KIRA",slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},sidebar:"defaultSidebar",previous:{title:"Frontend - MIRO",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a"},next:{title:"Overview",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"}},u={},l=[];function c(e){const t={p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration."}),"\n",(0,n.jsx)(t.p,{children:"RYOKAI facilitates the initialization and management of nodes via a built-in terminal, which permits the direct execution of commands on remote hosts. Additionally, it offers cross-platform support, enabling consensus nodes to manage their validator accounts on Android, iOS, and Linux devices. These features provide operators with the flexibility to access and control their infrastructure from any location, at any time. For monitoring, RYOKAI eliminates the need for additional computer systems by incorporating Prometheus exporters and the standard Tendermint endpoint (:26660). These tools collect and relay operational data, providing validators with a detailed understanding of network health and performance without relying on traditional monitoring infrastructure. Additionally, RYOKAI improves network security through firewall configurations, ssh key management, and encrypted communication channels to prevent unauthorized access and vulnerabilities."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),o=a(2466),s=a(6550),i=a(469),u=a(1980),l=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,u._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,o=f(e),[s,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,d]=h({queryString:a,groupId:r}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:r}),v=(()=>{const e=l??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=u.indexOf(t),r=i[a].value;r!==n&&(l(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function I(e){let{lazy:t,children:a,selectedValue:r}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function w(e){const t=(0,b.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var n=a(7294);const r={},o=n.createContext(r);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43724f32.dc03da1e.js b/assets/js/43724f32.dc03da1e.js deleted file mode 100644 index f6a1cfd..0000000 --- a/assets/js/43724f32.dc03da1e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2139],{2692:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=a(5893),r=a(1151);a(4866),a(5162);const o={title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},s=void 0,i={id:"What-is-KIRA/Orchestrator---RYOKAI",title:"Orchestrator - RYOKAI",description:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.",source:"@site/tabs/Learn/What-is-KIRA/Orchestrator---RYOKAI.mdx",sourceDirName:"What-is-KIRA",slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",permalink:"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},sidebar:"defaultSidebar",previous:{title:"Frontend - MIRO",permalink:"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a"},next:{title:"Overview",permalink:"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"}},l={},u=[];function c(e){const t={p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration."}),"\n",(0,n.jsx)(t.p,{children:"RYOKAI facilitates the initialization and management of nodes via a built-in terminal, which permits the direct execution of commands on remote hosts. Additionally, it offers cross-platform support, enabling consensus nodes to manage their validator accounts on Android, iOS, and Linux devices. These features provide operators with the flexibility to access and control their infrastructure from any location, at any time. For monitoring, RYOKAI eliminates the need for additional computer systems by incorporating Prometheus exporters and the standard Tendermint endpoint (:26660). These tools collect and relay operational data, providing validators with a detailed understanding of network health and performance without relying on traditional monitoring infrastructure. Additionally, RYOKAI improves network security through firewall configurations, ssh key management, and encrypted communication channels to prevent unauthorized access and vulnerabilities."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),o=a(2466),s=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,o=f(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[u,d]=h({queryString:a,groupId:r}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:r}),v=(()=>{const e=u??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function I(e){let{lazy:t,children:a,selectedValue:r}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function w(e){const t=(0,b.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var n=a(7294);const r={},o=n.createContext(r);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46d7d864.82121673.js b/assets/js/46d7d864.82121673.js deleted file mode 100644 index af87553..0000000 --- a/assets/js/46d7d864.82121673.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1557],{5950:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Bank",title:"Bank",description:"cosmos.sdk/x/bank",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Bank.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules",slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:16,frontMatter:{title:"Bank",sidebar_position:16,slug:"/04e8b755-d259-40f9-b66c-ddf5223c66fa"},sidebar:"defaultSidebar",previous:{title:"Keys & accounts",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7"},next:{title:"Auth",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/bank"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/46f1d4f2.a733cee1.js b/assets/js/46f1d4f2.a733cee1.js deleted file mode 100644 index 116d386..0000000 --- a/assets/js/46f1d4f2.a733cee1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6116],{7898:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=t(5893),a=t(1151),r=t(4866),i=t(5162);const c={title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},l=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Data-Registry",title:"Data Registry",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Data-Registry.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},sidebar:"defaultSidebar",previous:{title:"Identity Registrar",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92"},next:{title:"Poor Network Conditions",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d"}},o={},h=[{value:"Concept",id:"9a52cc45f0bf457e85fdaedef9706fa6",level:2},{value:"Code of conduct",id:"aee73893689d4ce6a84e3b3216c48610",level:3},{value:"Parameters",id:"6495b76427444740ba614d6beacf29bc",level:2},{value:"Cli syntax & examples",id:"aa1f125af47f4ab7886fd90029d3380c",level:2},{value:"Transactions",id:"cc4eddd5aac24ddb9729522a78cf8320",level:2},{value:"Queries",id:"798c5d84060149699bbef79082f10ee0",level:2},{value:"Query all keys",id:"281888dffb9e4bc28f293e3f95c9ce67",level:4},{value:"Query data by key",id:"9abdf7548d2343979a7f7ad7a714d03f",level:4},{value:"Governance",id:"ef81400b9e8b406d93ba0411684f97f8",level:2},{value:"Create or edit a data registrey key",id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",level:4}];function u(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mo:"mo",mrow:"mrow",msup:"msup",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"9a52cc45f0bf457e85fdaedef9706fa6",children:"Concept"}),"\n",(0,n.jsxs)(s.p,{children:["The Data Registry is a curated data reference storage under governance. Its primary role is to sidestep the constraints of on-chain storage by providing references to external data resources, like those found on IPFS or GitHub. By doing so, the Data Registry ensures that large files or extended data sequences aren't directly stored on-chain. Instead, it archives external URLs, metalinks, and various distributed references. A pivotal aspect of the Data Registry is its ability to vouch for the authenticity and integrity of the external data. This is achieved via on-chain checksums, bolstering trustworthiness by verifying the consistency of hosted data. Furthermore, the Data Registry enriches the stored references by supplying supplementary information, including file size and encoding. Akin to how the ",(0,n.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," assures the legitimacy and uniqueness of user identities, the Data Registry offers a secure, reliable bridge between the on-chain network and the vast external data world."]}),"\n",(0,n.jsx)(s.h3,{id:"aee73893689d4ce6a84e3b3216c48610",children:"Code of conduct"}),"\n",(0,n.jsxs)(s.p,{children:["An integral property of the Data Registry is the ",(0,n.jsx)(s.code,{children:"code_of_conduct"}),". This can be perceived as the Service-layer Agreement bridging network governance and its users. This off-chain text serves as a guiding beacon, delineating the expected conduct of network participants. In essence, it acts as the network's constitution, providing insights and guidelines to users and incoming governance members alike."]}),"\n",(0,n.jsx)(s.h2,{id:"6495b76427444740ba614d6beacf29bc",children:"Parameters"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"NAME"}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"TYPE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"EXAMPLE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"key"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"doc1"})}),(0,n.jsx)(s.td,{children:"The identifier for the stored property."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"reference"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ipfs://QmYw..."})}),(0,n.jsx)(s.td,{children:"The URL or metalink directing to the externally hosted file."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"encoding"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"markdown"})}),(0,n.jsx)(s.td,{children:"Specifies the file's encoding type."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"hash"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"e3b0c442..."})}),(0,n.jsx)(s.td,{children:"The SHA256 checksum, ensuring the file's authenticity."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"size"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"uint64"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"1024"})}),(0,n.jsx)(s.td,{children:"Denotes the file size in Bytes."})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"aa1f125af47f4ab7886fd90029d3380c",children:"Cli syntax & examples"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(s.em,{children:"documentation for more details."})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$SIGNER"})})," ",(0,n.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(s.em,{children:"and"})," ",(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(s.em,{children:"section"})]})}),"\n",(0,n.jsxs)(r.Z,{children:[(0,n.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(s.h2,{id:"cc4eddd5aac24ddb9729522a78cf8320",children:"Transactions"}),(0,n.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,n.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(s.h2,{id:"798c5d84060149699bbef79082f10ee0",children:"Queries"}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"data-registry-keys"})}),(0,n.jsx)(s.th,{children:"Retrieve a list of all keys in the Data Registry."})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"data-registry"})}),(0,n.jsx)(s.td,{children:"Retrieve data associated with a specific key."})]})})]}),(0,n.jsx)(s.h4,{id:"281888dffb9e4bc28f293e3f95c9ce67",children:"Query all keys"}),(0,n.jsxs)(s.p,{children:["Retrieve a list of all keys in the Data Registry using the ",(0,n.jsx)(s.code,{children:"data-registry-keys"})," command."]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'sekaid query customgov data-registry-keys --page-key=100000 $FLAGS_QR | jq ".keys"\n'})}),(0,n.jsx)(s.h4,{id:"9abdf7548d2343979a7f7ad7a714d03f",children:"Query data by key"}),(0,n.jsxs)(s.p,{children:["Retrieve data associated with a specific key using the ",(0,n.jsx)(s.code,{children:"data-registry"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"$"})}),(0,n.jsx)(s.code,{children:"KEY"}),": The key whose data is to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov data-registry $KEY $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(s.h2,{id:"ef81400b9e8b406d93ba0411684f97f8",children:"Governance"}),(0,n.jsx)(s.table,{children:(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"upsert-data-registry"})}),(0,n.jsx)(s.th,{children:"Create a proposal for adding or updating a key in the Data Registry."})]})})}),(0,n.jsx)(s.h4,{id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",children:"Create or edit a data registrey key"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"upsert-data-registry"}),", is utilized to create a proposal for adding or updating a key in the Data Registry. The command accepts the following arguments and flags:"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$KEY"}),": The key intended to be upserted in the Data Registry."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$CHECKSUM"}),": The checksum corresponding to the data associated with the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$VALUE"}),": The value tied to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$FILETYPE"}),": Specifies the type of the file or data that's related to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$SIZE"}),": The size of the file or data linked to the key."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. Typically in the form \"Upserting Data Registry key '$KEY'\"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, often described as \"Assign value '",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"V"}),(0,n.jsx)(s.mi,{children:"A"}),(0,n.jsx)(s.mi,{children:"L"}),(0,n.jsx)(s.mi,{children:"U"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"E"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"o"}),(0,n.jsx)(s.mi,{children:"k"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"VALUE' to key '"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.9463em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"LU"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]})]})})]}),"KEY'\"."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'sekaid tx customgov proposal upsert-data-registry \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n "$KEY" "$CHECKSUM" "$VALUE" "$FILETYPE" "$SIZE" \n'})})]})]})]})}function m(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,s,t)=>{t.d(s,{Z:()=>i});t(7294);var n=t(6905);const a={tabItem:"tabItem_Ymn6"};var r=t(5893);function i(e){let{children:s,hidden:t,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:t,children:s})}},4866:(e,s,t)=>{t.d(s,{Z:()=>k});var n=t(7294),a=t(6905),r=t(2466),i=t(6550),c=t(469),l=t(1980),d=t(7392),o=t(12);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:t}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:t,attributes:n,default:a}}=e;return{value:s,label:t,attributes:n,default:a}}))}(t);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,t])}function m(e){let{value:s,tabValues:t}=e;return t.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:t}=e;const a=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:t}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:s,groupId:t});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(a.location.search);s.set(r,e),a.replace({...a.location,search:s.toString()})}),[r,a])]}function j(e){const{defaultValue:s,queryString:t=!1,groupId:a}=e,r=u(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!m({value:s,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[d,h]=x({queryString:t,groupId:a}),[j,p]=function(e){let{groupId:s}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,r]=(0,o.Nk)(t);return[a,(0,n.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:a}),f=(()=>{const e=d??j;return m({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=t(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function b(e){let{className:s,block:t,selectedValue:n,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),o=e=>{const s=e.currentTarget,t=l.indexOf(s),a=c[t].value;a!==n&&(d(s),i(a))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;s=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;s=l[t]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},s),children:c.map((e=>{let{value:s,label:t,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>l.push(e),onKeyDown:h,onClick:o,...r,className:(0,a.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":n===s}),children:t??s},s)}))})}function y(e){let{lazy:s,children:t,selectedValue:a}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(y,{...e,...s})]})}function k(e){const s=(0,p.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,t)=>{t.d(s,{Z:()=>c,a:()=>i});var n=t(7294);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/491c125d.4f8fdd4b.js b/assets/js/491c125d.4f8fdd4b.js new file mode 100644 index 0000000..12cadae --- /dev/null +++ b/assets/js/491c125d.4f8fdd4b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8588],{5300:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>x,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var r=s(5893),o=s(1151),i=s(4866),c=s(5162);const t={title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},a=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking",title:"Councilors & governance ranking",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",permalink:"/docs.kira.network/docs/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},sidebar:"defaultSidebar",previous:{title:"Proposals & governance structure",permalink:"/docs.kira.network/docs/25d26925-50ce-4a4f-836b-fc8486ef8b05"},next:{title:"Roles & Permissions",permalink:"/docs.kira.network/docs/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"}},d={},h=[{value:"Concept",id:"1dd55411694d46b49d4be4c8a3f37f6f",level:2},{value:"Councilor Seat",id:"08032ef8b6e84b01b9b06ecc8be78ede",level:3},{value:"Councilor Statuses",id:"47ee04ec4d724455814dd13db3e19005",level:3},{value:"Ranking System",id:"219d351e562b427e9e91b88efcd5b77b",level:3},{value:"Pause Raking",id:"011f7ecdc0bf4fb894922b3d99e9d2f5",level:4},{value:"Reset Ranking",id:"61f40654447345f29b8b91badd65f94e",level:4},{value:"Parameters",id:"a167164d509c49c88dc586e266df4356",level:2},{value:"Cli Syntax & Examples",id:"55371914bef9468db8b582cc573776d6",level:2},{value:"Transactions",id:"6839c0e109594116986c3bfdf282f92a",level:2},{value:"Claim Councilor Seat",id:"5f7c76ed81c247f7a6743a762dc04f7d",level:4},{value:"Pause Councilor",id:"ff06ca2acb1f48dd885914146a08d4fd",level:4},{value:"Unpause Councilor",id:"8c99fc30dd5f481c8247d1daae8d6952",level:4},{value:"Activate Councilor",id:"62d7f7ff9f4040b0a4b694038b15dad0",level:4},{value:"Queries",id:"615f1f023f3543ae9e4c1454ecac7bef",level:2},{value:"Query Councilors",id:"26b717c801854e9793afe368e12d269a",level:4},{value:"Query Non-councilors",id:"f5237a8583e44858844c8dc7ab2ce027",level:4},{value:"Query Council Registry",id:"25a16eabea2a4ea29ea337bede7e6951",level:4},{value:"Query Proposer and Voters Count",id:"464b5bdc49f249e1bd1856c2cc62add0",level:4},{value:"Governance",id:"9a0bdd12e2fe4d06b71c62956064d408",level:2},{value:"Jailing Councilors",id:"4244a636534b4f04adad4fa01d469580",level:4},{value:"Reset All Councilors Ranks",id:"611ac52d4d99410cb4b4320f118d3bce",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"1dd55411694d46b49d4be4c8a3f37f6f",children:"Concept"}),"\n",(0,r.jsxs)(n.p,{children:["A KIRA account is considered a Councilor if it has at least one whitelisted ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.strong,{children:"Permission or Role"})})," that allows the creation of proposals or voting. Accounts with no Permissions/Roles or blacklisted Permissions/Roles are not considered Councilors. It is essential to note that having permissions or a role does not automatically imply being a councilor. Councilors are governance members who can collude to raise proposals or vote on said proposals. Sudo users (users with sudo permissions such as ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"}),") are not considered councilors in this context."]}),"\n",(0,r.jsx)(n.h3,{id:"08032ef8b6e84b01b9b06ecc8be78ede",children:"Councilor Seat"}),"\n",(0,r.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,r.jsxs)(n.p,{children:["Sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction is only allowed if the status of the Councilor is ",(0,r.jsx)(n.code,{children:"waiting"})," (see next section)."]}),"\n",(0,r.jsx)(n.p,{children:":::"}),"\n",(0,r.jsxs)(n.p,{children:['Before any governance member can execute their right to create proposals or vote, they must first "claim" their Councilor Seat, similar to how consensus nodes claim their Validator Seat. This action acknowledges the network ',(0,r.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,r.jsx)(n.strong,{children:"Code of Conduct"})})," and allows registering a KIRA user in the governance registrar. When submitting a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction using the ",(0,r.jsx)(n.code,{children:"claim-councilor-seat"})," CLI, the user must supply the following information, which will be persisted in the ",(0,r.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"username"})," - (required) friendly governance member name with minimum 4 non-whitespace characters. It is globally unique and cannot be deleted (just like consensus nodes\u2019 ",(0,r.jsx)(n.code,{children:"moniker"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"description"})," - (optional) a longer description of the councilor"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"social"})," - (optional) comma-separated URL list of any social profiles such as Twitter, Telegram, etc\u2026"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contact"})," - (optional) email address, URL, or another emergency contact"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"avatar"})," - (optional) URL to .SVG image or gif"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"47ee04ec4d724455814dd13db3e19005",children:"Councilor Statuses"}),"\n",(0,r.jsx)(n.p,{children:"Councilors have statuses that implies their ability to perform their role in creating proposals and voting."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"STATUS"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"waiting"})}),(0,r.jsxs)(n.td,{children:["Default state after a permission to vote or create a proposal is assigned to the account for the first time. Implies account ability to send a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction to claim a Councilor Seat."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsxs)(n.td,{children:["Default state after sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction. Implies councilor ability to vote and create proposals."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"inactive"})}),(0,r.jsx)(n.td,{children:"Councilor stopped voting on proposals and didn\u2019t signal to the network any planned absence. As defined by the Ranking System (see section below)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"paused"})}),(0,r.jsx)(n.td,{children:"Councilor signaled planned absence."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"jailed"})}),(0,r.jsx)(n.td,{children:"Councilor is barred from executing any of their permissions."})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"219d351e562b427e9e91b88efcd5b77b",children:"Ranking System"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The councilor's status automatically transitions to ",(0,r.jsx)(n.code,{children:"jailed"})," if they are a consensus node and their node's status changes to ",(0,r.jsx)(n.code,{children:"jailed"})," due to being detected double signing."]})}),"\n",(0,r.jsxs)(n.p,{children:["The Councilor ranking system is used to apply changes to statuses and collect statistics that can be utilized by the governance to determine which network actors fulfill their assigned roles. Note that the ranking of Councilors and Consensus nodes is totally independent and has separate logic. The ranking system is based on proposal creation and proposal votes counters. If the Councilor participates in voting or creates a proposal, their ",(0,r.jsx)(n.code,{children:"rank"})," increases by 1 and the ",(0,r.jsx)(n.code,{children:"abstention"})," counter is set to 0. If the Councilor fails to vote, their rank is decreased by ",(0,r.jsx)(n.code,{children:"abstention_rank_decrease_amount"})," (defined in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), and ",(0,r.jsx)(n.code,{children:"abstention"})," is increased by 1."]}),"\n",(0,r.jsxs)(n.p,{children:["When the ",(0,r.jsx)(n.code,{children:"abstention"})," counter equals or surpasses the ",(0,r.jsx)(n.code,{children:"max_abstention"})," value (set in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), a Councilor becomes ",(0,r.jsx)(n.code,{children:"inactive"}),". In this status, they can't vote or initiate proposals, and their ",(0,r.jsx)(n.code,{children:"rank"})," drops to 0. However, their ",(0,r.jsx)(n.code,{children:"abstention"})," count remains. To resume voting, an ",(0,r.jsx)(n.code,{children:"inactive"})," councilor must send a ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," transaction, resetting their ",(0,r.jsx)(n.code,{children:"abstention"})," count to zero."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Keep in mind, governance can tailor transaction fees for each existing message type through the ",(0,r.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module. This means they might impose a higher fee for ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," to act as a penalty."]})}),"\n",(0,r.jsx)(n.h4,{id:"011f7ecdc0bf4fb894922b3d99e9d2f5",children:"Pause Raking"}),"\n",(0,r.jsxs)(n.p,{children:["To prevent the status from becoming ",(0,r.jsx)(n.code,{children:"inactive"})," while being absent for prolonged periods of time, Councilors can submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorPause"})," transaction, which changes their status to ",(0,r.jsx)(n.code,{children:"paused"}),". In the ",(0,r.jsx)(n.code,{children:"paused"})," state, the abstention counter does not change, and the ",(0,r.jsx)(n.code,{children:"rank"})," is not automatically reset, but the Councilor cannot vote or create proposals. To exit the ",(0,r.jsx)(n.code,{children:"paused"})," status, a Councilor must submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorUnpause"})," transaction, but the ",(0,r.jsx)(n.code,{children:"abstention"})," is not reset as a result."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"rank"})," is reset to 0 if the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"jailed"}),". In the jailed status, a Councilor cannot vote and create proposals unless the Validator is unjailed by the governance, in which case the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"inactive"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"61f40654447345f29b8b91badd65f94e",children:"Reset Ranking"}),"\n",(0,r.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks and abstention counters of all governance members simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,r.jsx)(n.h2,{id:"a167164d509c49c88dc586e266df4356",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"address"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"kira1zcjdw..."})}),(0,r.jsx)(n.td,{children:"The account address of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"status"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsx)(n.td,{children:"The current status of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rank"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"112"})}),(0,r.jsx)(n.td,{children:"The current rank of the councilor"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"abstention"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsx)(n.td,{children:"The current number of times the councilor missed to vote for a proposal for which it has the permission to vote for."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"55371914bef9468db8b582cc573776d6",children:"Cli Syntax & Examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsxs)(c.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"6839c0e109594116986c3bfdf282f92a",children:"Transactions"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor claim-seat"})})}),(0,r.jsx)(n.th,{children:"Claim a councilor seat."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor pause"})})}),(0,r.jsx)(n.td,{children:"Signal an absence as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor unpause"})})}),(0,r.jsx)(n.td,{children:"Signal re-availability as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor activate"})})}),(0,r.jsx)(n.td,{children:"Activate councilor status previously deactivated due to excessive abstention."})]})]})]}),(0,r.jsx)(n.h4,{id:"5f7c76ed81c247f7a6743a762dc04f7d",children:"Claim Councilor Seat"}),(0,r.jsxs)(n.p,{children:["Claim a councilor seat using the ",(0,r.jsx)(n.code,{children:"claim-seat"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$USERNAME"}),": The username of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$SOCIAL"}),": The social media handle of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$CONTACT"}),": The contact details of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$AVATAR"}),": The avatar of the councilor."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor claim-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--address=$ADDRESS --moniker=$MONIKER --username=$USERNAME \\\n--description=$DESCRIPTION --social=$SOCIAL --contact=$CONTACT --avatar=$AVATAR\n"})}),(0,r.jsx)(n.h4,{id:"ff06ca2acb1f48dd885914146a08d4fd",children:"Pause Councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you will not be present for a prolonged period of time using the ",(0,r.jsx)(n.code,{children:"pause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"8c99fc30dd5f481c8247d1daae8d6952",children:"Unpause Councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you wish to regain voting ability after planned absence using the ",(0,r.jsx)(n.code,{children:"unpause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"62d7f7ff9f4040b0a4b694038b15dad0",children:"Activate Councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that Councilor wishes to regain voting ability using the ",(0,r.jsx)(n.code,{children:"activate"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,r.jsxs)(c.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"615f1f023f3543ae9e4c1454ecac7bef",children:"Queries"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilors"})})}),(0,r.jsx)(n.th,{children:"Query all councilors, including their statuses, ranks, and abstention counters."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"non-councilors"})})}),(0,r.jsx)(n.td,{children:"Query all governance members that are not councilors."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"council-registry"})})}),(0,r.jsx)(n.td,{children:"Query the governance registry by address or moniker."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"proposer-voters-count"})})}),(0,r.jsx)(n.td,{children:"Query separate counts for proposers and voters who can create or vote on at least one type of proposal."})]})]})]}),(0,r.jsx)(n.h4,{id:"26b717c801854e9793afe368e12d269a",children:"Query Councilors"}),(0,r.jsx)(n.p,{children:"Query all councilors, waiting or not, including their corresponding statuses, ranks & abstention counters."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"f5237a8583e44858844c8dc7ab2ce027",children:"Query Non-councilors"}),(0,r.jsx)(n.p,{children:"Query all governance members that are not councilors."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov non-councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"25a16eabea2a4ea29ea337bede7e6951",children:"Query Council Registry"}),(0,r.jsx)(n.p,{children:"Query the governance registry. The registry can be queried by either address or moniker."}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address you want to query information."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker you want to query information."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov council-registry \\\n--addr=$ADDRESS --moniker=$MONIKER \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"464b5bdc49f249e1bd1856c2cc62add0",children:"Query Proposer and Voters Count"}),(0,r.jsx)(n.p,{children:"Retrieve the count of accounts that can create a proposal (proposers) and the count of accounts that can vote on at least one type of proposal (voters)."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov proposer_voters_count $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(c.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"9a0bdd12e2fe4d06b71c62956064d408",children:"Governance"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})}),(0,r.jsx)(n.th,{children:"Proposes to jail councilors for violating the network's rules"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})}),(0,r.jsx)(n.td,{children:"Proposes to reset the ranking of all councilors"})]})})]}),(0,r.jsx)(n.h4,{id:"4244a636534b4f04adad4fa01d469580",children:"Jailing Councilors"}),(0,r.jsxs)(n.p,{children:["Create a proposal to jail specific councilors using the ",(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})," command followed by councilor(s) ",(0,r.jsx)(n.code,{children:"$COUNCILORS"}),"."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$COUNCILORS"}),": List of councilors to be jailed, comma separated list of addresses."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-jail-councilor \\\n--from=$SIGNER $FLAGS_TX \\\n$COUNCILORS --title=$TITLE --description=$DESCRIPTION\n"})}),(0,r.jsx)(n.h4,{id:"611ac52d4d99410cb4b4320f118d3bce",children:"Reset All Councilors Ranks"}),(0,r.jsxs)(n.p,{children:["Create a proposal to reset all councilors rank using the ",(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-reset-whole-councilor-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>c});s(7294);var r=s(6905);const o={tabItem:"tabItem_Ymn6"};var i=s(5893);function c(e){let{children:n,hidden:s,className:c}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,c),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>C});var r=s(7294),o=s(6905),i=s(2466),c=s(6550),t=s(469),a=s(1980),l=s(7392),d=s(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:r,default:o}}=e;return{value:n,label:s,attributes:r,default:o}}))}(s);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const o=(0,c.k6)(),i=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,a._X)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(o.location.search);n.set(i,e),o.replace({...o.location,search:n.toString()})}),[i,o])]}function p(e){const{defaultValue:n,queryString:s=!1,groupId:o}=e,i=u(e),[c,a]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[l,h]=j({queryString:s,groupId:o}),[p,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,i]=(0,d.Nk)(s);return[o,(0,r.useCallback)((e=>{s&&i.set(e)}),[s,i])]}({groupId:o}),f=(()=>{const e=l??p;return x({value:e,tabValues:i})?e:null})();(0,t.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:c,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),b(e)}),[h,b,i]),tabValues:i}}var b=s(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function g(e){let{className:n,block:s,selectedValue:r,selectValue:c,tabValues:t}=e;const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),d=e=>{const n=e.currentTarget,s=a.indexOf(n),o=t[s].value;o!==r&&(l(n),c(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":s},n),children:t.map((e=>{let{value:n,label:s,attributes:i}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>a.push(e),onKeyDown:h,onClick:d,...i,className:(0,o.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":r===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:o}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function y(e){const n=p(e);return(0,m.jsxs)("div",{className:(0,o.Z)("tabs-container",f.tabList),children:[(0,m.jsx)(g,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function C(e){const n=(0,b.Z)();return(0,m.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>c});var r=s(7294);const o={},i=r.createContext(o);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/491c125d.e0c43e55.js b/assets/js/491c125d.e0c43e55.js deleted file mode 100644 index 6635cce..0000000 --- a/assets/js/491c125d.e0c43e55.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8588],{5300:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>x,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var r=s(5893),o=s(1151),c=s(4866),i=s(5162);const t={title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},a=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking",title:"Councilors & governance ranking",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},sidebar:"defaultSidebar",previous:{title:"Proposals & governance structure",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05"},next:{title:"Roles & Permissions",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"}},d={},h=[{value:"Concept",id:"1dd55411694d46b49d4be4c8a3f37f6f",level:2},{value:"Councilor seat",id:"08032ef8b6e84b01b9b06ecc8be78ede",level:3},{value:"Councilor statuses",id:"47ee04ec4d724455814dd13db3e19005",level:3},{value:"Ranking system",id:"219d351e562b427e9e91b88efcd5b77b",level:3},{value:"Pause raking",id:"011f7ecdc0bf4fb894922b3d99e9d2f5",level:4},{value:"Reset ranking",id:"61f40654447345f29b8b91badd65f94e",level:4},{value:"Parameters",id:"a167164d509c49c88dc586e266df4356",level:2},{value:"Cli syntax & examples",id:"55371914bef9468db8b582cc573776d6",level:2},{value:"Transactions",id:"6839c0e109594116986c3bfdf282f92a",level:2},{value:"Claim councilor seat",id:"5f7c76ed81c247f7a6743a762dc04f7d",level:4},{value:"Pause councilor",id:"ff06ca2acb1f48dd885914146a08d4fd",level:4},{value:"Unpause councilor",id:"8c99fc30dd5f481c8247d1daae8d6952",level:4},{value:"Activate councilor",id:"62d7f7ff9f4040b0a4b694038b15dad0",level:4},{value:"Queries",id:"615f1f023f3543ae9e4c1454ecac7bef",level:2},{value:"Query councilors",id:"26b717c801854e9793afe368e12d269a",level:4},{value:"Query non-councilors",id:"f5237a8583e44858844c8dc7ab2ce027",level:4},{value:"Query council registry",id:"25a16eabea2a4ea29ea337bede7e6951",level:4},{value:"Query proposer and voters count",id:"464b5bdc49f249e1bd1856c2cc62add0",level:4},{value:"Governance",id:"9a0bdd12e2fe4d06b71c62956064d408",level:2},{value:"Jailing councilors",id:"4244a636534b4f04adad4fa01d469580",level:4},{value:"Reset all councilors ranks",id:"611ac52d4d99410cb4b4320f118d3bce",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"1dd55411694d46b49d4be4c8a3f37f6f",children:"Concept"}),"\n",(0,r.jsxs)(n.p,{children:["A KIRA account is considered a Councilor if it has at least one whitelisted ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.strong,{children:"Permission or Role"})})," that allows the creation of proposals or voting. Accounts with no Permissions/Roles or blacklisted Permissions/Roles are not considered Councilors. It is essential to note that having permissions or a role does not automatically imply being a councilor. Councilors are governance members who can collude to raise proposals or vote on said proposals. Sudo users (users with sudo permissions such as ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"}),") are not considered councilors in this context."]}),"\n",(0,r.jsx)(n.h3,{id:"08032ef8b6e84b01b9b06ecc8be78ede",children:"Councilor seat"}),"\n",(0,r.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,r.jsxs)(n.p,{children:["Sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction is only allowed if the status of the Councilor is ",(0,r.jsx)(n.code,{children:"waiting"})," (see next section)."]}),"\n",(0,r.jsx)(n.p,{children:":::"}),"\n",(0,r.jsxs)(n.p,{children:['Before any governance member can execute their right to create proposals or vote, they must first "claim" their Councilor Seat, similar to how consensus nodes claim their Validator Seat. This action acknowledges the network ',(0,r.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,r.jsx)(n.strong,{children:"Code of Conduct"})})," and allows registering a KIRA user in the governance registrar. When submitting a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction using the ",(0,r.jsx)(n.code,{children:"claim-councilor-seat"})," CLI, the user must supply the following information, which will be persisted in the ",(0,r.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"username"})," - (required) friendly governance member name with minimum 4 non-whitespace characters. It is globally unique and cannot be deleted (just like consensus nodes\u2019 ",(0,r.jsx)(n.code,{children:"moniker"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"description"})," - (optional) a longer description of the councilor"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"social"})," - (optional) comma-separated URL list of any social profiles such as Twitter, Telegram, etc\u2026"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contact"})," - (optional) email address, URL, or another emergency contact"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"avatar"})," - (optional) URL to .SVG image or gif"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"47ee04ec4d724455814dd13db3e19005",children:"Councilor statuses"}),"\n",(0,r.jsx)(n.p,{children:"Councilors have statuses that implies their ability to perform their role in creating proposals and voting."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"STATUS"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"waiting"})}),(0,r.jsxs)(n.td,{children:["Default state after a permission to vote or create a proposal is assigned to the account for the first time. Implies account ability to send a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction to claim a Councilor Seat."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsxs)(n.td,{children:["Default state after sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction. Implies councilor ability to vote and create proposals."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"inactive"})}),(0,r.jsx)(n.td,{children:"Councilor stopped voting on proposals and didn\u2019t signal to the network any planned absence. As defined by the Ranking System (see section below)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"paused"})}),(0,r.jsx)(n.td,{children:"Councilor signaled planned absence."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"jailed"})}),(0,r.jsx)(n.td,{children:"Councilor is barred from executing any of their permissions."})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"219d351e562b427e9e91b88efcd5b77b",children:"Ranking system"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The councilor's status automatically transitions to ",(0,r.jsx)(n.code,{children:"jailed"})," if they are a consensus node and their node's status changes to ",(0,r.jsx)(n.code,{children:"jailed"})," due to being detected double signing."]})}),"\n",(0,r.jsxs)(n.p,{children:["The Councilor ranking system is used to apply changes to statuses and collect statistics that can be utilized by the governance to determine which network actors fulfill their assigned roles. Note that the ranking of Councilors and Consensus nodes is totally independent and has separate logic. The ranking system is based on proposal creation and proposal votes counters. If the Councilor participates in voting or creates a proposal, their ",(0,r.jsx)(n.code,{children:"rank"})," increases by 1 and the ",(0,r.jsx)(n.code,{children:"abstention"})," counter is set to 0. If the Councilor fails to vote, their rank is decreased by ",(0,r.jsx)(n.code,{children:"abstention_rank_decrease_amount"})," (defined in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), and ",(0,r.jsx)(n.code,{children:"abstention"})," is increased by 1."]}),"\n",(0,r.jsxs)(n.p,{children:["When the ",(0,r.jsx)(n.code,{children:"abstention"})," counter equals or surpasses the ",(0,r.jsx)(n.code,{children:"max_abstention"})," value (set in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), a Councilor becomes ",(0,r.jsx)(n.code,{children:"inactive"}),". In this status, they can't vote or initiate proposals, and their ",(0,r.jsx)(n.code,{children:"rank"})," drops to 0. However, their ",(0,r.jsx)(n.code,{children:"abstention"})," count remains. To resume voting, an ",(0,r.jsx)(n.code,{children:"inactive"})," councilor must send a ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," transaction, resetting their ",(0,r.jsx)(n.code,{children:"abstention"})," count to zero."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Keep in mind, governance can tailor transaction fees for each existing message type through the ",(0,r.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module. This means they might impose a higher fee for ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," to act as a penalty."]})}),"\n",(0,r.jsx)(n.h4,{id:"011f7ecdc0bf4fb894922b3d99e9d2f5",children:"Pause raking"}),"\n",(0,r.jsxs)(n.p,{children:["To prevent the status from becoming ",(0,r.jsx)(n.code,{children:"inactive"})," while being absent for prolonged periods of time, Councilors can submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorPause"})," transaction, which changes their status to ",(0,r.jsx)(n.code,{children:"paused"}),". In the ",(0,r.jsx)(n.code,{children:"paused"})," state, the abstention counter does not change, and the ",(0,r.jsx)(n.code,{children:"rank"})," is not automatically reset, but the Councilor cannot vote or create proposals. To exit the ",(0,r.jsx)(n.code,{children:"paused"})," status, a Councilor must submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorUnpause"})," transaction, but the ",(0,r.jsx)(n.code,{children:"abstention"})," is not reset as a result."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"rank"})," is reset to 0 if the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"jailed"}),". In the jailed status, a Councilor cannot vote and create proposals unless the Validator is unjailed by the governance, in which case the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"inactive"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"61f40654447345f29b8b91badd65f94e",children:"Reset ranking"}),"\n",(0,r.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks and abstention counters of all governance members simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,r.jsx)(n.h2,{id:"a167164d509c49c88dc586e266df4356",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"address"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"kira1zcjdw..."})}),(0,r.jsx)(n.td,{children:"The account address of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"status"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsx)(n.td,{children:"The current status of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rank"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"112"})}),(0,r.jsx)(n.td,{children:"The current rank of the councilor"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"abstention"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsx)(n.td,{children:"The current number of times the councilor missed to vote for a proposal for which it has the permission to vote for."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"55371914bef9468db8b582cc573776d6",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(c.Z,{children:[(0,r.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"6839c0e109594116986c3bfdf282f92a",children:"Transactions"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor claim-seat"})})}),(0,r.jsx)(n.th,{children:"Claim a councilor seat."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor pause"})})}),(0,r.jsx)(n.td,{children:"Signal an absence as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor unpause"})})}),(0,r.jsx)(n.td,{children:"Signal re-availability as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor activate"})})}),(0,r.jsx)(n.td,{children:"Activate councilor status previously deactivated due to excessive abstention."})]})]})]}),(0,r.jsx)(n.h4,{id:"5f7c76ed81c247f7a6743a762dc04f7d",children:"Claim councilor seat"}),(0,r.jsxs)(n.p,{children:["Claim a councilor seat using the ",(0,r.jsx)(n.code,{children:"claim-seat"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$USERNAME"}),": The username of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$SOCIAL"}),": The social media handle of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$CONTACT"}),": The contact details of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$AVATAR"}),": The avatar of the councilor."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor claim-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--address=$ADDRESS --moniker=$MONIKER --username=$USERNAME \\\n--description=$DESCRIPTION --social=$SOCIAL --contact=$CONTACT --avatar=$AVATAR\n"})}),(0,r.jsx)(n.h4,{id:"ff06ca2acb1f48dd885914146a08d4fd",children:"Pause councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you will not be present for a prolonged period of time using the ",(0,r.jsx)(n.code,{children:"pause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"8c99fc30dd5f481c8247d1daae8d6952",children:"Unpause councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you wish to regain voting ability after planned absence using the ",(0,r.jsx)(n.code,{children:"unpause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"62d7f7ff9f4040b0a4b694038b15dad0",children:"Activate councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that Councilor wishes to regain voting ability using the ",(0,r.jsx)(n.code,{children:"activate"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,r.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"615f1f023f3543ae9e4c1454ecac7bef",children:"Queries"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilors"})})}),(0,r.jsx)(n.th,{children:"Query all councilors, including their statuses, ranks, and abstention counters."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"non-councilors"})})}),(0,r.jsx)(n.td,{children:"Query all governance members that are not councilors."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"council-registry"})})}),(0,r.jsx)(n.td,{children:"Query the governance registry by address or moniker."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"proposer-voters-count"})})}),(0,r.jsx)(n.td,{children:"Query separate counts for proposers and voters who can create or vote on at least one type of proposal."})]})]})]}),(0,r.jsx)(n.h4,{id:"26b717c801854e9793afe368e12d269a",children:"Query councilors"}),(0,r.jsx)(n.p,{children:"Query all councilors, waiting or not, including their corresponding statuses, ranks & abstention counters."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"f5237a8583e44858844c8dc7ab2ce027",children:"Query non-councilors"}),(0,r.jsx)(n.p,{children:"Query all governance members that are not councilors."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov non-councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"25a16eabea2a4ea29ea337bede7e6951",children:"Query council registry"}),(0,r.jsx)(n.p,{children:"Query the governance registry. The registry can be queried by either address or moniker."}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address you want to query information."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker you want to query information."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov council-registry \\\n--addr=$ADDRESS --moniker=$MONIKER \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"464b5bdc49f249e1bd1856c2cc62add0",children:"Query proposer and voters count"}),(0,r.jsx)(n.p,{children:"Retrieve the count of accounts that can create a proposal (proposers) and the count of accounts that can vote on at least one type of proposal (voters)."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov proposer_voters_count $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"9a0bdd12e2fe4d06b71c62956064d408",children:"Governance"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})}),(0,r.jsx)(n.th,{children:"Proposes to jail councilors for violating the network's rules"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})}),(0,r.jsx)(n.td,{children:"Proposes to reset the ranking of all councilors"})]})})]}),(0,r.jsx)(n.h4,{id:"4244a636534b4f04adad4fa01d469580",children:"Jailing councilors"}),(0,r.jsxs)(n.p,{children:["Create a proposal to jail specific councilors using the ",(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})," command followed by councilor(s) ",(0,r.jsx)(n.code,{children:"$COUNCILORS"}),"."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$COUNCILORS"}),": List of councilors to be jailed, comma separated list of addresses."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-jail-councilor \\\n--from=$SIGNER $FLAGS_TX \\\n$COUNCILORS --title=$TITLE --description=$DESCRIPTION\n"})}),(0,r.jsx)(n.h4,{id:"611ac52d4d99410cb4b4320f118d3bce",children:"Reset all councilors ranks"}),(0,r.jsxs)(n.p,{children:["Create a proposal to reset all councilors rank using the ",(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-reset-whole-councilor-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var r=s(6905);const o={tabItem:"tabItem_Ymn6"};var c=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,c.jsx)("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var r=s(7294),o=s(6905),c=s(2466),i=s(6550),t=s(469),a=s(1980),l=s(7392),d=s(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:r,default:o}}=e;return{value:n,label:s,attributes:r,default:o}}))}(s);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const o=(0,i.k6)(),c=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,a._X)(c),(0,r.useCallback)((e=>{if(!c)return;const n=new URLSearchParams(o.location.search);n.set(c,e),o.replace({...o.location,search:n.toString()})}),[c,o])]}function p(e){const{defaultValue:n,queryString:s=!1,groupId:o}=e,c=u(e),[i,a]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:c}))),[l,h]=j({queryString:s,groupId:o}),[p,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,c]=(0,d.Nk)(s);return[o,(0,r.useCallback)((e=>{s&&c.set(e)}),[s,c])]}({groupId:o}),f=(()=>{const e=l??p;return x({value:e,tabValues:c})?e:null})();(0,t.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),b(e)}),[h,b,c]),tabValues:c}}var b=s(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function g(e){let{className:n,block:s,selectedValue:r,selectValue:i,tabValues:t}=e;const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.o5)(),d=e=>{const n=e.currentTarget,s=a.indexOf(n),o=t[s].value;o!==r&&(l(n),i(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":s},n),children:t.map((e=>{let{value:n,label:s,attributes:c}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>a.push(e),onKeyDown:h,onClick:d,...c,className:(0,o.Z)("tabs__item",f.tabItem,c?.className,{"tabs__item--active":r===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:o}=e;const c=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=c.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:c.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function y(e){const n=p(e);return(0,m.jsxs)("div",{className:(0,o.Z)("tabs-container",f.tabList),children:[(0,m.jsx)(g,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function k(e){const n=(0,b.Z)();return(0,m.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>i});var r=s(7294);const o={},c=r.createContext(o);function i(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a67030b.8ce12292.js b/assets/js/4a67030b.8ce12292.js deleted file mode 100644 index 3edf169..0000000 --- a/assets/js/4a67030b.8ce12292.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[71],{7476:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Upgrade/index",title:"Upgrade",description:"x/upgrade",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Upgrade/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},sidebar:"defaultSidebar",previous:{title:"Recovery",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce"},next:{title:"Upgrade Module",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/upgrade/types",children:(0,a.jsx)(t.code,{children:"x/upgrade"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>u});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function u(e){let{children:t,hidden:r,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,u),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var a=r(7294),n=r(6905),o=r(2466),u=r(6550),s=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[u,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,i.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(c(t),u(n))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>u});var a=r(7294);const n={},o=a.createContext(n);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d8a2e04.4a295da3.js b/assets/js/4d8a2e04.4a295da3.js deleted file mode 100644 index 5443591..0000000 --- a/assets/js/4d8a2e04.4a295da3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2611],{282:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=a(5893),l=a(1151),i=a(4866),t=a(5162);const r={title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},m=void 0,c={id:"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution",title:"Fees and staking rewards distribution",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},sidebar:"defaultSidebar",previous:{title:"Distributor",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},next:{title:"Custody",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00"}},h={},d=[{value:"Concept",id:"ebfe9bca3b1a41f9a99263de7a6859d0",level:3},{value:"Network inflation & dynamic adjustments",id:"7af658e285c24b3db1f55295cf4aa3da",level:3},{value:"Inflation equation",id:"a277515bae6a470ead9f4c3449637a5e",level:4},{value:"Inflation and fees distribution mechanisms",id:"4426f62703204963a8cd5d882b829fe2",level:3},{value:"Consensus nodes rewards",id:"efacc54986a74017bc7122e407a8022e",level:4},{value:"Delegators rewards",id:"a962a05151634f10a212361112abccec",level:4},{value:"Parameters",id:"7c2e2b6063ab4eeab948bfa912382577",level:2},{value:"Cli syntax & examples",id:"0a27e950c1bf4bd693101d9dd2a30b6d",level:2},{value:"Transactions",id:"619d389fbbc74cccb1a3989aa0e84431",level:2},{value:"Queries",id:"d40fd29982094b8f90a363cc2c22c314",level:2},{value:"Validator performance",id:"d0ead7ce0a154e1d915ef6e9dc2317c2",level:4},{value:"Treasury",id:"d03e0ebaef66469aa062d0c2c496cc46",level:4},{value:"Performance snapshot period",id:"1a33e1fe4f854f179fa8c0c9a6506d67",level:4},{value:"Governance",id:"f4c3d227c8254e8bb227b30563d52072",level:2}];function x(s){const e={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",menclose:"menclose",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",msubsup:"msubsup",mtext:"mtext",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h3,{id:"ebfe9bca3b1a41f9a99263de7a6859d0",children:"Concept"}),"\n",(0,n.jsx)(e.p,{children:"Committee-based blockchains are among the most popular alternatives to proof-of-work based blockchains, such as Bitcoin. These blockchains use a committee, a.k.a consensus nodes set or \u201cvalidator\u201d set, that executes Byzantine fault tolerant distributed consensus to determine the next block to add to the blockchain. Unlike Bitcoin, where one creator produce a block based on probabilities, in a committee-based blockchain blocks are cooperatively created. As such, properly designing the consensus rewarding schemes is crucial to incentivize consensus nodes in achieving consensus while preventing centralization forces from arising, such as those stemming from miner extractable value (MEV) leakage."}),"\n",(0,n.jsx)(e.p,{children:"By designing the consensus rewarding schemes effectively, committee-based blockchains can achieve a balance between decentralization and incentivization."}),"\n",(0,n.jsx)(e.h3,{id:"7af658e285c24b3db1f55295cf4aa3da",children:"Network inflation & dynamic adjustments"}),"\n",(0,n.jsxs)(e.p,{children:["KEX, the native asset of the KIRA network, undergoes controlled inflation as a strategy to stimulate activity and engagement. Its inflation parameters are defined by network governance, which, in tandem with the ",(0,n.jsx)(e.strong,{children:"[Problem Internal Link]"}),", orchestrates a harmony of incentives that align with the broader strategic vision of the network. The central ambition here is not just about maintaining KEX's economic value, but also ensuring the very security fabric of the network through stakeholder retention and active transactions."]}),"\n",(0,n.jsxs)(e.p,{children:["Here's a detailed look at the relevant ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),":"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_rate"}),": Specifies the KEX inflation percentage.","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"18"})]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"0"})," (Minimum) to ",(0,n.jsx)(e.code,{children:"50"})," (Maximum)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_period"}),": Denotes the time duration in seconds over which the current KEX supply is inflated based on the ",(0,n.jsx)(e.code,{children:"inflation_rate"}),".","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"31557600"})," (equates to 1 year)"]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"2629800"})," (roughly a month) to ",(0,n.jsx)(e.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"max_annual_inflation"}),": This sets a ceiling on the yearly percentage growth of the KEX total supply from the original genesis time."]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation is calculated on a per-block basis and adjusts dynamically through periodic snapshots of the KEX supply taken at the start of each ",(0,n.jsx)(e.code,{children:"inflation_period"}),". This mechanism guarantees precise reward allocations and compliance with the set ",(0,n.jsx)(e.code,{children:"max_annual_inflation"})," cap. It accounts for potential inflationary variations that could emerge from diverse sources like the UBI module or the L2 burning mechanisms. In this context, the network proactively assesses for any projected cap breaches and modulates minting from these sources, ensuring the network's stability is always maintained."]}),"\n",(0,n.jsx)(e.h4,{id:"a277515bae6a470ead9f4c3449637a5e",children:"Inflation equation"}),"\n",(0,n.jsx)(e.p,{children:"Given:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"t"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{start}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = KEX token supply at the start of the ",(0,n.jsx)(e.code,{children:"inflation_period"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," = ",(0,n.jsx)(e.code,{children:"inflation_rate"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"k"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_{block}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"oc"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = Time for a single block"]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation for each block is computed as:\n",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"Inflation\xa0for\xa0block"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mtext,{children:"start"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mi,{children:"R"})]}),(0,n.jsx)(e.mtext,{children:"inflation_period"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mtext,{children:"block"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{\\text{Inflation for block} = \\dfrac{S_{\\text{start}} \\times R}{\\text{inflation\\_period}} \\times T_{\\text{block}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0363em",verticalAlign:"-1.336em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0363em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"Inflation\xa0for\xa0block"})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"inflation_period"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"start"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"block"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0363em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.336em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsxs)(e.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,n.jsx)(e.code,{children:"inflation_rate"})," of 15%, and an ",(0,n.jsx)(e.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"3600"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mn,{children:"300500000"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"0.15"})]}),(0,n.jsx)(e.mn,{children:"31557600"})]})}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"3600"}),(0,n.jsx)(e.mo,{children:"\u2248"}),(0,n.jsx)(e.mn,{children:"5142"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord",children:"31557600"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord",children:"300500000"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"0.15"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"\u2248"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,n.jsx)(e.h3,{id:"4426f62703204963a8cd5d882b829fe2",children:"Inflation and fees distribution mechanisms"}),"\n",(0,n.jsx)(e.p,{children:"This section explores how block and fee rewards are calculated for each participant: Consensus nodes and Delegators. Both play distinct roles in maintaining and securing the KIRA network, and their reward mechanisms are underpinned by specific parameters that measure their contributions and engagement. For Consensus nodes, it is the performance parameter that evaluates their consistency and efficiency in the network's consensus. In contrast, for Delegators, it's about the magnitude of their stake, representing their vested interest and commitment to the network. These foundational parameters ensure that rewards are allocated fairly, recognizing genuine efforts and investments in the network's growth and stability."}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:["Rewards are allocated to the proposer and its associated staking pools ",(0,n.jsx)("u",{children:(0,n.jsx)(e.strong,{children:"at the beginning of the following new block"})}),". Make sure to account for this one-block lag when considering rewards allocation across all roles in the network."]})}),"\n",(0,n.jsx)(e.h4,{id:"efacc54986a74017bc7122e407a8022e",children:"Consensus nodes rewards"}),"\n",(0,n.jsxs)(e.p,{children:["Consensus nodes are not rewarded based on the amount of stake backing them. Instead, they charge a self-defined ",(0,n.jsx)(e.code,{children:"commission"})," rate on block rewards (KEX inflation). They also benefit from up to 50% of fee rewards, which consist of a basket of different tokens used for paying transaction fees, including KEX. This percentage is defined by the ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," set by governance."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"For more information regarding network consensus nodes commissions please refer to the"})," ",(0,n.jsx)(e.em,{children:"module."})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Performance parameter"})}),"\n",(0,n.jsxs)(e.p,{children:["A critical aspect of reward distribution for Consensus nodes is the performance parameter, denoted as ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),". This parameter evaluates a node's participation in the network consensus. Specifically, it measures how often that node has successfully signed blocks over the last ",(0,n.jsx)(e.code,{children:"snapshot-period"}),", which defaults to 1000 blocks. The ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," value is then used to scale its rewards when it poposes a block; if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," is below 100%, the node will only receive a corresponding fraction of the available rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"N"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"d"})]})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{P = \\dfrac{N_{signed}}{S_{period}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0124em",verticalAlign:"-1.3121em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0124em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.9721em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0124em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.3121em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"K"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"})]})})]}),(0,n.jsx)(e.code,{children:"ukex"}),", if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]}),"\u2019s proposer has a ",(0,n.jsx)(e.code,{children:"commission"})," rate ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," and a performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," , it will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"BR_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{BR_{c} = K*R*P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"E.g: assuming a block yielding 100 KEX, if its proposer has a"}),"\xa0",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"commission"})})," ",(0,n.jsx)(e.em,{children:"rate set to 30% and a current"})," ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," ",(0,n.jsx)(e.em,{children:"of 50%, it will only receive 15 KEX and 15 KEX will be transferred to the community treasury. The remaining 70 KEX are split between its delegators and the proposer itself IF it has a self-stake."})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["The amount of fee rewards a block proposer will receive for a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," carrying a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," from its transactions, given a current network property ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," and the proposer's current performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),", is ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with:"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} * VFS * P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h4,{id:"a962a05151634f10a212361112abccec",children:"Delegators rewards"}),"\n",(0,n.jsx)(e.p,{children:"The distribution of remaining rewards incentives to delegators is proportional to their shares, which are calculated in two distinct ways. Delegators' shares regarding block rewards are determined by their global stake (total staked to all consensus nodes), while the shares regarding fee rewards are determined by the stakes they have delegated locally (total staked to the block proposer). This means that consensus nodes with less stake and greater implied risk will offer better returns on investment to delegators than those with more stake and lower implied risk, provided they do not trigger any slashing events. This incentivizes delegators who are in the network solely for profit to gradually shift their preferences to lower-staked consensus nodes that gain a sufficient amount of reputation in order to maximize their revenues. As a result, stakes across consensus nodes will tend to be evenly distributed, preventing the centralization of stakes among a few consensus nodes."}),"\n",(0,n.jsxs)(e.p,{children:["Whitelisted tokens that are eligible for staking, including KEX, are entitled to a limited amount of rewards (block or fee rewards) as determined by governance through their individual parameter ",(0,n.jsx)(e.code,{children:"reward_cap"})," in the ",(0,n.jsx)(e.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"}),". Allocating a defined percentage of rewards to each eligible staking token has the effect of attracting users from other networks. This is because if no one is staking a specific token, its annual percentage yield (APY) is infinite as no one is able to claim the respective share of rewards, which are instead sent to the community treasury. This incentivizes users to stake these tokens in order to receive a share of the rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Delegators shares"})}),"\n",(0,n.jsxs)(e.p,{children:["Understanding the calculation of delegators shares is important due to the system's inherent token diversity. The key takeaway is that a delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is obtained by calculating the distinctive share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," for each of the eligible staking tokens ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"i_{}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8369em",verticalAlign:"-0.1774em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),". This allows to avoid comparing each token nominal value, or any other reference value, which would be an unnecessary overhead. The delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is then calculated by summing each ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," multiplied by the corresponding token's ",(0,n.jsx)(e.code,{children:"reward_cap"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"RC_{i}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8607em",verticalAlign:"-0.1774em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.munderover,{children:[(0,n.jsx)(e.mo,{children:"\u2211"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{S_D = \\sum_{i=1}^{n} S_{D_{i}} * RC_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.6091em",verticalAlign:"-1.6177em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.9914em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.6091em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mop op-limits",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.6514em"},children:[(0,n.jsxs)(e.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"="}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{children:(0,n.jsx)(e.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,n.jsxs)(e.span,{style:{top:"-4.3em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.2777em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.9914em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.6091em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.6177em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.p,{children:"The difference lies in whether the calculation is intended to represent the delegator's global share for block rewards, which is determined by considering all different tokens staked by the delegator in the network, or the local share for fee rewards, which is determined by considering only the tokens staked by the delegator in the current block proposer's staking pool."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"\xa0"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ukex"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K_c*R \\texttt{ ukex}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"\xa0ukex"})})]})]})]})," (",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," being the proposer ",(0,n.jsx)(e.code,{children:"commission"})," rate), a delegator with a local share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Br_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Br_{c} = K*R*S_D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Given a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yielding a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]}),", with ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," the current ",(0,n.jsx)(e.code,{children:"validators_fee_share"}),", a delegator with a global share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will receive ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} *S_D*VFS}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h2,{id:"7c2e2b6063ab4eeab948bfa912382577",children:"Parameters"}),"\n",(0,n.jsx)(e.p,{children:"N/A"}),"\n",(0,n.jsx)(e.h2,{id:"0a27e950c1bf4bd693101d9dd2a30b6d",children:"Cli syntax & examples"}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(e.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(e.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(e.em,{children:"documentation for more details."})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$SIGNER"})})," ",(0,n.jsx)(e.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(e.em,{children:"and"})," ",(0,n.jsxs)(e.em,{children:[(0,n.jsx)(e.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(e.em,{children:"section"})]})}),"\n",(0,n.jsxs)(i.Z,{children:[(0,n.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(e.h2,{id:"619d389fbbc74cccb1a3989aa0e84431",children:"Transactions"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]}),(0,n.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(e.h2,{id:"d40fd29982094b8f90a363cc2c22c314",children:"Queries"}),(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:(0,n.jsx)(e.code,{children:"snapshot-period-performance"})}),(0,n.jsx)(e.th,{children:"Retrieve the current performance of a specific consensus node."})]})}),(0,n.jsxs)(e.tbody,{children:[(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"fees-treasury"})}),(0,n.jsx)(e.td,{children:"Get fees treasury details."})]}),(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"snapshot-period"})}),(0,n.jsx)(e.td,{children:"Retrieve snapshot period performance details."})]})]})]}),(0,n.jsx)(e.h4,{id:"d0ead7ce0a154e1d915ef6e9dc2317c2",children:"Validator performance"}),(0,n.jsxs)(e.p,{children:["Retrieve the current performance of a specific validator using the ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," subcommand followed by the validator\u2019s address."]}),(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Args"})}),(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:(0,n.jsx)(e.code,{children:"$"})}),(0,n.jsx)(e.code,{children:"ADDR"})," Address of the consensus node."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period-performance $ADDR $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"d03e0ebaef66469aa062d0c2c496cc46",children:"Treasury"}),(0,n.jsxs)(e.p,{children:["Fetch the treasury details using the ",(0,n.jsx)(e.code,{children:"fees-treasury"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor fees-treasury $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"1a33e1fe4f854f179fa8c0c9a6506d67",children:"Performance snapshot period"}),(0,n.jsxs)(e.p,{children:["Retrieve the current snapshot period performance details using the ",(0,n.jsx)(e.code,{children:"snapshot-period"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(e.h2,{id:"f4c3d227c8254e8bb227b30563d52072",children:"Governance"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]})]})]})}function p(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(x,{...s})}):x(s)}},5162:(s,e,a)=>{a.d(e,{Z:()=>t});a(7294);var n=a(6905);const l={tabItem:"tabItem_Ymn6"};var i=a(5893);function t(s){let{children:e,hidden:a,className:t}=s;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,t),hidden:a,children:e})}},4866:(s,e,a)=>{a.d(e,{Z:()=>f});var n=a(7294),l=a(6905),i=a(2466),t=a(6550),r=a(469),m=a(1980),c=a(7392),h=a(12);function d(s){return n.Children.toArray(s).filter((s=>"\n"!==s)).map((s=>{if(!s||(0,n.isValidElement)(s)&&function(s){const{props:e}=s;return!!e&&"object"==typeof e&&"value"in e}(s))return s;throw new Error(`Docusaurus error: Bad child <${"string"==typeof s.type?s.type:s.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(s){const{values:e,children:a}=s;return(0,n.useMemo)((()=>{const s=e??function(s){return d(s).map((s=>{let{props:{value:e,label:a,attributes:n,default:l}}=s;return{value:e,label:a,attributes:n,default:l}}))}(a);return function(s){const e=(0,c.l)(s,((s,e)=>s.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((s=>s.value)).join(", ")}" found in . Every value needs to be unique.`)}(s),s}),[e,a])}function p(s){let{value:e,tabValues:a}=s;return a.some((s=>s.value===e))}function o(s){let{queryString:e=!1,groupId:a}=s;const l=(0,t.k6)(),i=function(s){let{queryString:e=!1,groupId:a}=s;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,m._X)(i),(0,n.useCallback)((s=>{if(!i)return;const e=new URLSearchParams(l.location.search);e.set(i,s),l.replace({...l.location,search:e.toString()})}),[i,l])]}function j(s){const{defaultValue:e,queryString:a=!1,groupId:l}=s,i=x(s),[t,m]=(0,n.useState)((()=>function(s){let{defaultValue:e,tabValues:a}=s;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((s=>s.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((s=>s.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[c,d]=o({queryString:a,groupId:l}),[j,g]=function(s){let{groupId:e}=s;const a=function(s){return s?`docusaurus.tab.${s}`:null}(e),[l,i]=(0,h.Nk)(a);return[l,(0,n.useCallback)((s=>{a&&i.set(s)}),[a,i])]}({groupId:l}),N=(()=>{const s=c??j;return p({value:s,tabValues:i})?s:null})();(0,r.Z)((()=>{N&&m(N)}),[N]);return{selectedValue:t,selectValue:(0,n.useCallback)((s=>{if(!p({value:s,tabValues:i}))throw new Error(`Can't select invalid tab value=${s}`);m(s),d(s),g(s)}),[d,g,i]),tabValues:i}}var g=a(2389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var u=a(5893);function y(s){let{className:e,block:a,selectedValue:n,selectValue:t,tabValues:r}=s;const m=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),h=s=>{const e=s.currentTarget,a=m.indexOf(e),l=r[a].value;l!==n&&(c(e),t(l))},d=s=>{let e=null;switch(s.key){case"Enter":h(s);break;case"ArrowRight":{const a=m.indexOf(s.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(s.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return(0,u.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},e),children:r.map((s=>{let{value:e,label:a,attributes:i}=s;return(0,u.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:s=>m.push(s),onKeyDown:d,onClick:h,...i,className:(0,l.Z)("tabs__item",N.tabItem,i?.className,{"tabs__item--active":n===e}),children:a??e},e)}))})}function v(s){let{lazy:e,children:a,selectedValue:l}=s;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const s=i.find((s=>s.props.value===l));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return(0,u.jsx)("div",{className:"margin-top--md",children:i.map(((s,e)=>(0,n.cloneElement)(s,{key:e,hidden:s.props.value!==l})))})}function b(s){const e=j(s);return(0,u.jsxs)("div",{className:(0,l.Z)("tabs-container",N.tabList),children:[(0,u.jsx)(y,{...s,...e}),(0,u.jsx)(v,{...s,...e})]})}function f(s){const e=(0,g.Z)();return(0,u.jsx)(b,{...s,children:d(s.children)},String(e))}},1151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>t});var n=a(7294);const l={},i=n.createContext(l);function t(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:t(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/568bfbc0.7224c50e.js b/assets/js/568bfbc0.7224c50e.js deleted file mode 100644 index 6d7ca5f..0000000 --- a/assets/js/568bfbc0.7224c50e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4560],{2507:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},l=void 0,u={id:"Stack/MIRO--Frontend/Installation",title:"Installation",description:"Documentation coming soon\u2026",source:"@site/tabs/docs/Stack/MIRO--Frontend/Installation.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},sidebar:"defaultSidebar",previous:{title:"MIRO | Frontend",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},next:{title:"TORII | Bridge",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),l=n(6550),u=n(469),s=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:u}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=s.indexOf(t),a=u[n].value;a!==r&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function I(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>l});var r=n(7294);const a={},o=r.createContext(a);function l(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57614a44.5a99a0eb.js b/assets/js/57614a44.5a99a0eb.js new file mode 100644 index 0000000..57f47e1 --- /dev/null +++ b/assets/js/57614a44.5a99a0eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6336],{2768:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=t(5893),s=t(1151),a=t(4866),o=t(5162);const i={title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers",title:"Governance-regulated Foreign Token Transfers",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",permalink:"/docs.kira.network/docs/34367cb0-ee71-418f-9dc5-bcc8823b71e5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},sidebar:"defaultSidebar",previous:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/docs/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},next:{title:"Token Basketing",permalink:"/docs.kira.network/docs/6c6d144f-f315-43f7-8fe7-289d98890a69"}},d={},h=[{value:"Concept",id:"22e0f2d993a7488b885efa35c0b62983",level:2},{value:"Filters Mechanism",id:"51d0ee0e8c8c41b8914df112534e1a22",level:3},{value:"Parameters",id:"c0b16997472f4eeb8ba46c949fe5c8fc",level:2},{value:"Cli Syntax & Examples",id:"e11aba2be5c447bb8c11935c4f113602",level:2},{value:"Transactions",id:"d9d37ffa3e5d409ebafdd46a1137665e",level:2},{value:"Queries",id:"2a33689889f04da9889e331913a3d542",level:2},{value:"List Blacklisted & Whitelisted Tokens",id:"00c35df7f2994764862c7136ad5d95ac",level:4},{value:"Governance",id:"68ee4d5375594154b7f930f3ec0d6a17",level:2},{value:"Whitelist And/or Blacklist Token Transfers Proposal",id:"45cfb0e749524b7292eb421de9702f07",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"22e0f2d993a7488b885efa35c0b62983",children:"Concept"}),"\n",(0,r.jsxs)(n.p,{children:["Foreign tokens can significantly impact the network's economy if they are stolen or originate from a compromised network (i.e. Luna). For instance, should a token experience sudden supply exploitation, it could pose a serious risk to the network's spam protection mechanism if used for fee payments. To mitigate this risk, KIRA\u2019s governance has the ability to create and manage blacklist and whitelist filters for foreign token transfers. These filters can be enabled or disabled through the ",(0,r.jsx)(n.code,{children:"enable_token_whitelist"})," and ",(0,r.jsx)(n.code,{children:"enable_token_blacklist"})," ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", and their contents are curated through dedicated governance proposals. In the event that a foreign network becomes compromised and its tokens are deposited into KIRA, these filters can be used to recover funds through a planned hard fork. This process is similar to funds recovery in other Proof-of-Stake and Proof-of-Work chains, but offers on-chain signaling of the network governance's intentions."]}),"\n",(0,r.jsx)(n.h3,{id:"51d0ee0e8c8c41b8914df112534e1a22",children:"Filters Mechanism"}),"\n",(0,r.jsxs)(n.p,{children:["When the ",(0,r.jsx)(n.code,{children:"enable_token_whitelist"})," network property is set to ",(0,r.jsx)(n.code,{children:"true"}),", SEKAI will check whether a given token is whitelisted before allowing it to be transferred. Similarly, when the ",(0,r.jsx)(n.code,{children:"enable_token_blacklist"})," network property is set to ",(0,r.jsx)(n.code,{children:"true"}),", SEKAI will check whether a given token is blacklisted before allowing it to be transferred. These checks are performed during the ",(0,r.jsx)(n.code,{children:"AnteHandler"})," phase of transaction processing."]}),"\n",(0,r.jsxs)(n.p,{children:["If a token is not on the whitelist (in the case of ",(0,r.jsx)(n.code,{children:"enable_token_whitelist"})," being set to ",(0,r.jsx)(n.code,{children:"true"}),") or is on the blacklist (in the case of ",(0,r.jsx)(n.code,{children:"enable_token_blacklist"})," being set to ",(0,r.jsx)(n.code,{children:"true"}),"), then the transaction will fail validation during the ",(0,r.jsx)(n.code,{children:"AnteHandler"})," phase, and the transaction will not be broadcasted to the network or included in any block."]}),"\n",(0,r.jsx)(n.h2,{id:"c0b16997472f4eeb8ba46c949fe5c8fc",children:"Parameters"}),"\n",(0,r.jsx)(n.h2,{id:"e11aba2be5c447bb8c11935c4f113602",children:"Cli Syntax & Examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"d9d37ffa3e5d409ebafdd46a1137665e",children:"Transactions"}),(0,r.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"2a33689889f04da9889e331913a3d542",children:"Queries"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"token-black-whites"})}),(0,r.jsx)(n.th,{children:"Query lists of blacklisted/whitelisted tokens."})]})})}),(0,r.jsx)(n.h4,{id:"00c35df7f2994764862c7136ad5d95ac",children:"List Blacklisted & Whitelisted Tokens"}),(0,r.jsx)(n.p,{children:"The following command is used to lists all blacklisted and whitelisted tokens."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid query tokens token-black-whites $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"68ee4d5375594154b7f930f3ec0d6a17",children:"Governance"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"proposal-update-tokens-blackwhite"})}),(0,r.jsx)(n.th,{children:"Create a proposal for whitelisting/blacklisting tokens."})]})})}),(0,r.jsx)(n.h4,{id:"45cfb0e749524b7292eb421de9702f07",children:"Whitelist And/or Blacklist Token Transfers Proposal"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"proposal-update-tokens-blackwhite"})," CLI can be used by accounts with permission 24 to create a proposal for adding or modifying whitelist or blacklist tokens. To vote on the proposal, an account must have permission 25. The ",(0,r.jsx)(n.code,{children:"--is_add"})," flag specifies whether the token should be added (",(0,r.jsx)(n.code,{children:"true"}),") or removed (",(0,r.jsx)(n.code,{children:"false"}),") from the list, while the ",(0,r.jsx)(n.code,{children:"--is_blacklist"})," flag specifies which list to update (",(0,r.jsx)(n.code,{children:"true"})," for blacklist, ",(0,r.jsx)(n.code,{children:"false"})," for whitelist)."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TOKENS"}),": A token or a comma-separated list of tokens (e.g., ",(0,r.jsx)(n.code,{children:"ATOM, KEX, BTC"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$ISBLACKLIST"}),": Boolean value; ",(0,r.jsx)(n.code,{children:"true"})," to add/modify blacklist, ",(0,r.jsx)(n.code,{children:"false"})," for whitelist."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$ISADD"}),": Boolean value; ",(0,r.jsx)(n.code,{children:"true"})," to add, ",(0,r.jsx)(n.code,{children:"false"})," to remove from the list."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid tx tokens proposal-update-tokens-blackwhite \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--is_add=$ISADD --is_blacklist=$ISBLACKLIST --tokens=$TOKENS\n"})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>o});t(7294);var r=t(6905);const s={tabItem:"tabItem_Ymn6"};var a=t(5893);function o(e){let{children:n,hidden:t,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,o),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>w});var r=t(7294),s=t(6905),a=t(2466),o=t(6550),i=t(469),l=t(1980),c=t(7392),d=t(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const s=(0,o.k6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(a),(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(s.location.search);n.set(a,e),s.replace({...s.location,search:n.toString()})}),[a,s])]}function p(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,a=u(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[c,h]=b({queryString:t,groupId:s}),[p,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,a]=(0,d.Nk)(t);return[s,(0,r.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:s}),k=(()=>{const e=c??p;return f({value:e,tabValues:a})?e:null})();(0,i.Z)((()=>{k&&l(k)}),[k]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=t(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=t(5893);function j(e){let{className:n,block:t,selectedValue:r,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),s=i[t].value;s!==r&&(c(n),o(s))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...a,className:(0,s.Z)("tabs__item",k.tabItem,a?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function g(e){const n=p(e);return(0,x.jsxs)("div",{className:(0,s.Z)("tabs-container",k.tabList),children:[(0,x.jsx)(j,{...e,...n}),(0,x.jsx)(v,{...e,...n})]})}function w(e){const n=(0,m.Z)();return(0,x.jsx)(g,{...e,children:h(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>o});var r=t(7294);const s={},a=r.createContext(s);function o(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57614a44.8355af41.js b/assets/js/57614a44.8355af41.js deleted file mode 100644 index c54ada3..0000000 --- a/assets/js/57614a44.8355af41.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6336],{2768:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=n(5893),s=n(1151),a=n(4866),o=n(5162);const i={title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers",title:"Governance-regulated Foreign Token Transfers",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Governance-regulated Foreign Token Transfers",sidebar_position:4,slug:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},sidebar:"defaultSidebar",previous:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},next:{title:"Token Basketing",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"}},d={},h=[{value:"Concept",id:"22e0f2d993a7488b885efa35c0b62983",level:2},{value:"Filters mechanism",id:"51d0ee0e8c8c41b8914df112534e1a22",level:3},{value:"Parameters",id:"c0b16997472f4eeb8ba46c949fe5c8fc",level:2},{value:"Cli syntax & examples",id:"e11aba2be5c447bb8c11935c4f113602",level:2},{value:"Transactions",id:"d9d37ffa3e5d409ebafdd46a1137665e",level:2},{value:"Queries",id:"2a33689889f04da9889e331913a3d542",level:2},{value:"List blacklisted & whitelisted tokens",id:"00c35df7f2994764862c7136ad5d95ac",level:4},{value:"Governance",id:"68ee4d5375594154b7f930f3ec0d6a17",level:2},{value:"Whitelist and/or blacklist token transfers proposal",id:"45cfb0e749524b7292eb421de9702f07",level:4}];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"22e0f2d993a7488b885efa35c0b62983",children:"Concept"}),"\n",(0,r.jsxs)(t.p,{children:["Foreign tokens can significantly impact the network's economy if they are stolen or originate from a compromised network (i.e. Luna). For instance, should a token experience sudden supply exploitation, it could pose a serious risk to the network's spam protection mechanism if used for fee payments. To mitigate this risk, KIRA\u2019s governance has the ability to create and manage blacklist and whitelist filters for foreign token transfers. These filters can be enabled or disabled through the ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," and ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," ",(0,r.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", and their contents are curated through dedicated governance proposals. In the event that a foreign network becomes compromised and its tokens are deposited into KIRA, these filters can be used to recover funds through a planned hard fork. This process is similar to funds recovery in other Proof-of-Stake and Proof-of-Work chains, but offers on-chain signaling of the network governance's intentions."]}),"\n",(0,r.jsx)(t.h3,{id:"51d0ee0e8c8c41b8914df112534e1a22",children:"Filters mechanism"}),"\n",(0,r.jsxs)(t.p,{children:["When the ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," network property is set to ",(0,r.jsx)(t.code,{children:"true"}),", SEKAI will check whether a given token is whitelisted before allowing it to be transferred. Similarly, when the ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," network property is set to ",(0,r.jsx)(t.code,{children:"true"}),", SEKAI will check whether a given token is blacklisted before allowing it to be transferred. These checks are performed during the ",(0,r.jsx)(t.code,{children:"AnteHandler"})," phase of transaction processing."]}),"\n",(0,r.jsxs)(t.p,{children:["If a token is not on the whitelist (in the case of ",(0,r.jsx)(t.code,{children:"enable_token_whitelist"})," being set to ",(0,r.jsx)(t.code,{children:"true"}),") or is on the blacklist (in the case of ",(0,r.jsx)(t.code,{children:"enable_token_blacklist"})," being set to ",(0,r.jsx)(t.code,{children:"true"}),"), then the transaction will fail validation during the ",(0,r.jsx)(t.code,{children:"AnteHandler"})," phase, and the transaction will not be broadcasted to the network or included in any block."]}),"\n",(0,r.jsx)(t.h2,{id:"c0b16997472f4eeb8ba46c949fe5c8fc",children:"Parameters"}),"\n",(0,r.jsx)(t.h2,{id:"e11aba2be5c447bb8c11935c4f113602",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(t.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(t.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(t.em,{children:"documentation for more details."})," ",(0,r.jsx)(t.em,{children:(0,r.jsx)(t.code,{children:"$SIGNER"})})," ",(0,r.jsx)(t.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(t.em,{children:(0,r.jsx)(t.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(t.em,{children:"and"})," ",(0,r.jsxs)(t.em,{children:[(0,r.jsx)(t.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(t.em,{children:"section"})]})}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(t.h2,{id:"d9d37ffa3e5d409ebafdd46a1137665e",children:"Transactions"}),(0,r.jsx)(t.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(t.h2,{id:"2a33689889f04da9889e331913a3d542",children:"Queries"}),(0,r.jsx)(t.table,{children:(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.code,{children:"token-black-whites"})}),(0,r.jsx)(t.th,{children:"Query lists of blacklisted/whitelisted tokens."})]})})}),(0,r.jsx)(t.h4,{id:"00c35df7f2994764862c7136ad5d95ac",children:"List blacklisted & whitelisted tokens"}),(0,r.jsx)(t.p,{children:"The following command is used to lists all blacklisted and whitelisted tokens."}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens token-black-whites $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(t.h2,{id:"68ee4d5375594154b7f930f3ec0d6a17",children:"Governance"}),(0,r.jsx)(t.table,{children:(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.code,{children:"proposal-update-tokens-blackwhite"})}),(0,r.jsx)(t.th,{children:"Create a proposal for whitelisting/blacklisting tokens."})]})})}),(0,r.jsx)(t.h4,{id:"45cfb0e749524b7292eb421de9702f07",children:"Whitelist and/or blacklist token transfers proposal"}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"proposal-update-tokens-blackwhite"})," CLI can be used by accounts with permission 24 to create a proposal for adding or modifying whitelist or blacklist tokens. To vote on the proposal, an account must have permission 25. The ",(0,r.jsx)(t.code,{children:"--is_add"})," flag specifies whether the token should be added (",(0,r.jsx)(t.code,{children:"true"}),") or removed (",(0,r.jsx)(t.code,{children:"false"}),") from the list, while the ",(0,r.jsx)(t.code,{children:"--is_blacklist"})," flag specifies which list to update (",(0,r.jsx)(t.code,{children:"true"})," for blacklist, ",(0,r.jsx)(t.code,{children:"false"})," for whitelist)."]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Flags"})}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$TOKENS"}),": A token or a comma-separated list of tokens (e.g., ",(0,r.jsx)(t.code,{children:"ATOM, KEX, BTC"}),")."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$ISBLACKLIST"}),": Boolean value; ",(0,r.jsx)(t.code,{children:"true"})," to add/modify blacklist, ",(0,r.jsx)(t.code,{children:"false"})," for whitelist."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"$ISADD"}),": Boolean value; ",(0,r.jsx)(t.code,{children:"true"})," to add, ",(0,r.jsx)(t.code,{children:"false"})," to remove from the list."]}),"\n"]}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens proposal-update-tokens-blackwhite \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--is_add=$ISADD --is_blacklist=$ISBLACKLIST --tokens=$TOKENS\n"})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var r=n(6905);const s={tabItem:"tabItem_Ymn6"};var a=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var r=n(7294),s=n(6905),a=n(2466),o=n(6550),i=n(469),l=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:s}}=e;return{value:t,label:n,attributes:r,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const s=(0,o.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(a),(0,r.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(s.location.search);t.set(a,e),s.replace({...s.location,search:t.toString()})}),[a,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,a=u(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,h]=b({queryString:n,groupId:s}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,a]=(0,d.Nk)(n);return[s,(0,r.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:s}),k=(()=>{const e=c??p;return f({value:e,tabValues:a})?e:null})();(0,i.Z)((()=>{k&&l(k)}),[k]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=n(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function j(e){let{className:t,block:n,selectedValue:r,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),s=i[n].value;s!==r&&(c(t),o(s))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:h,onClick:d,...a,className:(0,s.Z)("tabs__item",k.tabItem,a?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:s}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function g(e){const t=p(e);return(0,x.jsxs)("div",{className:(0,s.Z)("tabs-container",k.tabList),children:[(0,x.jsx)(j,{...e,...t}),(0,x.jsx)(v,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,x.jsx)(g,{...e,children:h(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var r=n(7294);const s={},a=r.createContext(s);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5be0416b.126f3456.js b/assets/js/5be0416b.126f3456.js deleted file mode 100644 index 217e043..0000000 --- a/assets/js/5be0416b.126f3456.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3010],{5863:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Params/index",title:"Params",description:"cosmos.sdk/x/params",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:18,frontMatter:{title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},sidebar:"defaultSidebar",previous:{title:"Transaction validation & processing",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671"},next:{title:"Network Parameter Handling",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"}},l={},i=[];function c(e){const t={code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/params"})})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>y});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),u=a(469),l=a(1980),i=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:a,groupId:n}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=a(5893);function g(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=u[a].value;n!==r&&(i(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:u.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>u,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5be0416b.bf5dd2b4.js b/assets/js/5be0416b.bf5dd2b4.js new file mode 100644 index 0000000..743507c --- /dev/null +++ b/assets/js/5be0416b.bf5dd2b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3010],{5863:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Params/index",title:"Params",description:"cosmos.sdk/x/params",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",permalink:"/docs.kira.network/docs/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:18,frontMatter:{title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},sidebar:"defaultSidebar",previous:{title:"Transaction validation & processing",permalink:"/docs.kira.network/docs/f7f02009-1f78-426b-8915-f503cdda9671"},next:{title:"Network Parameter Handling",permalink:"/docs.kira.network/docs/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"}},l={},i=[];function c(e){const t={code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/params"})})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>y});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),u=a(469),l=a(1980),i=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:a,groupId:n}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=a(5893);function g(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=u[a].value;n!==r&&(i(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:u.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>u,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c5d267a.b9b16d8d.js b/assets/js/5c5d267a.b9b16d8d.js deleted file mode 100644 index 2fc3c90..0000000 --- a/assets/js/5c5d267a.b9b16d8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5448],{7649:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>c,metadata:()=>o,toc:()=>u});var t=a(5893),s=a(1151),r=a(4866),i=a(5162);const c={title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},l=void 0,o={id:"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module",title:"Evidence module",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Evidence/Evidence-module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Evidence module",sidebar_position:2,slug:"/bd4cce67-2cee-4d9f-9b81-e5643d130438"},sidebar:"defaultSidebar",previous:{title:"Evidence",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"},next:{title:"Keys & accounts",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7"}},d={},u=[{value:"Concept",id:"9da6c82434ad47c5908a9dd18371ae39",level:3},{value:"Cli syntax & examples",id:"f2eddfbd285d437cab18755acfd6fab9",level:2},{value:"Transactions",id:"723e137d9712400c842928f221446573",level:2},{value:"Queries",id:"fce8b27770f04b908c78f06bd198ef57",level:2},{value:"List all submitted evidence (paginated)",id:"3f5710a330774094b495f67a3c3ab6f4",level:4},{value:"Query specific evidence by its hash",id:"a4fd48a0733f4fce8bd47809d8a6dedc",level:4},{value:"Governance",id:"9a2dbce1f8ac4af589baf48fa108385f",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"9da6c82434ad47c5908a9dd18371ae39",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:"The Evidence module, extended from the Cosmos SDK's, enhances existing evidence handling that relies on the underlying consensus engine to automatically submit evidence upon discovery. It achieves this by implementing abstractions and interfaces that enable developers to define custom evidence messages and methods for penalizing misbehaving consensus nodes. Tendermint detects double-signing by consensus nodes and reports this to the Evidence module, which then manages the verification process and determines the appropriate penalty for the offending consensus nodes. Penalties may include slashing a portion of their stake and removing them from the active consensus node set."}),"\n",(0,t.jsxs)(n.p,{children:["In KIRA, the only misbehavior that is handled is double signing. In this case the consensus node is automatically jailed upon detection but not automatically slashed. Instead, the slashing process is managed by governance through the slashing module. ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"Jailing & slashing"})," provides all the necessary information regarding how this process works."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-go",children:"// https://github.com/KiraCore/sekai/blob/master/x/evidence/keeper/infraction.go\n// (...)\n\nif !validator.IsJailed() {\n k.slashingKeeper.Jail(ctx, consAddr)\n}\nk.slashingKeeper.JailUntil(ctx, consAddr, ctx.BlockTime())\nk.SetEvidence(ctx, evidence)\n"})}),"\n",(0,t.jsx)(n.h2,{id:"f2eddfbd285d437cab18755acfd6fab9",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(n.h2,{id:"723e137d9712400c842928f221446573",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"fce8b27770f04b908c78f06bd198ef57",children:"Queries"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"evidence"})}),(0,t.jsx)(n.th,{children:"List all submitted evidence in a paginated format."})]})})}),(0,t.jsx)(n.h4,{id:"3f5710a330774094b495f67a3c3ab6f4",children:"List all submitted evidence (paginated)"}),(0,t.jsxs)(n.p,{children:["This command lists all submitted evidence in a paginated format. Replace ",(0,t.jsx)(n.code,{children:""})," with the desired page number and ",(0,t.jsx)(n.code,{children:""})," with the number of items per page. Default values will be used if these are not provided."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $FLAGS_QR --page= --limit= | jq\n"})}),(0,t.jsx)(n.h4,{id:"a4fd48a0733f4fce8bd47809d8a6dedc",children:"Query specific evidence by its hash"}),(0,t.jsx)(n.p,{children:"To query a specific piece of evidence by its hash, use the following command."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query evidence $HASH $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9a2dbce1f8ac4af589baf48fa108385f",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>i});a(7294);var t=a(6905);const s={tabItem:"tabItem_Ymn6"};var r=a(5893);function i(e){let{children:n,hidden:a,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>k});var t=a(7294),s=a(6905),r=a(2466),i=a(6550),c=a(469),l=a(1980),o=a(7392),d=a(12);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:s}}=e;return{value:n,label:a,attributes:t,default:s}}))}(a);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function f(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:a}=e;const s=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,l._X)(r),(0,t.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function m(e){const{defaultValue:n,queryString:a=!1,groupId:s}=e,r=h(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[o,u]=b({queryString:a,groupId:s}),[m,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,d.Nk)(a);return[s,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:s}),v=(()=>{const e=o??m;return f({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:n,block:a,selectedValue:t,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,r.o5)(),d=e=>{const n=e.currentTarget,a=l.indexOf(n),s=c[a].value;s!==t&&(o(n),i(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;n=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;n=l[a]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},n),children:c.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,s.Z)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":t===n}),children:a??n},n)}))})}function j(e){let{lazy:n,children:a,selectedValue:s}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=m(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...n}),(0,g.jsx)(j,{...e,...n})]})}function k(e){const n=(0,p.Z)();return(0,g.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>c,a:()=>i});var t=a(7294);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d87bd6c.c86b4d6a.js b/assets/js/5d87bd6c.c86b4d6a.js new file mode 100644 index 0000000..cd666b9 --- /dev/null +++ b/assets/js/5d87bd6c.c86b4d6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3908],{5606:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},i=void 0,o={id:"KIRA\u2019s-Economics/Overview",title:"Overview",description:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Overview.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},sidebar:"defaultSidebar",previous:{title:"Building on KIRA",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},next:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326"}},l={},c=[];function u(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers."}),"\n",(0,a.jsx)(t.p,{children:"Central to KIRA's economic architecture are several key mechanisms: the native token (KEX), which facilitates transactions and governance; Multi-Bonded Proof of Stake, a system that enables a diverse range of crypto assets to be staked; the Initial Liquidity Offering (ILO) for seamless dApp integration and liquidity provision, and a suite of economic policies tailored to incentivize participation and foster sustainable growth. These components work synergistically to ensure that KIRA's economy is robust, flexible, and adaptive to the needs of its users and the broader blockchain ecosystem."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. Multi-asset staking increases the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,a.jsxs)(t.li,{children:["I",(0,a.jsx)(t.strong,{children:"LO (Initial Liquidity Offering):"})," The Initial Liquidity Offering (ILO) on KIRA is a strategic mechanism aimed at ensuring sufficient liquidity for decentralized applications (dApps) by engaging developers, users, verifiers, and executors in a unified effort towards the dApp's success. Through a governance proposal process, stakeholders commit KIRA's native token, KEX, to support the dApp, leading to the creation of a liquidity pool based on a Uniswap-style AMM and the issuance of LP tokens. This process is designed to align incentives, facilitate token economics with configurable parameters like token issuance, and maintain dApp operability through a collateral threshold and incentive structures for validators and liquidity providers, thereby fostering a supportive ecosystem for dApp development and launch."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(c(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d87bd6c.fc4ec753.js b/assets/js/5d87bd6c.fc4ec753.js deleted file mode 100644 index e13221d..0000000 --- a/assets/js/5d87bd6c.fc4ec753.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3908],{5606:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},i=void 0,o={id:"KIRA\u2019s-Economics/Overview",title:"Overview",description:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Overview.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",permalink:"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"},sidebar:"defaultSidebar",previous:{title:"Building on KIRA",permalink:"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},next:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326"}},l={},c=[];function u(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers."}),"\n",(0,a.jsx)(t.p,{children:"Central to KIRA's economic architecture are several key mechanisms: the native token (KEX), which facilitates transactions and governance; Multi-Bonded Proof of Stake, a system that enables a diverse range of crypto assets to be staked; the Initial Liquidity Offering (ILO) for seamless dApp integration and liquidity provision, and a suite of economic policies tailored to incentivize participation and foster sustainable growth. These components work synergistically to ensure that KIRA's economy is robust, flexible, and adaptive to the needs of its users and the broader blockchain ecosystem."}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. Multi-asset staking increases the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,a.jsxs)(t.li,{children:["I",(0,a.jsx)(t.strong,{children:"LO (Initial Liquidity Offering):"})," The Initial Liquidity Offering (ILO) on KIRA is a strategic mechanism aimed at ensuring sufficient liquidity for decentralized applications (dApps) by engaging developers, users, verifiers, and executors in a unified effort towards the dApp's success. Through a governance proposal process, stakeholders commit KIRA's native token, KEX, to support the dApp, leading to the creation of a liquidity pool based on a Uniswap-style AMM and the issuance of LP tokens. This process is designed to align incentives, facilitate token economics with configurable parameters like token issuance, and maintain dApp operability through a collateral threshold and incentive structures for validators and liquidity providers, thereby fostering a supportive ecosystem for dApp development and launch."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(c(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5eb9d434.0f221ba9.js b/assets/js/5eb9d434.0f221ba9.js new file mode 100644 index 0000000..1cfe93e --- /dev/null +++ b/assets/js/5eb9d434.0f221ba9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5576],{905:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},s=void 0,l={id:"Stack/MIRO--Frontend/Installation",title:"Installation",description:"Documentation coming soon\u2026",source:"@site/tabs/Docs/Stack/MIRO--Frontend/Installation.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",permalink:"/docs.kira.network/docs/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},sidebar:"defaultSidebar",previous:{title:"MIRO | Frontend",permalink:"/docs.kira.network/docs/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},next:{title:"TORII | Bridge",permalink:"/docs.kira.network/docs/d5d8036d-f978-4053-b7e8-57d9244c09e9"}},u={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),u=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[s,u]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),a=l[n].value;a!==r&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function I(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5eb9d434.ccf235c3.js b/assets/js/5eb9d434.ccf235c3.js deleted file mode 100644 index 61de66d..0000000 --- a/assets/js/5eb9d434.ccf235c3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5576],{905:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},l=void 0,u={id:"Stack/MIRO--Frontend/Installation",title:"Installation",description:"Documentation coming soon\u2026",source:"@site/tabs/Docs/Stack/MIRO--Frontend/Installation.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},sidebar:"defaultSidebar",previous:{title:"MIRO | Frontend",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},next:{title:"TORII | Bridge",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),l=n(6550),u=n(469),s=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[l,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:u}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=s.indexOf(t),a=u[n].value;a!==r&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function I(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>l});var r=n(7294);const a={},o=r.createContext(a);function l(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/611dcbcd.6df7b94c.js b/assets/js/611dcbcd.6df7b94c.js deleted file mode 100644 index e50853f..0000000 --- a/assets/js/611dcbcd.6df7b94c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3408],{2169:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(5893),a=n(1151),r=n(4866),i=n(5162);const o={title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},c=void 0,d={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar",title:"Token Rates Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/f19a45b3-88c4-469c-8642-772b941a1b24",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},sidebar:"defaultSidebar",previous:{title:"Tokens Module",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},next:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49"}},l={},h=[{value:"Concept",id:"27568532b5af487fb7aee6974fab52e4",level:2},{value:"Token management and staking policies",id:"b532e79ee90941d0a948afcfe85cc21f",level:3},{value:"Staking capability",id:"9da78ef9591b4f7eac68e846a77fb81f",level:4},{value:"Fee payment capability",id:"797471526a38443dae4ec626770301dc",level:4},{value:"Fee exchange rate",id:"f011644ddd1c459ca667d0ec6eaef9fb",level:4},{value:"Staking reward cap",id:"d205c9a9cd8c4311a19782ca1206f9ac",level:4},{value:"Dust spam prevention",id:"3731dcd8a65641519adf0409f88261a1",level:4},{value:"Token rate deletion",id:"01dc6c9c4dc74ec198c49856d5435201",level:4},{value:"Parameters",id:"9a67ee6002de4f9cbdeaa4e581a13596",level:2},{value:"Cli syntax & examples",id:"b9982ccb172d481c9392049afc924fe8",level:2},{value:"Transactions",id:"01d5529dd36e4bb8b1194b5834aa5d86",level:2},{value:"Upsert token rate with sudo permission",id:"d44f6bfbf118402292bc11b648093700",level:4},{value:"Queries",id:"41ce65d28ef24009b2241d98839343da",level:2},{value:"List all existing token rates",id:"ec7c6fb56a254751b76e874c976677a4",level:4},{value:"Query a specific token rate",id:"bfecbe47c7584fc1b8364dd96a58febb",level:4},{value:"Query multiple token rates",id:"4469a355daec4eaa94330a03f9551724",level:4},{value:"Governance",id:"2e821403aca7404cbbe24ce849ff77a7",level:2},{value:"Proposal to upsert token rate",id:"66cb1d8f16254f498ca6f97660eddb5e",level:4}];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"27568532b5af487fb7aee6974fab52e4",children:"Concept"}),"\n",(0,s.jsx)(t.p,{children:"The Token Rate Registrar in Kira Network allows governance to whitelist foreign tokens, set exchange rates, and define limits on staking rewards distribution in order to maintain the relevance and value of KEX. This enables users to pay execution fees with any whitelisted token, providing easy onboarding for new users directly from foreign networks without requiring them to use centralized exchanges to acquire KEX or deanonymize themselves. The Token Rate Registrar also allows governance to define the distribution of incentives to maintain the relevance and value of KEX, ensuring that the native token remains attractive and desirable for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."}),"\n",(0,s.jsx)(t.h3,{id:"b532e79ee90941d0a948afcfe85cc21f",children:"Token management and staking policies"}),"\n",(0,s.jsx)(t.h4,{id:"9da78ef9591b4f7eac68e846a77fb81f",children:"Staking capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property determines whether or not a specific token can be used as collateral by delegators. If the ",(0,s.jsx)(t.code,{children:"stake_token"})," property for a token is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to stake that token and earn rewards. If it is set to ",(0,s.jsx)(t.code,{children:"false"}),", then it will not be possible to stake the token and no rewards will be distributed."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property of a specific token can only be set to ",(0,s.jsx)(t.code,{children:"true"})," if the given token is present in the ",(0,s.jsx)(t.strong,{children:"[Problem Internal Link]"}),", which sets the decimals in the lowest denomination. Removal of a token from the token aliases registry will automatically disable it by setting ",(0,s.jsx)(t.code,{children:"stake_token"})," and ",(0,s.jsx)(t.code,{children:"fee_token"})," properties to ",(0,s.jsx)(t.code,{children:"false"}),"."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"797471526a38443dae4ec626770301dc",children:"Fee payment capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_payment"})," property determines if a given token can be used to pay transaction fees on the Kira Network, provided the ",(0,s.jsx)(t.code,{children:"enable_foreign_fee_payments"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," is enabled. If the ",(0,s.jsx)(t.code,{children:"fee_payment"})," property is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to use that token to pay transaction fees based on its ",(0,s.jsx)(t.code,{children:"fee_rate"})," parameter, which sets the exchange rate for the token. By allowing users to pay transaction fees with a variety of different tokens, the network can be more accessible and user-friendly, providing an easy onboarding process for new users and allowing them to pay fees without having to acquire the native KEX token."]}),"\n",(0,s.jsx)(t.h4,{id:"f011644ddd1c459ca667d0ec6eaef9fb",children:"Fee exchange rate"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"fee_rate"})," sets the exchange rates for whitelisted tokens in terms of KEX. ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," is not meant to track the market price of assets accurately as this would be too much of an overhead, but rather provides an easy way to convert between tokens and KEX as a way to protect against transaction spam. For example, if the ",(0,s.jsx)(t.code,{children:"fee_rate"})," for token ",(0,s.jsx)(t.code,{children:"u"})," is 2, it means that 2 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". If the minimum fee payment, as defined by the ",(0,s.jsx)(t.code,{children:"min_tx_fee"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),", is 100 ",(0,s.jsx)(t.code,{children:"ukex"}),", then to make a transfer, the transaction fee should be set to at least 50 ",(0,s.jsx)(t.code,{children:"u"})," tokens. Rates can also be expressed as decimals. For example, a rate of 0.1 would mean that 0.1 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". In this case, the minimum transaction fee payment in our example would be 1000 ",(0,s.jsx)(t.code,{children:"u"})," tokens."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_rate"})," for transactions using tokens other than KEX is expected to be higher in order to ensure the security of the blockchain and prevent transaction spam. This is because KIRA must maintain the security of the chain regardless of the market price of other tokens at any given time. The governance system is responsible for adjusting the exchange rates to account for possible black swan events. KIRA does not and will not use any third-party oracles, and instead relies solely on the capabilities of its own governance system. This is to mitigate any potential risks associated with the use of oracles and third parties."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"d205c9a9cd8c4311a19782ca1206f9ac",children:"Staking reward cap"}),"\n",(0,s.jsxs)(t.p,{children:["Any token eligible for staking has a corresponding ",(0,s.jsx)(t.code,{children:"stake_cap"})," parameter which sets the maximum percentage of staking rewards that it is entitled to receive from a staking pool. For example, if the ",(0,s.jsx)(t.code,{children:"stake_cap"})," for BTC is set to ",(0,s.jsx)(t.code,{children:"0.1"})," (10%), then no matter how much BTC is staked in the pool, only 10% of incoming rewards will be allocated and shared among BTC delegators. This is to prevent a malicious user from diluting the pool with a large amount of a particular token in order to claim all the rewards for themselves. By setting specific shares for each token, the reward distribution process is made simpler and more efficient, as it eliminates the need to track the market value of the staking tokens in terms of a fiat currency such as USD or KEX."]}),"\n",(0,s.jsxs)(t.p,{children:["The cumulative ",(0,s.jsx)(t.code,{children:"stake_cap"})," for all whitelisted tokens in ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," cannot exceed ",(0,s.jsx)(t.code,{children:"1.0"})," (100%). Any additions or updates to a token's ",(0,s.jsx)(t.code,{children:"stake_cap"})," must adhere to this limit. If the combined reward caps surpasses ",(0,s.jsx)(t.code,{children:"1.0"}),", the ",(0,s.jsx)(t.code,{children:"stake_token"})," property of any new token cannot be set to ",(0,s.jsx)(t.code,{children:"true"}),". For tokens where ",(0,s.jsx)(t.code,{children:"stake_token"})," is set to ",(0,s.jsx)(t.code,{children:"false"}),", staking is not permitted\u2014only unstaking. Such tokens also don't receive any rewards (equivalent to ",(0,s.jsx)(t.code,{children:"fee_rate"})," of 0)."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["KEX ",(0,s.jsx)(t.code,{children:"stake_cap"})," cannot be set under 50%."]})}),"\n",(0,s.jsx)(t.h4,{id:"3731dcd8a65641519adf0409f88261a1",children:"Dust spam prevention"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_min"})," property sets the minimum amount of token a user can delegate or undelegate per transaction to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"})," where a malicious user would try to massively delay the block production by adding/withdrawing small amounts of staking tokens with many different accounts (c.f ",(0,s.jsx)(t.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"}),")."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"stake_min"})," cannot be set to 0."]})}),"\n",(0,s.jsx)(t.h4,{id:"01dc6c9c4dc74ec198c49856d5435201",children:"Token rate deletion"}),"\n",(0,s.jsxs)(t.p,{children:["Tokens, once registered in the Token Registrar, cannot be removed because of potential complexities when they're involved in other modules, like ",(0,s.jsx)(t.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"}),". To address this, an ",(0,s.jsx)(t.code,{children:"invalidated"})," flag is available for each token entry. When this flag is set to ",(0,s.jsx)(t.code,{children:"true"}),", it serves as a metadata signal indicating that the token is no longer active within the network, even though it doesn't impose any operational restrictions on the token itself. Conversely, when the flag is set to ",(0,s.jsx)(t.code,{children:"false"}),", it suggests that the token remains active and can be used according to the other parameters' values."]}),"\n",(0,s.jsx)(t.h2,{id:"9a67ee6002de4f9cbdeaa4e581a13596",children:"Parameters"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["For the native KEX token, only the ",(0,s.jsx)(t.code,{children:"stake_cap"})," and ",(0,s.jsx)(t.code,{children:"stake_min"})," parameters can be modified."]})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"NAME"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"TYPE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"EXAMPLE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_token"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines whether or not a specific token can be used as collateral by delegators on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_payment"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines if a given token can be used to pay transaction fees on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_rate"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the exchange rates for whitelisted tokens in terms of KEX."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_cap"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the maximum percentage of staking rewards that a given token is entitled to receive from a staking pool."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_min"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"int"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"10"})}),(0,s.jsxs)(t.td,{children:["Sets the minimum amount per delegations and undelegations for a given token to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"invalidated"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"false"})}),(0,s.jsxs)(t.td,{children:["Indicates the inactive status of a token. If ",(0,s.jsx)(t.code,{children:"true"}),", the token is marked as inactive for network interactions."]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Example of Token Rate registry"})}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'[ {\n\t\t"denom": "ukex", // token denom MUST be present in the Token Aliases Registrar [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"fee_rate": 1.0, // paying 1 ukex in fees is equivalent of paying 1 ukex [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_cap": 0.50, // 50% of all block & fee rewards go to KEX delegators [CAN NOT BE LESS THEN 50% - FOR ukex ONLY]\n "stake_min": 100, // can\'t stake less than 100 ukex [MUST BE GREATER THAN 0 - FOR ANY TOKEN]\n\t\t"fee_payment": true, // can be used as fee token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_token": true // can be used as staking token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t} {\n\t\t"denom": "xbtc",\n\t\t"fee_rate": 175885.0, // paying 1 satoshi in fees is equivalent of paying 175\'885 ukex for a fee transfer\n\t\t"stake_cap": 0.251, // 25.1% of all rewards go to BTC delegators\n "stake_min": 10000, // can\'t stake less than 10k sats\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": true // can be used as staking token\n\t}, {\n\t\t"denom": "xeth",\n\t\t"fee_rate": 0.0000012, // paying 1 wei in fees is equivalent of paying 0.0000012 ukex\n\t\t"stake_cap": 0.1, // 0% of all rewards go to ETH delegators, because stake_token is set to false\n "stake_min": 8333333334, // can\'t stake less than 8\'333\'333\'334 wei\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": false // can NOT be used as staking token\n\t},{ ... }, ... ]\n'})}),"\n",(0,s.jsx)(t.h2,{id:"b9982ccb172d481c9392049afc924fe8",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(t.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(t.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(t.em,{children:"documentation for more details."})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$SIGNER"})})," ",(0,s.jsx)(t.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(t.em,{children:"and"})," ",(0,s.jsxs)(t.em,{children:[(0,s.jsx)(t.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(t.em,{children:"section"})]})}),"\n",(0,s.jsxs)(r.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(t.h2,{id:"01d5529dd36e4bb8b1194b5834aa5d86",children:"Transactions"}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"d44f6bfbf118402292bc11b648093700",children:"Upsert token rate with sudo permission"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"upsert-rate"})," CLI command allows accounts with sudo permission to create or modify a token rate without a proposal."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(t.h2,{id:"41ce65d28ef24009b2241d98839343da",children:"Queries"}),(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"all-rates"})}),(0,s.jsx)(t.th,{children:"Get all token rates in the system."})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rate"})}),(0,s.jsx)(t.td,{children:"Get a specific token rate by denomination."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rates-by-denom"})}),(0,s.jsx)(t.td,{children:"Get token rates of multiple tokens by denomination."})]})]})]}),(0,s.jsx)(t.h4,{id:"ec7c6fb56a254751b76e874c976677a4",children:"List all existing token rates"}),(0,s.jsxs)(t.p,{children:["Use the ",(0,s.jsx)(t.code,{children:"all-rates"})," command to retrieve all token rates."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens all-rates $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"bfecbe47c7584fc1b8364dd96a58febb",children:"Query a specific token rate"}),(0,s.jsxs)(t.p,{children:["To query the rate of a specific token, use the ",(0,s.jsx)(t.code,{children:"rate"})," command."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token whose rate is to be queried."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rate $DENOM $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"4469a355daec4eaa94330a03f9551724",children:"Query multiple token rates"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"rates-by-denom"})," command allows querying rates of multiple tokens."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM_LIST"}),": A comma-separated list of token denominations to query."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rates-by-denom $DENOM_LIST $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(t.h2,{id:"2e821403aca7404cbbe24ce849ff77a7",children:"Governance"}),(0,s.jsx)(t.p,{children:"In order to create a proposal to add or modify entries in the Token Registrar, an account must possess permission 18 or 8. Similarly, for voting on any of the Token Registrar proposals, an account must have permission 19."}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"66cb1d8f16254f498ca6f97660eddb5e",children:"Proposal to upsert token rate"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})," CLI command is used to create or update a token rate registry through a proposal process."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token (e.g., ",(0,s.jsx)(t.code,{children:"tbtc"}),")."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var s=n(6905);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var s=n(7294),a=n(6905),r=n(2466),i=n(6550),o=n(469),c=n(1980),d=n(7392),l=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:a}}=e;return{value:t,label:n,attributes:s,default:a}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function x(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,c._X)(r),(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[i,c]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:r}))),[d,h]=x({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,l.Nk)(n);return[a,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),j=(()=>{const e=d??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,r]),tabValues:r}}var m=n(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function b(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),l=e=>{const t=e.currentTarget,n=c.indexOf(t),a=o[n].value;a!==s&&(d(t),i(a))},h=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>c.push(e),onKeyDown:h,onClick:l,...r,className:(0,a.Z)("tabs__item",j.tabItem,r?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function g(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function v(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,k.jsx)(b,{...e,...t}),(0,k.jsx)(g,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(v,{...e,children:h(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var s=n(7294);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/611dcbcd.905bff29.js b/assets/js/611dcbcd.905bff29.js new file mode 100644 index 0000000..25b20ad --- /dev/null +++ b/assets/js/611dcbcd.905bff29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3408],{2169:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(5893),a=n(1151),r=n(4866),i=n(5162);const o={title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},c=void 0,d={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar",title:"Token Rates Registrar",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/f19a45b3-88c4-469c-8642-772b941a1b24",permalink:"/docs.kira.network/docs/f19a45b3-88c4-469c-8642-772b941a1b24",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Token Rates Registrar",sidebar_position:2,slug:"/f19a45b3-88c4-469c-8642-772b941a1b24"},sidebar:"defaultSidebar",previous:{title:"Tokens Module",permalink:"/docs.kira.network/docs/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},next:{title:"Token Aliases Registrar",permalink:"/docs.kira.network/docs/e163e1d7-f16e-4c0d-945c-db2efc13ea49"}},l={},h=[{value:"Concept",id:"27568532b5af487fb7aee6974fab52e4",level:2},{value:"Token Management and Staking Policies",id:"b532e79ee90941d0a948afcfe85cc21f",level:3},{value:"Staking Capability",id:"9da78ef9591b4f7eac68e846a77fb81f",level:4},{value:"Fee Payment Capability",id:"797471526a38443dae4ec626770301dc",level:4},{value:"Fee Exchange Rate",id:"f011644ddd1c459ca667d0ec6eaef9fb",level:4},{value:"Staking Reward Cap",id:"d205c9a9cd8c4311a19782ca1206f9ac",level:4},{value:"Dust Spam Prevention",id:"3731dcd8a65641519adf0409f88261a1",level:4},{value:"Token Rate Deletion",id:"01dc6c9c4dc74ec198c49856d5435201",level:4},{value:"Parameters",id:"9a67ee6002de4f9cbdeaa4e581a13596",level:2},{value:"Cli Syntax & Examples",id:"b9982ccb172d481c9392049afc924fe8",level:2},{value:"Transactions",id:"01d5529dd36e4bb8b1194b5834aa5d86",level:2},{value:"Upsert Token Rate With Sudo Permission",id:"d44f6bfbf118402292bc11b648093700",level:4},{value:"Queries",id:"41ce65d28ef24009b2241d98839343da",level:2},{value:"List All Existing Token Rates",id:"ec7c6fb56a254751b76e874c976677a4",level:4},{value:"Query a Specific Token Rate",id:"bfecbe47c7584fc1b8364dd96a58febb",level:4},{value:"Query Multiple Token Rates",id:"4469a355daec4eaa94330a03f9551724",level:4},{value:"Governance",id:"2e821403aca7404cbbe24ce849ff77a7",level:2},{value:"Proposal to Upsert Token Rate",id:"66cb1d8f16254f498ca6f97660eddb5e",level:4}];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"27568532b5af487fb7aee6974fab52e4",children:"Concept"}),"\n",(0,s.jsx)(t.p,{children:"The Token Rate Registrar in Kira Network allows governance to whitelist foreign tokens, set exchange rates, and define limits on staking rewards distribution in order to maintain the relevance and value of KEX. This enables users to pay execution fees with any whitelisted token, providing easy onboarding for new users directly from foreign networks without requiring them to use centralized exchanges to acquire KEX or deanonymize themselves. The Token Rate Registrar also allows governance to define the distribution of incentives to maintain the relevance and value of KEX, ensuring that the native token remains attractive and desirable for users and stakeholders to hold and use. By incentivizing participation and holding, the network is able to maintain a high level of security and value."}),"\n",(0,s.jsx)(t.h3,{id:"b532e79ee90941d0a948afcfe85cc21f",children:"Token Management and Staking Policies"}),"\n",(0,s.jsx)(t.h4,{id:"9da78ef9591b4f7eac68e846a77fb81f",children:"Staking Capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property determines whether or not a specific token can be used as collateral by delegators. If the ",(0,s.jsx)(t.code,{children:"stake_token"})," property for a token is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to stake that token and earn rewards. If it is set to ",(0,s.jsx)(t.code,{children:"false"}),", then it will not be possible to stake the token and no rewards will be distributed."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_token"})," property of a specific token can only be set to ",(0,s.jsx)(t.code,{children:"true"})," if the given token is present in the ",(0,s.jsx)(t.strong,{children:"[Problem Internal Link]"}),", which sets the decimals in the lowest denomination. Removal of a token from the token aliases registry will automatically disable it by setting ",(0,s.jsx)(t.code,{children:"stake_token"})," and ",(0,s.jsx)(t.code,{children:"fee_token"})," properties to ",(0,s.jsx)(t.code,{children:"false"}),"."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"797471526a38443dae4ec626770301dc",children:"Fee Payment Capability"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_payment"})," property determines if a given token can be used to pay transaction fees on the Kira Network, provided the ",(0,s.jsx)(t.code,{children:"enable_foreign_fee_payments"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," is enabled. If the ",(0,s.jsx)(t.code,{children:"fee_payment"})," property is set to ",(0,s.jsx)(t.code,{children:"true"}),", then users will be able to use that token to pay transaction fees based on its ",(0,s.jsx)(t.code,{children:"fee_rate"})," parameter, which sets the exchange rate for the token. By allowing users to pay transaction fees with a variety of different tokens, the network can be more accessible and user-friendly, providing an easy onboarding process for new users and allowing them to pay fees without having to acquire the native KEX token."]}),"\n",(0,s.jsx)(t.h4,{id:"f011644ddd1c459ca667d0ec6eaef9fb",children:"Fee Exchange Rate"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"fee_rate"})," sets the exchange rates for whitelisted tokens in terms of KEX. ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," is not meant to track the market price of assets accurately as this would be too much of an overhead, but rather provides an easy way to convert between tokens and KEX as a way to protect against transaction spam. For example, if the ",(0,s.jsx)(t.code,{children:"fee_rate"})," for token ",(0,s.jsx)(t.code,{children:"u"})," is 2, it means that 2 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". If the minimum fee payment, as defined by the ",(0,s.jsx)(t.code,{children:"min_tx_fee"})," ",(0,s.jsx)(t.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),", is 100 ",(0,s.jsx)(t.code,{children:"ukex"}),", then to make a transfer, the transaction fee should be set to at least 50 ",(0,s.jsx)(t.code,{children:"u"})," tokens. Rates can also be expressed as decimals. For example, a rate of 0.1 would mean that 0.1 ",(0,s.jsx)(t.code,{children:"ukex"})," is equal to 1 ",(0,s.jsx)(t.code,{children:"u"}),". In this case, the minimum transaction fee payment in our example would be 1000 ",(0,s.jsx)(t.code,{children:"u"})," tokens."]}),"\n",(0,s.jsx)(t.p,{children:":::\ud83d\udccc"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"fee_rate"})," for transactions using tokens other than KEX is expected to be higher in order to ensure the security of the blockchain and prevent transaction spam. This is because KIRA must maintain the security of the chain regardless of the market price of other tokens at any given time. The governance system is responsible for adjusting the exchange rates to account for possible black swan events. KIRA does not and will not use any third-party oracles, and instead relies solely on the capabilities of its own governance system. This is to mitigate any potential risks associated with the use of oracles and third parties."]}),"\n",(0,s.jsx)(t.p,{children:":::"}),"\n",(0,s.jsx)(t.h4,{id:"d205c9a9cd8c4311a19782ca1206f9ac",children:"Staking Reward Cap"}),"\n",(0,s.jsxs)(t.p,{children:["Any token eligible for staking has a corresponding ",(0,s.jsx)(t.code,{children:"stake_cap"})," parameter which sets the maximum percentage of staking rewards that it is entitled to receive from a staking pool. For example, if the ",(0,s.jsx)(t.code,{children:"stake_cap"})," for BTC is set to ",(0,s.jsx)(t.code,{children:"0.1"})," (10%), then no matter how much BTC is staked in the pool, only 10% of incoming rewards will be allocated and shared among BTC delegators. This is to prevent a malicious user from diluting the pool with a large amount of a particular token in order to claim all the rewards for themselves. By setting specific shares for each token, the reward distribution process is made simpler and more efficient, as it eliminates the need to track the market value of the staking tokens in terms of a fiat currency such as USD or KEX."]}),"\n",(0,s.jsxs)(t.p,{children:["The cumulative ",(0,s.jsx)(t.code,{children:"stake_cap"})," for all whitelisted tokens in ",(0,s.jsx)(t.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," cannot exceed ",(0,s.jsx)(t.code,{children:"1.0"})," (100%). Any additions or updates to a token's ",(0,s.jsx)(t.code,{children:"stake_cap"})," must adhere to this limit. If the combined reward caps surpasses ",(0,s.jsx)(t.code,{children:"1.0"}),", the ",(0,s.jsx)(t.code,{children:"stake_token"})," property of any new token cannot be set to ",(0,s.jsx)(t.code,{children:"true"}),". For tokens where ",(0,s.jsx)(t.code,{children:"stake_token"})," is set to ",(0,s.jsx)(t.code,{children:"false"}),", staking is not permitted\u2014only unstaking. Such tokens also don't receive any rewards (equivalent to ",(0,s.jsx)(t.code,{children:"fee_rate"})," of 0)."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["KEX ",(0,s.jsx)(t.code,{children:"stake_cap"})," cannot be set under 50%."]})}),"\n",(0,s.jsx)(t.h4,{id:"3731dcd8a65641519adf0409f88261a1",children:"Dust Spam Prevention"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"stake_min"})," property sets the minimum amount of token a user can delegate or undelegate per transaction to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"})," where a malicious user would try to massively delay the block production by adding/withdrawing small amounts of staking tokens with many different accounts (c.f ",(0,s.jsx)(t.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"}),")."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"stake_min"})," cannot be set to 0."]})}),"\n",(0,s.jsx)(t.h4,{id:"01dc6c9c4dc74ec198c49856d5435201",children:"Token Rate Deletion"}),"\n",(0,s.jsxs)(t.p,{children:["Tokens, once registered in the Token Registrar, cannot be removed because of potential complexities when they're involved in other modules, like ",(0,s.jsx)(t.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"}),". To address this, an ",(0,s.jsx)(t.code,{children:"invalidated"})," flag is available for each token entry. When this flag is set to ",(0,s.jsx)(t.code,{children:"true"}),", it serves as a metadata signal indicating that the token is no longer active within the network, even though it doesn't impose any operational restrictions on the token itself. Conversely, when the flag is set to ",(0,s.jsx)(t.code,{children:"false"}),", it suggests that the token remains active and can be used according to the other parameters' values."]}),"\n",(0,s.jsx)(t.h2,{id:"9a67ee6002de4f9cbdeaa4e581a13596",children:"Parameters"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["For the native KEX token, only the ",(0,s.jsx)(t.code,{children:"stake_cap"})," and ",(0,s.jsx)(t.code,{children:"stake_min"})," parameters can be modified."]})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"NAME"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"TYPE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"EXAMPLE"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_token"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines whether or not a specific token can be used as collateral by delegators on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_payment"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"true"})}),(0,s.jsx)(t.td,{children:"Determines if a given token can be used to pay transaction fees on the KIRA Network."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"fee_rate"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the exchange rates for whitelisted tokens in terms of KEX."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_cap"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"float"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"0.1"})}),(0,s.jsx)(t.td,{children:"Sets the maximum percentage of staking rewards that a given token is entitled to receive from a staking pool."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stake_min"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"int"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"10"})}),(0,s.jsxs)(t.td,{children:["Sets the minimum amount per delegations and undelegations for a given token to prevent a ",(0,s.jsx)(t.em,{children:"dust spam attack"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"invalidated"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"bool"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"false"})}),(0,s.jsxs)(t.td,{children:["Indicates the inactive status of a token. If ",(0,s.jsx)(t.code,{children:"true"}),", the token is marked as inactive for network interactions."]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Example of Token Rate registry"})}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-json",children:'[ {\n\t\t"denom": "ukex", // token denom MUST be present in the Token Aliases Registrar [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"fee_rate": 1.0, // paying 1 ukex in fees is equivalent of paying 1 ukex [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_cap": 0.50, // 50% of all block & fee rewards go to KEX delegators [CAN NOT BE LESS THEN 50% - FOR ukex ONLY]\n "stake_min": 100, // can\'t stake less than 100 ukex [MUST BE GREATER THAN 0 - FOR ANY TOKEN]\n\t\t"fee_payment": true, // can be used as fee token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t\t"stake_token": true // can be used as staking token [CAN NOT BE MODIFIED - FOR ukex ONLY]\n\t} {\n\t\t"denom": "xbtc",\n\t\t"fee_rate": 175885.0, // paying 1 satoshi in fees is equivalent of paying 175\'885 ukex for a fee transfer\n\t\t"stake_cap": 0.251, // 25.1% of all rewards go to BTC delegators\n "stake_min": 10000, // can\'t stake less than 10k sats\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": true // can be used as staking token\n\t}, {\n\t\t"denom": "xeth",\n\t\t"fee_rate": 0.0000012, // paying 1 wei in fees is equivalent of paying 0.0000012 ukex\n\t\t"stake_cap": 0.1, // 0% of all rewards go to ETH delegators, because stake_token is set to false\n "stake_min": 8333333334, // can\'t stake less than 8\'333\'333\'334 wei\n\t\t"fee_payment": true, // can be used as fee token\n\t\t"stake_token": false // can NOT be used as staking token\n\t},{ ... }, ... ]\n'})}),"\n",(0,s.jsx)(t.h2,{id:"b9982ccb172d481c9392049afc924fe8",children:"Cli Syntax & Examples"}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(t.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(t.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(t.em,{children:"documentation for more details."})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$SIGNER"})})," ",(0,s.jsx)(t.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(t.em,{children:"and"})," ",(0,s.jsxs)(t.em,{children:[(0,s.jsx)(t.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(t.em,{children:"section"})]})}),"\n",(0,s.jsxs)(r.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(t.h2,{id:"01d5529dd36e4bb8b1194b5834aa5d86",children:"Transactions"}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"d44f6bfbf118402292bc11b648093700",children:"Upsert Token Rate With Sudo Permission"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"upsert-rate"})," CLI command allows accounts with sudo permission to create or modify a token rate without a proposal."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(t.h2,{id:"41ce65d28ef24009b2241d98839343da",children:"Queries"}),(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"all-rates"})}),(0,s.jsx)(t.th,{children:"Get all token rates in the system."})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rate"})}),(0,s.jsx)(t.td,{children:"Get a specific token rate by denomination."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"rates-by-denom"})}),(0,s.jsx)(t.td,{children:"Get token rates of multiple tokens by denomination."})]})]})]}),(0,s.jsx)(t.h4,{id:"ec7c6fb56a254751b76e874c976677a4",children:"List All Existing Token Rates"}),(0,s.jsxs)(t.p,{children:["Use the ",(0,s.jsx)(t.code,{children:"all-rates"})," command to retrieve all token rates."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens all-rates $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"bfecbe47c7584fc1b8364dd96a58febb",children:"Query a Specific Token Rate"}),(0,s.jsxs)(t.p,{children:["To query the rate of a specific token, use the ",(0,s.jsx)(t.code,{children:"rate"})," command."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token whose rate is to be queried."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rate $DENOM $FLAGS_QR | jq\n"})}),(0,s.jsx)(t.h4,{id:"4469a355daec4eaa94330a03f9551724",children:"Query Multiple Token Rates"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"rates-by-denom"})," command allows querying rates of multiple tokens."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Args"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM_LIST"}),": A comma-separated list of token denominations to query."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid query tokens rates-by-denom $DENOM_LIST $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(t.h2,{id:"2e821403aca7404cbbe24ce849ff77a7",children:"Governance"}),(0,s.jsx)(t.p,{children:"In order to create a proposal to add or modify entries in the Token Registrar, an account must possess permission 18 or 8. Similarly, for voting on any of the Token Registrar proposals, an account must have permission 19."}),(0,s.jsx)(t.table,{children:(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})}),(0,s.jsx)(t.th,{children:"Create or update a token rate through a proposal."})]})})}),(0,s.jsx)(t.h4,{id:"66cb1d8f16254f498ca6f97660eddb5e",children:"Proposal to Upsert Token Rate"}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"proposal-upsert-rate"})," CLI command is used to create or update a token rate registry through a proposal process."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"Flags"})}),(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$DENOM"}),": Denomination of the token (e.g., ",(0,s.jsx)(t.code,{children:"tbtc"}),")."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$FEE_PAYMENT"}),": Boolean indicating if the token can be used for fee payment."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$RATE"}),": Token\u2019s exchange rate compared to KEX."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_TOKEN"}),": Boolean indicating if the token can be used for staking."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_CAP"}),": Staking rewards shares allocated for the token per staking pool."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"$STAKE_MIN"}),": Minimum amount of token required to stake per transaction."]}),"\n"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-rate \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--denom=$DENOM --rate=$RATE \\\n--fee_payments=$FEE_PAYMENT --stake_token=$STAKE_TOKEN \\\n--stake_cap=$STAKE_CAP --stake_min=$STAKE_MIN\n"})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var s=n(6905);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var s=n(7294),a=n(6905),r=n(2466),i=n(6550),o=n(469),c=n(1980),d=n(7392),l=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:a}}=e;return{value:t,label:n,attributes:s,default:a}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function x(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,c._X)(r),(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[i,c]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:r}))),[d,h]=x({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,l.Nk)(n);return[a,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),j=(()=>{const e=d??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,r]),tabValues:r}}var m=n(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function b(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),l=e=>{const t=e.currentTarget,n=c.indexOf(t),a=o[n].value;a!==s&&(d(t),i(a))},h=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>c.push(e),onKeyDown:h,onClick:l,...r,className:(0,a.Z)("tabs__item",j.tabItem,r?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function g(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function v(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,k.jsx)(b,{...e,...t}),(0,k.jsx)(g,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(v,{...e,children:h(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var s=n(7294);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/617128fa.3fff9244.js b/assets/js/617128fa.3fff9244.js new file mode 100644 index 0000000..e6615a3 --- /dev/null +++ b/assets/js/617128fa.3fff9244.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5587],{4604:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=a(5893),r=a(1151);a(4866),a(5162);const i={title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},o=void 0,s={id:"What-is-KIRA/Layer-2/Building-on-KIRA",title:"Building on KIRA",description:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Building-on-KIRA.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},sidebar:"defaultSidebar",previous:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671"},next:{title:"Overview",permalink:"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"}},l={},c=[];function u(e){const t={li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps."}),"\n",(0,n.jsx)(t.p,{children:"To create an example KIRA application, a developer would:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Create a deterministic server application and expose a protocol-defined endpoint for receiving user input from the INTERX. The next step is then to package the server application into a docker container."}),"\n",(0,n.jsx)(t.li,{children:"Develop a secondary containerized \u201cverification\u201d application that can either re-compute the same results given the same set of ordered inputs from the INTERX or use other techniques, such as ZK proofs, for lightweight verification of the correct execution."}),"\n",(0,n.jsx)(t.li,{children:"Develop a frontend application that can communicate with the server application for users to be able to experience the app."}),"\n",(0,n.jsx)(t.li,{children:"Submit a transaction to the KIRA blockchain specifying the location of execution and verification docker containers, configuration file defining ports to be exposed/proxied via INTERX, and resources necessary to run the application."}),"\n",(0,n.jsx)(t.li,{children:"Await sufficient KEX amount to be bonded into ILO and validators with sufficient hardware resources to signal they are willing to run the app."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"If all the conditions above are met users will be able to query any of the INTERX nodes available on the KIRA network to locate a subnet of INTERX nodes that provide access to the app and expose its interfaces thus making interaction possible in a classical Web2 client-server manner."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var i=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),i=a(2466),o=a(6550),s=a(469),l=a(1980),c=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function h(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,i=p(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:a,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:r}),v=(()=>{const e=c??b;return h({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,i]),tabValues:i}}var m=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function w(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,a=l.indexOf(t),r=s[a].value;r!==n&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,r.Z)("tabs__item",v.tabItem,i?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(7294);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/617128fa.84e1e8c8.js b/assets/js/617128fa.84e1e8c8.js deleted file mode 100644 index 4409591..0000000 --- a/assets/js/617128fa.84e1e8c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5587],{4604:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=a(5893),r=a(1151);a(4866),a(5162);const i={title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},o=void 0,s={id:"What-is-KIRA/Layer-2/Building-on-KIRA",title:"Building on KIRA",description:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Building-on-KIRA.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",permalink:"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Building on KIRA",sidebar_position:2,slug:"/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"},sidebar:"defaultSidebar",previous:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671"},next:{title:"Overview",permalink:"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c"}},l={},c=[];function u(e){const t={li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps."}),"\n",(0,n.jsx)(t.p,{children:"To create an example KIRA application, a developer would:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Create a deterministic server application and expose a protocol-defined endpoint for receiving user input from the INTERX. The next step is then to package the server application into a docker container."}),"\n",(0,n.jsx)(t.li,{children:"Develop a secondary containerized \u201cverification\u201d application that can either re-compute the same results given the same set of ordered inputs from the INTERX or use other techniques, such as ZK proofs, for lightweight verification of the correct execution."}),"\n",(0,n.jsx)(t.li,{children:"Develop a frontend application that can communicate with the server application for users to be able to experience the app."}),"\n",(0,n.jsx)(t.li,{children:"Submit a transaction to the KIRA blockchain specifying the location of execution and verification docker containers, configuration file defining ports to be exposed/proxied via INTERX, and resources necessary to run the application."}),"\n",(0,n.jsx)(t.li,{children:"Await sufficient KEX amount to be bonded into ILO and validators with sufficient hardware resources to signal they are willing to run the app."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"If all the conditions above are met users will be able to query any of the INTERX nodes available on the KIRA network to locate a subnet of INTERX nodes that provide access to the app and expose its interfaces thus making interaction possible in a classical Web2 client-server manner."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var i=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),i=a(2466),o=a(6550),s=a(469),l=a(1980),c=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function h(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(r.location.search);t.set(i,e),r.replace({...r.location,search:t.toString()})}),[i,r])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,i=p(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:a,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,i]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:r}),v=(()=>{const e=c??b;return h({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!h({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,i]),tabValues:i}}var m=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function w(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,a=l.indexOf(t),r=s[a].value;r!==n&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,r.Z)("tabs__item",v.tabItem,i?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(7294);const r={},i=n.createContext(r);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/62c83391.1f980602.js b/assets/js/62c83391.1f980602.js deleted file mode 100644 index 33552ef..0000000 --- a/assets/js/62c83391.1f980602.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7949],{1389:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},s=void 0,l={id:"Stack/SEKAI--Backend/index",title:"SEKAI | Backend",description:"Sekai",source:"@site/tabs/Docs/Stack/SEKAI--Backend/index.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/"},next:{title:"System Requirements",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399"}},i={},u=[{value:"Sekai",id:"9d6b533d3a7d49f28a9b3f19b0b700c5",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"9d6b533d3a7d49f28a9b3f19b0b700c5",children:"Sekai"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI \u4e16\u754c (\u305b\u304b\u3044) - is KIRA\u2019s blockchain application responsible for all on-chain logic such as processing transactions and state transitions. SEKAI is executed by specialized node operators called consensus nodes a.k.a \u201cValidators\u201d who individually propose new blocks and together agree on the correctness of each new block in accordance with the SEKAI codebase. In short, all logic relevant to the block propagation and networking is handled by ",(0,a.jsx)(t.a,{href:"https://tendermint.com/",children:"Tendermint"})," while all application logic is handled by SEKAI (",(0,a.jsx)(t.code,{children:"sekaid"}),")."]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:r}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??h;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),r=l[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/62c83391.d7a8777a.js b/assets/js/62c83391.d7a8777a.js new file mode 100644 index 0000000..35d33b5 --- /dev/null +++ b/assets/js/62c83391.d7a8777a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7949],{1389:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},s=void 0,l={id:"Stack/SEKAI--Backend/index",title:"SEKAI | Backend",description:"Sekai",source:"@site/tabs/Docs/Stack/SEKAI--Backend/index.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073",permalink:"/docs.kira.network/docs/27fe8d79-00c0-4e0b-872b-3d72a246c073",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/docs/"},next:{title:"System Requirements",permalink:"/docs.kira.network/docs/d1a56903-4e24-47ce-b39f-f28be9123399"}},i={},c=[{value:"Sekai",id:"9d6b533d3a7d49f28a9b3f19b0b700c5",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"9d6b533d3a7d49f28a9b3f19b0b700c5",children:"Sekai"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI \u4e16\u754c (\u305b\u304b\u3044) - is KIRA\u2019s blockchain application responsible for all on-chain logic such as processing transactions and state transitions. SEKAI is executed by specialized node operators called consensus nodes a.k.a \u201cValidators\u201d who individually propose new blocks and together agree on the correctness of each new block in accordance with the SEKAI codebase. In short, all logic relevant to the block propagation and networking is handled by ",(0,a.jsx)(t.a,{href:"https://tendermint.com/",children:"Tendermint"})," while all application logic is handled by SEKAI (",(0,a.jsx)(t.code,{children:"sekaid"}),")."]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:r}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),r=l[n].value;r!==a&&(c(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/63094d1c.ca48453f.js b/assets/js/63094d1c.ca48453f.js deleted file mode 100644 index 2ceb8ad..0000000 --- a/assets/js/63094d1c.ca48453f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4427],{4606:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=t(5893),r=t(1151);t(4866),t(5162);const l={title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},s=void 0,i={id:"Stack/INTERX--Middleware/Installation",title:"Installation",description:"Dependencies",source:"@site/tabs/docs/Stack/INTERX--Middleware/Installation.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/cf419aea-20dc-4421-951b-2579c3026e6b",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},sidebar:"defaultSidebar",previous:{title:"Endpoints",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a"}},o={},c=[{value:"Dependencies",id:"907b3fae8582494eaf2438c80ad63660",level:2},{value:"Deb package manager",id:"8af945d2feb64dc49258460f34799b47",level:4},{value:"Docker",id:"d826dd6a316240048c0401d557958ef5",level:4},{value:"Others",id:"e725f60cb46e47149abeb9fcf9ad5211",level:4},{value:"Interx installation",id:"ddebded562ee4a1e95e8aa1bb6dcbd22",level:2}];function u(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h2,{id:"907b3fae8582494eaf2438c80ad63660",children:"Dependencies"}),"\n",(0,n.jsx)(a.h4,{id:"8af945d2feb64dc49258460f34799b47",children:"Deb package manager"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list && apt-get update -y && \\\napt install nfpm\n"})}),"\n",(0,n.jsx)(a.h4,{id:"d826dd6a316240048c0401d557958ef5",children:"Docker"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'apt-get update -y && \\\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \\\nadd-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \\\napt-get update -y && apt-get install docker-ce docker-ce-cli containerd.io -y && \\\ndocker version\n'})}),"\n",(0,n.jsx)(a.h4,{id:"e725f60cb46e47149abeb9fcf9ad5211",children:"Others"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"apt-get install -y curl && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && apt-get update -y && \\\napt-get install -y --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages \\\nfile build-essential hashdeep make tar unzip zip p7zip-full curl iputils-ping nano jq python python3 python3-pip \\\nbash lsof bc dnsutils psmisc netcat coreutils binutils\n"})}),"\n",(0,n.jsx)(a.h2,{id:"ddebded562ee4a1e95e8aa1bb6dcbd22",children:"Interx installation"}),"\n",(0,n.jsx)(a.admonition,{type:"note",children:(0,n.jsxs)(a.p,{children:["INTERX Repo is accessible ",(0,n.jsx)(a.a,{href:"https://github.com/KiraCore/interx",children:"here"}),"."]})}),"\n",(0,n.jsx)(a.p,{children:"Assume root permissions"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"sudo -s\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Set desired INTERX release version and binaries repo as env variables within ",(0,n.jsx)(a.code,{children:"/etc/profile"}),", with ",(0,n.jsx)(a.a,{href:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",children:"Bash-utils"})," or manually. Sourcing ",(0,n.jsx)(a.code,{children:"/etc/profile"})," is necessary."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'setGlobEnv INTERX_VERSION "v0.4.34" && \\\nsetGlobEnv INTERX_REPO "$HOME/interx" && \\\nloadGlobEnvs\n'})}),"\n",(0,n.jsx)(a.p,{children:"Clone repository and install"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'rm -fr $INTERX_REPO && rm -fr $GOBIN/interx && mkdir $INTERX_REPO && cd $INTERX_REPO && \\\ngit clone https://github.com/KiraCore/interx.git -b $INTERX_VERSION $INTERX_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed interx $(interx version)" || echo "FAILED"\n'})})]})}function d(e={}){const{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,a,t)=>{t.d(a,{Z:()=>s});t(7294);var n=t(6905);const r={tabItem:"tabItem_Ymn6"};var l=t(5893);function s(e){let{children:a,hidden:t,className:s}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,s),hidden:t,children:a})}},4866:(e,a,t)=>{t.d(a,{Z:()=>I});var n=t(7294),r=t(6905),l=t(2466),s=t(6550),i=t(469),o=t(1980),c=t(7392),u=t(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:a,children:t}=e;return(0,n.useMemo)((()=>{const e=a??function(e){return d(e).map((e=>{let{props:{value:a,label:t,attributes:n,default:r}}=e;return{value:a,label:t,attributes:n,default:r}}))}(t);return function(e){const a=(0,c.l)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[a,t])}function b(e){let{value:a,tabValues:t}=e;return t.some((e=>e.value===a))}function h(e){let{queryString:a=!1,groupId:t}=e;const r=(0,s.k6)(),l=function(e){let{queryString:a=!1,groupId:t}=e;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:a,groupId:t});return[(0,o._X)(l),(0,n.useCallback)((e=>{if(!l)return;const a=new URLSearchParams(r.location.search);a.set(l,e),r.replace({...r.location,search:a.toString()})}),[l,r])]}function f(e){const{defaultValue:a,queryString:t=!1,groupId:r}=e,l=p(e),[s,o]=(0,n.useState)((()=>function(e){let{defaultValue:a,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!b({value:a,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${a}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return a}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:a,tabValues:l}))),[c,d]=h({queryString:t,groupId:r}),[f,m]=function(e){let{groupId:a}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(a),[r,l]=(0,u.Nk)(t);return[r,(0,n.useCallback)((e=>{t&&l.set(e)}),[t,l])]}({groupId:r}),g=(()=>{const e=c??f;return b({value:e,tabValues:l})?e:null})();(0,i.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),m(e)}),[d,m,l]),tabValues:l}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:a,block:t,selectedValue:n,selectValue:s,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),u=e=>{const a=e.currentTarget,t=o.indexOf(a),r=i[t].value;r!==n&&(c(a),s(r))},d=e=>{let a=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;a=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;a=o[t]??o[o.length-1];break}}a?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},a),children:i.map((e=>{let{value:a,label:t,attributes:l}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===a?0:-1,"aria-selected":n===a,ref:e=>o.push(e),onKeyDown:d,onClick:u,...l,className:(0,r.Z)("tabs__item",g.tabItem,l?.className,{"tabs__item--active":n===a}),children:t??a},a)}))})}function k(e){let{lazy:a,children:t,selectedValue:r}=e;const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(a){const e=l.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:l.map(((e,a)=>(0,n.cloneElement)(e,{key:a,hidden:e.props.value!==r})))})}function y(e){const a=f(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...a}),(0,v.jsx)(k,{...e,...a})]})}function I(e){const a=(0,m.Z)();return(0,v.jsx)(y,{...e,children:d(e.children)},String(a))}},1151:(e,a,t)=>{t.d(a,{Z:()=>i,a:()=>s});var n=t(7294);const r={},l=n.createContext(r);function s(e){const a=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/65cd35fc.1ca55309.js b/assets/js/65cd35fc.a8f6f537.js similarity index 88% rename from assets/js/65cd35fc.1ca55309.js rename to assets/js/65cd35fc.a8f6f537.js index b757db7..35e0d34 100644 --- a/assets/js/65cd35fc.1ca55309.js +++ b/assets/js/65cd35fc.a8f6f537.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4367],{9201:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-2",sidebar_position:7,slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},c=void 0,o={id:"Testnet-History/testnet-2",title:"testnet-2",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-2.mdx",sourceDirName:"Testnet-History",slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"testnet-2",sidebar_position:7,slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},sidebar:"defaultSidebar",previous:{title:"testnet-3",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},next:{title:"testnet-1",permalink:"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"}},i={},l=[{value:"Description",id:"fcb06e329c0b4742a0b67f316781927e",level:2},{value:"Post mortem",id:"66101e97c055407c8387c3493ebb2be3",level:2},{value:"Files",id:"abb74dd251b840f49bf147a410e4506a",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"fcb06e329c0b4742a0b67f316781927e",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-2"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"e0dcfa5b4b4feba8bdc8665fb47cd0fa587e65984a743b3bc13f2250032e74df"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"918a64a5ca548b2b4803b96afd06c99cad5302521bdca8271e19e03ffbe879e5"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"204503"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"66101e97c055407c8387c3493ebb2be3",children:"Post mortem"}),"\n",(0,n.jsxs)(t.p,{children:["Old release of TM caused ",(0,n.jsx)(t.a,{href:"https://forum.cosmos.network/t/tendermint-core-vulnerability-retrospective-security-advisory-mulberry-january-19-2021/4336",children:"Denial of Service 2"})," resulting in the network halt"]}),"\n",(0,n.jsx)(t.h2,{id:"abb74dd251b840f49bf147a410e4506a",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/e63d52b8-dcf4-4c51-ac79-cd2ef6510099/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152706Z&X-Amz-Expires=3600&X-Amz-Signature=8de879d352780aced3d72e9d39977ceb1be032513467c3bfa5d6f209b213ba1e&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/4e7f76b6-d3e7-4a4c-988a-35954a9e8aea/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152706Z&X-Amz-Expires=3600&X-Amz-Signature=a1ced77c6778670d1ed3057a0c6ef83e8057b2b74e8281cfe9d2e2346aadc71e&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/8e719f54-7880-440c-a35b-500cbfd76002/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152706Z&X-Amz-Expires=3600&X-Amz-Signature=85ba1ffde53bebd8acefeebda83fb487e989c6aeff84b33e192f0bc2312d9e80&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/60c12d6f-795e-4b82-b5b8-5c3ac69a281c/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152706Z&X-Amz-Expires=3600&X-Amz-Signature=930aedef04304dc663bad05ec5f1f381386e21941ca953f7ef4f98f9955695a6&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),o=a(469),i=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,i._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[c,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:a,groupId:r}),[h,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??h;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{A&&i(A)}),[A]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=i.indexOf(t),r=o[a].value;r!==n&&(l(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=i.indexOf(e.currentTarget)+1;t=i[a]??i[0];break}case"ArrowLeft":{const a=i.indexOf(e.currentTarget)-1;t=i[a]??i[i.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(x,{...e,...t}),(0,v.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4367],{9201:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-2",sidebar_position:7,slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},c=void 0,o={id:"Testnet-History/testnet-2",title:"testnet-2",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-2.mdx",sourceDirName:"Testnet-History",slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"testnet-2",sidebar_position:7,slug:"/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},sidebar:"defaultSidebar",previous:{title:"testnet-3",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},next:{title:"testnet-1",permalink:"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"}},i={},l=[{value:"Description",id:"fcb06e329c0b4742a0b67f316781927e",level:2},{value:"Post Mortem",id:"66101e97c055407c8387c3493ebb2be3",level:2},{value:"Files",id:"abb74dd251b840f49bf147a410e4506a",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"fcb06e329c0b4742a0b67f316781927e",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-2"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"e0dcfa5b4b4feba8bdc8665fb47cd0fa587e65984a743b3bc13f2250032e74df"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"918a64a5ca548b2b4803b96afd06c99cad5302521bdca8271e19e03ffbe879e5"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"204503"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"66101e97c055407c8387c3493ebb2be3",children:"Post Mortem"}),"\n",(0,n.jsxs)(t.p,{children:["Old release of TM caused ",(0,n.jsx)(t.a,{href:"https://forum.cosmos.network/t/tendermint-core-vulnerability-retrospective-security-advisory-mulberry-january-19-2021/4336",children:"Denial of Service 2"})," resulting in the network halt"]}),"\n",(0,n.jsx)(t.h2,{id:"abb74dd251b840f49bf147a410e4506a",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/e63d52b8-dcf4-4c51-ac79-cd2ef6510099/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=fd3b6fbda644d227843ef61d6e21095fea1131efb8cc157920c5c4b97436b720&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/4e7f76b6-d3e7-4a4c-988a-35954a9e8aea/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=c1bafba8d498aefb5cb1f251c2bec5f61405f301390278d69d9d87a524d35b7b&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/8e719f54-7880-440c-a35b-500cbfd76002/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=7175683235994ee0b2596e4fc0ef42c9ac386308a093d23bb58042b864879f3e&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/60c12d6f-795e-4b82-b5b8-5c3ac69a281c/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=0a0f22324214d401657f57ff8f3704d42a6aff8140c67aab4933683522af518b&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),o=a(469),i=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,i._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[c,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??m;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{A&&i(A)}),[A]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=i.indexOf(t),r=o[a].value;r!==n&&(l(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=i.indexOf(e.currentTarget)+1;t=i[a]??i[0];break}case"ArrowLeft":{const a=i.indexOf(e.currentTarget)-1;t=i[a]??i[i.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(x,{...e,...t}),(0,v.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/66109a59.2844d1ce.js b/assets/js/66109a59.2844d1ce.js deleted file mode 100644 index 870acc0..0000000 --- a/assets/js/66109a59.2844d1ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[702],{9389:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/"},i=void 0,s={id:"Overview",title:"Overview",description:"KIRA Network combines several modular components to provide a full-stack experience:",source:"@site/tabs/docs/Overview.mdx",sourceDirName:".",slug:"/",permalink:"/docs.kira.network/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/"},sidebar:"defaultSidebar",next:{title:"SEKAI | Backend",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"}},l={},u=[];function c(e){const t={li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA Network combines several modular components to provide a full-stack experience:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"SEKAI"}),": SEKAI is KIRA network\u2019s core blockchain application responsible for all on-chain logic, including the settling of users' and app's account balances, preserving state roots\u2019 integrity, and enabling cross-app communication. It plays a crucial role in orchestrating the necessary infrastructure needed to run the apps, liquid capital essential for boosting economic activity and providing shared security for all applications on KIRA."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"INTERX"}),": INTERX is KIRA\u2019s Content Availability Layer. It ensures rapid, scalable queries and access to on-chain (SEKAI) and off-chain (L2) app data without reliance on third-party RPC service providers such as Infura (Ethereum) and DA networks such as Celestia (Cosmos). INTERX streamlines the creation and maintenance of front-end and L2 applications, eliminating the complexities associated with light clients and providing out-of-the-box support for sequencing, storage, fraud-proof generation, replication, proxy, and middleware layer load-balancing."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"MIRO"}),": MIRO is KIRA's front-end application, web wallet, and a design pattern for all KIRA L2 apps to follow. It is designed to offer a Web2-like user experience. MIRO is a static and fully self-contained application, enabling users to seamlessly interact with the KIRA blockchain through INTERX from within the security of their browser, with no centralized parties (including certificate authorities) in the middle (or at the security core) of the communication channel between the user and blockchain/app."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"RYOKAI"}),": RYOKAI supports network operations by automating on-chain and off-chain upgrades, scaling, app deployment, simplifying consensus nodes' management tasks, and enhancing the network's efficiency and security. In other words, RYOKAI is an all-in-one DevOps tool that turns any network participant into an infrastructure expert without the need for years of experience."]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=p(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=f({queryString:n,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??b;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function I(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6717ac16.1ce817a9.js b/assets/js/6717ac16.1ce817a9.js new file mode 100644 index 0000000..8736806 --- /dev/null +++ b/assets/js/6717ac16.1ce817a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8369],{1755:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var r=n(5893),i=n(1151),t=n(4866),o=n(5162);const a={title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure",title:"Proposals & governance structure",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",permalink:"/docs.kira.network/docs/25d26925-50ce-4a4f-836b-fc8486ef8b05",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/docs/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},next:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/docs/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"}},d={},h=[{value:"Concept",id:"cec5b8b9f4904b3c98c079258d9a4692",level:2},{value:"Proposing & Voting Rights",id:"ca1e33b2b3034f5997ca48f9186e1173",level:3},{value:"Permissioned Governance Set With Equitable Vote Distribution",id:"59c3610b51824c349b62a8d93925a7ea",level:3},{value:"Decision-making Process",id:"3bc3fc5003d64c968b703fe0f949bd75",level:3},{value:"Relevant Network Properties",id:"5584c3f171f24ddfa7a616c344690c83",level:4},{value:"Parameters",id:"c87ca8ad5ef4402aab4f8f9c9768b78b",level:2},{value:"Proposal Types",id:"c5381831565e4d2789f7d553745835e5",level:4},{value:"Proposal",id:"e3cd55578cb74dc394f3c4346e73236c",level:4},{value:"Vote Types",id:"c48673132aeb432d977a1554e8a86434",level:4},{value:"Proposal Status",id:"703d5727415642f2a6b4d33cd6acff0a",level:4},{value:"Cli Syntax & Examples",id:"b82ffe5632d24d94997e6981477a132b",level:2},{value:"Transactions",id:"54620f9f378f4c1a89d527786da6e1bc",level:2},{value:"Queries",id:"5461ad3bca534f018a45d18d22b0bb69",level:3},{value:"Query Proposals",id:"78011608601e48d08d0a071b9cd5c140",level:4},{value:"Query Proposal",id:"095905665c39445cb75e2850e4b0dc1b",level:4},{value:"Query Vote",id:"63da01ba1e7641f1b655954ba40dd3c0",level:4},{value:"Query Votes",id:"8b6123c73e304d50a928294736b65015",level:4},{value:"Query Whitelisted Proposal Voters",id:"9fa5de3738c7484f84dc315dc112c0f5",level:4},{value:"Query All Proposal Durations",id:"29b4670c8bfc40fd8f62e1f4da02b57d",level:4},{value:"Query Proposal Duration",id:"c998c2f09f9c47168e2dd081f93f842f",level:4},{value:"Governance",id:"8fc5a2c18add467eba69f2af052d32fc",level:2},{value:"Set Proposals Duration",id:"d2441765912d4167b72710bad8af4ea0",level:4}];function p(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"cec5b8b9f4904b3c98c079258d9a4692",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"Proposals form the backbone of the governance process within the KIRA Network, empowering selected network members to collectively influence the blockchain application's conduct and make myriad of off-chain decisions."}),"\n",(0,r.jsx)(s.h3,{id:"ca1e33b2b3034f5997ca48f9186e1173",children:"Proposing & Voting Rights"}),"\n",(0,r.jsx)(s.p,{children:"Two types of network participants are empowered to vote on governance proposals:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Consensus nodes"}),": These are individuals who occupy a validator seat and operate nodes that actively generate new blocks."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Councilors:"})," These are non-validator individuals who, having secured a councilor seat, shoulder the responsibility of network governance."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Together, consensus nodes and councilors constitute the governance set. Inclusion in the governance set doesn't inherently grant the ability to vote on every proposal type. Each governance member necessitates a specific permission to vote on a certain type of proposal. The same principle holds for the creation of new proposals\u2014a specific permission enabling the submission of certain proposals is essential. Permissions can be granted on an individual basis or via roles. This model facilitates an almost infinitely scalable governance system. It allows for the creation of multiple governance sub-councils that can maintain a codependent relationship through ",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Separation_of_powers#Checks_and_balances",children:"checks and balances"})," or any other governance system. This efficient division of responsibilities enables KIRA governance to manage various on-chain parameters, staking interest rates, and more, concurrently. More details on this can be found in the ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"Roles & Permissions"})," section."]}),"\n",(0,r.jsx)(s.h3,{id:"59c3610b51824c349b62a8d93925a7ea",children:"Permissioned Governance Set With Equitable Vote Distribution"}),"\n",(0,r.jsxs)(s.p,{children:["KIRA's governance structure aims to promotes a non-sybil community\u2014i.e identifiable individuals who cannot own multiple KIRA accounts with the same or different governance permissions. This non-sybil status is curated by the governance set itself, hence termed \u201cpermissionned\u201d or \u201cgovernance curated\u201d governance set. While ",(0,r.jsx)(s.strong,{children:"members do not need to disclose their identity or undergo KYC procedures"}),", they must be identifiable individual entities. This is primarily achieved through KIRA\u2019s ",(0,r.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),", which enables all KIRA users to claim and validate various type of information on-chain. Additionally, the governance has various ways to ensure that new members are genuine individuals\u2014like conducting in-person meetings or group calls."]}),"\n",(0,r.jsx)(s.p,{children:"The voting power among governance members is uniformly distributed. Contrary to governance models where token holdings determine voting weight, KIRA provides equal voting weight to all governance members irrespective of their wealth or token ownership. This mitigates the risk of stolen tokens or accounts being used to manipulate network operations or sway governance votes. This becomes crucial in scenarios where centralized custodians, like exchanges holding large token positions of users, can impact other network operations."}),"\n",(0,r.jsx)(s.h3,{id:"3bc3fc5003d64c968b703fe0f949bd75",children:"Decision-making Process"}),"\n",(0,r.jsx)(s.p,{children:"The KIRA Network's decision-making process is orchestrated through the mechanism of proposals. These can be accepted, vetoed, or dismissed by governance members, provided they have the appropriate voting permission."}),"\n",(0,r.jsx)(s.p,{children:"This process is guided by the following principles:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Eligibility:"})," Only those network participants who are ",(0,r.jsx)(s.strong,{children:"validators"})," or ",(0,r.jsx)(s.strong,{children:"councilors"})," (collectively known as ",(0,r.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"}),") are eligible to vote on proposals."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Permission:"})," Councilors can vote on a specific proposal only if they have been granted the respective permission that allows them to do so or if they possess a role that encompasses said permission."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Vote Casting:"})," Governance actors have the option to cast one of four distinct vote types: ",(0,r.jsx)(s.code,{children:"yes (1)"}),", ",(0,r.jsx)(s.code,{children:"abstain (2)"}),", ",(0,r.jsx)(s.code,{children:"no (3)"}),", or ",(0,r.jsx)(s.code,{children:"veto (4)"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Proposal Timeline:"})," A proposal cannot be accepted, vetoed, or dismissed until its ",(0,r.jsx)(s.code,{children:"voting_end_time"})," time has elapsed. Furthermore, a proposal cannot take effect until the ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," has elapsed. No votes can be cast during the enactment period, and a proposal only comes into effect after this period ends."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsx)(s.p,{children:"The enactment time allows participants to analyze successful proposal results and act accordingly, avoiding unexpected shifts in voting outcomes."})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Quorum Requirement:"})," A proposal necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process. Failing to meet the quorum results in the proposal being marked as ",(0,r.jsx)(s.code,{children:"QuorumNotReached"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["The default proposal minimum quorum percentage is 33% and is configurable by governance via the ",(0,r.jsx)(s.code,{children:"vote_quorum"})," ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,r.jsx)(s.p,{children:"The outcome of a proposal is determined based on the following rules:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Outcome"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Condition"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Passed"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are ",(0,r.jsx)(s.code,{children:"yes"})," votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Rejected"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and votes of a type other than ",(0,r.jsx)(s.code,{children:"yes"})," sum to more than or equal to ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,r.jsxs)(s.td,{children:["If more than or equal to ",(0,r.jsx)(s.code,{children:"veto_threshold"})," (default 33.4%) votes are ",(0,r.jsx)(s.code,{children:"veto"})," votes, the proposal is rejected (a minority of members can reject a proposal)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"QuorumNotReached"})}),(0,r.jsxs)(s.td,{children:["The quorum was not reach before ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"5584c3f171f24ddfa7a616c344690c83",children:"Relevant Network Properties"}),"\n",(0,r.jsxs)(s.p,{children:["Two fundamental ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish the baseline for proposal duration and enactment timeframes: ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," and ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"}),"."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," sets the lower limit for all proposals durations, also known as ",(0,r.jsx)(s.code,{children:"voting_end_time"})," which can be adjusted by the governance for individual proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," creates a consistent rule that applies to all proposals. It sets each proposal's ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," by adding the ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," to that proposal's ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"c87ca8ad5ef4402aab4f8f9c9768b78b",children:"Parameters"}),"\n",(0,r.jsx)(s.h4,{id:"c5381831565e4d2789f7d553745835e5",children:"Proposal Types"}),"\n",(0,r.jsxs)(s.p,{children:["Existing governance proposals types are listed ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"here"}),"."]}),"\n",(0,r.jsx)(s.h4,{id:"e3cd55578cb74dc394f3c4346e73236c",children:"Proposal"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"TYPE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"EXAMPLE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal_id"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"uint64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1"})}),(0,r.jsx)(s.td,{children:"The unique identifier of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"title"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some title"})}),(0,r.jsx)(s.td,{children:"The title of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some description"})}),(0,r.jsx)(s.td,{children:"The description of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"content"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Any"})}),(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:"The content of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"submit_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1677781730"})}),(0,r.jsx)(s.td,{children:"The timestamp when the proposal was submitted."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voting_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678386530"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"enactment_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678991330"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the enactment period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_voting_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"17500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"voting_end_time"})," corresponding minimum block height at which the voting period for the proposal ends."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_enactment_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"18500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"enactment_end_time"})," corresponding minimum block height at which the enactment period for the proposal ends."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"c48673132aeb432d977a1554e8a86434",children:"Vote Types"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_YES (1)"})}),(0,r.jsx)(s.td,{children:"Councilor agrees with the proposal and wants it to pass successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_ABSTAIN (2)"})}),(0,r.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO (3)"})}),(0,r.jsx)(s.td,{children:"Councilor disagrees with the proposal and wants to prevent it from passing successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO_WITH_VETO (4)"})}),(0,r.jsx)(s.td,{children:"Councilor strongly disagrees with a proposal and wants to prevent it from passing successfully bypassing the majority vote percentage requirements for approval due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"703d5727415642f2a6b4d33cd6acff0a",children:"Proposal Status"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"STATUS"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_UNKNOWN (0)"})}),(0,r.jsx)(s.td,{children:"Result of the proposal is not yet known/defined"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED (1)"})}),(0,r.jsx)(s.td,{children:"Proposal reached quorum, passed successfully, was enacted and took effect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED (2)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass by lacking a minimum of >50% ",(0,r.jsx)(s.code,{children:"yes (1)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED_WITH_VETO (3)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass due to rejection of >50% ",(0,r.jsx)(s.code,{children:"veto (4)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_PENDING (4)"})}),(0,r.jsx)(s.td,{children:"Proposal is not finalized yet and is still awaiting votes"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,r.jsx)(s.td,{children:"Proposal failed to reach quorum and thus was rejected"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_ENACTMENT (6)"})}),(0,r.jsx)(s.td,{children:"Proposal was successful but is awaiting enactment time to be passed and thus enforced"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED_WITH_EXEC_FAIL (7)"})}),(0,r.jsx)(s.td,{children:"Execution of the proposal logic failed with an unforeseen exception and no changes were made"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"b82ffe5632d24d94997e6981477a132b",children:"Cli Syntax & Examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(t.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"54620f9f378f4c1a89d527786da6e1bc",children:"Transactions"}),(0,r.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"tab",label:"Tab",children:[(0,r.jsx)(s.h3,{id:"5461ad3bca534f018a45d18d22b0bb69",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposals"})}),(0,r.jsx)(s.th,{children:"Query all proposals with optional filters."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal"})}),(0,r.jsx)(s.td,{children:"Query details for a specific proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"vote"})}),(0,r.jsx)(s.td,{children:"Query details for a single vote on a proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"votes"})}),(0,r.jsx)(s.td,{children:"Query vote details for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voters"})}),(0,r.jsx)(s.td,{children:"Query voters for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"all-proposal-durations"})}),(0,r.jsx)(s.td,{children:"Query all proposal durations."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal-duration"})}),(0,r.jsx)(s.td,{children:"Query a specific proposal duration."})]})]})]}),(0,r.jsx)(s.h4,{id:"78011608601e48d08d0a071b9cd5c140",children:"Query Proposals"}),(0,r.jsxs)(s.p,{children:["Query all paginated proposals that match optional filters using the ",(0,r.jsx)(s.code,{children:"proposals"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": (Optional) Filter by proposals voted on by this voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposals --voter=$VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"095905665c39445cb75e2850e4b0dc1b",children:"Query Proposal"}),(0,r.jsxs)(s.p,{children:["Query details for a proposal using the ",(0,r.jsx)(s.code,{children:"proposal"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov proposal $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"63da01ba1e7641f1b655954ba40dd3c0",children:"Query Vote"}),(0,r.jsxs)(s.p,{children:["Query details for a single vote on a proposal using the ",(0,r.jsx)(s.code,{children:"vote"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": The address of the voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov vote $PROPOSAL_ID $VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"8b6123c73e304d50a928294736b65015",children:"Query Votes"}),(0,r.jsxs)(s.p,{children:["Query vote details for a single proposal using the ",(0,r.jsx)(s.code,{children:"votes"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov votes $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"9fa5de3738c7484f84dc315dc112c0f5",children:"Query Whitelisted Proposal Voters"}),(0,r.jsxs)(s.p,{children:["Query voters for a single proposal using the ",(0,r.jsx)(s.code,{children:"voters"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov voters $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"29b4670c8bfc40fd8f62e1f4da02b57d",children:"Query All Proposal Durations"}),(0,r.jsxs)(s.p,{children:["Query all proposal durations using the ",(0,r.jsx)(s.code,{children:"all-proposal-durations"})," command."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov all-proposal-durations \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"c998c2f09f9c47168e2dd081f93f842f",children:"Query Proposal Duration"}),(0,r.jsxs)(s.p,{children:["Query a proposal duration using the ",(0,r.jsx)(s.code,{children:"proposal-duration"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPE"}),": The type of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposal-duration $PROPOSAL_TYPE \\\n$FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"8fc5a2c18add467eba69f2af052d32fc",children:"Governance"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"})}),(0,r.jsxs)(s.th,{children:["Proposes to set the ",(0,r.jsx)(s.code,{children:"voting_end_time"})," of specific proposal types"]})]})})}),(0,r.jsx)(s.h4,{id:"d2441765912d4167b72710bad8af4ea0",children:"Set Proposals Duration"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"}),", is used to create a proposal to set some proposal ",(0,r.jsx)(s.code,{children:"voting_end_time"})," in one batch. It requires two positional arguments: a list of proposal types and a corresponding list of durations. The command accepts the following flags:"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPES"}),": A comma-separated list of proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DURATIONS"}),": A corresponding comma-separated list of durations for the proposal types."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. This flag is required."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, some text, etc. This flag is required."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-proposal-durations-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPOSAL_TYPES $DURATIONS\n"})})]})]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var r=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var r=n(7294),i=n(6905),t=n(2466),o=n(6550),a=n(469),l=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:i}}=e;return{value:s,label:n,attributes:r,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const i=(0,o.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,l._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=p(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[c,h]=x({queryString:n,groupId:i}),[j,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,d.Nk)(n);return[i,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),f=(()=>{const e=c??j;return u({value:e,tabValues:t})?e:null})();(0,a.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,t]),tabValues:t}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:r,selectValue:o,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const s=e.currentTarget,n=l.indexOf(s),i=a[n].value;i!==r&&(c(s),o(i))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;s=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;s=l[n]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>l.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",f.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function y(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,g.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var r=n(7294);const i={},t=r.createContext(i);function o(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6717ac16.d734919e.js b/assets/js/6717ac16.d734919e.js deleted file mode 100644 index b306d5c..0000000 --- a/assets/js/6717ac16.d734919e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8369],{1755:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var r=n(5893),i=n(1151),t=n(4866),o=n(5162);const a={title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure",title:"Proposals & governance structure",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},next:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"}},d={},h=[{value:"Concept",id:"cec5b8b9f4904b3c98c079258d9a4692",level:2},{value:"Proposing & voting rights",id:"ca1e33b2b3034f5997ca48f9186e1173",level:3},{value:"Permissioned governance set with equitable vote distribution",id:"59c3610b51824c349b62a8d93925a7ea",level:3},{value:"Decision-making process",id:"3bc3fc5003d64c968b703fe0f949bd75",level:3},{value:"Relevant network properties",id:"5584c3f171f24ddfa7a616c344690c83",level:4},{value:"Parameters",id:"c87ca8ad5ef4402aab4f8f9c9768b78b",level:2},{value:"Proposal types",id:"c5381831565e4d2789f7d553745835e5",level:4},{value:"Proposal",id:"e3cd55578cb74dc394f3c4346e73236c",level:4},{value:"Vote types",id:"c48673132aeb432d977a1554e8a86434",level:4},{value:"Proposal status",id:"703d5727415642f2a6b4d33cd6acff0a",level:4},{value:"Cli syntax & examples",id:"b82ffe5632d24d94997e6981477a132b",level:2},{value:"Transactions",id:"54620f9f378f4c1a89d527786da6e1bc",level:2},{value:"Queries",id:"5461ad3bca534f018a45d18d22b0bb69",level:3},{value:"Query proposals",id:"78011608601e48d08d0a071b9cd5c140",level:4},{value:"Query proposal",id:"095905665c39445cb75e2850e4b0dc1b",level:4},{value:"Query vote",id:"63da01ba1e7641f1b655954ba40dd3c0",level:4},{value:"Query votes",id:"8b6123c73e304d50a928294736b65015",level:4},{value:"Query whitelisted proposal voters",id:"9fa5de3738c7484f84dc315dc112c0f5",level:4},{value:"Query all proposal durations",id:"29b4670c8bfc40fd8f62e1f4da02b57d",level:4},{value:"Query proposal duration",id:"c998c2f09f9c47168e2dd081f93f842f",level:4},{value:"Governance",id:"8fc5a2c18add467eba69f2af052d32fc",level:2},{value:"Set proposals duration",id:"d2441765912d4167b72710bad8af4ea0",level:4}];function p(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"cec5b8b9f4904b3c98c079258d9a4692",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"Proposals form the backbone of the governance process within the KIRA Network, empowering selected network members to collectively influence the blockchain application's conduct and make myriad of off-chain decisions."}),"\n",(0,r.jsx)(s.h3,{id:"ca1e33b2b3034f5997ca48f9186e1173",children:"Proposing & voting rights"}),"\n",(0,r.jsx)(s.p,{children:"Two types of network participants are empowered to vote on governance proposals:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Consensus nodes"}),": These are individuals who occupy a validator seat and operate nodes that actively generate new blocks."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Councilors:"})," These are non-validator individuals who, having secured a councilor seat, shoulder the responsibility of network governance."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Together, consensus nodes and councilors constitute the governance set. Inclusion in the governance set doesn't inherently grant the ability to vote on every proposal type. Each governance member necessitates a specific permission to vote on a certain type of proposal. The same principle holds for the creation of new proposals\u2014a specific permission enabling the submission of certain proposals is essential. Permissions can be granted on an individual basis or via roles. This model facilitates an almost infinitely scalable governance system. It allows for the creation of multiple governance sub-councils that can maintain a codependent relationship through ",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Separation_of_powers#Checks_and_balances",children:"checks and balances"})," or any other governance system. This efficient division of responsibilities enables KIRA governance to manage various on-chain parameters, staking interest rates, and more, concurrently. More details on this can be found in the ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"Roles & Permissions"})," section."]}),"\n",(0,r.jsx)(s.h3,{id:"59c3610b51824c349b62a8d93925a7ea",children:"Permissioned governance set with equitable vote distribution"}),"\n",(0,r.jsxs)(s.p,{children:["KIRA's governance structure aims to promotes a non-sybil community\u2014i.e identifiable individuals who cannot own multiple KIRA accounts with the same or different governance permissions. This non-sybil status is curated by the governance set itself, hence termed \u201cpermissionned\u201d or \u201cgovernance curated\u201d governance set. While ",(0,r.jsx)(s.strong,{children:"members do not need to disclose their identity or undergo KYC procedures"}),", they must be identifiable individual entities. This is primarily achieved through KIRA\u2019s ",(0,r.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),", which enables all KIRA users to claim and validate various type of information on-chain. Additionally, the governance has various ways to ensure that new members are genuine individuals\u2014like conducting in-person meetings or group calls."]}),"\n",(0,r.jsx)(s.p,{children:"The voting power among governance members is uniformly distributed. Contrary to governance models where token holdings determine voting weight, KIRA provides equal voting weight to all governance members irrespective of their wealth or token ownership. This mitigates the risk of stolen tokens or accounts being used to manipulate network operations or sway governance votes. This becomes crucial in scenarios where centralized custodians, like exchanges holding large token positions of users, can impact other network operations."}),"\n",(0,r.jsx)(s.h3,{id:"3bc3fc5003d64c968b703fe0f949bd75",children:"Decision-making process"}),"\n",(0,r.jsx)(s.p,{children:"The KIRA Network's decision-making process is orchestrated through the mechanism of proposals. These can be accepted, vetoed, or dismissed by governance members, provided they have the appropriate voting permission."}),"\n",(0,r.jsx)(s.p,{children:"This process is guided by the following principles:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Eligibility:"})," Only those network participants who are ",(0,r.jsx)(s.strong,{children:"validators"})," or ",(0,r.jsx)(s.strong,{children:"councilors"})," (collectively known as ",(0,r.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"}),") are eligible to vote on proposals."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Permission:"})," Councilors can vote on a specific proposal only if they have been granted the respective permission that allows them to do so or if they possess a role that encompasses said permission."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Vote Casting:"})," Governance actors have the option to cast one of four distinct vote types: ",(0,r.jsx)(s.code,{children:"yes (1)"}),", ",(0,r.jsx)(s.code,{children:"abstain (2)"}),", ",(0,r.jsx)(s.code,{children:"no (3)"}),", or ",(0,r.jsx)(s.code,{children:"veto (4)"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Proposal Timeline:"})," A proposal cannot be accepted, vetoed, or dismissed until its ",(0,r.jsx)(s.code,{children:"voting_end_time"})," time has elapsed. Furthermore, a proposal cannot take effect until the ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," has elapsed. No votes can be cast during the enactment period, and a proposal only comes into effect after this period ends."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsx)(s.p,{children:"The enactment time allows participants to analyze successful proposal results and act accordingly, avoiding unexpected shifts in voting outcomes."})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Quorum Requirement:"})," A proposal necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process. Failing to meet the quorum results in the proposal being marked as ",(0,r.jsx)(s.code,{children:"QuorumNotReached"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["The default proposal minimum quorum percentage is 33% and is configurable by governance via the ",(0,r.jsx)(s.code,{children:"vote_quorum"})," ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,r.jsx)(s.p,{children:"The outcome of a proposal is determined based on the following rules:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Outcome"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Condition"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Passed"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are ",(0,r.jsx)(s.code,{children:"yes"})," votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Rejected"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and votes of a type other than ",(0,r.jsx)(s.code,{children:"yes"})," sum to more than or equal to ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,r.jsxs)(s.td,{children:["If more than or equal to ",(0,r.jsx)(s.code,{children:"veto_threshold"})," (default 33.4%) votes are ",(0,r.jsx)(s.code,{children:"veto"})," votes, the proposal is rejected (a minority of members can reject a proposal)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"QuorumNotReached"})}),(0,r.jsxs)(s.td,{children:["The quorum was not reach before ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"5584c3f171f24ddfa7a616c344690c83",children:"Relevant network properties"}),"\n",(0,r.jsxs)(s.p,{children:["Two fundamental ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish the baseline for proposal duration and enactment timeframes: ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," and ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"}),"."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," sets the lower limit for all proposals durations, also known as ",(0,r.jsx)(s.code,{children:"voting_end_time"})," which can be adjusted by the governance for individual proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," creates a consistent rule that applies to all proposals. It sets each proposal's ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," by adding the ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," to that proposal's ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"c87ca8ad5ef4402aab4f8f9c9768b78b",children:"Parameters"}),"\n",(0,r.jsx)(s.h4,{id:"c5381831565e4d2789f7d553745835e5",children:"Proposal types"}),"\n",(0,r.jsxs)(s.p,{children:["Existing governance proposals types are listed ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"here"}),"."]}),"\n",(0,r.jsx)(s.h4,{id:"e3cd55578cb74dc394f3c4346e73236c",children:"Proposal"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"TYPE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"EXAMPLE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal_id"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"uint64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1"})}),(0,r.jsx)(s.td,{children:"The unique identifier of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"title"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some title"})}),(0,r.jsx)(s.td,{children:"The title of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some description"})}),(0,r.jsx)(s.td,{children:"The description of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"content"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Any"})}),(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:"The content of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"submit_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1677781730"})}),(0,r.jsx)(s.td,{children:"The timestamp when the proposal was submitted."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voting_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678386530"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"enactment_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678991330"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the enactment period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_voting_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"17500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"voting_end_time"})," corresponding minimum block height at which the voting period for the proposal ends."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_enactment_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"18500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"enactment_end_time"})," corresponding minimum block height at which the enactment period for the proposal ends."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"c48673132aeb432d977a1554e8a86434",children:"Vote types"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_YES (1)"})}),(0,r.jsx)(s.td,{children:"Councilor agrees with the proposal and wants it to pass successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_ABSTAIN (2)"})}),(0,r.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO (3)"})}),(0,r.jsx)(s.td,{children:"Councilor disagrees with the proposal and wants to prevent it from passing successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO_WITH_VETO (4)"})}),(0,r.jsx)(s.td,{children:"Councilor strongly disagrees with a proposal and wants to prevent it from passing successfully bypassing the majority vote percentage requirements for approval due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"703d5727415642f2a6b4d33cd6acff0a",children:"Proposal status"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"STATUS"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_UNKNOWN (0)"})}),(0,r.jsx)(s.td,{children:"Result of the proposal is not yet known/defined"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED (1)"})}),(0,r.jsx)(s.td,{children:"Proposal reached quorum, passed successfully, was enacted and took effect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED (2)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass by lacking a minimum of >50% ",(0,r.jsx)(s.code,{children:"yes (1)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED_WITH_VETO (3)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass due to rejection of >50% ",(0,r.jsx)(s.code,{children:"veto (4)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_PENDING (4)"})}),(0,r.jsx)(s.td,{children:"Proposal is not finalized yet and is still awaiting votes"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,r.jsx)(s.td,{children:"Proposal failed to reach quorum and thus was rejected"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_ENACTMENT (6)"})}),(0,r.jsx)(s.td,{children:"Proposal was successful but is awaiting enactment time to be passed and thus enforced"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED_WITH_EXEC_FAIL (7)"})}),(0,r.jsx)(s.td,{children:"Execution of the proposal logic failed with an unforeseen exception and no changes were made"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"b82ffe5632d24d94997e6981477a132b",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(t.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"54620f9f378f4c1a89d527786da6e1bc",children:"Transactions"}),(0,r.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"tab",label:"Tab",children:[(0,r.jsx)(s.h3,{id:"5461ad3bca534f018a45d18d22b0bb69",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposals"})}),(0,r.jsx)(s.th,{children:"Query all proposals with optional filters."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal"})}),(0,r.jsx)(s.td,{children:"Query details for a specific proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"vote"})}),(0,r.jsx)(s.td,{children:"Query details for a single vote on a proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"votes"})}),(0,r.jsx)(s.td,{children:"Query vote details for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voters"})}),(0,r.jsx)(s.td,{children:"Query voters for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"all-proposal-durations"})}),(0,r.jsx)(s.td,{children:"Query all proposal durations."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal-duration"})}),(0,r.jsx)(s.td,{children:"Query a specific proposal duration."})]})]})]}),(0,r.jsx)(s.h4,{id:"78011608601e48d08d0a071b9cd5c140",children:"Query proposals"}),(0,r.jsxs)(s.p,{children:["Query all paginated proposals that match optional filters using the ",(0,r.jsx)(s.code,{children:"proposals"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": (Optional) Filter by proposals voted on by this voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposals --voter=$VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"095905665c39445cb75e2850e4b0dc1b",children:"Query proposal"}),(0,r.jsxs)(s.p,{children:["Query details for a proposal using the ",(0,r.jsx)(s.code,{children:"proposal"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov proposal $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"63da01ba1e7641f1b655954ba40dd3c0",children:"Query vote"}),(0,r.jsxs)(s.p,{children:["Query details for a single vote on a proposal using the ",(0,r.jsx)(s.code,{children:"vote"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": The address of the voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov vote $PROPOSAL_ID $VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"8b6123c73e304d50a928294736b65015",children:"Query votes"}),(0,r.jsxs)(s.p,{children:["Query vote details for a single proposal using the ",(0,r.jsx)(s.code,{children:"votes"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov votes $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"9fa5de3738c7484f84dc315dc112c0f5",children:"Query whitelisted proposal voters"}),(0,r.jsxs)(s.p,{children:["Query voters for a single proposal using the ",(0,r.jsx)(s.code,{children:"voters"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov voters $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"29b4670c8bfc40fd8f62e1f4da02b57d",children:"Query all proposal durations"}),(0,r.jsxs)(s.p,{children:["Query all proposal durations using the ",(0,r.jsx)(s.code,{children:"all-proposal-durations"})," command."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov all-proposal-durations \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"c998c2f09f9c47168e2dd081f93f842f",children:"Query proposal duration"}),(0,r.jsxs)(s.p,{children:["Query a proposal duration using the ",(0,r.jsx)(s.code,{children:"proposal-duration"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPE"}),": The type of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposal-duration $PROPOSAL_TYPE \\\n$FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"8fc5a2c18add467eba69f2af052d32fc",children:"Governance"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"})}),(0,r.jsxs)(s.th,{children:["Proposes to set the ",(0,r.jsx)(s.code,{children:"voting_end_time"})," of specific proposal types"]})]})})}),(0,r.jsx)(s.h4,{id:"d2441765912d4167b72710bad8af4ea0",children:"Set proposals duration"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"}),", is used to create a proposal to set some proposal ",(0,r.jsx)(s.code,{children:"voting_end_time"})," in one batch. It requires two positional arguments: a list of proposal types and a corresponding list of durations. The command accepts the following flags:"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPES"}),": A comma-separated list of proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DURATIONS"}),": A corresponding comma-separated list of durations for the proposal types."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. This flag is required."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, some text, etc. This flag is required."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-proposal-durations-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPOSAL_TYPES $DURATIONS\n"})})]})]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var r=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var r=n(7294),i=n(6905),t=n(2466),o=n(6550),a=n(469),l=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:i}}=e;return{value:s,label:n,attributes:r,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const i=(0,o.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,l._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=p(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[c,h]=x({queryString:n,groupId:i}),[j,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,d.Nk)(n);return[i,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),f=(()=>{const e=c??j;return u({value:e,tabValues:t})?e:null})();(0,a.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,t]),tabValues:t}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:r,selectValue:o,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const s=e.currentTarget,n=l.indexOf(s),i=a[n].value;i!==r&&(c(s),o(i))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;s=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;s=l[n]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>l.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",f.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function y(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,g.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var r=n(7294);const i={},t=r.createContext(i);function o(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/68476f6a.4f307202.js b/assets/js/68476f6a.4f307202.js new file mode 100644 index 0000000..bee4ead --- /dev/null +++ b/assets/js/68476f6a.4f307202.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4221],{3710:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-4",sidebar_position:5,slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8"},o=void 0,l={id:"Testnet-History/testnet-4",title:"testnet-4",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-4.mdx",sourceDirName:"Testnet-History",slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"testnet-4",sidebar_position:5,slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8"},sidebar:"defaultSidebar",previous:{title:"testnet-8",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585"},next:{title:"testnet-3",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"}},i={},c=[{value:"Description",id:"d42c33dd5f244074b2fd4f1fc42b0d19",level:2},{value:"Post Mortem",id:"021225df4da84fcd9455c66244a506dc",level:2},{value:"Files",id:"86a6f5369c5548dc95dc632f5e1e7e24",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"d42c33dd5f244074b2fd4f1fc42b0d19",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-4"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"d2de922720744da7e5fa501f78c94d5ce7901744eca81a1796e3a308d7114e31"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"240b0fe67095e7e25a1e98ba2062231dca0ece81c24f12e8371a31798ade276b"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"1271603+"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"021225df4da84fcd9455c66244a506dc",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"Depreciated with a hard fork in order to include automated upgrade module & identity registrar"}),"\n",(0,n.jsx)(t.h2,{id:"86a6f5369c5548dc95dc632f5e1e7e24",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/caa8a8f6-bf10-4336-8011-a1ef2a706e89/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=5e7bfb58a60f2aab3b869cea4fd87bfee880bf38c5df841198097a8ce914ce63&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/b2513d0b-a36d-4d23-bc4f-b5c663e19fca/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=f06a38f5fa0f894dda2d46b479e5241164fbc30ff3e9ff4f14e3a36282bae8b4&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),o=a(6550),l=a(469),i=a(1980),c=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,i._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=f(e),[o,i]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=c??m;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=i.indexOf(t),r=l[a].value;r!==n&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=i.indexOf(e.currentTarget)+1;t=i[a]??i[0];break}case"ArrowLeft":{const a=i.indexOf(e.currentTarget)-1;t=i[a]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:l.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function j(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>o});var n=a(7294);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/68476f6a.e6b7de3f.js b/assets/js/68476f6a.e6b7de3f.js deleted file mode 100644 index 0ae74de..0000000 --- a/assets/js/68476f6a.e6b7de3f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4221],{3710:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"testnet-4",sidebar_position:5,slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8"},o=void 0,l={id:"Testnet-History/testnet-4",title:"testnet-4",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-4.mdx",sourceDirName:"Testnet-History",slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"testnet-4",sidebar_position:5,slug:"/2318d048-5113-48d0-8ca6-3f5a775e83c8"},sidebar:"defaultSidebar",previous:{title:"testnet-8",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585"},next:{title:"testnet-3",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"}},i={},c=[{value:"Description",id:"d42c33dd5f244074b2fd4f1fc42b0d19",level:2},{value:"Post mortem",id:"021225df4da84fcd9455c66244a506dc",level:2},{value:"Files",id:"86a6f5369c5548dc95dc632f5e1e7e24",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"d42c33dd5f244074b2fd4f1fc42b0d19",children:"Description"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Chain Identifier: ",(0,a.jsx)(t.code,{children:"testnet-4"})]}),"\n",(0,a.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,a.jsx)(t.code,{children:"d2de922720744da7e5fa501f78c94d5ce7901744eca81a1796e3a308d7114e31"})]}),"\n",(0,a.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,a.jsx)(t.code,{children:"240b0fe67095e7e25a1e98ba2062231dca0ece81c24f12e8371a31798ade276b"})]}),"\n",(0,a.jsxs)(t.li,{children:["Block Height Reached: ",(0,a.jsx)(t.code,{children:"1271603+"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"021225df4da84fcd9455c66244a506dc",children:"Post mortem"}),"\n",(0,a.jsx)(t.p,{children:"Depreciated with a hard fork in order to include automated upgrade module & identity registrar"}),"\n",(0,a.jsx)(t.h2,{id:"86a6f5369c5548dc95dc632f5e1e7e24",children:"Files"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/caa8a8f6-bf10-4336-8011-a1ef2a706e89/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=3b140bcf55be31a91d230cf697322779867e4d248c125379eac2d5295cae6ad9&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/b2513d0b-a36d-4d23-bc4f-b5c663e19fca/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=12551793cce6e31836df08bf39e6b64df4b86ef03e99a9e824fc31f4b06914eb&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),l=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:n,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),v=(()=>{const e=c??m;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function x(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),r=l[n].value;r!==a&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function j(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69812931.7d56074b.js b/assets/js/69812931.7d56074b.js new file mode 100644 index 0000000..903d406 --- /dev/null +++ b/assets/js/69812931.7d56074b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6028],{2040:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},i=void 0,o={id:"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure",title:"Rewards and Incentives Structure",description:"Staking Rewards",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Rewards-and-Incentives-Structure.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},sidebar:"defaultSidebar",previous:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326"},next:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"}},l={},d=[{value:"Staking Rewards",id:"a63d9225f2ad4a229025a0fdfba77c92",level:3},{value:"Application Incentives",id:"f5729db77406472a86817be36ff4dd9f",level:3},{value:"Auxiliary Rewards",id:"2c07de1a942a4fe18e1c7457e24525e5",level:3},{value:"Recap",id:"4b2b2809dbac4bbd8bb8964de7b10160",level:2}];function c(e){const t={code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h3,{id:"a63d9225f2ad4a229025a0fdfba77c92",children:"Staking Rewards"}),"\n",(0,n.jsxs)(t.p,{children:["KIRA consensus nodes earn trifold rewards: ",(0,n.jsx)(t.strong,{children:"block rewards, fee rewards, and app incentives."})," They are distributed in slightly different ways but follow a simple generic pattern. They are awarded per block. The selected block proposer first takes a commission before the remainder is shared among its respective delegators who have entrusted their assets to the consensus nodes to participate in consensus on their behalf."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Block rewards"})," are a fixed amount of KEX tokens minted in each block \u2014 shared between delegators according to the total value of all the tokens they have delegated among all active staking pools. ",(0,n.jsx)(t.strong,{children:"Hence, block rewards compensate delegators proportionally to the risk they are taking network-wise"})," \u2014 this is similar to Cosmos reward distribution."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Fee rewards"})," are a portion of the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," paid by users for each transactions shared between its delegators according to their share of the staking pool. ",(0,n.jsx)(t.strong,{children:"Hence, fee rewards only compensate delegators proportionally to the risk they are taking locally"})," \u2014 this is similar to Polkadot reward distribution. Note that fee rewards are not limited to KEX and can also include a variety of different tokens that are whitelisted for fee payment. The composition of the rewards basket may vary based on the type and volume of activity conducted on the network."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"f5729db77406472a86817be36ff4dd9f",children:"Application Incentives"}),"\n",(0,n.jsxs)(t.p,{children:["A portion of the swap fees generated by the AMM pool of any app will be paid to consensus nodes serving as active app executors and verifiers for said apps, and by extension their delegators. dApp deployers may choose to offer additional incentives for consensus nodes to serve as the execution layer for these apps. ",(0,n.jsx)(t.strong,{children:"Application incentives are paid in similar fashion to fee rewards."})]}),"\n",(0,n.jsx)(t.h3,{id:"2c07de1a942a4fe18e1c7457e24525e5",children:"Auxiliary Rewards"}),"\n",(0,n.jsx)(t.p,{children:"In addition, KIRA has two subsidiary sources of extrinsic rewards which are more circumstantial:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Universal Basic Income"})," (from KEX inflation) \u2014 The ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," module allows to create various incentivization schemes for a specific network purposes (e.g. increasing block rewards if the network security subsidy becomes too low), or a specific role (e.g. community managers)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Stake grants"})," (from KIRA\u2019s treasury) \u2014 Winners of the incentivized games will be allocated some amount of ",(0,n.jsx)("u",{children:"staked"})," KEX from the treasury to help them bootstrapping their nodes."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"4b2b2809dbac4bbd8bb8964de7b10160",children:"Recap"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS TYPE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS ORIGIN"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"BLOCK PROPOSER SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"DELEGATORS SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"SEKAI MODULE"})})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Block rewards"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsxs)(t.td,{children:["According to its staking pool ",(0,n.jsx)(t.code,{children:"commission"})," rate",(0,n.jsx)("br",{}),"(",(0,n.jsx)(t.em,{children:"min 1%, max 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked network-wise (all staking pools)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Fee rewards"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," (multiple tokens)"]}),(0,n.jsxs)(t.td,{children:["According the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," ",(0,n.jsx)(t.code,{children:"validators_fee_share"})," ",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"(default 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked locally (in the block proposer\u2019s staking pool)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Universal Basic Income"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Stake grants"}),(0,n.jsx)(t.td,{children:"KEX treasury"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"N/A"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"App Incentive"}),(0,n.jsx)(t.td,{children:"L2 AMMs"}),(0,n.jsx)(t.td,{children:"applications"}),(0,n.jsx)(t.td,{children:"25% share of swap fees originating from dApp token swaps"}),(0,n.jsx)(t.td,{children:"application dependent"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),s=r(2466),i=r(6550),o=r(469),l=r(1980),d=r(7392),c=r(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function b(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=h(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[d,u]=p({queryString:r,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),x=(()=>{const e=d??b;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{x&&l(x)}),[x]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,s]),tabValues:s}}var m=r(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function j(e){let{className:t,block:r,selectedValue:n,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=o[r].value;a!==n&&(d(t),i(a))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:o.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:c,...s,className:(0,a.Z)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function v(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",x.tabList),children:[(0,g.jsx)(j,{...e,...t}),(0,g.jsx)(v,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:u(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>i});var n=r(7294);const a={},s=n.createContext(a);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69812931.9f7354c2.js b/assets/js/69812931.9f7354c2.js deleted file mode 100644 index eded1c3..0000000 --- a/assets/js/69812931.9f7354c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6028],{2040:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},i=void 0,o={id:"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure",title:"Rewards and Incentives Structure",description:"Staking rewards",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Rewards-and-Incentives-Structure.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",permalink:"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},sidebar:"defaultSidebar",previous:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326"},next:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"}},l={},d=[{value:"Staking rewards",id:"a63d9225f2ad4a229025a0fdfba77c92",level:3},{value:"Application incentives",id:"f5729db77406472a86817be36ff4dd9f",level:3},{value:"Auxiliary rewards",id:"2c07de1a942a4fe18e1c7457e24525e5",level:3},{value:"Recap",id:"4b2b2809dbac4bbd8bb8964de7b10160",level:2}];function c(e){const t={code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h3,{id:"a63d9225f2ad4a229025a0fdfba77c92",children:"Staking rewards"}),"\n",(0,n.jsxs)(t.p,{children:["KIRA consensus nodes earn trifold rewards: ",(0,n.jsx)(t.strong,{children:"block rewards, fee rewards, and app incentives."})," They are distributed in slightly different ways but follow a simple generic pattern. They are awarded per block. The selected block proposer first takes a commission before the remainder is shared among its respective delegators who have entrusted their assets to the consensus nodes to participate in consensus on their behalf."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Block rewards"})," are a fixed amount of KEX tokens minted in each block \u2014 shared between delegators according to the total value of all the tokens they have delegated among all active staking pools. ",(0,n.jsx)(t.strong,{children:"Hence, block rewards compensate delegators proportionally to the risk they are taking network-wise"})," \u2014 this is similar to Cosmos reward distribution."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Fee rewards"})," are a portion of the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," paid by users for each transactions shared between its delegators according to their share of the staking pool. ",(0,n.jsx)(t.strong,{children:"Hence, fee rewards only compensate delegators proportionally to the risk they are taking locally"})," \u2014 this is similar to Polkadot reward distribution. Note that fee rewards are not limited to KEX and can also include a variety of different tokens that are whitelisted for fee payment. The composition of the rewards basket may vary based on the type and volume of activity conducted on the network."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"f5729db77406472a86817be36ff4dd9f",children:"Application incentives"}),"\n",(0,n.jsxs)(t.p,{children:["A portion of the swap fees generated by the AMM pool of any app will be paid to consensus nodes serving as active app executors and verifiers for said apps, and by extension their delegators. dApp deployers may choose to offer additional incentives for consensus nodes to serve as the execution layer for these apps. ",(0,n.jsx)(t.strong,{children:"Application incentives are paid in similar fashion to fee rewards."})]}),"\n",(0,n.jsx)(t.h3,{id:"2c07de1a942a4fe18e1c7457e24525e5",children:"Auxiliary rewards"}),"\n",(0,n.jsx)(t.p,{children:"In addition, KIRA has two subsidiary sources of extrinsic rewards which are more circumstantial:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Universal Basic Income"})," (from KEX inflation) \u2014 The ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," module allows to create various incentivization schemes for a specific network purposes (e.g. increasing block rewards if the network security subsidy becomes too low), or a specific role (e.g. community managers)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Stake grants"})," (from KIRA\u2019s treasury) \u2014 Winners of the incentivized games will be allocated some amount of ",(0,n.jsx)("u",{children:"staked"})," KEX from the treasury to help them bootstrapping their nodes."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"4b2b2809dbac4bbd8bb8964de7b10160",children:"Recap"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS TYPE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS ORIGIN"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"BLOCK PROPOSER SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"DELEGATORS SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"SEKAI MODULE"})})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Block rewards"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsxs)(t.td,{children:["According to its staking pool ",(0,n.jsx)(t.code,{children:"commission"})," rate",(0,n.jsx)("br",{}),"(",(0,n.jsx)(t.em,{children:"min 1%, max 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked network-wise (all staking pools)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Fee rewards"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," (multiple tokens)"]}),(0,n.jsxs)(t.td,{children:["According the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," ",(0,n.jsx)(t.code,{children:"validators_fee_share"})," ",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"(default 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked locally (in the block proposer\u2019s staking pool)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Universal Basic Income"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Stake grants"}),(0,n.jsx)(t.td,{children:"KEX treasury"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"N/A"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"App Incentive"}),(0,n.jsx)(t.td,{children:"L2 AMMs"}),(0,n.jsx)(t.td,{children:"applications"}),(0,n.jsx)(t.td,{children:"25% share of swap fees originating from dApp token swaps"}),(0,n.jsx)(t.td,{children:"application dependent"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),s=r(2466),i=r(6550),o=r(469),l=r(1980),d=r(7392),c=r(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function b(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=h(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[d,u]=p({queryString:r,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),x=(()=>{const e=d??b;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{x&&l(x)}),[x]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,s]),tabValues:s}}var m=r(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function j(e){let{className:t,block:r,selectedValue:n,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=o[r].value;a!==n&&(d(t),i(a))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:o.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:c,...s,className:(0,a.Z)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function v(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",x.tabList),children:[(0,g.jsx)(j,{...e,...t}),(0,g.jsx)(v,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:u(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>i});var n=r(7294);const a={},s=n.createContext(a);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69cfcbb6.15749cf1.js b/assets/js/69cfcbb6.15749cf1.js deleted file mode 100644 index 7996e33..0000000 --- a/assets/js/69cfcbb6.15749cf1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6181],{6061:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var r=t(5893),s=t(1151),i=t(4866),a=t(5162);const c={title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing",title:"Fee processing",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},sidebar:"defaultSidebar",previous:{title:"Upgrade Module",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},next:{title:"Fee processing",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84"}},l={},u=[{value:"Concept",id:"a64d114cc8344c4894aa2a47f4cd729c",level:2},{value:"Bounded fee range",id:"e2acfd45404a4165b09003c079c4c2d2",level:3},{value:"Parameters",id:"fd6b338759ce4efc92746dd86f6ddb8c",level:2},{value:"Cli syntax & examples",id:"724094a9815c4ad3ade4bbe55757b84b",level:2},{value:"Transactions",id:"94b4014034de4cf2b6a908adec732def",level:2},{value:"Updating execution fees with sudo permission",id:"7f04fc7ef9574a42822d4a1ff95796b0",level:4},{value:"Queries",id:"111168574d0749cf9e568b9864bbf5cb",level:2},{value:"Query execution fees",id:"826587771d4d41ee8cb94b8f55770fe0",level:4},{value:"Governance",id:"4a1056edcb7643c1bfc80fa905a8fee1",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"a64d114cc8344c4894aa2a47f4cd729c",children:"Concept"}),"\n",(0,r.jsx)(n.p,{children:'Traditional Layer 1 blockchain networks like Ethereum use a complex, dynamic fee market determined by opcode prices and the computational "gas" consumed during transaction execution. In such a system, calculating the exact transaction cost can be cumbersome and time-consuming. Additionally, these opcode prices are deeply embedded within the protocol, typically requiring a network upgrade or hard fork for changes.'}),"\n",(0,r.jsxs)(n.p,{children:['KIRA\'s approach replaces the conventional "gas" system with a governance-driven structure. Here, transaction fees are predefined for each type of transaction and uniformly denominated in ',(0,r.jsx)(n.code,{children:"ukex"}),", simplifying and stabilizing the fee calculation. Additionally, the governance is tasked with setting failure fees for each transaction type and determining a specific timeout period for transactions. Complementing this streamlined fee structure, KIRA's ",(0,r.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," allows fees to be paid in other whitelisted tokens at a ",(0,r.jsx)(n.code,{children:"fee_rate"})," defined by the governance. This mechanism ensures a clear and efficient conversion between ",(0,r.jsx)(n.code,{children:"ukex"})," and other tokens, enhancing the network's flexibility and user accessibility."]}),"\n",(0,r.jsx)(n.h3,{id:"e2acfd45404a4165b09003c079c4c2d2",children:"Bounded fee range"}),"\n",(0,r.jsxs)(n.p,{children:["While KIRA does have a fee market, it operates within a bounded range set by the ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," and ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," parameters. This approach serves two purposes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Spam Prevention"}),": The ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," sets a lower boundary, acting as a deterrent against spam transactions, thus maintaining the network's integrity by preventing it from being overloaded with low-value or malicious transactions."]}),"\n",(0,r.jsxs)(n.li,{children:["User Protection: The ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," acts as an upper limit, safeguarding users from inadvertently incurring excessive fees. This is particularly important in preventing significant fund losses that might occur due to mistakenly high fee inputs during transaction submission."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fd6b338759ce4efc92746dd86f6ddb8c",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"transaction_type"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"submit-proposal"})}),(0,r.jsxs)(n.td,{children:["The specific transaction type the following parameters apply to. All existing types can be found ",(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go#L9",children:(0,r.jsx)(n.strong,{children:"here"})}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"execution_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"100"})}),(0,r.jsx)(n.td,{children:"The required fee for users to successfully execute this particular transaction type."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"failure_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"50"})}),(0,r.jsx)(n.td,{children:"The fee users must pay in case the transaction execution is unsuccessful."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"timeout"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"300"})}),(0,r.jsx)(n.td,{children:"The time duration (in seconds) after which the transaction execution will be considered as failed if not completed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"default_parameters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"42"})}),(0,r.jsx)(n.td,{children:"The default input values that the corresponding transaction function will utilize before execution."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"724094a9815c4ad3ade4bbe55757b84b",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsxs)(a.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"94b4014034de4cf2b6a908adec732def",children:"Transactions"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"set-execution-fee"})}),(0,r.jsx)(n.th,{children:"Update execution fee parameters for different transaction types."})]})})}),(0,r.jsx)(n.h4,{id:"7f04fc7ef9574a42822d4a1ff95796b0",children:"Updating execution fees with sudo permission"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"set-execution-fee"})," CLI command allows accounts with sudo permission 7 to modify execution fee parameters for different transaction types."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TYPE"}),": The type of transaction for which the fees are being updated."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"$"})}),(0,r.jsx)(n.code,{children:"EXECUTION_FEE"}),": The fee for successful execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$FAILURE_FEE"}),": The fee for failed execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TIMEOUT"}),": The timeout duration for the transaction."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov set-execution-fee \\\n--from=$SIGNER $FLAGS_TX \\\n--transaction_type=$TX_TYPE \\\n--execution_fee=$EXECUTION_FEE \\\n--failure_fee=$FAILURE_FEE \\\n--timeout=$TX_TIMEOUT\n"})})]}),(0,r.jsxs)(a.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"111168574d0749cf9e568b9864bbf5cb",children:"Queries"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"execution-fee"})}),(0,r.jsx)(n.th,{children:"Retrieve execution fee parameters for a specified transaction type."})]})})}),(0,r.jsx)(n.h4,{id:"826587771d4d41ee8cb94b8f55770fe0",children:"Query execution fees"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"execution-fee"})," CLI command is used to retrieve the execution fee parameters for a specified transaction type."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TRANSACTION_TYPE"}),": The type of transaction for which to query the execution fees."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid query customgov execution-fee $TRANSACTION_TYPE $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(a.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"4a1056edcb7643c1bfc80fa905a8fee1",children:"Governance"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/issues/626",children:"https://github.com/KiraCore/sekai/issues/626"})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>a});t(7294);var r=t(6905);const s={tabItem:"tabItem_Ymn6"};var i=t(5893);function a(e){let{children:n,hidden:t,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,a),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(7294),s=t(6905),i=t(2466),a=t(6550),c=t(469),o=t(1980),d=t(7392),l=t(12);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:t}=e;const s=(0,a.k6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function p(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=h(e),[a,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[d,u]=x({queryString:t,groupId:s}),[p,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,l.Nk)(t);return[s,(0,r.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),m=(()=>{const e=d??p;return f({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),b(e)}),[u,b,i]),tabValues:i}}var b=t(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(5893);function g(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),l=e=>{const n=e.currentTarget,t=o.indexOf(n),s=c[t].value;s!==r&&(d(n),a(s))},u=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:c.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:u,onClick:l,...i,className:(0,s.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=p(e);return(0,j.jsxs)("div",{className:(0,s.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function T(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var r=t(7294);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ab03a46.75d893ff.js b/assets/js/6ab03a46.75d893ff.js deleted file mode 100644 index adabe05..0000000 --- a/assets/js/6ab03a46.75d893ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4056],{4111:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Upgrade/index",title:"Upgrade",description:"x/upgrade",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},sidebar:"defaultSidebar",previous:{title:"Recovery",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce"},next:{title:"Upgrade Module",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/upgrade/types",children:(0,a.jsx)(t.code,{children:"x/upgrade"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>u});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function u(e){let{children:t,hidden:r,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,u),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var a=r(7294),n=r(6905),o=r(2466),u=r(6550),s=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[u,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,i.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(c(t),u(n))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>u});var a=r(7294);const n={},o=a.createContext(n);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ab03a46.e4a52f66.js b/assets/js/6ab03a46.e4a52f66.js new file mode 100644 index 0000000..2d5ba9a --- /dev/null +++ b/assets/js/6ab03a46.e4a52f66.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4056],{4111:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Upgrade/index",title:"Upgrade",description:"x/upgrade",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",permalink:"/docs.kira.network/docs/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{title:"Upgrade",sidebar_position:12,slug:"/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},sidebar:"defaultSidebar",previous:{title:"Recovery",permalink:"/docs.kira.network/docs/0b33153c-9b3e-410f-abd7-2877ccb870ce"},next:{title:"Upgrade Module",permalink:"/docs.kira.network/docs/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/upgrade/types",children:(0,a.jsx)(t.code,{children:"x/upgrade"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>u});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function u(e){let{children:t,hidden:r,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,u),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var a=r(7294),n=r(6905),o=r(2466),u=r(6550),s=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[u,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,i.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(c(t),u(n))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>u});var a=r(7294);const n={},o=a.createContext(n);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c649b9d.0c12e53b.js b/assets/js/6c649b9d.cd807ef5.js similarity index 82% rename from assets/js/6c649b9d.0c12e53b.js rename to assets/js/6c649b9d.cd807ef5.js index 58baa8f..d192869 100644 --- a/assets/js/6c649b9d.0c12e53b.js +++ b/assets/js/6c649b9d.cd807ef5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7736],{4854:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>o});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"chaosnet-1",sidebar_position:0,slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac"},i=void 0,l={id:"Active-Testnets/chaosnet-1",title:"chaosnet-1",description:"Description",source:"@site/tabs/Testnet/Active-Testnets/chaosnet-1.mdx",sourceDirName:"Active-Testnets",slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"chaosnet-1",sidebar_position:0,slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/testnet/"},next:{title:"testnet-9",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f"}},c={},o=[{value:"Description",id:"ad32793b7bc14baa8a6d3222dd133781",level:2},{value:"Files",id:"2599fa3b4ec7490fba1a3abd72e6b41f",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"ad32793b7bc14baa8a6d3222dd133781",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"chaosnet-1"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager CID: ",(0,n.jsx)(t.code,{children:"bafybeiafl5cgdbzm2r4bdqhf6kuc4a2m2dqgacmzkema7v42wg7uxwvozm"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager version: ",(0,n.jsx)(t.code,{children:"v0.11.27"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"ec2be27c1236d987533b28534b0a5a04f42ea12fe36ec90aea6ce1c56ce485fb"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"N/A"})]}),"\n",(0,n.jsxs)(t.li,{children:["Peers: ",(0,n.jsx)(t.code,{children:"471fa31723d46f91e71432107a3d318286e7a5f2@148.251.69.56:36656"}),", ",(0,n.jsx)(t.code,{children:"a9ad549245fd26fb5d639deac42953d398609a21@91.107.232.185:36656"}),", ",(0,n.jsx)(t.code,{children:"ee92189a3358f1e70d00fd85b91bfedc6b14b70d@128.140.42.2:36656"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"2599fa3b4ec7490fba1a3abd72e6b41f",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/855fdb00-6ad0-473f-877e-b2e0f344a034/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152659Z&X-Amz-Expires=3600&X-Amz-Signature=fb9a4a6dfaf76f6fe41fcbc848bceac9cbb4607e435e2ecb9711f06350147a60&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/cc6cf6ac-ffe5-4d93-9deb-b3040bfb3fc7/genesis.json.gpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152659Z&X-Amz-Expires=3600&X-Amz-Signature=b889f5bc42e6b55aeaa3e19e7278b630071f2ce2d5ece42955b1af68bfbcd121&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json.gpg"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>i});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function i(e){let{children:t,hidden:a,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,i),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),i=a(6550),l=a(469),c=a(1980),o=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[i,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[o,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=o??m;return f({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&c(v)}),[v]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),r=l[a].value;r!==n&&(o(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:l.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function j(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>i});var n=a(7294);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7736],{4854:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"chaosnet-1",sidebar_position:0,slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac"},i=void 0,l={id:"Active-Testnets/chaosnet-1",title:"chaosnet-1",description:"Description",source:"@site/tabs/Testnet/Active-Testnets/chaosnet-1.mdx",sourceDirName:"Active-Testnets",slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac",permalink:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"chaosnet-1",sidebar_position:0,slug:"/e031ab39-4738-4895-ab21-e27ebebfe9ac"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/testnet/"},next:{title:"testnet-9",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f"}},o={},c=[{value:"Description",id:"ad32793b7bc14baa8a6d3222dd133781",level:2},{value:"Files",id:"2599fa3b4ec7490fba1a3abd72e6b41f",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"ad32793b7bc14baa8a6d3222dd133781",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"chaosnet-1"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager CID: ",(0,n.jsx)(t.code,{children:"bafybeiafl5cgdbzm2r4bdqhf6kuc4a2m2dqgacmzkema7v42wg7uxwvozm"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager version: ",(0,n.jsx)(t.code,{children:"v0.11.27"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"ec2be27c1236d987533b28534b0a5a04f42ea12fe36ec90aea6ce1c56ce485fb"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"N/A"})]}),"\n",(0,n.jsxs)(t.li,{children:["Peers: ",(0,n.jsx)(t.code,{children:"471fa31723d46f91e71432107a3d318286e7a5f2@148.251.69.56:36656"}),", ",(0,n.jsx)(t.code,{children:"a9ad549245fd26fb5d639deac42953d398609a21@91.107.232.185:36656"}),", ",(0,n.jsx)(t.code,{children:"ee92189a3358f1e70d00fd85b91bfedc6b14b70d@128.140.42.2:36656"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"2599fa3b4ec7490fba1a3abd72e6b41f",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/855fdb00-6ad0-473f-877e-b2e0f344a034/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165648Z&X-Amz-Expires=3600&X-Amz-Signature=315df6b4f10dc5a7489ba7b4adf84f3f12a37c209fb96bfdf49206f723e2d6df&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/cc6cf6ac-ffe5-4d93-9deb-b3040bfb3fc7/genesis.json.gpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165648Z&X-Amz-Expires=3600&X-Amz-Signature=6c437b9edb98f7ad64c6c2233669ad1500c448a7f3b69d81fa644f3486672a3f&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json.gpg"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>i});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function i(e){let{children:t,hidden:a,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,i),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),i=a(6550),l=a(469),o=a(1980),c=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[i,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[c,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=c??m;return f({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=l[a].value;r!==n&&(c(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:l.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function j(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>i});var n=a(7294);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ea49aa9.d840a78d.js b/assets/js/6ea49aa9.d840a78d.js new file mode 100644 index 0000000..8cd5f68 --- /dev/null +++ b/assets/js/6ea49aa9.d840a78d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9372],{3595:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Layer-2/index",title:"Layer 2",description:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Layer-2/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Layer-2",slug:"/8aad2626-40b5-42d6-9504-0c1287216a73",permalink:"/docs.kira.network/docs/8aad2626-40b5-42d6-9504-0c1287216a73",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},sidebar:"defaultSidebar",previous:{title:"Poor Network Conditions",permalink:"/docs.kira.network/docs/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},next:{title:"Distributor",permalink:"/docs.kira.network/docs/ba4d5a3e-3caa-431e-940e-87187fbc3bae"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/layer2",children:(0,r.jsx)(t.code,{children:"x/layer2"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:a,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=u??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=i[a].value;n!==r&&(u(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function k(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ea49aa9.ff6b92df.js b/assets/js/6ea49aa9.ff6b92df.js deleted file mode 100644 index 35c6220..0000000 --- a/assets/js/6ea49aa9.ff6b92df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9372],{3595:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Layer-2/index",title:"Layer 2",description:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Layer-2/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Layer-2",slug:"/8aad2626-40b5-42d6-9504-0c1287216a73",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},sidebar:"defaultSidebar",previous:{title:"Poor Network Conditions",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},next:{title:"Distributor",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/layer2",children:(0,r.jsx)(t.code,{children:"x/layer2"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:a,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=u??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=i[a].value;n!==r&&(u(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function k(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7134a84b.5284ee89.js b/assets/js/7134a84b.5284ee89.js new file mode 100644 index 0000000..bb7113e --- /dev/null +++ b/assets/js/7134a84b.5284ee89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3731],{8400:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>j,frontMatter:()=>o,metadata:()=>t,toc:()=>h});var n=i(5893),r=i(1151),l=i(4866),d=i(5162);const o={title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},c=void 0,t={id:"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions",title:"Roles & Permissions",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",permalink:"/docs.kira.network/docs/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},sidebar:"defaultSidebar",previous:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/docs/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},next:{title:"Polls",permalink:"/docs.kira.network/docs/f5e18e49-927a-4a4f-ae70-bb9fc5606243"}},a={},h=[{value:"Concept",id:"c77098bc9e8041d3acd7dd398e7ce168",level:2},{value:"Permissions",id:"ea6396ff8b684c33be953070bdcf0c51",level:4},{value:"Roles",id:"f7f0069d7e1946fdb56c457decd61991",level:4},{value:"Role & Account Permission Conflicts",id:"52640fd598564b83a8e9fb3cdfce60fb",level:4},{value:"Parameters",id:"7a84ff7ef7da4a5788f659d6e6b40ef9",level:2},{value:"Permissions",id:"a516249604cb46369b786e5027ea2e21",level:4},{value:"Roles",id:"7e46e604d88f4bf5a973278b7a07fc98",level:4},{value:"Cli Syntax & Examples",id:"20129a3a61f14bba9861c2ce8a335580",level:2},{value:"Transactions",id:"6956f08df3304390b41be91ffec19717",level:2},{value:"Create Role",id:"05f8eb77251f4664b5db97fd10c85434",level:4},{value:"Assign Role",id:"de3cc4eb44cc480f9f85d2613a052e2c",level:4},{value:"Remove Role",id:"86664c10b2854fcea46b0fc465fc7133",level:4},{value:"Whitelist Role Permission",id:"9412158de9b64d889bcb9957f4c9d8a2",level:4},{value:"Blacklist Role\u2019s Permission",id:"dd9cce6cffdb4b06b89242b13892d8ee",level:4},{value:"Remove Role\u2019s Whitelisted Permission",id:"08639ca85c164ac4bd0c035bfe232a9f",level:4},{value:"Remove Role\u2019s Blacklisted Permission",id:"41e4a72abd5349489db98323b5ba9d73",level:4},{value:"Whitelist Account Permission",id:"806238882b114b9b818e6a4b93ae3dee",level:4},{value:"Remove Account Whitelisted Permission",id:"73c6b6b57b1e40d19dd9b4b091a2ac10",level:4},{value:"Blacklist Account\u2019s Permission",id:"7e6f13bfe51a44f4a2d1125572528767",level:4},{value:"Remove Account\u2019s Blacklisted Permissions",id:"c254a608b08b401b98a80afa5c721cbf",level:4},{value:"Queries",id:"d4546bd70d5747b0b56c7b5a5f90ba05",level:2},{value:"Query Address Permissions",id:"1018f8a098ca4fc9891ecaffe65b0339",level:4},{value:"Query Addresses by Whitelisted Permission",id:"d64eae3fd3ce4145a744034780ddc81a",level:4},{value:"Query Addresses by Blacklisted Permission",id:"ec0852ec6a0a40a787bd2e8a8836a769",level:4},{value:"Query All Registered Roles",id:"848cd8553b3944c9bc4cf25bb3bd85b2",level:4},{value:"Query Roles Assigned to an Address",id:"a719c37b64024561a35c9ad33b079087",level:4},{value:"Query Role by Sid",id:"77f5556c25ce49bb873b2fccd2a75877",level:4},{value:"Query Addresses by Whitelisted Role",id:"ff2f390f256f426494b137a77239437f",level:4},{value:"Governance",id:"f8617dce42da4177a1015785d162b8d0",level:2},{value:"Assign Role to Account",id:"2cba8bc4ac50409f9af216999523c632",level:4},{value:"Unassign Role From Account",id:"e99b9d5473494b51b34730686f4d8e1a",level:4},{value:"Blacklist Permission for Account",id:"b17783c615fe489f9a6550edb1bcc84f",level:4},{value:"Remove Blacklisted Permission From Account",id:"7c12a8e15a03468d87431ea5d4468b3d",level:4},{value:"Whitelist Permission for Account",id:"1074bc39423844269d35aded62d9f3b4",level:4},{value:"Remove Whitelisted Permission From Account",id:"dc2d828fb55e44dd88188df10db25cf1",level:4},{value:"Create Role",id:"a5fc56bdaaf2483187994e6efcae14f5",level:4},{value:"Remove Role",id:"539e8162fe6a4eb6833a3e99172225c5",level:4},{value:"Whitelist Permission for Role",id:"6ecd24fdd2934c9c8c163afea00da82d",level:4},{value:"Remove Whitelisted Permission From Role",id:"1b6b5015b7d34dfb8779e5f3752c56fb",level:4},{value:"Blacklist Permission for Role",id:"e6cd57ceb5544e7c948187a8ce51b704",level:4},{value:"Remove Blacklisted Permission From Role",id:"6cff372affa745ef8edbe5525b774a4e",level:4}];function x(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"c77098bc9e8041d3acd7dd398e7ce168",children:"Concept"}),"\n",(0,n.jsx)(s.p,{children:"KIRA governance system utilizes a combination of Roles & Permissions to create a multi-layered governance structure that enables a diverse range of councilors to participate and contribute to the network's decision-making processes. The system operates with just two rules enabling it to bootstrap and evolve almost any imaginable governance model. The rules state that :"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Only whitelisted actors can execute on-chain actions (submit transactions of a given type)."}),"\n",(0,n.jsx)(s.li,{children:"Whitelisted actors can only execute on-chain actions that they have been given the permission to execute."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"For example, a multicameral system can be created where subsets of councilors specialize in creating and voting on specific subsets of proposals. Alternatively, a separation of power through checks and balances can be implemented, preventing a single governance branch from achieving a privileged position. Overall, the KIRA governance system is designed to be flexible and adaptable, allowing it to constantly improve its efficiency and decentralization without relying on factors such as wealth or stake distribution. This makes it an effective tool for ensuring that network actors are motivated and aligned towards common goals, which is crucial for achieving consensus within the network."}),"\n",(0,n.jsx)(s.h4,{id:"ea6396ff8b684c33be953070bdcf0c51",children:"Permissions"}),"\n",(0,n.jsxs)(s.p,{children:["In KIRA network, every type of transaction that can be sent to SEKAI has a unique permission identifier associated with it and there exist two types of permissions: governance permissions and sudo permissions. Governance permissions allow changes to be made through a governance proposal process, and is always associated with two permissions: proposal creation and voting. Sudo permissions, on the other hand, allow users to make changes directly, bypassing any governance proposal. These permission identifiers can be added to the whitelist or blacklist of an individual KIRA account or a role \u2014 more on this in the following section. If the permission identifier is on the account's whitelist, the account is able to send the corresponding transaction to the blockchain. If the identifier is not on the account's whitelist or is on its blacklist, the account is not able to send the transaction, with the exception of ",(0,n.jsx)(s.code,{children:"MsgSend"}),", and ",(0,n.jsx)(s.code,{children:"MsgMultiSend"})," transactions. For example, if you want to allow a KIRA account to claim a validator seat on the blockchain, you must add the ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"})," permission to its whitelist. Only then will the account be able to use the ",(0,n.jsx)(s.code,{children:"claim-validator-seat"})," CLI command to send the ",(0,n.jsx)(s.code,{children:"MsgClaimValidator"})," transaction."]}),"\n",(0,n.jsx)(s.h4,{id:"f7f0069d7e1946fdb56c457decd61991",children:"Roles"}),"\n",(0,n.jsxs)(s.p,{children:["To make it easier to manage hundreds of different permissions, KIRA uses a concept of roles. A role is a collection of permissions that can be associated to a specific KIRA address. This allows the network to manage the permissions of all addresses associated with a role at once, rather than having to change permissions for each individual address. Each permission assigned to a role or individual address can have its own defined parameters, which can be used as input for the function that is triggered when a network actor submits a particular type of transaction. These parameters allow for more granular control of permissions, ensuring that the responsibilities and power of individual network actors can vary widely within the governance model. If the permissions associated with a role are changed, the permissions of all accounts that have been assigned that role will also be changed. Roles can be assigned either by a group of governance members with the appropriate permissions ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"})," and ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"}),", or by a sudo member ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),"\n",(0,n.jsx)(s.h4,{id:"52640fd598564b83a8e9fb3cdfce60fb",children:"Role & Account Permission Conflicts"}),"\n",(0,n.jsx)(s.p,{children:"Permissions in the KIRA governance system can be managed at both account and role levels, each with separate whitelists and blacklists. Within the same type (account or role), a permission cannot be present on both the whitelist and the blacklist. In other words, if a permission is on a role's blacklist, it cannot be added to the role's whitelist, and vice versa. The same rule applies to account whitelists and blacklists."}),"\n",(0,n.jsx)(s.p,{children:"It is important to note that conflicting permissions between account and role levels are possible. In cases where conflicts arise between an account's and a role's whitelists and blacklists, the blacklisted permissions always take precedence. This means that if a permission is blacklisted at either the account or role level, the user will be denied that permission, regardless of any whitelists."}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Suppose a user has permission ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"})," whitelisted on their account and is also assigned to a role that has permission ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"})," blacklisted. In this case, the user will be denied permission ",(0,n.jsx)(s.strong,{children:"[Problem Internal Link]"}),", as the blacklisted permission takes precedence over the whitelisted permission."]})}),"\n",(0,n.jsx)(s.h2,{id:"7a84ff7ef7da4a5788f659d6e6b40ef9",children:"Parameters"}),"\n",(0,n.jsx)(s.h4,{id:"a516249604cb46369b786e5027ea2e21",children:"Permissions"}),"\n",(0,n.jsxs)(s.p,{children:["Existing permissions and their correspond types and identifiers are listed ",(0,n.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/permission.proto",children:"here"}),", or in the following page:"]}),"\n",(0,n.jsx)(s.h4,{id:"7e46e604d88f4bf5a973278b7a07fc98",children:"Roles"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"NAME"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"TYPE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"EXAMPLE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"id"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"int"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"1"})}),(0,n.jsx)(s.td,{children:"Identification number of the role - auto assigned"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sid"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"some name"})}),(0,n.jsx)(s.td,{children:"Unique identification name of the role"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"description"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"some text"})}),(0,n.jsx)(s.td,{children:"Description of the role"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"20129a3a61f14bba9861c2ce8a335580",children:"Cli Syntax & Examples"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(s.em,{children:"documentation for more details."})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$SIGNER"})})," ",(0,n.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(s.em,{children:"and"})," ",(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(s.em,{children:"section"})]})}),"\n",(0,n.jsxs)(l.Z,{children:[(0,n.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(s.h2,{id:"6956f08df3304390b41be91ffec19717",children:"Transactions"}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"role create role"})}),(0,n.jsx)(s.th,{children:"Create a new role with permissions."})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role assign"})}),(0,n.jsx)(s.td,{children:"Assign a role to an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role unassign role"})}),(0,n.jsx)(s.td,{children:"Remove a role from an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role blacklist-permission"})}),(0,n.jsx)(s.td,{children:"Blacklist a permission for a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role remove-whitelisted-permission"})}),(0,n.jsx)(s.td,{children:"Remove a whitelisted permission from a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role remove-blacklisted-permission"})}),(0,n.jsx)(s.td,{children:"Remove a blacklisted permission from a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role whitelist-permission"})}),(0,n.jsx)(s.td,{children:"Whitelist a permission for a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"permission whitelist"})}),(0,n.jsx)(s.td,{children:"Assign a permission to an account's whitelist."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"permission blacklist"})}),(0,n.jsx)(s.td,{children:"Assign a permission to an account's blacklist."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"permission remove-whitelisted"})}),(0,n.jsx)(s.td,{children:"Remove a whitelisted permission from an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"permission remove-blacklisted"})}),(0,n.jsx)(s.td,{children:"Remove a blacklisted permission from an account."})]})]})]}),(0,n.jsx)(s.h4,{id:"05f8eb77251f4664b5db97fd10c85434",children:"Create Role"}),(0,n.jsxs)(s.p,{children:["Create a new role with sudo permissions using the ",(0,n.jsx)(s.code,{children:"create"})," command followed by the role's unique identifier ",(0,n.jsx)(s.code,{children:"$ROLE_SID"})," and a description ",(0,n.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Variables"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": Unique string identifier for the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": A brief description of the role."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role create role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,n.jsx)(s.h4,{id:"de3cc4eb44cc480f9f85d2613a052e2c",children:"Assign Role"}),(0,n.jsxs)(s.p,{children:["Assign a role with sudo permissions to an account using the ",(0,n.jsx)(s.code,{children:"assign"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be assigned."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address to which the role will be assigned."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role assign \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,n.jsx)(s.h4,{id:"86664c10b2854fcea46b0fc465fc7133",children:"Remove Role"}),(0,n.jsxs)(s.p,{children:["Remove a role with sudo permissions from an account using the ",(0,n.jsx)(s.code,{children:"remove role"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be removed."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address from which the role will be removed."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,n.jsx)(s.h4,{id:"9412158de9b64d889bcb9957f4c9d8a2",children:"Whitelist Role Permission"}),(0,n.jsxs)(s.p,{children:["Whitelist a permission to a role with sudo permissions using the ",(0,n.jsx)(s.code,{children:"whitelist-permission"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be whitelisted."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"dd9cce6cffdb4b06b89242b13892d8ee",children:"Blacklist Role\u2019s Permission"}),(0,n.jsxs)(s.p,{children:["Blacklist a permission for a governance role with sudo permissions using the ",(0,n.jsx)(s.code,{children:"blacklist-permission"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be blacklisted."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"08639ca85c164ac4bd0c035bfe232a9f",children:"Remove Role\u2019s Whitelisted Permission"}),(0,n.jsxs)(s.p,{children:["Remove a whitelisted permission from a governance role with sudo permissions using the ",(0,n.jsx)(s.code,{children:"remove-whitelisted-permission"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the whitelisted permission to be removed."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"41e4a72abd5349489db98323b5ba9d73",children:"Remove Role\u2019s Blacklisted Permission"}),(0,n.jsxs)(s.p,{children:["Remove a blacklisted permission from a governance role with sudo permissions using the ",(0,n.jsx)(s.code,{children:"remove-blacklisted-permission"})," command followed by the role's identifier ",(0,n.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the blacklisted permission to be removed."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"806238882b114b9b818e6a4b93ae3dee",children:"Whitelist Account Permission"}),(0,n.jsxs)(s.p,{children:["Assign permission to a Kira address whitelist with sudo permissions using the ",(0,n.jsx)(s.code,{children:"whitelist"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission whitelist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,n.jsx)(s.h4,{id:"73c6b6b57b1e40d19dd9b4b091a2ac10",children:"Remove Account Whitelisted Permission"}),(0,n.jsxs)(s.p,{children:["Remove whitelisted permission from an address with sudo permissions using the ",(0,n.jsx)(s.code,{children:"remove-whitelisted"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-whitelisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,n.jsx)(s.h4,{id:"7e6f13bfe51a44f4a2d1125572528767",children:"Blacklist Account\u2019s Permission"}),(0,n.jsxs)(s.p,{children:["Assign permission to a Kira account blacklist with sudo permissions using the ",(0,n.jsx)(s.code,{children:"blacklist"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission blacklist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,n.jsx)(s.h4,{id:"c254a608b08b401b98a80afa5c721cbf",children:"Remove Account\u2019s Blacklisted Permissions"}),(0,n.jsxs)(s.p,{children:["Remove blacklisted permission from an address with sudo permissions using the ",(0,n.jsx)(s.code,{children:"remove-blacklisted"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-blacklisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})})]}),(0,n.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(s.h2,{id:"d4546bd70d5747b0b56c7b5a5f90ba05",children:"Queries"}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"permissions"})}),(0,n.jsx)(s.th,{children:"Query permissions of a specific KIRA address."})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"whitelisted-permission-addresses"})}),(0,n.jsx)(s.td,{children:"Query addresses associated with a whitelisted permission."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"blacklisted-permission-addresses"})}),(0,n.jsx)(s.td,{children:"Query addresses associated with a blacklisted permission."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"all-roles"})}),(0,n.jsx)(s.td,{children:"Query all registered roles in the KIRA network."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"roles"})}),(0,n.jsx)(s.td,{children:"Query roles assigned to a specific KIRA address."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"role"})}),(0,n.jsx)(s.td,{children:"Query information about a role using its Service Identifier (SID)."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"whitelisted-role-addresses"})}),(0,n.jsx)(s.td,{children:"Query addresses associated with a whitelisted role."})]})]})]}),(0,n.jsx)(s.h4,{id:"1018f8a098ca4fc9891ecaffe65b0339",children:"Query Address Permissions"}),(0,n.jsxs)(s.p,{children:["Retrieve the permissions associated with a specific KIRA address using the ",(0,n.jsx)(s.code,{children:"permissions"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDR"}),": The address whose permissions are to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov permissions $ADDR $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"d64eae3fd3ce4145a744034780ddc81a",children:"Query Addresses by Whitelisted Permission"}),(0,n.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific whitelisted permission using the ",(0,n.jsx)(s.code,{children:"whitelisted-permission-addresses"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERM"}),": The whitelisted permission value to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"ec0852ec6a0a40a787bd2e8a8836a769",children:"Query Addresses by Blacklisted Permission"}),(0,n.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific blacklisted permission using the ",(0,n.jsx)(s.code,{children:"blacklisted-permission-addresses"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERM"}),": The blacklisted permission value to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov blacklisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"848cd8553b3944c9bc4cf25bb3bd85b2",children:"Query All Registered Roles"}),(0,n.jsxs)(s.p,{children:["Retrieve a list of all registered roles in the KIRA network using the ",(0,n.jsx)(s.code,{children:"all-roles"})," command."]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov all-roles $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"a719c37b64024561a35c9ad33b079087",children:"Query Roles Assigned to an Address"}),(0,n.jsxs)(s.p,{children:["Retrieve the roles assigned to a specific KIRA address using the ",(0,n.jsx)(s.code,{children:"roles"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDR"}),": The address whose roles are to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov roles $ADDR $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"77f5556c25ce49bb873b2fccd2a75877",children:"Query Role by Sid"}),(0,n.jsxs)(s.p,{children:["Retrieve information about a specific role using its SID (Service Identifier) with the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"role"})})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_IDENTIFIER"}),": The SID of the role to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov role $ROLE_IDENTIFIER $FLAGS_QR | jq\n"})}),(0,n.jsx)(s.h4,{id:"ff2f390f256f426494b137a77239437f",children:"Query Addresses by Whitelisted Role"}),(0,n.jsxs)(s.p,{children:["List all KIRA addresses associated with a specific whitelisted role using the ",(0,n.jsx)(s.code,{children:"whitelisted-role-addresses"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE"}),": The whitelisted role value to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-role-addresses $ROLE $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(s.h2,{id:"f8617dce42da4177a1015785d162b8d0",children:"Governance"}),(0,n.jsxs)(s.p,{children:["To assign governance permissions, a group of governance members must submit and vote a proposal using ",(0,n.jsx)(s.code,{children:"whitelist-permission"})," with the appropriate proposal creation permission 4 and voting permission 5. Sudo permissions can be assigned by an account which has the permission 1."]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"proposal account assign-role"})}),(0,n.jsx)(s.th,{children:"Proposal to assign a role to an address."})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal account unassign-role"})}),(0,n.jsx)(s.td,{children:"Proposal to unassign a role from an address."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal account blacklist-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to blacklist a permission for an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal account remove-blacklisted-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal account whitelist-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to whitelist a permission for an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal account remove-whitelisted-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from an account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role create"})}),(0,n.jsx)(s.td,{children:"Proposal to create a new role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role remove"})}),(0,n.jsx)(s.td,{children:"Proposal to remove an existing role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role whitelist-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to whitelist a permission for a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role remove-whitelisted-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role blacklist-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to blacklist a permission for a role."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"proposal role remove-blacklisted-permission"})}),(0,n.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from a role."})]})]})]}),(0,n.jsx)(s.h4,{id:"2cba8bc4ac50409f9af216999523c632",children:"Assign Role to Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"assign-role"}),", is utilized to create a proposal for assigning a role to an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be assigned."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address to which the role will be assigned. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account assign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,n.jsx)(s.h4,{id:"e99b9d5473494b51b34730686f4d8e1a",children:"Unassign Role From Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"unassign-role"}),", creates a proposal for unassigning a role from an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be unassigned."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the role will be unassigned. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account unassign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,n.jsx)(s.h4,{id:"b17783c615fe489f9a6550edb1bcc84f",children:"Blacklist Permission for Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"blacklist-permission"}),", is for creating a proposal to blacklist a specific permission for an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"7c12a8e15a03468d87431ea5d4468b3d",children:"Remove Blacklisted Permission From Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the blacklisted permission to be removed. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the blacklisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"1074bc39423844269d35aded62d9f3b4",children:"Whitelist Permission for Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"whitelist-permission"}),", is used for creating a proposal to whitelist a specific permission for an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"dc2d828fb55e44dd88188df10db25cf1",children:"Remove Whitelisted Permission From Account"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from an address."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the whitelisted permission to be removed. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the whitelisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal account remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"a5fc56bdaaf2483187994e6efcae14f5",children:"Create Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"create"}),", is for raising a governance proposal to create a new role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the new role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": The description of the new role."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$WHITELIST_PERMS"}),": A comma-separated list of permission IDs to be whitelisted for the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$BLACKLIST_PERMS"}),": A comma-separated list of permission IDs to be blacklisted for the role."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--whitelist-perms=$WHITELIST_PERMS \\\n--blacklist-perms=$BLACKLIST_PERMS \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,n.jsx)(s.h4,{id:"539e8162fe6a4eb6833a3e99172225c5",children:"Remove Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"remove"}),", raises a governance proposal for removing an existing role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be removed."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID\n"})}),(0,n.jsx)(s.h4,{id:"6ecd24fdd2934c9c8c163afea00da82d",children:"Whitelist Permission for Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"whitelist-permission"}),", is for whitelisting permissions for a specific role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"1b6b5015b7d34dfb8779e5f3752c56fb",children:"Remove Whitelisted Permission From Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from a role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"e6cd57ceb5544e7c948187a8ce51b704",children:"Blacklist Permission for Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"blacklist-permission"}),", is for blacklisting permissions for a specific role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,n.jsx)(s.h4,{id:"6cff372affa745ef8edbe5525b774a4e",children:"Remove Blacklisted Permission From Role"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from a role."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})})]})]})]})}function j(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},5162:(e,s,i)=>{i.d(s,{Z:()=>d});i(7294);var n=i(6905);const r={tabItem:"tabItem_Ymn6"};var l=i(5893);function d(e){let{children:s,hidden:i,className:d}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,d),hidden:i,children:s})}},4866:(e,s,i)=>{i.d(s,{Z:()=>R});var n=i(7294),r=i(6905),l=i(2466),d=i(6550),o=i(469),c=i(1980),t=i(7392),a=i(12);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:i}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:i,attributes:n,default:r}}=e;return{value:s,label:i,attributes:n,default:r}}))}(i);return function(e){const s=(0,t.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,i])}function j(e){let{value:s,tabValues:i}=e;return i.some((e=>e.value===s))}function m(e){let{queryString:s=!1,groupId:i}=e;const r=(0,d.k6)(),l=function(e){let{queryString:s=!1,groupId:i}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:s,groupId:i});return[(0,c._X)(l),(0,n.useCallback)((e=>{if(!l)return;const s=new URLSearchParams(r.location.search);s.set(l,e),r.replace({...r.location,search:s.toString()})}),[l,r])]}function u(e){const{defaultValue:s,queryString:i=!1,groupId:r}=e,l=x(e),[d,c]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=i.find((e=>e.default))??i[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:l}))),[t,h]=m({queryString:i,groupId:r}),[u,p]=function(e){let{groupId:s}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,l]=(0,a.Nk)(i);return[r,(0,n.useCallback)((e=>{i&&l.set(e)}),[i,l])]}({groupId:r}),b=(()=>{const e=t??u;return j({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{b&&c(b)}),[b]);return{selectedValue:d,selectValue:(0,n.useCallback)((e=>{if(!j({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),p(e)}),[h,p,l]),tabValues:l}}var p=i(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=i(5893);function g(e){let{className:s,block:i,selectedValue:n,selectValue:d,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:t}=(0,l.o5)(),a=e=>{const s=e.currentTarget,i=c.indexOf(s),r=o[i].value;r!==n&&(t(s),d(r))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;s=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;s=c[i]??c[c.length-1];break}}s?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":i},s),children:o.map((e=>{let{value:s,label:i,attributes:l}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>c.push(e),onKeyDown:h,onClick:a,...l,className:(0,r.Z)("tabs__item",b.tabItem,l?.className,{"tabs__item--active":n===s}),children:i??s},s)}))})}function I(e){let{lazy:s,children:i,selectedValue:r}=e;const l=(Array.isArray(i)?i:[i]).filter(Boolean);if(s){const e=l.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:l.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function v(e){const s=u(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(g,{...e,...s}),(0,f.jsx)(I,{...e,...s})]})}function R(e){const s=(0,p.Z)();return(0,f.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>d});var n=i(7294);const r={},l=n.createContext(r);function d(e){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),n.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7134a84b.f709135b.js b/assets/js/7134a84b.f709135b.js deleted file mode 100644 index 7882141..0000000 --- a/assets/js/7134a84b.f709135b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3731],{8400:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>j,frontMatter:()=>o,metadata:()=>t,toc:()=>h});var r=i(5893),n=i(1151),l=i(4866),d=i(5162);const o={title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},c=void 0,t={id:"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions",title:"Roles & Permissions",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},sidebar:"defaultSidebar",previous:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},next:{title:"Polls",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243"}},a={},h=[{value:"Concept",id:"c77098bc9e8041d3acd7dd398e7ce168",level:2},{value:"Permissions",id:"ea6396ff8b684c33be953070bdcf0c51",level:4},{value:"Roles",id:"f7f0069d7e1946fdb56c457decd61991",level:4},{value:"Role & account permission conflicts",id:"52640fd598564b83a8e9fb3cdfce60fb",level:4},{value:"Parameters",id:"7a84ff7ef7da4a5788f659d6e6b40ef9",level:2},{value:"Permissions",id:"a516249604cb46369b786e5027ea2e21",level:4},{value:"Roles",id:"7e46e604d88f4bf5a973278b7a07fc98",level:4},{value:"Cli syntax & examples",id:"20129a3a61f14bba9861c2ce8a335580",level:2},{value:"Transactions",id:"6956f08df3304390b41be91ffec19717",level:2},{value:"Create role",id:"05f8eb77251f4664b5db97fd10c85434",level:4},{value:"Assign role",id:"de3cc4eb44cc480f9f85d2613a052e2c",level:4},{value:"Remove role",id:"86664c10b2854fcea46b0fc465fc7133",level:4},{value:"Whitelist role permission",id:"9412158de9b64d889bcb9957f4c9d8a2",level:4},{value:"Blacklist role\u2019s permission",id:"dd9cce6cffdb4b06b89242b13892d8ee",level:4},{value:"Remove role\u2019s whitelisted permission",id:"08639ca85c164ac4bd0c035bfe232a9f",level:4},{value:"Remove role\u2019s blacklisted permission",id:"41e4a72abd5349489db98323b5ba9d73",level:4},{value:"Whitelist account permission",id:"806238882b114b9b818e6a4b93ae3dee",level:4},{value:"Remove account whitelisted permission",id:"73c6b6b57b1e40d19dd9b4b091a2ac10",level:4},{value:"Blacklist account\u2019s permission",id:"7e6f13bfe51a44f4a2d1125572528767",level:4},{value:"Remove account\u2019s blacklisted permissions",id:"c254a608b08b401b98a80afa5c721cbf",level:4},{value:"Queries",id:"d4546bd70d5747b0b56c7b5a5f90ba05",level:2},{value:"Query address permissions",id:"1018f8a098ca4fc9891ecaffe65b0339",level:4},{value:"Query addresses by whitelisted permission",id:"d64eae3fd3ce4145a744034780ddc81a",level:4},{value:"Query addresses by blacklisted permission",id:"ec0852ec6a0a40a787bd2e8a8836a769",level:4},{value:"Query all registered roles",id:"848cd8553b3944c9bc4cf25bb3bd85b2",level:4},{value:"Query roles assigned to an address",id:"a719c37b64024561a35c9ad33b079087",level:4},{value:"Query role by sid",id:"77f5556c25ce49bb873b2fccd2a75877",level:4},{value:"Query addresses by whitelisted role",id:"ff2f390f256f426494b137a77239437f",level:4},{value:"Governance",id:"f8617dce42da4177a1015785d162b8d0",level:2},{value:"Assign role to account",id:"2cba8bc4ac50409f9af216999523c632",level:4},{value:"Unassign role from account",id:"e99b9d5473494b51b34730686f4d8e1a",level:4},{value:"Blacklist permission for account",id:"b17783c615fe489f9a6550edb1bcc84f",level:4},{value:"Remove blacklisted permission from account",id:"7c12a8e15a03468d87431ea5d4468b3d",level:4},{value:"Whitelist permission for account",id:"1074bc39423844269d35aded62d9f3b4",level:4},{value:"Remove whitelisted permission from account",id:"dc2d828fb55e44dd88188df10db25cf1",level:4},{value:"Create role",id:"a5fc56bdaaf2483187994e6efcae14f5",level:4},{value:"Remove role",id:"539e8162fe6a4eb6833a3e99172225c5",level:4},{value:"Whitelist permission for role",id:"6ecd24fdd2934c9c8c163afea00da82d",level:4},{value:"Remove whitelisted permission from role",id:"1b6b5015b7d34dfb8779e5f3752c56fb",level:4},{value:"Blacklist permission for role",id:"e6cd57ceb5544e7c948187a8ce51b704",level:4},{value:"Remove blacklisted permission from role",id:"6cff372affa745ef8edbe5525b774a4e",level:4}];function x(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"c77098bc9e8041d3acd7dd398e7ce168",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"KIRA governance system utilizes a combination of Roles & Permissions to create a multi-layered governance structure that enables a diverse range of councilors to participate and contribute to the network's decision-making processes. The system operates with just two rules enabling it to bootstrap and evolve almost any imaginable governance model. The rules state that :"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Only whitelisted actors can execute on-chain actions (submit transactions of a given type)."}),"\n",(0,r.jsx)(s.li,{children:"Whitelisted actors can only execute on-chain actions that they have been given the permission to execute."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"For example, a multicameral system can be created where subsets of councilors specialize in creating and voting on specific subsets of proposals. Alternatively, a separation of power through checks and balances can be implemented, preventing a single governance branch from achieving a privileged position. Overall, the KIRA governance system is designed to be flexible and adaptable, allowing it to constantly improve its efficiency and decentralization without relying on factors such as wealth or stake distribution. This makes it an effective tool for ensuring that network actors are motivated and aligned towards common goals, which is crucial for achieving consensus within the network."}),"\n",(0,r.jsx)(s.h4,{id:"ea6396ff8b684c33be953070bdcf0c51",children:"Permissions"}),"\n",(0,r.jsxs)(s.p,{children:["In KIRA network, every type of transaction that can be sent to SEKAI has a unique permission identifier associated with it and there exist two types of permissions: governance permissions and sudo permissions. Governance permissions allow changes to be made through a governance proposal process, and is always associated with two permissions: proposal creation and voting. Sudo permissions, on the other hand, allow users to make changes directly, bypassing any governance proposal. These permission identifiers can be added to the whitelist or blacklist of an individual KIRA account or a role \u2014 more on this in the following section. If the permission identifier is on the account's whitelist, the account is able to send the corresponding transaction to the blockchain. If the identifier is not on the account's whitelist or is on its blacklist, the account is not able to send the transaction, with the exception of ",(0,r.jsx)(s.code,{children:"MsgSend"}),", and ",(0,r.jsx)(s.code,{children:"MsgMultiSend"})," transactions. For example, if you want to allow a KIRA account to claim a validator seat on the blockchain, you must add the ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," permission to its whitelist. Only then will the account be able to use the ",(0,r.jsx)(s.code,{children:"claim-validator-seat"})," CLI command to send the ",(0,r.jsx)(s.code,{children:"MsgClaimValidator"})," transaction."]}),"\n",(0,r.jsx)(s.h4,{id:"f7f0069d7e1946fdb56c457decd61991",children:"Roles"}),"\n",(0,r.jsxs)(s.p,{children:["To make it easier to manage hundreds of different permissions, KIRA uses a concept of roles. A role is a collection of permissions that can be associated to a specific KIRA address. This allows the network to manage the permissions of all addresses associated with a role at once, rather than having to change permissions for each individual address. Each permission assigned to a role or individual address can have its own defined parameters, which can be used as input for the function that is triggered when a network actor submits a particular type of transaction. These parameters allow for more granular control of permissions, ensuring that the responsibilities and power of individual network actors can vary widely within the governance model. If the permissions associated with a role are changed, the permissions of all accounts that have been assigned that role will also be changed. Roles can be assigned either by a group of governance members with the appropriate permissions ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," and ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"}),", or by a sudo member ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),"\n",(0,r.jsx)(s.h4,{id:"52640fd598564b83a8e9fb3cdfce60fb",children:"Role & account permission conflicts"}),"\n",(0,r.jsx)(s.p,{children:"Permissions in the KIRA governance system can be managed at both account and role levels, each with separate whitelists and blacklists. Within the same type (account or role), a permission cannot be present on both the whitelist and the blacklist. In other words, if a permission is on a role's blacklist, it cannot be added to the role's whitelist, and vice versa. The same rule applies to account whitelists and blacklists."}),"\n",(0,r.jsx)(s.p,{children:"It is important to note that conflicting permissions between account and role levels are possible. In cases where conflicts arise between an account's and a role's whitelists and blacklists, the blacklisted permissions always take precedence. This means that if a permission is blacklisted at either the account or role level, the user will be denied that permission, regardless of any whitelists."}),"\n",(0,r.jsx)(s.admonition,{type:"tip",children:(0,r.jsxs)(s.p,{children:["Suppose a user has permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," whitelisted on their account and is also assigned to a role that has permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," blacklisted. In this case, the user will be denied permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"}),", as the blacklisted permission takes precedence over the whitelisted permission."]})}),"\n",(0,r.jsx)(s.h2,{id:"7a84ff7ef7da4a5788f659d6e6b40ef9",children:"Parameters"}),"\n",(0,r.jsx)(s.h4,{id:"a516249604cb46369b786e5027ea2e21",children:"Permissions"}),"\n",(0,r.jsxs)(s.p,{children:["Existing permissions and their correspond types and identifiers are listed ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/permission.proto",children:"here"}),", or in the following page:"]}),"\n",(0,r.jsx)(s.h4,{id:"7e46e604d88f4bf5a973278b7a07fc98",children:"Roles"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"TYPE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"EXAMPLE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"id"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1"})}),(0,r.jsx)(s.td,{children:"Identification number of the role - auto assigned"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"sid"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some name"})}),(0,r.jsx)(s.td,{children:"Unique identification name of the role"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some text"})}),(0,r.jsx)(s.td,{children:"Description of the role"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"20129a3a61f14bba9861c2ce8a335580",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"6956f08df3304390b41be91ffec19717",children:"Transactions"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"role create role"})}),(0,r.jsx)(s.th,{children:"Create a new role with permissions."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role assign"})}),(0,r.jsx)(s.td,{children:"Assign a role to an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role unassign role"})}),(0,r.jsx)(s.td,{children:"Remove a role from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Blacklist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Remove a whitelisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Remove a blacklisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Whitelist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission whitelist"})}),(0,r.jsx)(s.td,{children:"Assign a permission to an account's whitelist."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission blacklist"})}),(0,r.jsx)(s.td,{children:"Assign a permission to an account's blacklist."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission remove-whitelisted"})}),(0,r.jsx)(s.td,{children:"Remove a whitelisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission remove-blacklisted"})}),(0,r.jsx)(s.td,{children:"Remove a blacklisted permission from an account."})]})]})]}),(0,r.jsx)(s.h4,{id:"05f8eb77251f4664b5db97fd10c85434",children:"Create role"}),(0,r.jsxs)(s.p,{children:["Create a new role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"create"})," command followed by the role's unique identifier ",(0,r.jsx)(s.code,{children:"$ROLE_SID"})," and a description ",(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Variables"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": Unique string identifier for the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": A brief description of the role."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role create role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,r.jsx)(s.h4,{id:"de3cc4eb44cc480f9f85d2613a052e2c",children:"Assign role"}),(0,r.jsxs)(s.p,{children:["Assign a role with sudo permissions to an account using the ",(0,r.jsx)(s.code,{children:"assign"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be assigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address to which the role will be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role assign \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,r.jsx)(s.h4,{id:"86664c10b2854fcea46b0fc465fc7133",children:"Remove role"}),(0,r.jsxs)(s.p,{children:["Remove a role with sudo permissions from an account using the ",(0,r.jsx)(s.code,{children:"remove role"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be removed."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address from which the role will be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,r.jsx)(s.h4,{id:"9412158de9b64d889bcb9957f4c9d8a2",children:"Whitelist role permission"}),(0,r.jsxs)(s.p,{children:["Whitelist a permission to a role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"whitelist-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be whitelisted."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"dd9cce6cffdb4b06b89242b13892d8ee",children:"Blacklist role\u2019s permission"}),(0,r.jsxs)(s.p,{children:["Blacklist a permission for a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"blacklist-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be blacklisted."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"08639ca85c164ac4bd0c035bfe232a9f",children:"Remove role\u2019s whitelisted permission"}),(0,r.jsxs)(s.p,{children:["Remove a whitelisted permission from a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the whitelisted permission to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"41e4a72abd5349489db98323b5ba9d73",children:"Remove role\u2019s blacklisted permission"}),(0,r.jsxs)(s.p,{children:["Remove a blacklisted permission from a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the blacklisted permission to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"806238882b114b9b818e6a4b93ae3dee",children:"Whitelist account permission"}),(0,r.jsxs)(s.p,{children:["Assign permission to a Kira address whitelist with sudo permissions using the ",(0,r.jsx)(s.code,{children:"whitelist"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission whitelist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"73c6b6b57b1e40d19dd9b4b091a2ac10",children:"Remove account whitelisted permission"}),(0,r.jsxs)(s.p,{children:["Remove whitelisted permission from an address with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-whitelisted"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-whitelisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"7e6f13bfe51a44f4a2d1125572528767",children:"Blacklist account\u2019s permission"}),(0,r.jsxs)(s.p,{children:["Assign permission to a Kira account blacklist with sudo permissions using the ",(0,r.jsx)(s.code,{children:"blacklist"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission blacklist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"c254a608b08b401b98a80afa5c721cbf",children:"Remove account\u2019s blacklisted permissions"}),(0,r.jsxs)(s.p,{children:["Remove blacklisted permission from an address with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-blacklisted"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-blacklisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})})]}),(0,r.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(s.h2,{id:"d4546bd70d5747b0b56c7b5a5f90ba05",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"permissions"})}),(0,r.jsx)(s.th,{children:"Query permissions of a specific KIRA address."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"whitelisted-permission-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a whitelisted permission."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"blacklisted-permission-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a blacklisted permission."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"all-roles"})}),(0,r.jsx)(s.td,{children:"Query all registered roles in the KIRA network."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"roles"})}),(0,r.jsx)(s.td,{children:"Query roles assigned to a specific KIRA address."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role"})}),(0,r.jsx)(s.td,{children:"Query information about a role using its Service Identifier (SID)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"whitelisted-role-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a whitelisted role."})]})]})]}),(0,r.jsx)(s.h4,{id:"1018f8a098ca4fc9891ecaffe65b0339",children:"Query address permissions"}),(0,r.jsxs)(s.p,{children:["Retrieve the permissions associated with a specific KIRA address using the ",(0,r.jsx)(s.code,{children:"permissions"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDR"}),": The address whose permissions are to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov permissions $ADDR $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"d64eae3fd3ce4145a744034780ddc81a",children:"Query addresses by whitelisted permission"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific whitelisted permission using the ",(0,r.jsx)(s.code,{children:"whitelisted-permission-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERM"}),": The whitelisted permission value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"ec0852ec6a0a40a787bd2e8a8836a769",children:"Query addresses by blacklisted permission"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific blacklisted permission using the ",(0,r.jsx)(s.code,{children:"blacklisted-permission-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERM"}),": The blacklisted permission value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov blacklisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"848cd8553b3944c9bc4cf25bb3bd85b2",children:"Query all registered roles"}),(0,r.jsxs)(s.p,{children:["Retrieve a list of all registered roles in the KIRA network using the ",(0,r.jsx)(s.code,{children:"all-roles"})," command."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov all-roles $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"a719c37b64024561a35c9ad33b079087",children:"Query roles assigned to an address"}),(0,r.jsxs)(s.p,{children:["Retrieve the roles assigned to a specific KIRA address using the ",(0,r.jsx)(s.code,{children:"roles"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDR"}),": The address whose roles are to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov roles $ADDR $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"77f5556c25ce49bb873b2fccd2a75877",children:"Query role by sid"}),(0,r.jsxs)(s.p,{children:["Retrieve information about a specific role using its SID (Service Identifier) with the ",(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"role"})})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_IDENTIFIER"}),": The SID of the role to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov role $ROLE_IDENTIFIER $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"ff2f390f256f426494b137a77239437f",children:"Query addresses by whitelisted role"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses associated with a specific whitelisted role using the ",(0,r.jsx)(s.code,{children:"whitelisted-role-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE"}),": The whitelisted role value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-role-addresses $ROLE $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"f8617dce42da4177a1015785d162b8d0",children:"Governance"}),(0,r.jsxs)(s.p,{children:["To assign governance permissions, a group of governance members must submit and vote a proposal using ",(0,r.jsx)(s.code,{children:"whitelist-permission"})," with the appropriate proposal creation permission 4 and voting permission 5. Sudo permissions can be assigned by an account which has the permission 1."]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposal account assign-role"})}),(0,r.jsx)(s.th,{children:"Proposal to assign a role to an address."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account unassign-role"})}),(0,r.jsx)(s.td,{children:"Proposal to unassign a role from an address."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to blacklist a permission for an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to whitelist a permission for an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role create"})}),(0,r.jsx)(s.td,{children:"Proposal to create a new role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove"})}),(0,r.jsx)(s.td,{children:"Proposal to remove an existing role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to whitelist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to blacklist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from a role."})]})]})]}),(0,r.jsx)(s.h4,{id:"2cba8bc4ac50409f9af216999523c632",children:"Assign role to account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"assign-role"}),", is utilized to create a proposal for assigning a role to an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be assigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address to which the role will be assigned. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account assign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"e99b9d5473494b51b34730686f4d8e1a",children:"Unassign role from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"unassign-role"}),", creates a proposal for unassigning a role from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be unassigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the role will be unassigned. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account unassign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"b17783c615fe489f9a6550edb1bcc84f",children:"Blacklist permission for account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"blacklist-permission"}),", is for creating a proposal to blacklist a specific permission for an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"7c12a8e15a03468d87431ea5d4468b3d",children:"Remove blacklisted permission from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the blacklisted permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the blacklisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"1074bc39423844269d35aded62d9f3b4",children:"Whitelist permission for account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"whitelist-permission"}),", is used for creating a proposal to whitelist a specific permission for an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"dc2d828fb55e44dd88188df10db25cf1",children:"Remove whitelisted permission from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the whitelisted permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the whitelisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal account remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"a5fc56bdaaf2483187994e6efcae14f5",children:"Create role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"create"}),", is for raising a governance proposal to create a new role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the new role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": The description of the new role."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$WHITELIST_PERMS"}),": A comma-separated list of permission IDs to be whitelisted for the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$BLACKLIST_PERMS"}),": A comma-separated list of permission IDs to be blacklisted for the role."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--whitelist-perms=$WHITELIST_PERMS \\\n--blacklist-perms=$BLACKLIST_PERMS \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,r.jsx)(s.h4,{id:"539e8162fe6a4eb6833a3e99172225c5",children:"Remove role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove"}),", raises a governance proposal for removing an existing role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be removed."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"6ecd24fdd2934c9c8c163afea00da82d",children:"Whitelist permission for role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"whitelist-permission"}),", is for whitelisting permissions for a specific role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"1b6b5015b7d34dfb8779e5f3752c56fb",children:"Remove whitelisted permission from role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from a role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"e6cd57ceb5544e7c948187a8ce51b704",children:"Blacklist permission for role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"blacklist-permission"}),", is for blacklisting permissions for a specific role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"6cff372affa745ef8edbe5525b774a4e",children:"Remove blacklisted permission from role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from a role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})})]})]})]})}function j(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}},5162:(e,s,i)=>{i.d(s,{Z:()=>d});i(7294);var r=i(6905);const n={tabItem:"tabItem_Ymn6"};var l=i(5893);function d(e){let{children:s,hidden:i,className:d}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,d),hidden:i,children:s})}},4866:(e,s,i)=>{i.d(s,{Z:()=>S});var r=i(7294),n=i(6905),l=i(2466),d=i(6550),o=i(469),c=i(1980),t=i(7392),a=i(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:i}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:i,attributes:r,default:n}}=e;return{value:s,label:i,attributes:r,default:n}}))}(i);return function(e){const s=(0,t.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,i])}function j(e){let{value:s,tabValues:i}=e;return i.some((e=>e.value===s))}function m(e){let{queryString:s=!1,groupId:i}=e;const n=(0,d.k6)(),l=function(e){let{queryString:s=!1,groupId:i}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:s,groupId:i});return[(0,c._X)(l),(0,r.useCallback)((e=>{if(!l)return;const s=new URLSearchParams(n.location.search);s.set(l,e),n.replace({...n.location,search:s.toString()})}),[l,n])]}function p(e){const{defaultValue:s,queryString:i=!1,groupId:n}=e,l=x(e),[d,c]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=i.find((e=>e.default))??i[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:l}))),[t,h]=m({queryString:i,groupId:n}),[p,u]=function(e){let{groupId:s}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(s),[n,l]=(0,a.Nk)(i);return[n,(0,r.useCallback)((e=>{i&&l.set(e)}),[i,l])]}({groupId:n}),b=(()=>{const e=t??p;return j({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{b&&c(b)}),[b]);return{selectedValue:d,selectValue:(0,r.useCallback)((e=>{if(!j({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),u(e)}),[h,u,l]),tabValues:l}}var u=i(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=i(5893);function g(e){let{className:s,block:i,selectedValue:r,selectValue:d,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:t}=(0,l.o5)(),a=e=>{const s=e.currentTarget,i=c.indexOf(s),n=o[i].value;n!==r&&(t(s),d(n))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;s=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;s=c[i]??c[c.length-1];break}}s?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":i},s),children:o.map((e=>{let{value:s,label:i,attributes:l}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>c.push(e),onKeyDown:h,onClick:a,...l,className:(0,n.Z)("tabs__item",b.tabItem,l?.className,{"tabs__item--active":r===s}),children:i??s},s)}))})}function I(e){let{lazy:s,children:i,selectedValue:n}=e;const l=(Array.isArray(i)?i:[i]).filter(Boolean);if(s){const e=l.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:l.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==n})))})}function v(e){const s=p(e);return(0,f.jsxs)("div",{className:(0,n.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(g,{...e,...s}),(0,f.jsx)(I,{...e,...s})]})}function S(e){const s=(0,u.Z)();return(0,f.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>d});var r=i(7294);const n={},l=r.createContext(n);function d(e){const s=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),r.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/718e434a.21c89276.js b/assets/js/718e434a.21c89276.js deleted file mode 100644 index b4d1bdf..0000000 --- a/assets/js/718e434a.21c89276.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9734],{6826:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var s=t(5893),r=t(1151);t(4866),t(5162);const a={title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},i=void 0,o={id:"Stack/SEKAI--Backend/Command-Line-Interface",title:"Command Line Interface",description:"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: KIRA Network CLI Status.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Command-Line-Interface.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},sidebar:"defaultSidebar",previous:{title:"Configuration",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},next:{title:"Multistaking",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"}},d={},c=[{value:"Commands syntax",id:"e4a1051b836c4dde8929033559feaba1",level:3},{value:"Flags configuration",id:"9aced983c64b4b898302f62c5b06bd78",level:3},{value:"List of flags",id:"17069fece0de4a84bb83b7e16b9a6dba",level:4}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what's currently functional along with examples and additional information: ",(0,s.jsx)(n.a,{href:"https://github.com/MrLutik/kira2.0/blob/master/docs/sekai.md",children:"KIRA Network CLI Status"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"e4a1051b836c4dde8929033559feaba1",children:"Commands syntax"}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI provides a command-line interface (CLI) that enables users to interact with its modules. Using the CLI, users can create, sign, and submit ",(0,s.jsx)(n.code,{children:"Msg"})," transactions, as well as query the blockchain's state and node information. Each module has its own set of CLI commands, which can be accessed through the main CLI entrypoint ",(0,s.jsx)(n.code,{children:"sekaid"}),". These commands fall into two categories: transactions ",(0,s.jsx)(n.code,{children:"tx"}),", which require signing, and queries ",(0,s.jsx)(n.code,{children:"query"}),", which do not. To create a transaction using the CLI, users need to specify the transaction command, as well as any required arguments and flags. For more information on the available commands for a specific module, users can refer to the module's documentation or use the ",(0,s.jsx)(n.code,{children:"--help"})," flag. For example, to see all available CLI commands for bank module, users can run ",(0,s.jsx)(n.code,{children:"sekaid tx bank --help"})," for transactions or ",(0,s.jsx)(n.code,{children:"sekaid query bank --help"})," for queries."]}),"\n",(0,s.jsx)(n.p,{children:"For example, to send tokens from one account to another, users can run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx bank send $from_key_or_address $to_address $amount --chain-id=$NETWORK_NAME --home=$SEKAID_HOME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json.\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To query the blockchain state or node information, users can use the ",(0,s.jsx)(n.code,{children:"query"})," command followed by the relevant subcommand and arguments. For example, to query the balance of an account, users can run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query bank balance $address --home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"$NETWORK_NAME"})," and ",(0,s.jsx)(n.code,{children:"$SEKAID_HOME"})," env variables should have been set up during ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66",children:"SEKAI installation"})," process and all other flags can be set as env variable. More on this in the section below."]})}),"\n",(0,s.jsx)(n.h3,{id:"9aced983c64b4b898302f62c5b06bd78",children:"Flags configuration"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Some flags may be required by specific CLIs."})}),"\n",(0,s.jsxs)(n.p,{children:["SEKAI CLIs offers a range of flags that can be used to customize the behavior of commands and gather additional information from the transaction signer, such as the amount of ",(0,s.jsx)(n.code,{children:"--fees"})," the user is willing to pay. Some common flags include ",(0,s.jsx)(n.code,{children:"--home"}),", which allows users to specify the location of the data directory, and ",(0,s.jsx)(n.code,{children:"--chain-id"}),", which allows users to specify the chain ID. Additionally, users can specify the keys storage backend with ",(0,s.jsx)(n.code,{children:"--keyring-backend"}),". A full list of available flags can be below or accessed using the ",(0,s.jsx)(n.code,{children:"--help"})," flag with the relevant CLI."]}),"\n",(0,s.jsxs)(n.p,{children:["To streamline the process of specifying flags for transactions, users can use the ",(0,s.jsx)(n.code,{children:"bash-utils"})," tool developed by KIRA. This tool, which has been installed alongside SEKAID, allows users to easily set environment variables for common flags and load them as needed. For example, to set common flags for transactions on the testnet (such as ",(0,s.jsx)(n.code,{children:"--keyring-backend=test"}),"), users can add the following environment variable:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_TX "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --fees=100ukex --keyring-backend=test --yes --broadcast-mode=block --log_format=json --output=json"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Similar to transactions, users can also set environment variables for common flags used in queries. For example, to set common flags for queries, users can add the following environment variable:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv FLAGS_QR "--home=$SEKAID_HOME --chain-id=$NETWORK_NAME --output=json"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["To use those newly created environment variables, simply call the ",(0,s.jsx)(n.code,{children:"loadGlobEnvs"})," function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"loadGlobEnvs\n"})}),"\n",(0,s.jsx)(n.h4,{id:"17069fece0de4a84bb83b7e16b9a6dba",children:"List of flags"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"FLAG"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DEFAULT"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--output"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:'"json"'})}),(0,s.jsxs)(n.td,{children:["Output format (",(0,s.jsx)(n.code,{children:"text"})," or ",(0,s.jsx)(n.code,{children:"json"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-dir"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"The client Keyring directory; if omitted, the default 'home' directory will be used"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--from"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Name or address of private key with which to sign the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--account-number"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The account number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sequence"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"The sequence number of the signing account (offline mode only)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--note"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Note to add a description to the transaction (previously ",(0,s.jsx)(n.code,{children:"--memo"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fees"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Fees to pay along with transaction; eg: ",(0,s.jsx)(n.code,{children:"10ukex"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-prices"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Gas prices in decimal format to determine the transaction fee (e.g. ",(0,s.jsx)(n.code,{children:"0.1ukex"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--node"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tcp://localhost:26657"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:":"})," to tendermint rpc interface for this chain"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--ledger"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Use a connected Ledger device"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas-adjustment"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultGasAdjustment"})}),(0,s.jsx)(n.td,{children:"adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--broadcast-mode"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"BroadcastSync"})}),(0,s.jsxs)(n.td,{children:["Transaction broadcasting mode (",(0,s.jsx)(n.code,{children:"sync"})," or ",(0,s.jsx)(n.code,{children:"async"})," or ",(0,s.jsx)(n.code,{children:"block"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--dry-run"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsxs)(n.td,{children:["ignore the ",(0,s.jsx)(n.code,{children:"--gas"})," flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--generate-only"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--offline"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Offline mode (does not allow any online functionality)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--yes"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Skip tx broadcasting prompt confirmation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--keyring-backend"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"DefaultKeyringBackend"})}),(0,s.jsxs)(n.td,{children:["Select keyring's backend (",(0,s.jsx)(n.code,{children:"os"})," or ",(0,s.jsx)(n.code,{children:"file"})," or ",(0,s.jsx)(n.code,{children:"kwallet"})," or ",(0,s.jsx)(n.code,{children:"pass"})," or ",(0,s.jsx)(n.code,{children:"test"})," or ",(0,s.jsx)(n.code,{children:"memory"}),")"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--sign-mode"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Choose sign mode (",(0,s.jsx)(n.code,{children:"direct"})," or ",(0,s.jsx)(n.code,{children:"amino-json"})," or ",(0,s.jsx)(n.code,{children:"direct-aux"}),"), this is an advanced feature"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--timeout-height"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsx)(n.td,{children:"Set a block timeout height to prevent the tx from being committed past a certain height"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-payer"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee payer pays fees for the transaction instead of deducting from the signer"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--fee-granter"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:"Fee granter grants fees for the transaction"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--tip"})}),(0,s.jsx)(n.td,{}),(0,s.jsxs)(n.td,{children:["Tip is the amount that is going to be transferred to the fee payer on the target chain. ",(0,s.jsx)("br",{}),"This flag is only valid when used with ",(0,s.jsx)(n.code,{children:"--aux"}),", and is ignored if the target chain didn't enable the TipDecorator"]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--aux"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})}),(0,s.jsx)(n.td,{children:"Generate aux signer data instead of sending a tx"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"--gas"})}),(0,s.jsx)(n.td,{}),(0,s.jsx)(n.td,{children:'gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically'})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var s=t(6905);const r={tabItem:"tabItem_Ymn6"};var a=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>k});var s=t(7294),r=t(6905),a=t(2466),i=t(6550),o=t(469),d=t(1980),c=t(7392),l=t(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function x(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,d._X)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=u(e),[i,d]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,h]=f({queryString:t,groupId:r}),[j,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(t);return[r,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),b=(()=>{const e=c??j;return x({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{b&&d(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),m(e)}),[h,m,a]),tabValues:a}}var m=t(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function p(e){let{className:n,block:t,selectedValue:s,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),l=e=>{const n=e.currentTarget,t=d.indexOf(n),r=o[t].value;r!==s&&(c(n),i(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",b.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:r}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(p,{...e,...n}),(0,g.jsx)(y,{...e,...n})]})}function k(e){const n=(0,m.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var s=t(7294);const r={},a=s.createContext(r);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7783007d.673d8830.js b/assets/js/7783007d.673d8830.js new file mode 100644 index 0000000..184e05e --- /dev/null +++ b/assets/js/7783007d.673d8830.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8551],{8791:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var a=n(5893),i=n(1151);n(4866),n(5162);const r={title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},s=void 0,o={id:"KIRA\u2019s-Economics/Initial-Liquidity-Offering",title:"Initial Liquidity Offering",description:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.",source:"@site/tabs/learn/KIRA\u2019s-Economics/Initial-Liquidity-Offering.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},sidebar:"defaultSidebar",previous:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},next:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3"}},l={},d=[];function u(e){const t={li:"li",ol:"ol",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success."}),"\n",(0,a.jsx)(t.p,{children:"The ILO procedure is as follows:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"dApp deployer creates a governance proposal for app submission."}),"\n",(0,a.jsx)(t.li,{children:"The minimum dApp bond must be committed within the proposal duration, set to 7 days by default. This value is set to 1,000,000 KEX by default."}),"\n",(0,a.jsx)(t.li,{children:"For the proposal to pass, 1% of the minimum dApp bond must be committed by the dApp deployer before 7 days have elapsed. The remaining 99% of the bond can be supplied by any other users."}),"\n",(0,a.jsx)(t.li,{children:"If the bonding conditions cannot be satisfied, all participants are refunded - otherwise, the dApp can be launched."}),"\n",(0,a.jsx)(t.li,{children:"Once the dApp has launched, dApp tokens representing stakeholders\u2019 ownership of the dApp are minted according to the token supply specified in the app proposal. They are then paired with all the bonded KEX in a v2 Uniswap-style AMM pool defined by a simple x*y=k bonding curve."}),"\n",(0,a.jsx)(t.li,{children:"A spending pool is created for users who have bonded KEX. They are eligible to claim LP tokens from the spending pool, proportional to their respective bonded amounts. Depending on the dApp proposal, these LP tokens may be immediately claimable or progressively unlocked over time."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To make all classical forms of raising capital and launching dApps possible, KIRA allows for dApp proposals to define whether additional tokens may be issued during and/or after the dApp launch by the dApp deployer. These are referred to as premint and postmint. The unlock rate of the spending pool is also defined by the dApp proposal."}),"\n",(0,a.jsx)(t.p,{children:"Here are a few examples of ways in which these configurable parameters can be used:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Fair Launch - no extra tokens may be issued and all LP coins are immediately unlocked. As an example use case, a lone developer creating a public good dApp might employ this parameter configuration, as the application will not need future emissions to incentivize users. It could also be used by applications funded by the KIRA treasury."}),"\n",(0,a.jsx)(t.li,{children:"User-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens. The premint allowance is set to a small reasonable amount while the postmint function is not used. As an example use case, a small team that needs to hire a few developers could configure their token emissions like this. This would allow them to establish a token treasury and sell their stake to users that are locked in the LP."}),"\n",(0,a.jsx)(t.li,{children:"Investor-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens; premint and postmint have allowances. As an example use case, a large-scale project with more complexity could configure its emissions like this. Premint and postmint would enable the creation of treasury and sale of SAFT agreements. The time when these investor tokens would be issued during the \u201cpostmint\u201d event could be clearly defined. An address for postminted tokens could be set up by the dApp deployer as a vesting mechanism to easily distribute tokens to their rightful owners as well as configure an optional \u201cdrip\u201d for the postmint if needed, so as to not damage investor confidence with an immediate increase of the token supply."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To align ILO participants' incentives with the dApp's success, a minimum threshold is defined for the amount of KEX collateral in the pool, set to 100,000 KEX by default. If the KEX collateral in the pool falls below this threshold, the dApp will enter a depreciation phase, set to around 28 days by default, after which dApp execution will be halted."}),"\n",(0,a.jsxs)(t.p,{children:["To make it worthwhile for validators to execute the dApp code, the dApp LP pool is utilized to create those incentives. Any swaps, deposits, and redemptions will incur a fee that is configurable by governance. The fixed fee will be applied after the swap from where 50% of the corresponding tokens must be burned (deminted), 25% given as a reward to liquidity providers and the remaining 25% will be split between ",(0,a.jsx)("u",{children:"active"})," dApp executors, and verifiers (fishermen). This way pool can provide immediate incentives to the operators and LP providers. Additionally, the premint and postmint tokens can be used to incentivize operators before dApp starts to generate revenue."]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var r=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),i=n(6905),r=n(2466),s=n(6550),o=n(469),l=n(1980),d=n(7392),u=n(12);function c(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return c(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,r=p(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[d,c]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:i}),g=(()=>{const e=d??m;return h({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),c(e),b(e)}),[c,b,r]),tabValues:r}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=o[n].value;i!==a&&(d(t),s(i))},c=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:c,onClick:u,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:c(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>s});var a=n(7294);const i={},r=a.createContext(i);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a834501.195aabed.js b/assets/js/7a834501.195aabed.js deleted file mode 100644 index dff5d1c..0000000 --- a/assets/js/7a834501.195aabed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2119],{6334:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=t(5893),a=t(1151),r=t(4866),i=t(5162);const c={title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},l=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Data-Registry",title:"Data Registry",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Data-Registry.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},sidebar:"defaultSidebar",previous:{title:"Identity Registrar",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92"},next:{title:"Poor Network Conditions",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d"}},o={},h=[{value:"Concept",id:"9a52cc45f0bf457e85fdaedef9706fa6",level:2},{value:"Code of conduct",id:"aee73893689d4ce6a84e3b3216c48610",level:3},{value:"Parameters",id:"6495b76427444740ba614d6beacf29bc",level:2},{value:"Cli syntax & examples",id:"aa1f125af47f4ab7886fd90029d3380c",level:2},{value:"Transactions",id:"cc4eddd5aac24ddb9729522a78cf8320",level:2},{value:"Queries",id:"798c5d84060149699bbef79082f10ee0",level:2},{value:"Query all keys",id:"281888dffb9e4bc28f293e3f95c9ce67",level:4},{value:"Query data by key",id:"9abdf7548d2343979a7f7ad7a714d03f",level:4},{value:"Governance",id:"ef81400b9e8b406d93ba0411684f97f8",level:2},{value:"Create or edit a data registrey key",id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",level:4}];function u(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mo:"mo",mrow:"mrow",msup:"msup",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"9a52cc45f0bf457e85fdaedef9706fa6",children:"Concept"}),"\n",(0,n.jsxs)(s.p,{children:["The Data Registry is a curated data reference storage under governance. Its primary role is to sidestep the constraints of on-chain storage by providing references to external data resources, like those found on IPFS or GitHub. By doing so, the Data Registry ensures that large files or extended data sequences aren't directly stored on-chain. Instead, it archives external URLs, metalinks, and various distributed references. A pivotal aspect of the Data Registry is its ability to vouch for the authenticity and integrity of the external data. This is achieved via on-chain checksums, bolstering trustworthiness by verifying the consistency of hosted data. Furthermore, the Data Registry enriches the stored references by supplying supplementary information, including file size and encoding. Akin to how the ",(0,n.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," assures the legitimacy and uniqueness of user identities, the Data Registry offers a secure, reliable bridge between the on-chain network and the vast external data world."]}),"\n",(0,n.jsx)(s.h3,{id:"aee73893689d4ce6a84e3b3216c48610",children:"Code of conduct"}),"\n",(0,n.jsxs)(s.p,{children:["An integral property of the Data Registry is the ",(0,n.jsx)(s.code,{children:"code_of_conduct"}),". This can be perceived as the Service-layer Agreement bridging network governance and its users. This off-chain text serves as a guiding beacon, delineating the expected conduct of network participants. In essence, it acts as the network's constitution, providing insights and guidelines to users and incoming governance members alike."]}),"\n",(0,n.jsx)(s.h2,{id:"6495b76427444740ba614d6beacf29bc",children:"Parameters"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"NAME"}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"TYPE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"EXAMPLE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"key"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"doc1"})}),(0,n.jsx)(s.td,{children:"The identifier for the stored property."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"reference"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ipfs://QmYw..."})}),(0,n.jsx)(s.td,{children:"The URL or metalink directing to the externally hosted file."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"encoding"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"markdown"})}),(0,n.jsx)(s.td,{children:"Specifies the file's encoding type."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"hash"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"e3b0c442..."})}),(0,n.jsx)(s.td,{children:"The SHA256 checksum, ensuring the file's authenticity."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"size"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"uint64"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"1024"})}),(0,n.jsx)(s.td,{children:"Denotes the file size in Bytes."})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"aa1f125af47f4ab7886fd90029d3380c",children:"Cli syntax & examples"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(s.em,{children:"documentation for more details."})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$SIGNER"})})," ",(0,n.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(s.em,{children:"and"})," ",(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(s.em,{children:"section"})]})}),"\n",(0,n.jsxs)(r.Z,{children:[(0,n.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(s.h2,{id:"cc4eddd5aac24ddb9729522a78cf8320",children:"Transactions"}),(0,n.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,n.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(s.h2,{id:"798c5d84060149699bbef79082f10ee0",children:"Queries"}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"data-registry-keys"})}),(0,n.jsx)(s.th,{children:"Retrieve a list of all keys in the Data Registry."})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"data-registry"})}),(0,n.jsx)(s.td,{children:"Retrieve data associated with a specific key."})]})})]}),(0,n.jsx)(s.h4,{id:"281888dffb9e4bc28f293e3f95c9ce67",children:"Query all keys"}),(0,n.jsxs)(s.p,{children:["Retrieve a list of all keys in the Data Registry using the ",(0,n.jsx)(s.code,{children:"data-registry-keys"})," command."]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'sekaid query customgov data-registry-keys --page-key=100000 $FLAGS_QR | jq ".keys"\n'})}),(0,n.jsx)(s.h4,{id:"9abdf7548d2343979a7f7ad7a714d03f",children:"Query data by key"}),(0,n.jsxs)(s.p,{children:["Retrieve data associated with a specific key using the ",(0,n.jsx)(s.code,{children:"data-registry"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"$"})}),(0,n.jsx)(s.code,{children:"KEY"}),": The key whose data is to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov data-registry $KEY $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(s.h2,{id:"ef81400b9e8b406d93ba0411684f97f8",children:"Governance"}),(0,n.jsx)(s.table,{children:(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"upsert-data-registry"})}),(0,n.jsx)(s.th,{children:"Create a proposal for adding or updating a key in the Data Registry."})]})})}),(0,n.jsx)(s.h4,{id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",children:"Create or edit a data registrey key"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"upsert-data-registry"}),", is utilized to create a proposal for adding or updating a key in the Data Registry. The command accepts the following arguments and flags:"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$KEY"}),": The key intended to be upserted in the Data Registry."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$CHECKSUM"}),": The checksum corresponding to the data associated with the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$VALUE"}),": The value tied to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$FILETYPE"}),": Specifies the type of the file or data that's related to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$SIZE"}),": The size of the file or data linked to the key."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. Typically in the form \"Upserting Data Registry key '$KEY'\"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, often described as \"Assign value '",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"V"}),(0,n.jsx)(s.mi,{children:"A"}),(0,n.jsx)(s.mi,{children:"L"}),(0,n.jsx)(s.mi,{children:"U"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"E"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"o"}),(0,n.jsx)(s.mi,{children:"k"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"VALUE' to key '"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.9463em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"LU"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]})]})})]}),"KEY'\"."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'sekaid tx customgov proposal upsert-data-registry \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n "$KEY" "$CHECKSUM" "$VALUE" "$FILETYPE" "$SIZE" \n'})})]})]})]})}function m(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,s,t)=>{t.d(s,{Z:()=>i});t(7294);var n=t(6905);const a={tabItem:"tabItem_Ymn6"};var r=t(5893);function i(e){let{children:s,hidden:t,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:t,children:s})}},4866:(e,s,t)=>{t.d(s,{Z:()=>k});var n=t(7294),a=t(6905),r=t(2466),i=t(6550),c=t(469),l=t(1980),d=t(7392),o=t(12);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:t}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:t,attributes:n,default:a}}=e;return{value:s,label:t,attributes:n,default:a}}))}(t);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,t])}function m(e){let{value:s,tabValues:t}=e;return t.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:t}=e;const a=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:t}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:s,groupId:t});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(a.location.search);s.set(r,e),a.replace({...a.location,search:s.toString()})}),[r,a])]}function j(e){const{defaultValue:s,queryString:t=!1,groupId:a}=e,r=u(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!m({value:s,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[d,h]=x({queryString:t,groupId:a}),[j,p]=function(e){let{groupId:s}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,r]=(0,o.Nk)(t);return[a,(0,n.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:a}),f=(()=>{const e=d??j;return m({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=t(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function b(e){let{className:s,block:t,selectedValue:n,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),o=e=>{const s=e.currentTarget,t=l.indexOf(s),a=c[t].value;a!==n&&(d(s),i(a))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;s=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;s=l[t]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},s),children:c.map((e=>{let{value:s,label:t,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>l.push(e),onKeyDown:h,onClick:o,...r,className:(0,a.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":n===s}),children:t??s},s)}))})}function y(e){let{lazy:s,children:t,selectedValue:a}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(y,{...e,...s})]})}function k(e){const s=(0,p.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,t)=>{t.d(s,{Z:()=>c,a:()=>i});var n=t(7294);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a834501.687a6624.js b/assets/js/7a834501.687a6624.js new file mode 100644 index 0000000..b4e9481 --- /dev/null +++ b/assets/js/7a834501.687a6624.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2119],{6334:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=t(5893),a=t(1151),r=t(4866),i=t(5162);const c={title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},l=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Data-Registry",title:"Data Registry",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Data-Registry.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",permalink:"/docs.kira.network/docs/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Data Registry",sidebar_position:8,slug:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},sidebar:"defaultSidebar",previous:{title:"Identity Registrar",permalink:"/docs.kira.network/docs/d482180d-165a-4c09-8c32-167f061ceb92"},next:{title:"Poor Network Conditions",permalink:"/docs.kira.network/docs/65e3e6fe-040a-4716-b13b-9e27def6ff9d"}},o={},h=[{value:"Concept",id:"9a52cc45f0bf457e85fdaedef9706fa6",level:2},{value:"Code of Conduct",id:"aee73893689d4ce6a84e3b3216c48610",level:3},{value:"Parameters",id:"6495b76427444740ba614d6beacf29bc",level:2},{value:"Cli Syntax & Examples",id:"aa1f125af47f4ab7886fd90029d3380c",level:2},{value:"Transactions",id:"cc4eddd5aac24ddb9729522a78cf8320",level:2},{value:"Queries",id:"798c5d84060149699bbef79082f10ee0",level:2},{value:"Query All Keys",id:"281888dffb9e4bc28f293e3f95c9ce67",level:4},{value:"Query Data by Key",id:"9abdf7548d2343979a7f7ad7a714d03f",level:4},{value:"Governance",id:"ef81400b9e8b406d93ba0411684f97f8",level:2},{value:"Create or Edit a Data Registrey Key",id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",level:4}];function u(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mo:"mo",mrow:"mrow",msup:"msup",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"9a52cc45f0bf457e85fdaedef9706fa6",children:"Concept"}),"\n",(0,n.jsxs)(s.p,{children:["The Data Registry is a curated data reference storage under governance. Its primary role is to sidestep the constraints of on-chain storage by providing references to external data resources, like those found on IPFS or GitHub. By doing so, the Data Registry ensures that large files or extended data sequences aren't directly stored on-chain. Instead, it archives external URLs, metalinks, and various distributed references. A pivotal aspect of the Data Registry is its ability to vouch for the authenticity and integrity of the external data. This is achieved via on-chain checksums, bolstering trustworthiness by verifying the consistency of hosted data. Furthermore, the Data Registry enriches the stored references by supplying supplementary information, including file size and encoding. Akin to how the ",(0,n.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," assures the legitimacy and uniqueness of user identities, the Data Registry offers a secure, reliable bridge between the on-chain network and the vast external data world."]}),"\n",(0,n.jsx)(s.h3,{id:"aee73893689d4ce6a84e3b3216c48610",children:"Code of Conduct"}),"\n",(0,n.jsxs)(s.p,{children:["An integral property of the Data Registry is the ",(0,n.jsx)(s.code,{children:"code_of_conduct"}),". This can be perceived as the Service-layer Agreement bridging network governance and its users. This off-chain text serves as a guiding beacon, delineating the expected conduct of network participants. In essence, it acts as the network's constitution, providing insights and guidelines to users and incoming governance members alike."]}),"\n",(0,n.jsx)(s.h2,{id:"6495b76427444740ba614d6beacf29bc",children:"Parameters"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"NAME"}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"TYPE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"EXAMPLE"})}),(0,n.jsx)(s.th,{children:(0,n.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"key"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"doc1"})}),(0,n.jsx)(s.td,{children:"The identifier for the stored property."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"reference"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ipfs://QmYw..."})}),(0,n.jsx)(s.td,{children:"The URL or metalink directing to the externally hosted file."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"encoding"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"markdown"})}),(0,n.jsx)(s.td,{children:"Specifies the file's encoding type."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"hash"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"e3b0c442..."})}),(0,n.jsx)(s.td,{children:"The SHA256 checksum, ensuring the file's authenticity."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"size"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"uint64"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"1024"})}),(0,n.jsx)(s.td,{children:"Denotes the file size in Bytes."})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"aa1f125af47f4ab7886fd90029d3380c",children:"Cli Syntax & Examples"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(s.em,{children:"documentation for more details."})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$SIGNER"})})," ",(0,n.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(s.em,{children:(0,n.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(s.em,{children:"and"})," ",(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(s.em,{children:"section"})]})}),"\n",(0,n.jsxs)(r.Z,{children:[(0,n.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(s.h2,{id:"cc4eddd5aac24ddb9729522a78cf8320",children:"Transactions"}),(0,n.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,n.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(s.h2,{id:"798c5d84060149699bbef79082f10ee0",children:"Queries"}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"data-registry-keys"})}),(0,n.jsx)(s.th,{children:"Retrieve a list of all keys in the Data Registry."})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"data-registry"})}),(0,n.jsx)(s.td,{children:"Retrieve data associated with a specific key."})]})})]}),(0,n.jsx)(s.h4,{id:"281888dffb9e4bc28f293e3f95c9ce67",children:"Query All Keys"}),(0,n.jsxs)(s.p,{children:["Retrieve a list of all keys in the Data Registry using the ",(0,n.jsx)(s.code,{children:"data-registry-keys"})," command."]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'sekaid query customgov data-registry-keys --page-key=100000 $FLAGS_QR | jq ".keys"\n'})}),(0,n.jsx)(s.h4,{id:"9abdf7548d2343979a7f7ad7a714d03f",children:"Query Data by Key"}),(0,n.jsxs)(s.p,{children:["Retrieve data associated with a specific key using the ",(0,n.jsx)(s.code,{children:"data-registry"})," command."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.code,{children:"$"})}),(0,n.jsx)(s.code,{children:"KEY"}),": The key whose data is to be queried."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov data-registry $KEY $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(s.h2,{id:"ef81400b9e8b406d93ba0411684f97f8",children:"Governance"}),(0,n.jsx)(s.table,{children:(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:(0,n.jsx)(s.code,{children:"upsert-data-registry"})}),(0,n.jsx)(s.th,{children:"Create a proposal for adding or updating a key in the Data Registry."})]})})}),(0,n.jsx)(s.h4,{id:"47c2dcd1257a49ccbfae4ad5fdcf49cf",children:"Create or Edit a Data Registrey Key"}),(0,n.jsxs)(s.p,{children:["The CLI command, ",(0,n.jsx)(s.code,{children:"upsert-data-registry"}),", is utilized to create a proposal for adding or updating a key in the Data Registry. The command accepts the following arguments and flags:"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Args"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$KEY"}),": The key intended to be upserted in the Data Registry."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$CHECKSUM"}),": The checksum corresponding to the data associated with the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$VALUE"}),": The value tied to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$FILETYPE"}),": Specifies the type of the file or data that's related to the key."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$SIZE"}),": The size of the file or data linked to the key."]}),"\n"]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Flags"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. Typically in the form \"Upserting Data Registry key '$KEY'\"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, often described as \"Assign value '",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"V"}),(0,n.jsx)(s.mi,{children:"A"}),(0,n.jsx)(s.mi,{children:"L"}),(0,n.jsx)(s.mi,{children:"U"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"E"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"o"}),(0,n.jsx)(s.mi,{children:"k"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"VALUE' to key '"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.9463em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"LU"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]})]})})]}),"KEY'\"."]}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'sekaid tx customgov proposal upsert-data-registry \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n "$KEY" "$CHECKSUM" "$VALUE" "$FILETYPE" "$SIZE" \n'})})]})]})]})}function m(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,s,t)=>{t.d(s,{Z:()=>i});t(7294);var n=t(6905);const a={tabItem:"tabItem_Ymn6"};var r=t(5893);function i(e){let{children:s,hidden:t,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:t,children:s})}},4866:(e,s,t)=>{t.d(s,{Z:()=>k});var n=t(7294),a=t(6905),r=t(2466),i=t(6550),c=t(469),l=t(1980),d=t(7392),o=t(12);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:t}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:t,attributes:n,default:a}}=e;return{value:s,label:t,attributes:n,default:a}}))}(t);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,t])}function m(e){let{value:s,tabValues:t}=e;return t.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:t}=e;const a=(0,i.k6)(),r=function(e){let{queryString:s=!1,groupId:t}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:s,groupId:t});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(a.location.search);s.set(r,e),a.replace({...a.location,search:s.toString()})}),[r,a])]}function j(e){const{defaultValue:s,queryString:t=!1,groupId:a}=e,r=u(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!m({value:s,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[d,h]=x({queryString:t,groupId:a}),[j,p]=function(e){let{groupId:s}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,r]=(0,o.Nk)(t);return[a,(0,n.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:a}),f=(()=>{const e=d??j;return m({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=t(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(5893);function b(e){let{className:s,block:t,selectedValue:n,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),o=e=>{const s=e.currentTarget,t=l.indexOf(s),a=c[t].value;a!==n&&(d(s),i(a))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;s=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;s=l[t]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},s),children:c.map((e=>{let{value:s,label:t,attributes:r}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>l.push(e),onKeyDown:h,onClick:o,...r,className:(0,a.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":n===s}),children:t??s},s)}))})}function y(e){let{lazy:s,children:t,selectedValue:a}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(y,{...e,...s})]})}function k(e){const s=(0,p.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,t)=>{t.d(s,{Z:()=>c,a:()=>i});var n=t(7294);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b2921fe.3632a365.js b/assets/js/7b2921fe.3632a365.js deleted file mode 100644 index cf731dd..0000000 --- a/assets/js/7b2921fe.3632a365.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5237],{1081:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},s=void 0,i={id:"What-is-KIRA/SEKAI/Overview",title:"Overview",description:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Overview.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e",permalink:"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/learn/"},next:{title:"Consensus",permalink:"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418"}},l={},c=[];function u(e){const t={a:"a",admonition:"admonition",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them."}),"\n",(0,a.jsxs)(t.p,{children:["Unlike most existing base layers, SEKAI is not a monolithic chain application. Instead, it depends on multiple modular off-chain components to enable parallel scaling of the execution, storage, and networking capabilities of the network. Those other components are ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," and ",(0,a.jsx)(t.a,{href:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",children:"RYOKAI (Smart Resource Orchestrator)"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"The primary role of SEKAI in the KIRA hypermodular (hyper-connected modular) network is to facilitate the settlement of user balances, provide shared security to the RollApp-centric execution layer, and facilitate data and token transfers. Each consensus nodes has a supporting role of providing the resources necessary to run both SEKAI and the L2 applications. SEKAI is used as a coordination hub allowing consensus nodes to signal which apps they want to run and which they don\u2019t or currently can\u2019t afford to run due to their hardware or networking limitations."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI greatly simplifies the application deployment process - that\u2019s where users submit metadata describing their dApps needs, which includes references to the execution and verification containers, networking configuration, infrastructure resources needed, and other essential data needed by RYOKAI to run the dApp. Consensus nodes can then volunteer as Executors for these dApps and consequently be incentivized by them as well as KIRA\u2019s native liquidity protocol (AMM fees). Based on metadata, they can locate and download the necessary containers, to subsequently run them and propose updates to the app's state and balances on SEKAI. The verification container is then made available to other consensus nodes and users (acting as Fishermen) for participation in the verification of the dApp execution process."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["To learn more about how KIRA's Layer 2 solutions function and how they differ from traditional models, visit our detailed discussion in the ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," section."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=h(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(c(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b2921fe.9ffc1273.js b/assets/js/7b2921fe.9ffc1273.js new file mode 100644 index 0000000..ec11692 --- /dev/null +++ b/assets/js/7b2921fe.9ffc1273.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5237],{1081:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},s=void 0,i={id:"What-is-KIRA/SEKAI/Overview",title:"Overview",description:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Overview.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/"},next:{title:"Consensus",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418"}},l={},c=[];function u(e){const t={a:"a",admonition:"admonition",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them."}),"\n",(0,a.jsxs)(t.p,{children:["Unlike most existing base layers, SEKAI is not a monolithic chain application. Instead, it depends on multiple modular off-chain components to enable parallel scaling of the execution, storage, and networking capabilities of the network. Those other components are ",(0,a.jsx)(t.a,{href:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",children:"INTERX (Content Availability Layer)"})," and ",(0,a.jsx)(t.a,{href:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",children:"RYOKAI (Smart Resource Orchestrator)"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"The primary role of SEKAI in the KIRA hypermodular (hyper-connected modular) network is to facilitate the settlement of user balances, provide shared security to the RollApp-centric execution layer, and facilitate data and token transfers. Each consensus nodes has a supporting role of providing the resources necessary to run both SEKAI and the L2 applications. SEKAI is used as a coordination hub allowing consensus nodes to signal which apps they want to run and which they don\u2019t or currently can\u2019t afford to run due to their hardware or networking limitations."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI greatly simplifies the application deployment process - that\u2019s where users submit metadata describing their dApps needs, which includes references to the execution and verification containers, networking configuration, infrastructure resources needed, and other essential data needed by RYOKAI to run the dApp. Consensus nodes can then volunteer as Executors for these dApps and consequently be incentivized by them as well as KIRA\u2019s native liquidity protocol (AMM fees). Based on metadata, they can locate and download the necessary containers, to subsequently run them and propose updates to the app's state and balances on SEKAI. The verification container is then made available to other consensus nodes and users (acting as Fishermen) for participation in the verification of the dApp execution process."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["To learn more about how KIRA's Layer 2 solutions function and how they differ from traditional models, visit our detailed discussion in the ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," section."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=h(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(c(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7cb27edf.1855dd91.js b/assets/js/7cb27edf.1855dd91.js deleted file mode 100644 index 141c7ee..0000000 --- a/assets/js/7cb27edf.1855dd91.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1497],{7871:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index",title:"Universal Basic Income",description:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},next:{title:"Tokens Module",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/ubi",children:(0,n.jsx)(t.code,{children:"x/ubi"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),s=a(2466),o=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[u,d]=f({queryString:a,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=u??p;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function k(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(u(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>o});var n=a(7294);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7cb27edf.1ef5898b.js b/assets/js/7cb27edf.1ef5898b.js new file mode 100644 index 0000000..3be0056 --- /dev/null +++ b/assets/js/7cb27edf.1ef5898b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1497],{7871:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index",title:"Universal Basic Income",description:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e",permalink:"/docs.kira.network/docs/865cb42c-7ed4-4607-a446-c7ef3882056e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Universal Basic Income",sidebar_position:8,slug:"/865cb42c-7ed4-4607-a446-c7ef3882056e"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/docs/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},next:{title:"Tokens Module",permalink:"/docs.kira.network/docs/b57b0d4e-7c38-4969-9654-d9193eb7fa19"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants' engagement by dynamically adjusting the distribution or ensuring fixed intervals."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/ubi",children:(0,n.jsx)(t.code,{children:"x/ubi"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,o),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>I});var n=a(7294),r=a(6905),s=a(2466),o=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[u,d]=f({queryString:a,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=u??p;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function k(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(u(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>o});var n=a(7294);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d1585d2.df07d35e.js b/assets/js/7d1585d2.df07d35e.js deleted file mode 100644 index d72d264..0000000 --- a/assets/js/7d1585d2.df07d35e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5435],{4820:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Params/index",title:"Params",description:"cosmos.sdk/x/params",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Params/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:18,frontMatter:{title:"Params",sidebar_position:18,slug:"/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},sidebar:"defaultSidebar",previous:{title:"Transaction validation & processing",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671"},next:{title:"Network Parameter Handling",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"}},l={},i=[];function c(e){const t={code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/params"})})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>y});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),u=a(469),l=a(1980),i=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function p(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:a,groupId:n}),[p,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=a(5893);function g(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=u[a].value;n!==r&&(i(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:u.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=p(e);return(0,k.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>u,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ebdef3a.abef92a2.js b/assets/js/7ebdef3a.abef92a2.js new file mode 100644 index 0000000..8078c53 --- /dev/null +++ b/assets/js/7ebdef3a.abef92a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6631],{7517:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=t(5893),r=t(1151);t(4866),t(5162);const o={title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},i=void 0,s={id:"Stack/SEKAI--Backend/Configuration",title:"Configuration",description:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Configuration.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25",permalink:"/docs.kira.network/docs/b85c7808-d42e-474f-a9b6-0f87d1f59e25",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/docs/a026f2da-ef09-4092-af96-aad8db6baf66"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/docs/d98b0e99-34c0-4267-a51a-0ec9dab606b9"}},l={},c=[{value:"Repository",id:"fbd1c90fa73e4371a1acd39772b84100",level:3},{value:"Default Ports",id:"0418932ac4a142c684e702ced8579f8d",level:3},{value:"Node Configuration Files and Directory",id:"87c245337c464ea183434303aebfe46b",level:3},{value:"Client Configuration",id:"3d228313019c4d5e86a4d08816eeaeca",level:3}];function d(e){const n={a:"a",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port."}),"\n",(0,a.jsx)(n.h3,{id:"fbd1c90fa73e4371a1acd39772b84100",children:"Repository"}),"\n",(0,a.jsxs)(n.p,{children:["The Github repository for SEKAI can be found ",(0,a.jsx)(n.a,{href:"https://github.com/kiracore/sekai",children:(0,a.jsx)(n.strong,{children:"here"})}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"0418932ac4a142c684e702ced8579f8d",children:"Default Ports"}),"\n",(0,a.jsx)(n.p,{children:"SEKAI exposes a metadata endpoint to help communicate with the blockchain application via RPC. This endpoint provides information on the types of transactions that can be sent on-chain."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Transaction types metadata RPC endpoint:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:":26657/metadata"})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Tendermint RPC native endpoints:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://docs.tendermint.com/v0.34/rpc/",children:(0,a.jsx)(n.strong,{children:"Documentation Reference"})})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"In addition to the RPC and P2P ports, SEKAI also has a dedicated Prometheus port for monitoring purposes.\nThe specific port number for this port is not provided in the given information."}),"\n",(0,a.jsx)(n.h3,{id:"87c245337c464ea183434303aebfe46b",children:"Node Configuration Files and Directory"}),"\n",(0,a.jsxs)(n.p,{children:["By default, config and data files are stored in the folder located at the\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid"}),"\xa0directory which can be changed by using the\xa0",(0,a.jsx)(n.code,{children:"--home"}),"\xa0flag. It is possible to have multiple home directories that each represent a different blockchain."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-text",children:".# ~/.sekaid\n \u251c\u2500\u2500 data/# Contains the databases used by the node.\n \u2514\u2500\u2500 config/\n \u251c\u2500\u2500 app.toml# Application-related configuration file.\n \u251c\u2500\u2500 config.toml# Tendermint-related configuration file.\n\t \u251c\u2500\u2500 client.toml# Client-related configuration file.\n \u251c\u2500\u2500 genesis.json# The genesis file.\n \u251c\u2500\u2500 node_key.json# Private key to use for node authentication in the p2p protocol.\n \u2514\u2500\u2500 priv_validator_key.json# Private key to use as a validator in the consensus protocol.\n\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The Cosmos SDK automatically generates two configuration files inside\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid/config"})]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"config.toml"}),": This file contains the configuration for the Tendermint consensus engine, including the node's validator address, the minimum gas prices, and the node's peers. In addition, the config.toml file also specifies the location of the data and log directories, as well as the p2p and rpc listen addresses. It may also contain configuration options for the Tendermint WebSocket (WS) server and the ABCI application."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"app.toml"}),": This file contains the configuration for the SEKAI blockchain application such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync..."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"3d228313019c4d5e86a4d08816eeaeca",children:"Client Configuration"}),"\n",(0,a.jsxs)(n.p,{children:["We can view the default client config setting by using the ",(0,a.jsx)(n.code,{children:"sekaid config"})," command:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config\n{\n"chain-id": "",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Changes to the default settings can be made according to users preferences. For example, the chain identifier can be changed from a blank name by using:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config "chain-id" sekai_1\nsekaid config\n{\n"chain-id": "sekai_1",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Other values can be changed in the same manner."}),"\n",(0,a.jsx)(n.p,{children:"Alternatively, modification can be made directly on in the client.toml."})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var a=t(6905);const r={tabItem:"tabItem_Ymn6"};var o=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),r=t(6905),o=t(2466),i=t(6550),s=t(469),l=t(1980),c=t(7392),d=t(12);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:r}}=e;return{value:n,label:t,attributes:a,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(r.location.search);n.set(o,e),r.replace({...r.location,search:n.toString()})}),[o,r])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,u]=p({queryString:t,groupId:r}),[m,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,o]=(0,d.Nk)(t);return[r,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:r}),g=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var b=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:n,block:t,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),r=s[t].value;r!==a&&(c(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:s.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...o,className:(0,r.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function k(e){let{lazy:n,children:t,selectedValue:r}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function j(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...n}),(0,v.jsx)(k,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,v.jsx)(j,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>i});var a=t(7294);const r={},o=a.createContext(r);function i(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ebdef3a.ea5a0e2b.js b/assets/js/7ebdef3a.ea5a0e2b.js deleted file mode 100644 index 41640f9..0000000 --- a/assets/js/7ebdef3a.ea5a0e2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6631],{7517:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=t(5893),r=t(1151);t(4866),t(5162);const o={title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},i=void 0,s={id:"Stack/SEKAI--Backend/Configuration",title:"Configuration",description:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Configuration.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9"}},l={},c=[{value:"Repository",id:"fbd1c90fa73e4371a1acd39772b84100",level:3},{value:"Default ports",id:"0418932ac4a142c684e702ced8579f8d",level:3},{value:"Node configuration files and directory",id:"87c245337c464ea183434303aebfe46b",level:3},{value:"Client configuration",id:"3d228313019c4d5e86a4d08816eeaeca",level:3}];function d(e){const n={a:"a",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port."}),"\n",(0,a.jsx)(n.h3,{id:"fbd1c90fa73e4371a1acd39772b84100",children:"Repository"}),"\n",(0,a.jsxs)(n.p,{children:["The Github repository for SEKAI can be found ",(0,a.jsx)(n.a,{href:"https://github.com/kiracore/sekai",children:(0,a.jsx)(n.strong,{children:"here"})}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"0418932ac4a142c684e702ced8579f8d",children:"Default ports"}),"\n",(0,a.jsx)(n.p,{children:"SEKAI exposes a metadata endpoint to help communicate with the blockchain application via RPC. This endpoint provides information on the types of transactions that can be sent on-chain."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Transaction types metadata RPC endpoint:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:":26657/metadata"})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Tendermint RPC native endpoints:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://docs.tendermint.com/v0.34/rpc/",children:(0,a.jsx)(n.strong,{children:"Documentation Reference"})})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"In addition to the RPC and P2P ports, SEKAI also has a dedicated Prometheus port for monitoring purposes.\nThe specific port number for this port is not provided in the given information."}),"\n",(0,a.jsx)(n.h3,{id:"87c245337c464ea183434303aebfe46b",children:"Node configuration files and directory"}),"\n",(0,a.jsxs)(n.p,{children:["By default, config and data files are stored in the folder located at the\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid"}),"\xa0directory which can be changed by using the\xa0",(0,a.jsx)(n.code,{children:"--home"}),"\xa0flag. It is possible to have multiple home directories that each represent a different blockchain."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-text",children:".# ~/.sekaid\n \u251c\u2500\u2500 data/# Contains the databases used by the node.\n \u2514\u2500\u2500 config/\n \u251c\u2500\u2500 app.toml# Application-related configuration file.\n \u251c\u2500\u2500 config.toml# Tendermint-related configuration file.\n\t \u251c\u2500\u2500 client.toml# Client-related configuration file.\n \u251c\u2500\u2500 genesis.json# The genesis file.\n \u251c\u2500\u2500 node_key.json# Private key to use for node authentication in the p2p protocol.\n \u2514\u2500\u2500 priv_validator_key.json# Private key to use as a validator in the consensus protocol.\n\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The Cosmos SDK automatically generates two configuration files inside\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid/config"})]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"config.toml"}),": This file contains the configuration for the Tendermint consensus engine, including the node's validator address, the minimum gas prices, and the node's peers. In addition, the config.toml file also specifies the location of the data and log directories, as well as the p2p and rpc listen addresses. It may also contain configuration options for the Tendermint WebSocket (WS) server and the ABCI application."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"app.toml"}),": This file contains the configuration for the SEKAI blockchain application such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync..."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"3d228313019c4d5e86a4d08816eeaeca",children:"Client configuration"}),"\n",(0,a.jsxs)(n.p,{children:["We can view the default client config setting by using the ",(0,a.jsx)(n.code,{children:"sekaid config"})," command:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config\n{\n"chain-id": "",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Changes to the default settings can be made according to users preferences. For example, the chain identifier can be changed from a blank name by using:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config "chain-id" sekai_1\nsekaid config\n{\n"chain-id": "sekai_1",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Other values can be changed in the same manner."}),"\n",(0,a.jsx)(n.p,{children:"Alternatively, modification can be made directly on in the client.toml."})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var a=t(6905);const r={tabItem:"tabItem_Ymn6"};var o=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),r=t(6905),o=t(2466),i=t(6550),s=t(469),l=t(1980),c=t(7392),d=t(12);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:r}}=e;return{value:n,label:t,attributes:a,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(r.location.search);n.set(o,e),r.replace({...r.location,search:n.toString()})}),[o,r])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,u]=p({queryString:t,groupId:r}),[m,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,o]=(0,d.Nk)(t);return[r,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:r}),g=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var b=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:n,block:t,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),r=s[t].value;r!==a&&(c(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:s.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...o,className:(0,r.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function k(e){let{lazy:n,children:t,selectedValue:r}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function j(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...n}),(0,v.jsx)(k,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,v.jsx)(j,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>i});var a=t(7294);const r={},o=a.createContext(r);function i(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/807998e0.4c037cb9.js b/assets/js/807998e0.4c037cb9.js new file mode 100644 index 0000000..a8b341f --- /dev/null +++ b/assets/js/807998e0.4c037cb9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2133],{6922:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},s=void 0,i={id:"What-is-KIRA/SEKAI/Overview",title:"Overview",description:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.",source:"@site/tabs/learn/What-is-KIRA/SEKAI/Overview.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/bd45c7be-937d-4648-a162-5574b6a1c23e"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/"},next:{title:"Consensus",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418"}},l={},c=[];function u(e){const t={a:"a",admonition:"admonition",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"SEKAI (\u4e16\u754c) is KIRA's core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or 'validators,' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them."}),"\n",(0,a.jsxs)(t.p,{children:["Unlike most existing base layers, SEKAI is not a monolithic chain application. Instead, it depends on multiple modular off-chain components to enable parallel scaling of the execution, storage, and networking capabilities of the network. Those other components are ",(0,a.jsx)(t.a,{href:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",children:"INTERX (Content Availability Layer)"})," and ",(0,a.jsx)(t.a,{href:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",children:"RYOKAI (Smart Resource Orchestrator)"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"The primary role of SEKAI in the KIRA hypermodular (hyper-connected modular) network is to facilitate the settlement of user balances, provide shared security to the RollApp-centric execution layer, and facilitate data and token transfers. Each consensus nodes has a supporting role of providing the resources necessary to run both SEKAI and the L2 applications. SEKAI is used as a coordination hub allowing consensus nodes to signal which apps they want to run and which they don\u2019t or currently can\u2019t afford to run due to their hardware or networking limitations."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI greatly simplifies the application deployment process - that\u2019s where users submit metadata describing their dApps needs, which includes references to the execution and verification containers, networking configuration, infrastructure resources needed, and other essential data needed by RYOKAI to run the dApp. Consensus nodes can then volunteer as Executors for these dApps and consequently be incentivized by them as well as KIRA\u2019s native liquidity protocol (AMM fees). Based on metadata, they can locate and download the necessary containers, to subsequently run them and propose updates to the app's state and balances on SEKAI. The verification container is then made available to other consensus nodes and users (acting as Fishermen) for participation in the verification of the dApp execution process."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["To learn more about how KIRA's Layer 2 solutions function and how they differ from traditional models, visit our detailed discussion in the ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," section."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=h(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:r}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=c??b;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(c(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81ad07a0.887baacf.js b/assets/js/81ad07a0.24e39b76.js similarity index 99% rename from assets/js/81ad07a0.887baacf.js rename to assets/js/81ad07a0.24e39b76.js index e64ea29..42c62f6 100644 --- a/assets/js/81ad07a0.887baacf.js +++ b/assets/js/81ad07a0.24e39b76.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3242],{8067:(e,t,d)=>{d.r(t),d.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>o,frontMatter:()=>n,metadata:()=>l,toc:()=>a});var r=d(5893),s=d(1151);d(4866),d(5162);const n={title:"Evangelist",sidebar_position:4,slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20"},i=void 0,l={id:"Evangelist",title:"Evangelist",description:"At the heart of KIRA's network lies its evangelists - the driving force behind its success. While software may be the foundation, it is the collective effort of hundreds, even thousands, of individuals that ensure that decentralized systems thrive. Collaboration and mutual support are essential in maintaining and expanding the network.",source:"@site/tabs/Testnet/Evangelist.mdx",sourceDirName:".",slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",permalink:"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Evangelist",sidebar_position:4,slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20"},sidebar:"defaultSidebar",previous:{title:"Testnet System Requirements",permalink:"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03"},next:{title:"Key Management",permalink:"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d"}},c={},a=[{value:"Join us",id:"fe4ca8bf23bb44f194ae582e455fe910",level:2},{value:"Whitelist",id:"3912091ae14a4f1fb9fc3ad39cd0570f",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"At the heart of KIRA's network lies its evangelists - the driving force behind its success. While software may be the foundation, it is the collective effort of hundreds, even thousands, of individuals that ensure that decentralized systems thrive. Collaboration and mutual support are essential in maintaining and expanding the network."}),"\n",(0,r.jsx)(t.p,{children:"However, it is crucial that our intentions and efforts are aligned toward a singular goal - the preservation of fundamental freedoms. Only through working together and upholding these values can we hope to create a world in which they are accessible to all. Let us strive towards this noble mission, for it is only through our joint efforts that we can make a meaningful impact on the future."}),"\n",(0,r.jsx)(t.p,{children:"KIRA's evangelists are the backbone of the network, and as such, they are the only ones who are eligible for accessing all incentives created by the network through their joint effort as long as they continue supporting the network and collaborating. Collaboration can take many forms, from sharing the network's mission with others to creating art and educational content that helps to spread the word about KIRA. Additionally, many evangelists are instrumental in operating critical parts of the network infrastructure, ensuring its smooth operation and growth. By collaborating and supporting each other, the evangelists of KIRA demonstrate a deep commitment to the network's success and the fundamental values it represents."}),"\n",(0,r.jsx)(t.h2,{id:"fe4ca8bf23bb44f194ae582e455fe910",children:"Join us"}),"\n",(0,r.jsx)(t.p,{children:"There is only one way to become an evangelist and that is to become a tester and produce at least a single block of transactions as a validator on the public KIRA testnet. To ensure fairness, one unique individual can only become a single validator and be associated with a single KIRA address."}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://evangelist.kira.network/",children:"Whitelist Request Form"})})}),"\n",(0,r.jsx)(t.h2,{id:"3912091ae14a4f1fb9fc3ad39cd0570f",children:"Whitelist"}),"\n",(0,r.jsxs)(t.p,{children:["A list of users eligible to access ",(0,r.jsx)(t.a,{href:"https://testers.kira.network/",children:(0,r.jsx)(t.strong,{children:"testers"})}),(0,r.jsx)(t.strong,{children:"\u2019"})," chat and produce blocks on the public testnet can be found below, to monitor whether or not you can launch a node please refer to the table below, your application to become a KIRA tester might have one of the following statuses:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"pending"})," - we are aware of your application but you must await to be whitelisted on-chain, this process might take up to 5 working days"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"rejected"})," - missing or incomplete screening, please see notes for a reason or raise an issue with ",(0,r.jsx)(t.a,{href:"https://support.kira.network/",children:"support.kira.network"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"blacklisted"})," - the user was permanently blacklisted for attempting to create Sybil accounts, see notes for details"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"whitelisted"}),"- user is whitelisted on-chain and able to claim a validator seat and produce a new block on the testnet"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"active"})," - user produced at least one block and is now considered to be a KIRA evangelist or an active community member"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"inactive"})," - user stopped running the node and is not engaging in the community for a prolonged time period"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Last updated: ",(0,r.jsx)(t.code,{children:"2023-11-27"})]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"NR"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"TG"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"VALIDATOR PUBLIC KEY"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"STATUS"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"NOTE"})})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1"}),(0,r.jsx)(t.td,{children:".@Karandash33"}),(0,r.jsx)(t.td,{children:"kira1e3ksqnah5z6zwka7tstgk0rzhwppdnag0yc6ap"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{children:"???"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2"}),(0,r.jsx)(t.td,{children:".@SEM3gs"}),(0,r.jsx)(t.td,{children:"kira1a4ntzdxggu87kjgemlvgrmm4yxgpg8n3m54zme"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3"}),(0,r.jsx)(t.td,{children:".@bettermanzZ"}),(0,r.jsx)(t.td,{children:"kira1764whjckketmwhakqqvv3j7du36lxgn9v4tawp"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4"}),(0,r.jsx)(t.td,{children:".@TonyStarkMan"}),(0,r.jsx)(t.td,{children:"kira19u8p27ef9050xqpnh3g94hljxzp96a86yd7qrm"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5"}),(0,r.jsx)(t.td,{children:"@akaVLadek"}),(0,r.jsx)(t.td,{children:"kira1wse78hqdtg4g56pqh6ptk8llgmkp7r797933u8"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6"}),(0,r.jsx)(t.td,{children:".@Creamers"}),(0,r.jsx)(t.td,{children:"kira1yg9aza5j9ddk4fhnf808k4vfpwydjuqdam8urr"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7"}),(0,r.jsx)(t.td,{children:".@Groows"}),(0,r.jsx)(t.td,{children:"kira14rcy4xxjknjawvt3rjkr897vpazv9pywyhrafc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8"}),(0,r.jsx)(t.td,{children:"\xa0.@DragonStake_Community"}),(0,r.jsx)(t.td,{children:"kira1lccgu30pk9eavj2p26692ltvpk9lr5u7e4uyk9"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9"}),(0,r.jsx)(t.td,{children:".@meodoraemon111"}),(0,r.jsx)(t.td,{children:"kira1nug9a40lzh587yssn2pzerfa2a94cxnz6wn8tu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10"}),(0,r.jsx)(t.td,{children:".@N1_NodeOne"}),(0,r.jsx)(t.td,{children:"kira1rdh2e2dhc2nl874k9kse9uq5wd0mcslnrcy6qa"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"11"}),(0,r.jsx)(t.td,{children:".@gddrx"}),(0,r.jsx)(t.td,{children:"kira1qj736kk84ar5n4gr98fdq7f4453h3tapa3juqv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"12"}),(0,r.jsx)(t.td,{children:".@Gray1m"}),(0,r.jsx)(t.td,{children:"kira18kx6tky43j2fqyjx02urlg2uwhw8k7xplxs9qw"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"13"}),(0,r.jsx)(t.td,{children:".@ruslanm_rm"}),(0,r.jsx)(t.td,{children:"kira1a0ygs77xwnm73a4tcrv278fj4djgmzwxqptkzj"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"14"}),(0,r.jsx)(t.td,{children:".@DerFredy"}),(0,r.jsx)(t.td,{children:"kira1f6edyj7quyq78yvqxsd4fecj784j3dnsa8vdre"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"15"}),(0,r.jsx)(t.td,{children:".@Arti_Ust"}),(0,r.jsx)(t.td,{children:"kira18dwh2rfval4ql9tvuhjmdvauu3726g590kugf8"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"16"}),(0,r.jsx)(t.td,{children:".@albertttk"}),(0,r.jsx)(t.td,{children:"kira1tkm0pv2ath9wpfk8ywp8m5y3eqwjac26w4f04t"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"17"}),(0,r.jsx)(t.td,{children:".@Mari_an119"}),(0,r.jsx)(t.td,{children:"kira19wfr9gqm2hj0f8x0r89cfxp3dsnvqqphcgsmnv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"18"}),(0,r.jsx)(t.td,{children:".@www_karlo"}),(0,r.jsx)(t.td,{children:"kira1442dze8l92z2hvs4p9ssapvq7wadl4qhne5qw3"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"19"}),(0,r.jsx)(t.td,{children:".@xruff2020"}),(0,r.jsx)(t.td,{children:"kira1tk7fdf7sk9789p90uau2wxyx45m5cmdlw69gvk"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"20"}),(0,r.jsx)(t.td,{children:".@lTNOl"}),(0,r.jsx)(t.td,{children:"kira1ngw8detxp7t42v249rkff7hdf0lszysra074yr"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"21"}),(0,r.jsx)(t.td,{children:".@lukanukvlad\xa0"}),(0,r.jsx)(t.td,{children:"kira1r2txhrrqpww0xlncwcv5aryz4lmmmal4akrdzu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"22"}),(0,r.jsx)(t.td,{children:".@Zelivsky"}),(0,r.jsx)(t.td,{children:"kira1uvfwsqcah78e0f0dmrrwztvjvsxh4nc9kjdayv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"23"}),(0,r.jsx)(t.td,{children:".@wsm_enigma"}),(0,r.jsx)(t.td,{children:"kira107dqh8r9jhdlh0tlsf73eyanch4lewfxvdcmsg"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"24"}),(0,r.jsx)(t.td,{children:".@Stefan_Drexel"}),(0,r.jsx)(t.td,{children:"kira1mn2dq2kugcpu72walfa28r79vd953lxv9f3tek"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"24"}),(0,r.jsx)(t.td,{children:".@gddrx"}),(0,r.jsx)(t.td,{children:"kira1u4stgp3sat3avtvzhjh8kmyzrrkwluu66f4wze"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"25"}),(0,r.jsx)(t.td,{children:".@MaksV13"}),(0,r.jsx)(t.td,{children:"kira1pxdlefxn928wujhgurdsax9s6frsapl0gggft2"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"26"}),(0,r.jsx)(t.td,{children:".@InvestM77"}),(0,r.jsx)(t.td,{children:"kira19k0wmyqc5txs0r2mwr4lth4ll88umuxlgqzztc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"27"}),(0,r.jsx)(t.td,{children:".@Liver2323"}),(0,r.jsx)(t.td,{children:"kira10cm9gmxtt8mea8zselsmcl2w0ylwnxazwdqh95"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"28"}),(0,r.jsx)(t.td,{children:".@Narina_k"}),(0,r.jsx)(t.td,{children:"kira1qzeekpltuaumyzdg8vm9f88musyp75wcjhguyk"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"29"}),(0,r.jsx)(t.td,{children:".@lesnik13utsa"}),(0,r.jsx)(t.td,{children:"kira1t2luuqupj3jqt4qqhkl72vqcqm7kmpgrqlgjxc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"30"}),(0,r.jsx)(t.td,{children:".@septima_noders"}),(0,r.jsx)(t.td,{children:"kira1lq2xu43q5rgzn7pn3m6uusy06q5rt7z6q6gnuw"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"31"}),(0,r.jsx)(t.td,{children:".@Kokorin9"}),(0,r.jsx)(t.td,{children:"kira1g8nlcxr9k4rq7q7dqu7msmnnglf7ywf4l8ltmg"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"32"}),(0,r.jsx)(t.td,{children:".@CrazySerGo"}),(0,r.jsx)(t.td,{children:"kira1cd27e8rq3e2mpnjc646sul5jnalhsx4kr8sdkh"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"33"}),(0,r.jsx)(t.td,{children:".@tontheway"}),(0,r.jsx)(t.td,{children:"kira15uv3k6h6rfeuac5ct67u4njwg42xrgq7dxsy7p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"34"}),(0,r.jsx)(t.td,{children:".@thanhbinhpc2007"}),(0,r.jsx)(t.td,{children:"kira1awlpuhwls2g8hvevsrk7lkccqe6sk26cpq0tpu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"35"}),(0,r.jsx)(t.td,{children:".@zuka116"}),(0,r.jsx)(t.td,{children:"kira1dckl6mcxt2w9wmvp3mz80ur7y9qnhs2ncc576p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"36"}),(0,r.jsx)(t.td,{children:"@the_lime"}),(0,r.jsx)(t.td,{children:"kira1dckl6mcxt2w9wmvp3mz80ur7y9qnhs2ncc576p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"37"}),(0,r.jsx)(t.td,{children:"@lthuan2011"}),(0,r.jsx)(t.td,{children:"kira1luv806w4k0dkgy2mv7qqr7mgq5ew2emhnmzxj2"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"38"}),(0,r.jsx)(t.td,{children:"@imLuuTong"}),(0,r.jsx)(t.td,{children:"kira1644lp3tl3jmnvkmxnkmttg5lqy2w67fd9nf2c3"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"39"}),(0,r.jsx)(t.td,{children:"@m4steel"}),(0,r.jsx)(t.td,{children:"kira1cl7w2z0u8cwlrs7pnzsa98eg6x60j2jln2vm9q"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"40"}),(0,r.jsx)(t.td,{children:"@cryptor1an"}),(0,r.jsx)(t.td,{children:"kira1myxzl90da5m8l8x9lvgqh47nj7pp5wj6xz63py"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"41"}),(0,r.jsx)(t.td,{children:"@gufete"}),(0,r.jsx)(t.td,{children:"kira1adlpvgkwzt6lrd600pv9vtlskuh0eem4vhjkde"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"42"}),(0,r.jsx)(t.td,{children:"@AnnaSotnika"}),(0,r.jsx)(t.td,{children:"kira1vlg6uylfqcjcsycnhyx8cn7ad3suyqy4qs4z5w"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"43"}),(0,r.jsx)(t.td,{children:"@xuannguyenvn"}),(0,r.jsx)(t.td,{children:"kira1msf9jr9gtp5qfsce0r98wg84yt0vj26v3en5ed"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"44"}),(0,r.jsx)(t.td,{children:"@realjirentr"}),(0,r.jsx)(t.td,{children:"kira1cuarnkjppc022qfrxdssa3ua535f6qafxljfxs"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"45"}),(0,r.jsx)(t.td,{children:"@CrazzyWizzard"}),(0,r.jsx)(t.td,{children:"kira1xcennx0xgpgtq9suk2yytjenr76xjt2xdmt9pj"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"46"}),(0,r.jsx)(t.td,{children:"@idekubagus"}),(0,r.jsx)(t.td,{children:"kira1cf633eeq0wu2020wh0g4qdr6uswn206u3s4d48"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"47"}),(0,r.jsx)(t.td,{children:"@kugata2"}),(0,r.jsx)(t.td,{children:"kira1aj9jzntj4hd4u0f4333zgzegtd5pqspkqza5dy"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"48"}),(0,r.jsx)(t.td,{children:"@FominL"}),(0,r.jsx)(t.td,{children:"kira1t8qdzw8rf0m68nh4umrjesrwvt572u36ux9ml9"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"49"}),(0,r.jsx)(t.td,{children:"@drwtsn"}),(0,r.jsx)(t.td,{children:"kira1q2aqj8nz936xzxtv6vqanqlymp4256kd4zk768"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{})]})]})]})]})}function o(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},5162:(e,t,d)=>{d.d(t,{Z:()=>i});d(7294);var r=d(6905);const s={tabItem:"tabItem_Ymn6"};var n=d(5893);function i(e){let{children:t,hidden:d,className:i}=e;return(0,n.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,i),hidden:d,children:t})}},4866:(e,t,d)=>{d.d(t,{Z:()=>b});var r=d(7294),s=d(6905),n=d(2466),i=d(6550),l=d(469),c=d(1980),a=d(7392),h=d(12);function o(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:t,children:d}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return o(e).map((e=>{let{props:{value:t,label:d,attributes:r,default:s}}=e;return{value:t,label:d,attributes:r,default:s}}))}(d);return function(e){const t=(0,a.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,d])}function j(e){let{value:t,tabValues:d}=e;return d.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:d}=e;const s=(0,i.k6)(),n=function(e){let{queryString:t=!1,groupId:d}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!d)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return d??null}({queryString:t,groupId:d});return[(0,c._X)(n),(0,r.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(s.location.search);t.set(n,e),s.replace({...s.location,search:t.toString()})}),[n,s])]}function f(e){const{defaultValue:t,queryString:d=!1,groupId:s}=e,n=x(e),[i,c]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:d}=e;if(0===d.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!j({value:t,tabValues:d}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${d.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=d.find((e=>e.default))??d[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:n}))),[a,o]=u({queryString:d,groupId:s}),[f,m]=function(e){let{groupId:t}=e;const d=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,n]=(0,h.Nk)(d);return[s,(0,r.useCallback)((e=>{d&&n.set(e)}),[d,n])]}({groupId:s}),p=(()=>{const e=a??f;return j({value:e,tabValues:n})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!j({value:e,tabValues:n}))throw new Error(`Can't select invalid tab value=${e}`);c(e),o(e),m(e)}),[o,m,n]),tabValues:n}}var m=d(2389);const p={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var w=d(5893);function k(e){let{className:t,block:d,selectedValue:r,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,n.o5)(),h=e=>{const t=e.currentTarget,d=c.indexOf(t),s=l[d].value;s!==r&&(a(t),i(s))},o=e=>{let t=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const d=c.indexOf(e.currentTarget)+1;t=c[d]??c[0];break}case"ArrowLeft":{const d=c.indexOf(e.currentTarget)-1;t=c[d]??c[c.length-1];break}}t?.focus()};return(0,w.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":d},t),children:l.map((e=>{let{value:t,label:d,attributes:n}=e;return(0,w.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>c.push(e),onKeyDown:o,onClick:h,...n,className:(0,s.Z)("tabs__item",p.tabItem,n?.className,{"tabs__item--active":r===t}),children:d??t},t)}))})}function g(e){let{lazy:t,children:d,selectedValue:s}=e;const n=(Array.isArray(d)?d:[d]).filter(Boolean);if(t){const e=n.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,w.jsx)("div",{className:"margin-top--md",children:n.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function v(e){const t=f(e);return(0,w.jsxs)("div",{className:(0,s.Z)("tabs-container",p.tabList),children:[(0,w.jsx)(k,{...e,...t}),(0,w.jsx)(g,{...e,...t})]})}function b(e){const t=(0,m.Z)();return(0,w.jsx)(v,{...e,children:o(e.children)},String(t))}},1151:(e,t,d)=>{d.d(t,{Z:()=>l,a:()=>i});var r=d(7294);const s={},n=r.createContext(s);function i(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3242],{8067:(e,t,d)=>{d.r(t),d.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>o,frontMatter:()=>n,metadata:()=>l,toc:()=>a});var r=d(5893),s=d(1151);d(4866),d(5162);const n={title:"Evangelist",sidebar_position:4,slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20"},i=void 0,l={id:"Evangelist",title:"Evangelist",description:"At the heart of KIRA's network lies its evangelists - the driving force behind its success. While software may be the foundation, it is the collective effort of hundreds, even thousands, of individuals that ensure that decentralized systems thrive. Collaboration and mutual support are essential in maintaining and expanding the network.",source:"@site/tabs/Testnet/Evangelist.mdx",sourceDirName:".",slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20",permalink:"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Evangelist",sidebar_position:4,slug:"/7445fb12-93e8-4539-bfb9-6a20a0156b20"},sidebar:"defaultSidebar",previous:{title:"Testnet System Requirements",permalink:"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03"},next:{title:"Key Management",permalink:"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d"}},c={},a=[{value:"Join Us",id:"fe4ca8bf23bb44f194ae582e455fe910",level:2},{value:"Whitelist",id:"3912091ae14a4f1fb9fc3ad39cd0570f",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"At the heart of KIRA's network lies its evangelists - the driving force behind its success. While software may be the foundation, it is the collective effort of hundreds, even thousands, of individuals that ensure that decentralized systems thrive. Collaboration and mutual support are essential in maintaining and expanding the network."}),"\n",(0,r.jsx)(t.p,{children:"However, it is crucial that our intentions and efforts are aligned toward a singular goal - the preservation of fundamental freedoms. Only through working together and upholding these values can we hope to create a world in which they are accessible to all. Let us strive towards this noble mission, for it is only through our joint efforts that we can make a meaningful impact on the future."}),"\n",(0,r.jsx)(t.p,{children:"KIRA's evangelists are the backbone of the network, and as such, they are the only ones who are eligible for accessing all incentives created by the network through their joint effort as long as they continue supporting the network and collaborating. Collaboration can take many forms, from sharing the network's mission with others to creating art and educational content that helps to spread the word about KIRA. Additionally, many evangelists are instrumental in operating critical parts of the network infrastructure, ensuring its smooth operation and growth. By collaborating and supporting each other, the evangelists of KIRA demonstrate a deep commitment to the network's success and the fundamental values it represents."}),"\n",(0,r.jsx)(t.h2,{id:"fe4ca8bf23bb44f194ae582e455fe910",children:"Join Us"}),"\n",(0,r.jsx)(t.p,{children:"There is only one way to become an evangelist and that is to become a tester and produce at least a single block of transactions as a validator on the public KIRA testnet. To ensure fairness, one unique individual can only become a single validator and be associated with a single KIRA address."}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://evangelist.kira.network/",children:"Whitelist Request Form"})})}),"\n",(0,r.jsx)(t.h2,{id:"3912091ae14a4f1fb9fc3ad39cd0570f",children:"Whitelist"}),"\n",(0,r.jsxs)(t.p,{children:["A list of users eligible to access ",(0,r.jsx)(t.a,{href:"https://testers.kira.network/",children:(0,r.jsx)(t.strong,{children:"testers"})}),(0,r.jsx)(t.strong,{children:"\u2019"})," chat and produce blocks on the public testnet can be found below, to monitor whether or not you can launch a node please refer to the table below, your application to become a KIRA tester might have one of the following statuses:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"pending"})," - we are aware of your application but you must await to be whitelisted on-chain, this process might take up to 5 working days"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"rejected"})," - missing or incomplete screening, please see notes for a reason or raise an issue with ",(0,r.jsx)(t.a,{href:"https://support.kira.network/",children:"support.kira.network"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"blacklisted"})," - the user was permanently blacklisted for attempting to create Sybil accounts, see notes for details"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"whitelisted"}),"- user is whitelisted on-chain and able to claim a validator seat and produce a new block on the testnet"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"active"})," - user produced at least one block and is now considered to be a KIRA evangelist or an active community member"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"inactive"})," - user stopped running the node and is not engaging in the community for a prolonged time period"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Last updated: ",(0,r.jsx)(t.code,{children:"2023-11-27"})]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"NR"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"TG"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"VALIDATOR PUBLIC KEY"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"STATUS"})}),(0,r.jsx)(t.th,{children:(0,r.jsx)(t.strong,{children:"NOTE"})})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"}),(0,r.jsx)(t.td,{children:"\u2026"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"1"}),(0,r.jsx)(t.td,{children:".@Karandash33"}),(0,r.jsx)(t.td,{children:"kira1e3ksqnah5z6zwka7tstgk0rzhwppdnag0yc6ap"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{children:"???"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"2"}),(0,r.jsx)(t.td,{children:".@SEM3gs"}),(0,r.jsx)(t.td,{children:"kira1a4ntzdxggu87kjgemlvgrmm4yxgpg8n3m54zme"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"3"}),(0,r.jsx)(t.td,{children:".@bettermanzZ"}),(0,r.jsx)(t.td,{children:"kira1764whjckketmwhakqqvv3j7du36lxgn9v4tawp"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"4"}),(0,r.jsx)(t.td,{children:".@TonyStarkMan"}),(0,r.jsx)(t.td,{children:"kira19u8p27ef9050xqpnh3g94hljxzp96a86yd7qrm"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"5"}),(0,r.jsx)(t.td,{children:"@akaVLadek"}),(0,r.jsx)(t.td,{children:"kira1wse78hqdtg4g56pqh6ptk8llgmkp7r797933u8"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"6"}),(0,r.jsx)(t.td,{children:".@Creamers"}),(0,r.jsx)(t.td,{children:"kira1yg9aza5j9ddk4fhnf808k4vfpwydjuqdam8urr"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"7"}),(0,r.jsx)(t.td,{children:".@Groows"}),(0,r.jsx)(t.td,{children:"kira14rcy4xxjknjawvt3rjkr897vpazv9pywyhrafc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"8"}),(0,r.jsx)(t.td,{children:"\xa0.@DragonStake_Community"}),(0,r.jsx)(t.td,{children:"kira1lccgu30pk9eavj2p26692ltvpk9lr5u7e4uyk9"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"9"}),(0,r.jsx)(t.td,{children:".@meodoraemon111"}),(0,r.jsx)(t.td,{children:"kira1nug9a40lzh587yssn2pzerfa2a94cxnz6wn8tu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"10"}),(0,r.jsx)(t.td,{children:".@N1_NodeOne"}),(0,r.jsx)(t.td,{children:"kira1rdh2e2dhc2nl874k9kse9uq5wd0mcslnrcy6qa"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"11"}),(0,r.jsx)(t.td,{children:".@gddrx"}),(0,r.jsx)(t.td,{children:"kira1qj736kk84ar5n4gr98fdq7f4453h3tapa3juqv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"12"}),(0,r.jsx)(t.td,{children:".@Gray1m"}),(0,r.jsx)(t.td,{children:"kira18kx6tky43j2fqyjx02urlg2uwhw8k7xplxs9qw"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"13"}),(0,r.jsx)(t.td,{children:".@ruslanm_rm"}),(0,r.jsx)(t.td,{children:"kira1a0ygs77xwnm73a4tcrv278fj4djgmzwxqptkzj"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"14"}),(0,r.jsx)(t.td,{children:".@DerFredy"}),(0,r.jsx)(t.td,{children:"kira1f6edyj7quyq78yvqxsd4fecj784j3dnsa8vdre"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"15"}),(0,r.jsx)(t.td,{children:".@Arti_Ust"}),(0,r.jsx)(t.td,{children:"kira18dwh2rfval4ql9tvuhjmdvauu3726g590kugf8"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"16"}),(0,r.jsx)(t.td,{children:".@albertttk"}),(0,r.jsx)(t.td,{children:"kira1tkm0pv2ath9wpfk8ywp8m5y3eqwjac26w4f04t"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"17"}),(0,r.jsx)(t.td,{children:".@Mari_an119"}),(0,r.jsx)(t.td,{children:"kira19wfr9gqm2hj0f8x0r89cfxp3dsnvqqphcgsmnv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"18"}),(0,r.jsx)(t.td,{children:".@www_karlo"}),(0,r.jsx)(t.td,{children:"kira1442dze8l92z2hvs4p9ssapvq7wadl4qhne5qw3"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"19"}),(0,r.jsx)(t.td,{children:".@xruff2020"}),(0,r.jsx)(t.td,{children:"kira1tk7fdf7sk9789p90uau2wxyx45m5cmdlw69gvk"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"20"}),(0,r.jsx)(t.td,{children:".@lTNOl"}),(0,r.jsx)(t.td,{children:"kira1ngw8detxp7t42v249rkff7hdf0lszysra074yr"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"21"}),(0,r.jsx)(t.td,{children:".@lukanukvlad\xa0"}),(0,r.jsx)(t.td,{children:"kira1r2txhrrqpww0xlncwcv5aryz4lmmmal4akrdzu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"22"}),(0,r.jsx)(t.td,{children:".@Zelivsky"}),(0,r.jsx)(t.td,{children:"kira1uvfwsqcah78e0f0dmrrwztvjvsxh4nc9kjdayv"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"23"}),(0,r.jsx)(t.td,{children:".@wsm_enigma"}),(0,r.jsx)(t.td,{children:"kira107dqh8r9jhdlh0tlsf73eyanch4lewfxvdcmsg"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"24"}),(0,r.jsx)(t.td,{children:".@Stefan_Drexel"}),(0,r.jsx)(t.td,{children:"kira1mn2dq2kugcpu72walfa28r79vd953lxv9f3tek"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"24"}),(0,r.jsx)(t.td,{children:".@gddrx"}),(0,r.jsx)(t.td,{children:"kira1u4stgp3sat3avtvzhjh8kmyzrrkwluu66f4wze"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"25"}),(0,r.jsx)(t.td,{children:".@MaksV13"}),(0,r.jsx)(t.td,{children:"kira1pxdlefxn928wujhgurdsax9s6frsapl0gggft2"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"26"}),(0,r.jsx)(t.td,{children:".@InvestM77"}),(0,r.jsx)(t.td,{children:"kira19k0wmyqc5txs0r2mwr4lth4ll88umuxlgqzztc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"27"}),(0,r.jsx)(t.td,{children:".@Liver2323"}),(0,r.jsx)(t.td,{children:"kira10cm9gmxtt8mea8zselsmcl2w0ylwnxazwdqh95"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"28"}),(0,r.jsx)(t.td,{children:".@Narina_k"}),(0,r.jsx)(t.td,{children:"kira1qzeekpltuaumyzdg8vm9f88musyp75wcjhguyk"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"29"}),(0,r.jsx)(t.td,{children:".@lesnik13utsa"}),(0,r.jsx)(t.td,{children:"kira1t2luuqupj3jqt4qqhkl72vqcqm7kmpgrqlgjxc"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"30"}),(0,r.jsx)(t.td,{children:".@septima_noders"}),(0,r.jsx)(t.td,{children:"kira1lq2xu43q5rgzn7pn3m6uusy06q5rt7z6q6gnuw"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"31"}),(0,r.jsx)(t.td,{children:".@Kokorin9"}),(0,r.jsx)(t.td,{children:"kira1g8nlcxr9k4rq7q7dqu7msmnnglf7ywf4l8ltmg"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"32"}),(0,r.jsx)(t.td,{children:".@CrazySerGo"}),(0,r.jsx)(t.td,{children:"kira1cd27e8rq3e2mpnjc646sul5jnalhsx4kr8sdkh"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"33"}),(0,r.jsx)(t.td,{children:".@tontheway"}),(0,r.jsx)(t.td,{children:"kira15uv3k6h6rfeuac5ct67u4njwg42xrgq7dxsy7p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"34"}),(0,r.jsx)(t.td,{children:".@thanhbinhpc2007"}),(0,r.jsx)(t.td,{children:"kira1awlpuhwls2g8hvevsrk7lkccqe6sk26cpq0tpu"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"35"}),(0,r.jsx)(t.td,{children:".@zuka116"}),(0,r.jsx)(t.td,{children:"kira1dckl6mcxt2w9wmvp3mz80ur7y9qnhs2ncc576p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"36"}),(0,r.jsx)(t.td,{children:"@the_lime"}),(0,r.jsx)(t.td,{children:"kira1dckl6mcxt2w9wmvp3mz80ur7y9qnhs2ncc576p"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"37"}),(0,r.jsx)(t.td,{children:"@lthuan2011"}),(0,r.jsx)(t.td,{children:"kira1luv806w4k0dkgy2mv7qqr7mgq5ew2emhnmzxj2"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"38"}),(0,r.jsx)(t.td,{children:"@imLuuTong"}),(0,r.jsx)(t.td,{children:"kira1644lp3tl3jmnvkmxnkmttg5lqy2w67fd9nf2c3"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"39"}),(0,r.jsx)(t.td,{children:"@m4steel"}),(0,r.jsx)(t.td,{children:"kira1cl7w2z0u8cwlrs7pnzsa98eg6x60j2jln2vm9q"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"40"}),(0,r.jsx)(t.td,{children:"@cryptor1an"}),(0,r.jsx)(t.td,{children:"kira1myxzl90da5m8l8x9lvgqh47nj7pp5wj6xz63py"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"41"}),(0,r.jsx)(t.td,{children:"@gufete"}),(0,r.jsx)(t.td,{children:"kira1adlpvgkwzt6lrd600pv9vtlskuh0eem4vhjkde"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"42"}),(0,r.jsx)(t.td,{children:"@AnnaSotnika"}),(0,r.jsx)(t.td,{children:"kira1vlg6uylfqcjcsycnhyx8cn7ad3suyqy4qs4z5w"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"43"}),(0,r.jsx)(t.td,{children:"@xuannguyenvn"}),(0,r.jsx)(t.td,{children:"kira1msf9jr9gtp5qfsce0r98wg84yt0vj26v3en5ed"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"44"}),(0,r.jsx)(t.td,{children:"@realjirentr"}),(0,r.jsx)(t.td,{children:"kira1cuarnkjppc022qfrxdssa3ua535f6qafxljfxs"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"45"}),(0,r.jsx)(t.td,{children:"@CrazzyWizzard"}),(0,r.jsx)(t.td,{children:"kira1xcennx0xgpgtq9suk2yytjenr76xjt2xdmt9pj"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"46"}),(0,r.jsx)(t.td,{children:"@idekubagus"}),(0,r.jsx)(t.td,{children:"kira1cf633eeq0wu2020wh0g4qdr6uswn206u3s4d48"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"whitelisted"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"47"}),(0,r.jsx)(t.td,{children:"@kugata2"}),(0,r.jsx)(t.td,{children:"kira1aj9jzntj4hd4u0f4333zgzegtd5pqspkqza5dy"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"48"}),(0,r.jsx)(t.td,{children:"@FominL"}),(0,r.jsx)(t.td,{children:"kira1t8qdzw8rf0m68nh4umrjesrwvt572u36ux9ml9"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"49"}),(0,r.jsx)(t.td,{children:"@drwtsn"}),(0,r.jsx)(t.td,{children:"kira1q2aqj8nz936xzxtv6vqanqlymp4256kd4zk768"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rejected"})}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{})]})]})]})]})}function o(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},5162:(e,t,d)=>{d.d(t,{Z:()=>i});d(7294);var r=d(6905);const s={tabItem:"tabItem_Ymn6"};var n=d(5893);function i(e){let{children:t,hidden:d,className:i}=e;return(0,n.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,i),hidden:d,children:t})}},4866:(e,t,d)=>{d.d(t,{Z:()=>b});var r=d(7294),s=d(6905),n=d(2466),i=d(6550),l=d(469),c=d(1980),a=d(7392),h=d(12);function o(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:t,children:d}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return o(e).map((e=>{let{props:{value:t,label:d,attributes:r,default:s}}=e;return{value:t,label:d,attributes:r,default:s}}))}(d);return function(e){const t=(0,a.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,d])}function j(e){let{value:t,tabValues:d}=e;return d.some((e=>e.value===t))}function u(e){let{queryString:t=!1,groupId:d}=e;const s=(0,i.k6)(),n=function(e){let{queryString:t=!1,groupId:d}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!d)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return d??null}({queryString:t,groupId:d});return[(0,c._X)(n),(0,r.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(s.location.search);t.set(n,e),s.replace({...s.location,search:t.toString()})}),[n,s])]}function f(e){const{defaultValue:t,queryString:d=!1,groupId:s}=e,n=x(e),[i,c]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:d}=e;if(0===d.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!j({value:t,tabValues:d}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${d.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=d.find((e=>e.default))??d[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:n}))),[a,o]=u({queryString:d,groupId:s}),[f,m]=function(e){let{groupId:t}=e;const d=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,n]=(0,h.Nk)(d);return[s,(0,r.useCallback)((e=>{d&&n.set(e)}),[d,n])]}({groupId:s}),p=(()=>{const e=a??f;return j({value:e,tabValues:n})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!j({value:e,tabValues:n}))throw new Error(`Can't select invalid tab value=${e}`);c(e),o(e),m(e)}),[o,m,n]),tabValues:n}}var m=d(2389);const p={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var w=d(5893);function k(e){let{className:t,block:d,selectedValue:r,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,n.o5)(),h=e=>{const t=e.currentTarget,d=c.indexOf(t),s=l[d].value;s!==r&&(a(t),i(s))},o=e=>{let t=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const d=c.indexOf(e.currentTarget)+1;t=c[d]??c[0];break}case"ArrowLeft":{const d=c.indexOf(e.currentTarget)-1;t=c[d]??c[c.length-1];break}}t?.focus()};return(0,w.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":d},t),children:l.map((e=>{let{value:t,label:d,attributes:n}=e;return(0,w.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>c.push(e),onKeyDown:o,onClick:h,...n,className:(0,s.Z)("tabs__item",p.tabItem,n?.className,{"tabs__item--active":r===t}),children:d??t},t)}))})}function g(e){let{lazy:t,children:d,selectedValue:s}=e;const n=(Array.isArray(d)?d:[d]).filter(Boolean);if(t){const e=n.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,w.jsx)("div",{className:"margin-top--md",children:n.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function v(e){const t=f(e);return(0,w.jsxs)("div",{className:(0,s.Z)("tabs-container",p.tabList),children:[(0,w.jsx)(k,{...e,...t}),(0,w.jsx)(g,{...e,...t})]})}function b(e){const t=(0,m.Z)();return(0,w.jsx)(v,{...e,children:o(e.children)},String(t))}},1151:(e,t,d)=>{d.d(t,{Z:()=>l,a:()=>i});var r=d(7294);const s={},n=r.createContext(s);function i(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8443.fa78e582.js b/assets/js/8443.4077b0bc.js similarity index 99% rename from assets/js/8443.fa78e582.js rename to assets/js/8443.4077b0bc.js index 88e872f..92f3b46 100644 --- a/assets/js/8443.fa78e582.js +++ b/assets/js/8443.4077b0bc.js @@ -1,2 +1,2 @@ -/*! For license information please see 8443.fa78e582.js.LICENSE.txt */ -(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},2334:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"

"+e(t)+"

"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(2334),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('
'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s{"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s{"use strict";t.exports={wrapper:'',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r{"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h126){if(d>=55296&&d<=56319&&h{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a1)for(var n=1;n{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file +/*! For license information please see 8443.4077b0bc.js.LICENSE.txt */ +(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},2334:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"

"+e(t)+"

"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},2407:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(2334),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('
'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s{"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s{"use strict";t.exports={wrapper:'',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(2407),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r{"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h126){if(d>=55296&&d<=56319&&h{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a1)for(var n=1;n{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.fa78e582.js.LICENSE.txt b/assets/js/8443.4077b0bc.js.LICENSE.txt similarity index 100% rename from assets/js/8443.fa78e582.js.LICENSE.txt rename to assets/js/8443.4077b0bc.js.LICENSE.txt diff --git a/assets/js/88e8816b.85c32873.js b/assets/js/88e8816b.85c32873.js deleted file mode 100644 index 0d48be2..0000000 --- a/assets/js/88e8816b.85c32873.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3444],{757:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),r=s(1151),a=s(4866),i=s(5162);const c={title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing",title:"Transaction validation & processing",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/f7f02009-1f78-426b-8915-f503cdda9671",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Transaction validation & processing",sidebar_position:1,slug:"/f7f02009-1f78-426b-8915-f503cdda9671"},sidebar:"defaultSidebar",previous:{title:"Auth",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"},next:{title:"Params",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}},l={},h=[{value:"Concept",id:"369e904c786849559f583b442cf79b77",level:3},{value:"Governance",id:"8f77e772510844c4a585a1ecfdc4b3d7",level:3},{value:"Parameters",id:"cb3a71b9b28f4cceae1ab341101c1feb",level:3},{value:"Standard decorators",id:"187c1bf7567240508a620dc14c4cce93",level:3},{value:"Custom decorators",id:"7ae4eacc2b8e4ec780c5b1988f58d815",level:3},{value:"Cli syntax & examples",id:"2ec87135e9df43709bc798e10d3f1cf9",level:2},{value:"Transactions",id:"f60ea4930d09400e872edb6979e2ea1d",level:2},{value:"Sign a transaction",id:"21ca23e3ce3e43d782feb4a7d8e39568",level:4},{value:"Sign multiple transactions",id:"f7252dcb2df14b30bf17212b3b223f6a",level:4},{value:"Multi-sign a transaction",id:"3a887933c2504b16a5fb3f9151fabe7b",level:4},{value:"Multi-sign a batch of transactions",id:"22ece625527c4d69aa19526816334088",level:4},{value:"Validate transaction signatures",id:"40a39a4b30a843ee8c4c6759dcaf4ea9",level:4},{value:"Broadcast a transaction",id:"fa061894e92c4158a80861ea974e952c",level:4},{value:"Aux-to-fee",id:"9671efd0273b4424aab5cf5a233621d4",level:4},{value:"Queries",id:"5f7711aaeb824bb0b9f5635eb4c8e38e",level:2},{value:"Query an account",id:"669879c5100547f0b933d19f39ee6808",level:4},{value:"Query all accounts",id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",level:4},{value:"Query auth parameters",id:"16dbb6704fef42abb49cd92a1280ec83",level:4},{value:"Governance",id:"4d87891f998146c7959256f7ba3bb6b5",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"369e904c786849559f583b442cf79b77",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Auth module in KIRA extends the functionality of the Cosmos SDK's ",(0,t.jsx)(n.code,{children:"auth"})," module, focusing on validating and processing transactions within the network. It utilizes a set of ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," to perform basic transaction validity checks before they are included in the blockchain. These checks involve verifying signatures, ensuring correct nonces, and validating auxiliary fields. The Auth module is also responsible for managing accounts, including their creation, storage, and querying, as well as maintaining associated account information."]}),"\n",(0,t.jsxs)(n.p,{children:["KIRA enriches the standard handlers by introducing custom decorators tailored to its network requirements such as custody rules, poor network conditions and token whitelist/blacklist enforcement.. One key area is fee processing; since KIRA does not have a concept of gas fees, it implements specific decorators for this purpose. More information on KIRA's fee processing can be found in the ",(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module."]}),"\n",(0,t.jsx)(n.h3,{id:"8f77e772510844c4a585a1ecfdc4b3d7",children:"Governance"}),"\n",(0,t.jsx)(n.p,{children:"Currently, there is no mechanism implemented to change the Auth module parameters through governance. These parameters are initialized during the application setup, and there is no built-in procedure available to modify them subsequently."}),"\n",(0,t.jsx)(n.h3,{id:"cb3a71b9b28f4cceae1ab341101c1feb",children:"Parameters"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"All parameters pertaining to gas fees are obsolete."})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_memo_characters"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"512"})}),(0,t.jsx)(n.td,{children:"The maximum permitted number of characters in the memo of a transaction"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_sig_limit"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"7"})}),(0,t.jsx)(n.td,{children:"The maximum number of signers for a transaction. A single transaction can have multiple messages and multiple signers"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx_size_cost_per_byte"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsxs)(n.td,{children:["The cost per byte used to compute the gas consumption of a transaction. ",(0,t.jsx)(n.code,{children:"TxSizeCostPerByte * txsize"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_ed25519"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"590"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying ED25519 signatures"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sig_verify_cost_secp256k1"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsx)(n.td,{children:"The gas cost for verifying Secp256k1 signatures"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"187c1bf7567240508a620dc14c4cce93",children:"Standard decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are ",(0,t.jsx)(n.code,{children:"auth"}),"'s standard ",(0,t.jsx)(n.code,{children:"AnteDecorators"})," that are chained together in a specific ",(0,t.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/app/ante/ante.go#L40-L61",children:"order"})," to form an ",(0,t.jsx)(n.code,{children:"AnteHandler"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetUpContextDecorator"})}),(0,t.jsx)(n.td,{children:"Sets up the context and gas meter for transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"RejectExtensionOptionsDecorator"})}),(0,t.jsx)(n.td,{children:"Rejects extension options in protobuf transactions."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MempoolFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Checks if transaction fees meet the minimum fee requirements during CheckTx."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateBasicDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction basics."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"TxTimeoutHeightDecorator"})}),(0,t.jsx)(n.td,{children:"Checks for transaction height timeouts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateMemoDecorator"})}),(0,t.jsx)(n.td,{children:"Validates transaction memos."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ConsumeGasTxSizeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas proportional to the transaction size."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DeductFeeDecorator"})}),(0,t.jsx)(n.td,{children:"Deducts transaction fees from the signer's account (or fee granter's account if fee grant module is enabled)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SetPubKeyDecorator"})}),(0,t.jsx)(n.td,{children:"Sets public keys for signers if not already set in the state machine."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateSigCountDecorator"})}),(0,t.jsx)(n.td,{children:"Validates the number of signatures in the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigGasConsumeDecorator"})}),(0,t.jsx)(n.td,{children:"Consumes gas for each signature."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SigVerificationDecorator"})}),(0,t.jsx)(n.td,{children:"Verifies that all signatures are valid."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"IncrementSequenceDecorator"})}),(0,t.jsx)(n.td,{children:"Increments account sequence numbers for each signer to prevent replay attacks."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"7ae4eacc2b8e4ec780c5b1988f58d815",children:"Custom decorators"}),"\n",(0,t.jsxs)(n.p,{children:["These are KIRA\u2019s custom ",(0,t.jsx)(n.code,{children:"AnteDecorators"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DECORATOR"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})}),(0,t.jsx)(n.th,{children:"MODULE"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CustodyDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator enforces custody rules for users, such as requiring them to have a valid key or a minimum reward amount when sending a transaction. It also checks whether they're using a whitelist, and if so, whether the recipients are on that whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/d6507d16-a726-4383-a84b-85343268b02e",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ZeroGasMeterDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator bypasses gas consumption for transactions by setting the gas limit to 0 and indicating no gas is consumed during processing"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ValidateFeeRangeDecorator"})}),(0,t.jsxs)(n.td,{children:["This decorator checks if the transaction fee is within the range defined by the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),". If the fee is too high or too low, it returns an error"]}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionFeeRegistrationDecorator"})}),(0,t.jsx)(n.td,{children:"This decorator manages the execution fee return process based on the success or failure of a message execution in a block"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PoorNetworkManagementDecorator"})}),(0,t.jsx)(n.td,{children:"Handles the allowed messages when the network is in a poor state"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"Untitled"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"BlackWhiteTokensCheckDecorator"})}),(0,t.jsx)(n.td,{children:"Checks and prevents transactions involving frozen tokens based on the token blacklist and whitelist"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/34367cb0-ee71-418f-9dc5-bcc8823b71e5",children:"Untitled"})})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"2ec87135e9df43709bc798e10d3f1cf9",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"f60ea4930d09400e872edb6979e2ea1d",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"tx sign"})}),(0,t.jsx)(n.th,{children:"Sign transactions generated offline."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx sign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign multiple offline generated transactions. Combines signed transactions into one file using ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign"})}),(0,t.jsx)(n.td,{children:"Sign transactions by a multisig account offline."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx multisign-batch"})}),(0,t.jsxs)(n.td,{children:["Sign a batch of transactions for a multisig account. Does not support the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx validate-signatures"})}),(0,t.jsx)(n.td,{children:"Validate the signatures of a signed transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx broadcast"})}),(0,t.jsx)(n.td,{children:"Broadcast a signed transaction to the network."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tx aux-to-fee"})}),(0,t.jsx)(n.td,{children:"Include aux signer data in a transaction, broadcast it, and send the tip amount to the broadcaster."})]})]})]}),(0,t.jsx)(n.h4,{id:"21ca23e3ce3e43d782feb4a7d8e39568",children:"Sign a transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions that were generated offline using the ",(0,t.jsx)(n.code,{children:"sign"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign \\\n--from=$SIGNER $FLAGS_TX \\\ntx.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"f7252dcb2df14b30bf17212b3b223f6a",children:"Sign multiple transactions"}),(0,t.jsxs)(n.p,{children:["Sign multiple offline generated transactions (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) using the ",(0,t.jsx)(n.code,{children:"sign-batch"})," command. Transactions can be in one file (one tx per line) or in multiple files. For combining the signed transactions into one transaction, use the ",(0,t.jsx)(n.code,{children:"--append"})," flag."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntxs.json > tx.signed.json\n"})}),(0,t.jsx)(n.p,{children:"Or"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx sign-batch \\\n--from=$SIGNER $FLAGS_TX \\\ntx1.json tx2.json tx3.json > tx.signed.json\n"})}),(0,t.jsx)(n.h4,{id:"3a887933c2504b16a5fb3f9151fabe7b",children:"Multi-sign a transaction"}),(0,t.jsxs)(n.p,{children:["Sign transactions generated offline (",(0,t.jsx)(n.code,{children:"-generate-only"})," flag) by a multisig account using the ",(0,t.jsx)(n.code,{children:"multi-sign"})," command. Where ",(0,t.jsx)(n.code,{children:"multisigk1k2k3"})," is the multisig account address, ",(0,t.jsx)(n.code,{children:"k1sig.json"})," is the signature of the first signer, ",(0,t.jsx)(n.code,{children:"k2sig.json"})," is the signature of the second signer, and ",(0,t.jsx)(n.code,{children:"k3sig.json"})," is the signature of the third signer."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign \\\n$FLAGS_TX transaction.json multisigk1k2k3 k1sig.json k2sig.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"22ece625527c4d69aa19526816334088",children:"Multi-sign a batch of transactions"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"multisign-batch"})," works the same way as ",(0,t.jsx)(n.code,{children:"sign-batch"}),", but for multisig accounts. With the difference that the ",(0,t.jsx)(n.code,{children:"--append"})," flag does not exist."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx multisign-batch \\\n$FLAGS_TX transactions.json multisigk1k2k3 k1sigs.json k2sigs.json k3sig.json\n\n"})}),(0,t.jsx)(n.h4,{id:"40a39a4b30a843ee8c4c6759dcaf4ea9",children:"Validate transaction signatures"}),(0,t.jsxs)(n.p,{children:["Validate the signatures of a signed transaction using the ",(0,t.jsx)(n.code,{children:"validate-signatures"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx validate-signatures \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"fa061894e92c4158a80861ea974e952c",children:"Broadcast a transaction"}),(0,t.jsxs)(n.p,{children:["Broadcast a signed transaction to the network using the ",(0,t.jsx)(n.code,{children:"broadcast"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx broadcast \\\n$FLAGS_TX tx.signed.json\n\n"})}),(0,t.jsx)(n.h4,{id:"9671efd0273b4424aab5cf5a233621d4",children:"Aux-to-fee"}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"aux-to-fee"})," command includes the aux signer data in the tx, broadcasts the tx, and sends the tip amount to the broadcaster. ",(0,t.jsx)(n.a,{href:"https://docs.cosmos.network/main/core/tips",children:"Learn more about tip transaction"}),"."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx aux-to-fee \\\n$FLAGS_TX tx.aux.signed.json\n"})})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"5f7711aaeb824bb0b9f5635eb4c8e38e",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"auth account"})}),(0,t.jsx)(n.th,{children:"Query an account by its address."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth accounts"})}),(0,t.jsx)(n.td,{children:"Query all available accounts."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auth params"})}),(0,t.jsx)(n.td,{children:"Query the current authentication parameters."})]})]})]}),(0,t.jsx)(n.h4,{id:"669879c5100547f0b933d19f39ee6808",children:"Query an account"}),(0,t.jsxs)(n.p,{children:["Query an account by its address using the ",(0,t.jsx)(n.code,{children:"account"})," command."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ADDR"}),": The address of the account to query."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth account $ADDR $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"11cbbf596f6f43d4b1c0da7b5dd1efb0",children:"Query all accounts"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"accounts"})," command to query all available accounts."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth accounts $FLAGS_QR\n"})}),(0,t.jsx)(n.h4,{id:"16dbb6704fef42abb49cd92a1280ec83",children:"Query auth parameters"}),(0,t.jsxs)(n.p,{children:["Query the current auth parameters using the ",(0,t.jsx)(n.code,{children:"params"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query auth params $FLAGS_QR\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"4d87891f998146c7959256f7ba3bb6b5",children:"Governance"}),(0,t.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function x(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var t=s(6905);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),r=s(6905),a=s(2466),i=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const r=(0,i.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[i,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[o,h]=j({queryString:s,groupId:r}),[f,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(s);return[r,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),g=(()=>{const e=o??f;return x({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),b(e)}),[h,b,a]),tabValues:a}}var b=s(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function p(e){let{className:n,block:s,selectedValue:t,selectValue:i,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==t&&(o(n),i(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function k(e){const n=f(e);return(0,m.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,m.jsx)(p,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,m.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>i});var t=s(7294);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/891cc8bb.29a0b4d6.js b/assets/js/891cc8bb.29a0b4d6.js new file mode 100644 index 0000000..17dac8c --- /dev/null +++ b/assets/js/891cc8bb.29a0b4d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9502],{965:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>j,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var s=n(5893),r=n(1151),d=n(4866),t=n(5162);const o={title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},c=void 0,l={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools",title:"Spending Pools",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",permalink:"/docs.kira.network/docs/812fdf31-d225-4daf-a4cd-4501cbc00d95",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},sidebar:"defaultSidebar",previous:{title:"Spending Pool",permalink:"/docs.kira.network/docs/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},next:{title:"Staking Collectives",permalink:"/docs.kira.network/docs/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"}},a={},h=[{value:"Concept",id:"bea35ceff8cf4831964d8dcacdcc2131",level:3},{value:"Distribution Rates",id:"bc3faf0a7e1f49d3a463479ff09db543",level:3},{value:"Static Mode",id:"b82e4504d49142d79e5cd93f18439be4",level:4},{value:"Dynamic Mode",id:"93fb4c6d308d4de59a568efa813ab790",level:4},{value:"Claiming Period",id:"2578c5f2c4274f91a73d4345613f14b3",level:3},{value:"Claiming Process",id:"1d5663efe31c473c82a5cc536146d828",level:4},{value:"Claim Expiry",id:"8af04c0644d040dba74ca7bcd8239fda",level:3},{value:"Distribution Weights",id:"4686819c6f3d438db3d2c7f09ce4898d",level:3},{value:"Parameters",id:"6ed779aac23341f085510c75c7e269de",level:2},{value:"Spending Pool",id:"6c32d02fe47148c8a0ddaaca735f4ef1",level:4},{value:"Cli Syntax & Examples",id:"89e3520871a14f32992574e037b2ab56",level:2},{value:"Transactions",id:"6023d3961ce34ce3912f1b9ec59fe03a",level:2},{value:"Create Spending Pool",id:"817c90ab2c244c149009329236fbb7bf",level:4},{value:"Deposit to a Spending Pool",id:"e3018b84156f44ad8e253baa52ea506e",level:4},{value:"Register as Beneficiary",id:"684a3628c6064523bbfc3dc08e6684bb",level:4},{value:"Claim Funds From Spending Pool",id:"62f567c60fbd44daa345b8311a2793ce",level:4},{value:"Queries",id:"0763e82d30c84f298ff2e1a9f3a2fe3f",level:2},{value:"List Pool Names",id:"68e0b890e2084234b467ec8ed1242a88",level:4},{value:"Query Pool by Name",id:"93326c81b7e34b8ca8a919fc8c76e6d8",level:4},{value:"List Pool Proposals",id:"00659f8528cd4ca4a4d1a6b9a8397f68",level:4},{value:"List Pools for a Specific Account",id:"629bf79a0c8147cf9260c970bde7c199",level:4},{value:"Governance",id:"15d28fc3227b4d56878f740761c7741b",level:2},{value:"Propose Pool Update",id:"5c008e4804f148c29dea981834a72ecd",level:4},{value:"Withdraw Funds From Spending Pool",id:"77d10e8ac5ba47829b92b5bcc98a8294",level:4},{value:"Force Funds Distribution",id:"fb63f36d40c042638c751b45d87fb570",level:4}];function x(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h3,{id:"bea35ceff8cf4831964d8dcacdcc2131",children:"Concept"}),"\n",(0,s.jsx)(i.p,{children:"Spending pools are KIRA\u2019s native token distribution system, providing a way to distribute a pooled amount of one or multiple tokens to a defined set of accounts at a predefined rate over a specific period. They can operate in two distinct modes for the rate of distribution: a fixed rate mode and a dynamic rate mode, providing flexibility and customization options for different use cases."}),"\n",(0,s.jsxs)(i.p,{children:['Spending pools are an essential tool for incentivizing network actors such as developers or community managers for their contributions. They are permissionless, allowing any KIRA account to create one and associate it with one or more "owners," which can be governance-defined ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"}),' or individual KIRA accounts. Accounts that are eligible to claim rewards from the spending pool are called "beneficiaries" and can also be defined as ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," or individual KIRA accounts. One of the primary use cases for spending pools is the distribution of ",(0,s.jsx)(i.a,{href:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",children:"Universal Basic Income"})," to KIRA consensus nodes and governance members. Additionally, they are also utilized by the ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:"Staking Collective"})," module as a means to redistribute staking rewards."]}),"\n",(0,s.jsx)(i.h3,{id:"bc3faf0a7e1f49d3a463479ff09db543",children:"Distribution Rates"}),"\n",(0,s.jsx)(i.h4,{id:"b82e4504d49142d79e5cd93f18439be4",children:"Static Mode"}),"\n",(0,s.jsxs)(i.p,{children:["The spending pool mechanism is straightforward - it consists of a distribution rate and a period. Instead of tracking the exact amount owed to each account over time, it simply keeps track of the last time an account made a claim within the claiming period. This information is sufficient to calculate an account's current entitlement by multiplying the rate by the time elapsed since the last claim. Spending pools can accommodate the distribution of multiple different tokens. Any token can be deposited and their individual distribution ",(0,s.jsx)(i.code,{children:"rate"})," can be accurately set, ensuring that the tokens are distributed as intended over the claiming period."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsx)(i.p,{children:"If a token is deposited into the pool but its static rate is not defined, it will not be distributed to any beneficiaries (similar to setting its rate to zero)."})}),"\n",(0,s.jsx)(i.h4,{id:"93fb4c6d308d4de59a568efa813ab790",children:"Dynamic Mode"}),"\n",(0,s.jsxs)(i.p,{children:["The dynamic token rate mechanism, enabled by the ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," field, allows for the proper distribution of tokens over the claiming period, even when the amount of tokens deposited within that period is unpredictable or fluctuates, which would otherwise require continuous rate adjustments. If ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," is set to ",(0,s.jsx)(i.code,{children:"false"}),", the spending pool operates in the static ",(0,s.jsx)(i.code,{children:"rate"})," mode. When it is enabled, the ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," field determines how often the token rates are recalculated, measured in seconds (Unix)."]}),"\n",(0,s.jsxs)(i.p,{children:["In this mode, rates of distribution are re-adjusted at the end of each ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," to ensure the complete allocation of pooled funds by the conclusion of the subsequent period. Therefore, any fund contributions made to the pool after the rate recalibration will effectively be accounted for in the following period. For beneficiaries, it is essential to make a claim at least once within the current ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"}),", and ideally at its closure in order to get the full entitlement; beneficiaries who fail to claim their due rewards within a dynamic period effectively forfeit their share (or remaining share) for that period, which is then redistributed in the next period's calculations. It also implies that beneficiaries who register cannot claim the on-goin period and must wait until the next one to starts before doing so and effectively receive tokens from the pool. The ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:(0,s.jsx)(i.strong,{children:"Staking Collectives"})})," module is an example of where this mechanism is necessary, as it works in conjunction with the Spending Pool module to redistribute staking rewards, which are unpredictable by nature."]}),"\n",(0,s.jsx)(i.h3,{id:"2578c5f2c4274f91a73d4345613f14b3",children:"Claiming Period"}),"\n",(0,s.jsxs)(i.p,{children:["The simplicity of the spending pool mechanism also allows for flexibility in claiming. Unlike traditional wage systems where one typically has to wait until the end of a specific period (usually a month) to receive their earnings, with a spending pool, an account can claim multiple times within the defined claiming period. This allows for a more dynamic and responsive distribution of funds, catering to the needs of the beneficiaries while still ensuring that the tokens are being distributed properly. The ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," parameters define the claiming period during which tokens can be claimed from the pool, providing a precise and transparent system for all parties involved."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"claim-end"})," can be set to ",(0,s.jsx)(i.code,{children:"0"})," to indicate that there is no predetermined end date for the claiming period, allowing beneficiaries to claim their rewards until the spending pool\u2019s funds are fully distributed."]})}),"\n",(0,s.jsx)(i.h4,{id:"1d5663efe31c473c82a5cc536146d828",children:"Claiming Process"}),"\n",(0,s.jsx)(i.p,{children:"To request funds from a spending pool, a beneficiary must be registered. The beneficiary can then send a transaction to request the funds they are entitled to receive. There are several conditions that must be met in order for the funds to be distributed:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The current block time must be within the period defined by the ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," properties."]}),"\n",(0,s.jsx)(i.li,{children:"The spending pool must have a sufficient balance. If the pool does not have enough funds, pooled token will not be sent in any amount. If the pool has sufficient funds, the exact amount owed will be sent to the beneficiary."}),"\n",(0,s.jsx)(i.li,{children:"If the claiming period or the dynamic claim period has elapsed and the funds have not been claimed by the beneficiary they are forfeited."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"If all of these conditions are met, the funds will be distributed to the beneficiary."}),"\n",(0,s.jsx)(i.h3,{id:"8af04c0644d040dba74ca7bcd8239fda",children:"Claim Expiry"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.code,{children:"claim-expiry"})," parameter sets a critical window within which beneficiaries are required to claim their rewards, preserving the integrity of reward calculations amid potential rate changes over time. Should a beneficiary not engage within this window, rewards succeeding the deadline are excluded from subsequent claim calculation. This mechanism ensures that rewards are accurately and fairly distributed even if pool owners operates rate changes, and it underscores the importance of regular claims to secure entitled benefits. Beneficiaries must therefore remain proactive in claiming within each designated period to uphold the system's equitable distribution of rewards"]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})})," command enables the spending pool\u2019s owners to enforce funds distribution. This command is particularly useful before modifying the fixed distribution rate to avoid misdistribution."]})}),"\n",(0,s.jsx)(i.h3,{id:"4686819c6f3d438db3d2c7f09ce4898d",children:"Distribution Weights"}),"\n",(0,s.jsxs)(i.p,{children:["Individual token distribution rates can be set for specific accounts and/or roles using ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Weighted_arithmetic_mean",children:"weights"}),". For example, if a specific account's or a ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"role"}),"\u2019s ",(0,s.jsx)(i.code,{children:"weight"})," is set to ",(0,s.jsx)(i.code,{children:"2"}),", it will receive tokens at 2x the base rate (static or dynamic) compared to other accounts. Weights can also be decimal values, such as ",(0,s.jsx)(i.code,{children:"0.5"}),", which will reduce the token rate for the associated account or role by half. All distribution rates are set to ",(0,s.jsx)(i.code,{children:"1"})," by default."]}),"\n",(0,s.jsx)(i.p,{children:"It's worth noting that any changes made to the weights of registered beneficiaries will result in the recalculation of global token rates, ensuring that the modified rate for one account does not impact the entitlements of others. This means for instance that if the weight for an account is increased, the global rate is increased accordingly, rather than decreasing the entitlements for every other account. This mechanism makes sense from an HR management standpoint, as it allows for proper management of wages among different members of a community or team, ensuring that each person is compensated fairly for their contributions."}),"\n",(0,s.jsx)(i.h2,{id:"6ed779aac23341f085510c75c7e269de",children:"Parameters"}),"\n",(0,s.jsx)(i.h4,{id:"6c32d02fe47148c8a0ddaaca735f4ef1",children:"Spending Pool"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"name"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"Dev salary"'})}),(0,s.jsx)(i.td,{children:"Unique identifier for the spending pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_start"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1610000000"})}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_end"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1620000000"})}),(0,s.jsx)(i.td,{children:"Unix timestamp of the end of the claiming period."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_expiry"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"2592000"})}),(0,s.jsx)(i.td,{children:"Time in seconds after which unclaimed funds are no longer accountable."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"rates"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1ukex,0.8ueth"})}),(0,s.jsx)(i.td,{children:"Rate of distribution in the smallest token denomination per 1 second. This value can be a float number smaller than the actual denomination."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_quorum"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"51"})}),(0,s.jsx)(i.td,{children:"Pool-specific percentage of owner accounts that must vote YES or NO for any of the pool proposals to be valid."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"600"})}),(0,s.jsx)(i.td,{children:"Period of time in seconds that any of the pool proposals must last before passing or being rejected."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_enactment"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"300"})}),(0,s.jsx)(i.td,{children:"Period of time that must pass before any of the pool proposals are enacted."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owners"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"PermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"List of accounts/roles with governance control over the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"beneficiaries"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"WeightedPermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Set of accounts/roles with their respective weights eligible for fund distribution."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"balances"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"100000ukex,20ueth"})}),(0,s.jsx)(i.td,{children:"Array of balances in the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"bool"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"false"})}),(0,s.jsx)(i.td,{children:"Flag to define if the distribution rate is dynamic."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"86400"})}),(0,s.jsx)(i.td,{children:"Time in seconds defining the recalculation period for dynamic rates."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"last_dynamic_rate_calc_time"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1615000000"})}),(0,s.jsx)(i.td,{children:"Timestamp of the last dynamic rate calculation."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"PermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1,2"})}),(0,s.jsx)(i.td,{children:"Array of role identifiers for pool ownership."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l...,kira1o9dl..."})}),(0,s.jsx)(i.td,{children:"Array of account addresses with ownership privileges."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedPermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedRole"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of roles with associated weights."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedAccount"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of accounts with associated weights."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedRole type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})}),(0,s.jsx)(i.th,{})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"role"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1"})}),(0,s.jsx)(i.td,{children:"Identifier for a specific role."}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1.2"})}),(0,s.jsx)(i.td,{children:"Dedicated weight for this role in the fund distribution calculation."}),(0,s.jsx)(i.td,{})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedAccount type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"account"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l..."})}),(0,s.jsx)(i.td,{children:"Account address."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"0.5"})}),(0,s.jsx)(i.td,{children:"Dedicated weight of the account in the fund distribution calculation."})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"89e3520871a14f32992574e037b2ab56",children:"Cli Syntax & Examples"}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(i.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(i.em,{children:"documentation for more details."})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$SIGNER"})})," ",(0,s.jsx)(i.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(i.em,{children:"and"})," ",(0,s.jsxs)(i.em,{children:[(0,s.jsx)(i.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(i.em,{children:"section"})]})}),"\n",(0,s.jsxs)(d.Z,{children:[(0,s.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(i.h2,{id:"6023d3961ce34ce3912f1b9ec59fe03a",children:"Transactions"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"create-spending-pool"})}),(0,s.jsx)(i.th,{children:"Creates a new spending pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.td,{children:"Proposes modifications to a pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"deposit-spending-pool"})}),(0,s.jsx)(i.td,{children:"Allows depositing tokens to the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})}),(0,s.jsx)(i.td,{children:"Registers a beneficiary account."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim-spending-pool"})}),(0,s.jsx)(i.td,{children:"Beneficiaries claim tokens."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"817c90ab2c244c149009329236fbb7bf",children:"Create Spending Pool"}),(0,s.jsxs)(i.p,{children:["Create a new spending pool using the ",(0,s.jsx)(i.code,{children:"create-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."}),", e.g: ",(0,s.jsx)(i.code,{children:"0.5ukex"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending create-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-roles=$OWNERROLES --owner-accounts=$OWNERACCOUNTS \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"e3018b84156f44ad8e253baa52ea506e",children:"Deposit to a Spending Pool"}),(0,s.jsxs)(i.p,{children:["Deposit tokens to a spending pool using the ",(0,s.jsx)(i.code,{children:"deposit-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:"Flags"}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be deposited. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"20000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending deposit-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"684a3628c6064523bbfc3dc08e6684bb",children:"Register as Beneficiary"}),(0,s.jsxs)(i.p,{children:["Register as a beneficiary using the ",(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending register-spending-pool-beneficiary \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})}),(0,s.jsx)(i.h4,{id:"62f567c60fbd44daa345b8311a2793ce",children:"Claim Funds From Spending Pool"}),(0,s.jsxs)(i.p,{children:["Beneficiaries can claim their entitled funds using the ",(0,s.jsx)(i.code,{children:"claim-spending-pool"})," command, provided they are registered. Claims cannot be processed if the claim period has expired or if the pool lacks adequate funds."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending claim-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})})]}),(0,s.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(i.h2,{id:"0763e82d30c84f298ff2e1a9f3a2fe3f",children:"Queries"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"pool-names"})}),(0,s.jsx)(i.th,{children:"Retrieve a list of all existing pool names."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-by-name"})}),(0,s.jsx)(i.td,{children:"Retrieve details of a specific pool by its name."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-proposals"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of all pool proposals."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pools-by-account"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of pool names where a specific account can register or claim tokens."})]})]})]}),(0,s.jsx)(i.h4,{id:"68e0b890e2084234b467ec8ed1242a88",children:"List Pool Names"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all existing pool names."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-shell",children:"sekaid query spending pool-names $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"93326c81b7e34b8ca8a919fc8c76e6d8",children:"Query Pool by Name"}),(0,s.jsx)(i.p,{children:"Retrieve details of a specific pool by its name."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": The name of the pool to query."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-by-name $NAME $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"00659f8528cd4ca4a4d1a6b9a8397f68",children:"List Pool Proposals"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all pool proposals."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-proposals $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"629bf79a0c8147cf9260c970bde7c199",children:"List Pools for a Specific Account"}),(0,s.jsx)(i.p,{children:"Retrieve a list of pool names where a specific KIRA account can register as a beneficiary or claim tokens from."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNT"}),": The KIRA account to check."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pools-by-account $BENEFICIARYACCOUNT $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(i.h2,{id:"15d28fc3227b4d56878f740761c7741b",children:"Governance"}),(0,s.jsx)(i.p,{children:"The operation and parameters of a spending pool is controlled through custom proposals that can only be raised and voted on by the pool's owners. Any KIRA account can create a spending pool and seed it with funds, becoming the first owner in the list. The owner of the spending pool can then assign additional owners, define the rules of the pool's operation, and designate beneficiaries who can claim the pooled tokens."}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.th,{children:"Proposes modifications to a pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"5c008e4804f148c29dea981834a72ecd",children:"Propose Pool Update"}),(0,s.jsxs)(i.p,{children:["Propose an update to a spending pool using the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})," command. This function allows to add new owners or beneficiaries, or to edit any of the pool's existing properties."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."})," (e.g., ",(0,s.jsx)(i.code,{children:"0.5ukex"}),")."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-update-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-accounts=$OWNERACCOUNTS --owner-roles=$OWNERROLES \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"77d10e8ac5ba47829b92b5bcc98a8294",children:"Withdraw Funds From Spending Pool"}),(0,s.jsxs)(i.p,{children:["To create a proposal allowing the withdrawal of funds from the pool to one or more specified accounts, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})," command. Withdrawal is only possible if the receiving accounts are on the list of registered beneficiaries."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be withdrawn. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"1000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-withdraw-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME -beneficiary-accounts=$BENEFICIARYACCOUNTS --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"fb63f36d40c042638c751b45d87fb570",children:"Force Funds Distribution"}),(0,s.jsxs)(i.p,{children:["To force the distribution of tokens to all registered beneficiaries, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})," command. This function should be used before making upgrades on a pool."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-distribute-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]})]})}function j(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,i,n)=>{n.d(i,{Z:()=>t});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var d=n(5893);function t(e){let{children:i,hidden:n,className:t}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,t),hidden:n,children:i})}},4866:(e,i,n)=>{n.d(i,{Z:()=>v});var s=n(7294),r=n(6905),d=n(2466),t=n(6550),o=n(469),c=n(1980),l=n(7392),a=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:i}=e;return!!i&&"object"==typeof i&&"value"in i}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:i,children:n}=e;return(0,s.useMemo)((()=>{const e=i??function(e){return h(e).map((e=>{let{props:{value:i,label:n,attributes:s,default:r}}=e;return{value:i,label:n,attributes:s,default:r}}))}(n);return function(e){const i=(0,l.l)(e,((e,i)=>e.value===i.value));if(i.length>0)throw new Error(`Docusaurus error: Duplicate values "${i.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[i,n])}function j(e){let{value:i,tabValues:n}=e;return n.some((e=>e.value===i))}function p(e){let{queryString:i=!1,groupId:n}=e;const r=(0,t.k6)(),d=function(e){let{queryString:i=!1,groupId:n}=e;if("string"==typeof i)return i;if(!1===i)return null;if(!0===i&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:i,groupId:n});return[(0,c._X)(d),(0,s.useCallback)((e=>{if(!d)return;const i=new URLSearchParams(r.location.search);i.set(d,e),r.replace({...r.location,search:i.toString()})}),[d,r])]}function u(e){const{defaultValue:i,queryString:n=!1,groupId:r}=e,d=x(e),[t,c]=(0,s.useState)((()=>function(e){let{defaultValue:i,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(i){if(!j({value:i,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${i}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return i}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:i,tabValues:d}))),[l,h]=p({queryString:n,groupId:r}),[u,f]=function(e){let{groupId:i}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(i),[r,d]=(0,a.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&d.set(e)}),[n,d])]}({groupId:r}),m=(()=>{const e=l??u;return j({value:e,tabValues:d})?e:null})();(0,o.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:t,selectValue:(0,s.useCallback)((e=>{if(!j({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:i,block:n,selectedValue:s,selectValue:t,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,d.o5)(),a=e=>{const i=e.currentTarget,n=c.indexOf(i),r=o[n].value;r!==s&&(l(i),t(r))},h=e=>{let i=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;i=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;i=c[n]??c[c.length-1];break}}i?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},i),children:o.map((e=>{let{value:i,label:n,attributes:d}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===i?0:-1,"aria-selected":s===i,ref:e=>c.push(e),onKeyDown:h,onClick:a,...d,className:(0,r.Z)("tabs__item",m.tabItem,d?.className,{"tabs__item--active":s===i}),children:n??i},i)}))})}function E(e){let{lazy:i,children:n,selectedValue:r}=e;const d=(Array.isArray(n)?n:[n]).filter(Boolean);if(i){const e=d.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:d.map(((e,i)=>(0,s.cloneElement)(e,{key:i,hidden:e.props.value!==r})))})}function y(e){const i=u(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...i}),(0,b.jsx)(E,{...e,...i})]})}function v(e){const i=(0,f.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(i))}},1151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>t});var s=n(7294);const r={},d=s.createContext(r);function t(e){const i=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(d.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/891cc8bb.a30133ab.js b/assets/js/891cc8bb.a30133ab.js deleted file mode 100644 index cb27c3d..0000000 --- a/assets/js/891cc8bb.a30133ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9502],{965:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var s=n(5893),r=n(1151),d=n(4866),t=n(5162);const o={title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},c=void 0,l={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools",title:"Spending Pools",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},sidebar:"defaultSidebar",previous:{title:"Spending Pool",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},next:{title:"Staking Collectives",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"}},a={},h=[{value:"Concept",id:"bea35ceff8cf4831964d8dcacdcc2131",level:3},{value:"Distribution rates",id:"bc3faf0a7e1f49d3a463479ff09db543",level:3},{value:"Static mode",id:"b82e4504d49142d79e5cd93f18439be4",level:4},{value:"Dynamic mode",id:"93fb4c6d308d4de59a568efa813ab790",level:4},{value:"Claiming period",id:"2578c5f2c4274f91a73d4345613f14b3",level:3},{value:"Claiming process",id:"1d5663efe31c473c82a5cc536146d828",level:4},{value:"Claim expiry",id:"8af04c0644d040dba74ca7bcd8239fda",level:3},{value:"Distribution weights",id:"4686819c6f3d438db3d2c7f09ce4898d",level:3},{value:"Parameters",id:"6ed779aac23341f085510c75c7e269de",level:2},{value:"Spending pool",id:"6c32d02fe47148c8a0ddaaca735f4ef1",level:4},{value:"Cli syntax & examples",id:"89e3520871a14f32992574e037b2ab56",level:2},{value:"Transactions",id:"6023d3961ce34ce3912f1b9ec59fe03a",level:2},{value:"Create spending pool",id:"817c90ab2c244c149009329236fbb7bf",level:4},{value:"Deposit to a spending pool",id:"e3018b84156f44ad8e253baa52ea506e",level:4},{value:"Register as beneficiary",id:"684a3628c6064523bbfc3dc08e6684bb",level:4},{value:"Claim funds from spending pool",id:"62f567c60fbd44daa345b8311a2793ce",level:4},{value:"Queries",id:"0763e82d30c84f298ff2e1a9f3a2fe3f",level:2},{value:"List pool names",id:"68e0b890e2084234b467ec8ed1242a88",level:4},{value:"Query pool by name",id:"93326c81b7e34b8ca8a919fc8c76e6d8",level:4},{value:"List pool proposals",id:"00659f8528cd4ca4a4d1a6b9a8397f68",level:4},{value:"List pools for a specific account",id:"629bf79a0c8147cf9260c970bde7c199",level:4},{value:"Governance",id:"15d28fc3227b4d56878f740761c7741b",level:2},{value:"Propose pool update",id:"5c008e4804f148c29dea981834a72ecd",level:4},{value:"Withdraw funds from spending pool",id:"77d10e8ac5ba47829b92b5bcc98a8294",level:4},{value:"Force funds distribution",id:"fb63f36d40c042638c751b45d87fb570",level:4}];function x(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h3,{id:"bea35ceff8cf4831964d8dcacdcc2131",children:"Concept"}),"\n",(0,s.jsx)(i.p,{children:"Spending pools are KIRA\u2019s native token distribution system, providing a way to distribute a pooled amount of one or multiple tokens to a defined set of accounts at a predefined rate over a specific period. They can operate in two distinct modes for the rate of distribution: a fixed rate mode and a dynamic rate mode, providing flexibility and customization options for different use cases."}),"\n",(0,s.jsxs)(i.p,{children:['Spending pools are an essential tool for incentivizing network actors such as developers or community managers for their contributions. They are permissionless, allowing any KIRA account to create one and associate it with one or more "owners," which can be governance-defined ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"}),' or individual KIRA accounts. Accounts that are eligible to claim rewards from the spending pool are called "beneficiaries" and can also be defined as ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," or individual KIRA accounts. One of the primary use cases for spending pools is the distribution of ",(0,s.jsx)(i.a,{href:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",children:"Universal Basic Income"})," to KIRA consensus nodes and governance members. Additionally, they are also utilized by the ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:"Staking Collective"})," module as a means to redistribute staking rewards."]}),"\n",(0,s.jsx)(i.h3,{id:"bc3faf0a7e1f49d3a463479ff09db543",children:"Distribution rates"}),"\n",(0,s.jsx)(i.h4,{id:"b82e4504d49142d79e5cd93f18439be4",children:"Static mode"}),"\n",(0,s.jsxs)(i.p,{children:["The spending pool mechanism is straightforward - it consists of a distribution rate and a period. Instead of tracking the exact amount owed to each account over time, it simply keeps track of the last time an account made a claim within the claiming period. This information is sufficient to calculate an account's current entitlement by multiplying the rate by the time elapsed since the last claim. Spending pools can accommodate the distribution of multiple different tokens. Any token can be deposited and their individual distribution ",(0,s.jsx)(i.code,{children:"rate"})," can be accurately set, ensuring that the tokens are distributed as intended over the claiming period."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsx)(i.p,{children:"If a token is deposited into the pool but its static rate is not defined, it will not be distributed to any beneficiaries (similar to setting its rate to zero)."})}),"\n",(0,s.jsx)(i.h4,{id:"93fb4c6d308d4de59a568efa813ab790",children:"Dynamic mode"}),"\n",(0,s.jsxs)(i.p,{children:["The dynamic token rate mechanism, enabled by the ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," field, allows for the proper distribution of tokens over the claiming period, even when the amount of tokens deposited within that period is unpredictable or fluctuates, which would otherwise require continuous rate adjustments. If ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," is set to ",(0,s.jsx)(i.code,{children:"false"}),", the spending pool operates in the static ",(0,s.jsx)(i.code,{children:"rate"})," mode. When it is enabled, the ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," field determines how often the token rates are recalculated, measured in seconds (Unix)."]}),"\n",(0,s.jsxs)(i.p,{children:["In this mode, rates of distribution are re-adjusted at the end of each ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," to ensure the complete allocation of pooled funds by the conclusion of the subsequent period. Therefore, any fund contributions made to the pool after the rate recalibration will effectively be accounted for in the following period. For beneficiaries, it is essential to make a claim at least once within the current ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"}),", and ideally at its closure in order to get the full entitlement; beneficiaries who fail to claim their due rewards within a dynamic period effectively forfeit their share (or remaining share) for that period, which is then redistributed in the next period's calculations. It also implies that beneficiaries who register cannot claim the on-goin period and must wait until the next one to starts before doing so and effectively receive tokens from the pool. The ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:(0,s.jsx)(i.strong,{children:"Staking Collectives"})})," module is an example of where this mechanism is necessary, as it works in conjunction with the Spending Pool module to redistribute staking rewards, which are unpredictable by nature."]}),"\n",(0,s.jsx)(i.h3,{id:"2578c5f2c4274f91a73d4345613f14b3",children:"Claiming period"}),"\n",(0,s.jsxs)(i.p,{children:["The simplicity of the spending pool mechanism also allows for flexibility in claiming. Unlike traditional wage systems where one typically has to wait until the end of a specific period (usually a month) to receive their earnings, with a spending pool, an account can claim multiple times within the defined claiming period. This allows for a more dynamic and responsive distribution of funds, catering to the needs of the beneficiaries while still ensuring that the tokens are being distributed properly. The ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," parameters define the claiming period during which tokens can be claimed from the pool, providing a precise and transparent system for all parties involved."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"claim-end"})," can be set to ",(0,s.jsx)(i.code,{children:"0"})," to indicate that there is no predetermined end date for the claiming period, allowing beneficiaries to claim their rewards until the spending pool\u2019s funds are fully distributed."]})}),"\n",(0,s.jsx)(i.h4,{id:"1d5663efe31c473c82a5cc536146d828",children:"Claiming process"}),"\n",(0,s.jsx)(i.p,{children:"To request funds from a spending pool, a beneficiary must be registered. The beneficiary can then send a transaction to request the funds they are entitled to receive. There are several conditions that must be met in order for the funds to be distributed:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The current block time must be within the period defined by the ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," properties."]}),"\n",(0,s.jsx)(i.li,{children:"The spending pool must have a sufficient balance. If the pool does not have enough funds, pooled token will not be sent in any amount. If the pool has sufficient funds, the exact amount owed will be sent to the beneficiary."}),"\n",(0,s.jsx)(i.li,{children:"If the claiming period or the dynamic claim period has elapsed and the funds have not been claimed by the beneficiary they are forfeited."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"If all of these conditions are met, the funds will be distributed to the beneficiary."}),"\n",(0,s.jsx)(i.h3,{id:"8af04c0644d040dba74ca7bcd8239fda",children:"Claim expiry"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.code,{children:"claim-expiry"})," parameter sets a critical window within which beneficiaries are required to claim their rewards, preserving the integrity of reward calculations amid potential rate changes over time. Should a beneficiary not engage within this window, rewards succeeding the deadline are excluded from subsequent claim calculation. This mechanism ensures that rewards are accurately and fairly distributed even if pool owners operates rate changes, and it underscores the importance of regular claims to secure entitled benefits. Beneficiaries must therefore remain proactive in claiming within each designated period to uphold the system's equitable distribution of rewards"]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})})," command enables the spending pool\u2019s owners to enforce funds distribution. This command is particularly useful before modifying the fixed distribution rate to avoid misdistribution."]})}),"\n",(0,s.jsx)(i.h3,{id:"4686819c6f3d438db3d2c7f09ce4898d",children:"Distribution weights"}),"\n",(0,s.jsxs)(i.p,{children:["Individual token distribution rates can be set for specific accounts and/or roles using ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Weighted_arithmetic_mean",children:"weights"}),". For example, if a specific account's or a ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"role"}),"\u2019s ",(0,s.jsx)(i.code,{children:"weight"})," is set to ",(0,s.jsx)(i.code,{children:"2"}),", it will receive tokens at 2x the base rate (static or dynamic) compared to other accounts. Weights can also be decimal values, such as ",(0,s.jsx)(i.code,{children:"0.5"}),", which will reduce the token rate for the associated account or role by half. All distribution rates are set to ",(0,s.jsx)(i.code,{children:"1"})," by default."]}),"\n",(0,s.jsx)(i.p,{children:"It's worth noting that any changes made to the weights of registered beneficiaries will result in the recalculation of global token rates, ensuring that the modified rate for one account does not impact the entitlements of others. This means for instance that if the weight for an account is increased, the global rate is increased accordingly, rather than decreasing the entitlements for every other account. This mechanism makes sense from an HR management standpoint, as it allows for proper management of wages among different members of a community or team, ensuring that each person is compensated fairly for their contributions."}),"\n",(0,s.jsx)(i.h2,{id:"6ed779aac23341f085510c75c7e269de",children:"Parameters"}),"\n",(0,s.jsx)(i.h4,{id:"6c32d02fe47148c8a0ddaaca735f4ef1",children:"Spending pool"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"name"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"Dev salary"'})}),(0,s.jsx)(i.td,{children:"Unique identifier for the spending pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_start"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1610000000"})}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_end"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1620000000"})}),(0,s.jsx)(i.td,{children:"Unix timestamp of the end of the claiming period."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_expiry"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"2592000"})}),(0,s.jsx)(i.td,{children:"Time in seconds after which unclaimed funds are no longer accountable."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"rates"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1ukex,0.8ueth"})}),(0,s.jsx)(i.td,{children:"Rate of distribution in the smallest token denomination per 1 second. This value can be a float number smaller than the actual denomination."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_quorum"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"51"})}),(0,s.jsx)(i.td,{children:"Pool-specific percentage of owner accounts that must vote YES or NO for any of the pool proposals to be valid."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"600"})}),(0,s.jsx)(i.td,{children:"Period of time in seconds that any of the pool proposals must last before passing or being rejected."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_enactment"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"300"})}),(0,s.jsx)(i.td,{children:"Period of time that must pass before any of the pool proposals are enacted."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owners"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"PermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"List of accounts/roles with governance control over the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"beneficiaries"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"WeightedPermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Set of accounts/roles with their respective weights eligible for fund distribution."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"balances"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"100000ukex,20ueth"})}),(0,s.jsx)(i.td,{children:"Array of balances in the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"bool"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"false"})}),(0,s.jsx)(i.td,{children:"Flag to define if the distribution rate is dynamic."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"86400"})}),(0,s.jsx)(i.td,{children:"Time in seconds defining the recalculation period for dynamic rates."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"last_dynamic_rate_calc_time"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1615000000"})}),(0,s.jsx)(i.td,{children:"Timestamp of the last dynamic rate calculation."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"PermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1,2"})}),(0,s.jsx)(i.td,{children:"Array of role identifiers for pool ownership."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l...,kira1o9dl..."})}),(0,s.jsx)(i.td,{children:"Array of account addresses with ownership privileges."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedPermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedRole"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of roles with associated weights."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedAccount"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of accounts with associated weights."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedRole type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})}),(0,s.jsx)(i.th,{})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"role"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1"})}),(0,s.jsx)(i.td,{children:"Identifier for a specific role."}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1.2"})}),(0,s.jsx)(i.td,{children:"Dedicated weight for this role in the fund distribution calculation."}),(0,s.jsx)(i.td,{})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedAccount type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"account"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l..."})}),(0,s.jsx)(i.td,{children:"Account address."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"0.5"})}),(0,s.jsx)(i.td,{children:"Dedicated weight of the account in the fund distribution calculation."})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"89e3520871a14f32992574e037b2ab56",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(i.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(i.em,{children:"documentation for more details."})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$SIGNER"})})," ",(0,s.jsx)(i.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(i.em,{children:"and"})," ",(0,s.jsxs)(i.em,{children:[(0,s.jsx)(i.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(i.em,{children:"section"})]})}),"\n",(0,s.jsxs)(d.Z,{children:[(0,s.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(i.h2,{id:"6023d3961ce34ce3912f1b9ec59fe03a",children:"Transactions"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"create-spending-pool"})}),(0,s.jsx)(i.th,{children:"Creates a new spending pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.td,{children:"Proposes modifications to a pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"deposit-spending-pool"})}),(0,s.jsx)(i.td,{children:"Allows depositing tokens to the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})}),(0,s.jsx)(i.td,{children:"Registers a beneficiary account."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim-spending-pool"})}),(0,s.jsx)(i.td,{children:"Beneficiaries claim tokens."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"817c90ab2c244c149009329236fbb7bf",children:"Create spending pool"}),(0,s.jsxs)(i.p,{children:["Create a new spending pool using the ",(0,s.jsx)(i.code,{children:"create-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."}),", e.g: ",(0,s.jsx)(i.code,{children:"0.5ukex"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending create-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-roles=$OWNERROLES --owner-accounts=$OWNERACCOUNTS \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"e3018b84156f44ad8e253baa52ea506e",children:"Deposit to a spending pool"}),(0,s.jsxs)(i.p,{children:["Deposit tokens to a spending pool using the ",(0,s.jsx)(i.code,{children:"deposit-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:"Flags"}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be deposited. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"20000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending deposit-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"684a3628c6064523bbfc3dc08e6684bb",children:"Register as beneficiary"}),(0,s.jsxs)(i.p,{children:["Register as a beneficiary using the ",(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending register-spending-pool-beneficiary \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})}),(0,s.jsx)(i.h4,{id:"62f567c60fbd44daa345b8311a2793ce",children:"Claim funds from spending pool"}),(0,s.jsxs)(i.p,{children:["Beneficiaries can claim their entitled funds using the ",(0,s.jsx)(i.code,{children:"claim-spending-pool"})," command, provided they are registered. Claims cannot be processed if the claim period has expired or if the pool lacks adequate funds."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending claim-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})})]}),(0,s.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(i.h2,{id:"0763e82d30c84f298ff2e1a9f3a2fe3f",children:"Queries"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"pool-names"})}),(0,s.jsx)(i.th,{children:"Retrieve a list of all existing pool names."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-by-name"})}),(0,s.jsx)(i.td,{children:"Retrieve details of a specific pool by its name."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-proposals"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of all pool proposals."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pools-by-account"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of pool names where a specific account can register or claim tokens."})]})]})]}),(0,s.jsx)(i.h4,{id:"68e0b890e2084234b467ec8ed1242a88",children:"List pool names"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all existing pool names."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-shell",children:"sekaid query spending pool-names $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"93326c81b7e34b8ca8a919fc8c76e6d8",children:"Query pool by name"}),(0,s.jsx)(i.p,{children:"Retrieve details of a specific pool by its name."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": The name of the pool to query."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-by-name $NAME $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"00659f8528cd4ca4a4d1a6b9a8397f68",children:"List pool proposals"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all pool proposals."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-proposals $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"629bf79a0c8147cf9260c970bde7c199",children:"List pools for a specific account"}),(0,s.jsx)(i.p,{children:"Retrieve a list of pool names where a specific KIRA account can register as a beneficiary or claim tokens from."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNT"}),": The KIRA account to check."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pools-by-account $BENEFICIARYACCOUNT $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(i.h2,{id:"15d28fc3227b4d56878f740761c7741b",children:"Governance"}),(0,s.jsx)(i.p,{children:"The operation and parameters of a spending pool is controlled through custom proposals that can only be raised and voted on by the pool's owners. Any KIRA account can create a spending pool and seed it with funds, becoming the first owner in the list. The owner of the spending pool can then assign additional owners, define the rules of the pool's operation, and designate beneficiaries who can claim the pooled tokens."}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.th,{children:"Proposes modifications to a pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"5c008e4804f148c29dea981834a72ecd",children:"Propose pool update"}),(0,s.jsxs)(i.p,{children:["Propose an update to a spending pool using the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})," command. This function allows to add new owners or beneficiaries, or to edit any of the pool's existing properties."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."})," (e.g., ",(0,s.jsx)(i.code,{children:"0.5ukex"}),")."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-update-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-accounts=$OWNERACCOUNTS --owner-roles=$OWNERROLES \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"77d10e8ac5ba47829b92b5bcc98a8294",children:"Withdraw funds from spending pool"}),(0,s.jsxs)(i.p,{children:["To create a proposal allowing the withdrawal of funds from the pool to one or more specified accounts, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})," command. Withdrawal is only possible if the receiving accounts are on the list of registered beneficiaries."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be withdrawn. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"1000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-withdraw-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME -beneficiary-accounts=$BENEFICIARYACCOUNTS --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"fb63f36d40c042638c751b45d87fb570",children:"Force funds distribution"}),(0,s.jsxs)(i.p,{children:["To force the distribution of tokens to all registered beneficiaries, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})," command. This function should be used before making upgrades on a pool."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-distribute-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]})]})}function p(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,i,n)=>{n.d(i,{Z:()=>t});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var d=n(5893);function t(e){let{children:i,hidden:n,className:t}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,t),hidden:n,children:i})}},4866:(e,i,n)=>{n.d(i,{Z:()=>v});var s=n(7294),r=n(6905),d=n(2466),t=n(6550),o=n(469),c=n(1980),l=n(7392),a=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:i}=e;return!!i&&"object"==typeof i&&"value"in i}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:i,children:n}=e;return(0,s.useMemo)((()=>{const e=i??function(e){return h(e).map((e=>{let{props:{value:i,label:n,attributes:s,default:r}}=e;return{value:i,label:n,attributes:s,default:r}}))}(n);return function(e){const i=(0,l.l)(e,((e,i)=>e.value===i.value));if(i.length>0)throw new Error(`Docusaurus error: Duplicate values "${i.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[i,n])}function p(e){let{value:i,tabValues:n}=e;return n.some((e=>e.value===i))}function j(e){let{queryString:i=!1,groupId:n}=e;const r=(0,t.k6)(),d=function(e){let{queryString:i=!1,groupId:n}=e;if("string"==typeof i)return i;if(!1===i)return null;if(!0===i&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:i,groupId:n});return[(0,c._X)(d),(0,s.useCallback)((e=>{if(!d)return;const i=new URLSearchParams(r.location.search);i.set(d,e),r.replace({...r.location,search:i.toString()})}),[d,r])]}function u(e){const{defaultValue:i,queryString:n=!1,groupId:r}=e,d=x(e),[t,c]=(0,s.useState)((()=>function(e){let{defaultValue:i,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(i){if(!p({value:i,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${i}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return i}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:i,tabValues:d}))),[l,h]=j({queryString:n,groupId:r}),[u,f]=function(e){let{groupId:i}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(i),[r,d]=(0,a.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&d.set(e)}),[n,d])]}({groupId:r}),m=(()=>{const e=l??u;return p({value:e,tabValues:d})?e:null})();(0,o.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:t,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:i,block:n,selectedValue:s,selectValue:t,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,d.o5)(),a=e=>{const i=e.currentTarget,n=c.indexOf(i),r=o[n].value;r!==s&&(l(i),t(r))},h=e=>{let i=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;i=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;i=c[n]??c[c.length-1];break}}i?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},i),children:o.map((e=>{let{value:i,label:n,attributes:d}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===i?0:-1,"aria-selected":s===i,ref:e=>c.push(e),onKeyDown:h,onClick:a,...d,className:(0,r.Z)("tabs__item",m.tabItem,d?.className,{"tabs__item--active":s===i}),children:n??i},i)}))})}function y(e){let{lazy:i,children:n,selectedValue:r}=e;const d=(Array.isArray(n)?n:[n]).filter(Boolean);if(i){const e=d.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:d.map(((e,i)=>(0,s.cloneElement)(e,{key:i,hidden:e.props.value!==r})))})}function E(e){const i=u(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...i}),(0,b.jsx)(y,{...e,...i})]})}function v(e){const i=(0,f.Z)();return(0,b.jsx)(E,{...e,children:h(e.children)},String(i))}},1151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>t});var s=n(7294);const r={},d=s.createContext(r);function t(e){const i=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(d.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89f483db.ce9e940f.js b/assets/js/89f483db.ce9e940f.js deleted file mode 100644 index b333003..0000000 --- a/assets/js/89f483db.ce9e940f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[287],{7384:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var s=n(5893),r=n(1151),d=n(4866),t=n(5162);const o={title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},c=void 0,l={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools",title:"Spending Pools",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Spending Pools",sidebar_position:2,slug:"/812fdf31-d225-4daf-a4cd-4501cbc00d95"},sidebar:"defaultSidebar",previous:{title:"Spending Pool",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},next:{title:"Staking Collectives",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"}},a={},h=[{value:"Concept",id:"bea35ceff8cf4831964d8dcacdcc2131",level:3},{value:"Distribution rates",id:"bc3faf0a7e1f49d3a463479ff09db543",level:3},{value:"Static mode",id:"b82e4504d49142d79e5cd93f18439be4",level:4},{value:"Dynamic mode",id:"93fb4c6d308d4de59a568efa813ab790",level:4},{value:"Claiming period",id:"2578c5f2c4274f91a73d4345613f14b3",level:3},{value:"Claiming process",id:"1d5663efe31c473c82a5cc536146d828",level:4},{value:"Claim expiry",id:"8af04c0644d040dba74ca7bcd8239fda",level:3},{value:"Distribution weights",id:"4686819c6f3d438db3d2c7f09ce4898d",level:3},{value:"Parameters",id:"6ed779aac23341f085510c75c7e269de",level:2},{value:"Spending pool",id:"6c32d02fe47148c8a0ddaaca735f4ef1",level:4},{value:"Cli syntax & examples",id:"89e3520871a14f32992574e037b2ab56",level:2},{value:"Transactions",id:"6023d3961ce34ce3912f1b9ec59fe03a",level:2},{value:"Create spending pool",id:"817c90ab2c244c149009329236fbb7bf",level:4},{value:"Deposit to a spending pool",id:"e3018b84156f44ad8e253baa52ea506e",level:4},{value:"Register as beneficiary",id:"684a3628c6064523bbfc3dc08e6684bb",level:4},{value:"Claim funds from spending pool",id:"62f567c60fbd44daa345b8311a2793ce",level:4},{value:"Queries",id:"0763e82d30c84f298ff2e1a9f3a2fe3f",level:2},{value:"List pool names",id:"68e0b890e2084234b467ec8ed1242a88",level:4},{value:"Query pool by name",id:"93326c81b7e34b8ca8a919fc8c76e6d8",level:4},{value:"List pool proposals",id:"00659f8528cd4ca4a4d1a6b9a8397f68",level:4},{value:"List pools for a specific account",id:"629bf79a0c8147cf9260c970bde7c199",level:4},{value:"Governance",id:"15d28fc3227b4d56878f740761c7741b",level:2},{value:"Propose pool update",id:"5c008e4804f148c29dea981834a72ecd",level:4},{value:"Withdraw funds from spending pool",id:"77d10e8ac5ba47829b92b5bcc98a8294",level:4},{value:"Force funds distribution",id:"fb63f36d40c042638c751b45d87fb570",level:4}];function x(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h3,{id:"bea35ceff8cf4831964d8dcacdcc2131",children:"Concept"}),"\n",(0,s.jsx)(i.p,{children:"Spending pools are KIRA\u2019s native token distribution system, providing a way to distribute a pooled amount of one or multiple tokens to a defined set of accounts at a predefined rate over a specific period. They can operate in two distinct modes for the rate of distribution: a fixed rate mode and a dynamic rate mode, providing flexibility and customization options for different use cases."}),"\n",(0,s.jsxs)(i.p,{children:['Spending pools are an essential tool for incentivizing network actors such as developers or community managers for their contributions. They are permissionless, allowing any KIRA account to create one and associate it with one or more "owners," which can be governance-defined ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"}),' or individual KIRA accounts. Accounts that are eligible to claim rewards from the spending pool are called "beneficiaries" and can also be defined as ',(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," or individual KIRA accounts. One of the primary use cases for spending pools is the distribution of ",(0,s.jsx)(i.a,{href:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",children:"Universal Basic Income"})," to KIRA consensus nodes and governance members. Additionally, they are also utilized by the ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:"Staking Collective"})," module as a means to redistribute staking rewards."]}),"\n",(0,s.jsx)(i.h3,{id:"bc3faf0a7e1f49d3a463479ff09db543",children:"Distribution rates"}),"\n",(0,s.jsx)(i.h4,{id:"b82e4504d49142d79e5cd93f18439be4",children:"Static mode"}),"\n",(0,s.jsxs)(i.p,{children:["The spending pool mechanism is straightforward - it consists of a distribution rate and a period. Instead of tracking the exact amount owed to each account over time, it simply keeps track of the last time an account made a claim within the claiming period. This information is sufficient to calculate an account's current entitlement by multiplying the rate by the time elapsed since the last claim. Spending pools can accommodate the distribution of multiple different tokens. Any token can be deposited and their individual distribution ",(0,s.jsx)(i.code,{children:"rate"})," can be accurately set, ensuring that the tokens are distributed as intended over the claiming period."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsx)(i.p,{children:"If a token is deposited into the pool but its static rate is not defined, it will not be distributed to any beneficiaries (similar to setting its rate to zero)."})}),"\n",(0,s.jsx)(i.h4,{id:"93fb4c6d308d4de59a568efa813ab790",children:"Dynamic mode"}),"\n",(0,s.jsxs)(i.p,{children:["The dynamic token rate mechanism, enabled by the ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," field, allows for the proper distribution of tokens over the claiming period, even when the amount of tokens deposited within that period is unpredictable or fluctuates, which would otherwise require continuous rate adjustments. If ",(0,s.jsx)(i.code,{children:"dynamic-rate"})," is set to ",(0,s.jsx)(i.code,{children:"false"}),", the spending pool operates in the static ",(0,s.jsx)(i.code,{children:"rate"})," mode. When it is enabled, the ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," field determines how often the token rates are recalculated, measured in seconds (Unix)."]}),"\n",(0,s.jsxs)(i.p,{children:["In this mode, rates of distribution are re-adjusted at the end of each ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"})," to ensure the complete allocation of pooled funds by the conclusion of the subsequent period. Therefore, any fund contributions made to the pool after the rate recalibration will effectively be accounted for in the following period. For beneficiaries, it is essential to make a claim at least once within the current ",(0,s.jsx)(i.code,{children:"dynamic-rate-period"}),", and ideally at its closure in order to get the full entitlement; beneficiaries who fail to claim their due rewards within a dynamic period effectively forfeit their share (or remaining share) for that period, which is then redistributed in the next period's calculations. It also implies that beneficiaries who register cannot claim the on-goin period and must wait until the next one to starts before doing so and effectively receive tokens from the pool. The ",(0,s.jsx)(i.a,{href:"/ae15b99b-2180-4e35-ba7f-fda8331d3557",children:(0,s.jsx)(i.strong,{children:"Staking Collectives"})})," module is an example of where this mechanism is necessary, as it works in conjunction with the Spending Pool module to redistribute staking rewards, which are unpredictable by nature."]}),"\n",(0,s.jsx)(i.h3,{id:"2578c5f2c4274f91a73d4345613f14b3",children:"Claiming period"}),"\n",(0,s.jsxs)(i.p,{children:["The simplicity of the spending pool mechanism also allows for flexibility in claiming. Unlike traditional wage systems where one typically has to wait until the end of a specific period (usually a month) to receive their earnings, with a spending pool, an account can claim multiple times within the defined claiming period. This allows for a more dynamic and responsive distribution of funds, catering to the needs of the beneficiaries while still ensuring that the tokens are being distributed properly. The ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," parameters define the claiming period during which tokens can be claimed from the pool, providing a precise and transparent system for all parties involved."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"claim-end"})," can be set to ",(0,s.jsx)(i.code,{children:"0"})," to indicate that there is no predetermined end date for the claiming period, allowing beneficiaries to claim their rewards until the spending pool\u2019s funds are fully distributed."]})}),"\n",(0,s.jsx)(i.h4,{id:"1d5663efe31c473c82a5cc536146d828",children:"Claiming process"}),"\n",(0,s.jsx)(i.p,{children:"To request funds from a spending pool, a beneficiary must be registered. The beneficiary can then send a transaction to request the funds they are entitled to receive. There are several conditions that must be met in order for the funds to be distributed:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The current block time must be within the period defined by the ",(0,s.jsx)(i.code,{children:"claim-start"})," and ",(0,s.jsx)(i.code,{children:"claim-end"})," properties."]}),"\n",(0,s.jsx)(i.li,{children:"The spending pool must have a sufficient balance. If the pool does not have enough funds, pooled token will not be sent in any amount. If the pool has sufficient funds, the exact amount owed will be sent to the beneficiary."}),"\n",(0,s.jsx)(i.li,{children:"If the claiming period or the dynamic claim period has elapsed and the funds have not been claimed by the beneficiary they are forfeited."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"If all of these conditions are met, the funds will be distributed to the beneficiary."}),"\n",(0,s.jsx)(i.h3,{id:"8af04c0644d040dba74ca7bcd8239fda",children:"Claim expiry"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.code,{children:"claim-expiry"})," parameter sets a critical window within which beneficiaries are required to claim their rewards, preserving the integrity of reward calculations amid potential rate changes over time. Should a beneficiary not engage within this window, rewards succeeding the deadline are excluded from subsequent claim calculation. This mechanism ensures that rewards are accurately and fairly distributed even if pool owners operates rate changes, and it underscores the importance of regular claims to secure entitled benefits. Beneficiaries must therefore remain proactive in claiming within each designated period to uphold the system's equitable distribution of rewards"]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})})," command enables the spending pool\u2019s owners to enforce funds distribution. This command is particularly useful before modifying the fixed distribution rate to avoid misdistribution."]})}),"\n",(0,s.jsx)(i.h3,{id:"4686819c6f3d438db3d2c7f09ce4898d",children:"Distribution weights"}),"\n",(0,s.jsxs)(i.p,{children:["Individual token distribution rates can be set for specific accounts and/or roles using ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Weighted_arithmetic_mean",children:"weights"}),". For example, if a specific account's or a ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"role"}),"\u2019s ",(0,s.jsx)(i.code,{children:"weight"})," is set to ",(0,s.jsx)(i.code,{children:"2"}),", it will receive tokens at 2x the base rate (static or dynamic) compared to other accounts. Weights can also be decimal values, such as ",(0,s.jsx)(i.code,{children:"0.5"}),", which will reduce the token rate for the associated account or role by half. All distribution rates are set to ",(0,s.jsx)(i.code,{children:"1"})," by default."]}),"\n",(0,s.jsx)(i.p,{children:"It's worth noting that any changes made to the weights of registered beneficiaries will result in the recalculation of global token rates, ensuring that the modified rate for one account does not impact the entitlements of others. This means for instance that if the weight for an account is increased, the global rate is increased accordingly, rather than decreasing the entitlements for every other account. This mechanism makes sense from an HR management standpoint, as it allows for proper management of wages among different members of a community or team, ensuring that each person is compensated fairly for their contributions."}),"\n",(0,s.jsx)(i.h2,{id:"6ed779aac23341f085510c75c7e269de",children:"Parameters"}),"\n",(0,s.jsx)(i.h4,{id:"6c32d02fe47148c8a0ddaaca735f4ef1",children:"Spending pool"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"name"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"Dev salary"'})}),(0,s.jsx)(i.td,{children:"Unique identifier for the spending pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_start"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1610000000"})}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_end"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1620000000"})}),(0,s.jsx)(i.td,{children:"Unix timestamp of the end of the claiming period."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim_expiry"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"2592000"})}),(0,s.jsx)(i.td,{children:"Time in seconds after which unclaimed funds are no longer accountable."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"rates"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1ukex,0.8ueth"})}),(0,s.jsx)(i.td,{children:"Rate of distribution in the smallest token denomination per 1 second. This value can be a float number smaller than the actual denomination."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_quorum"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"51"})}),(0,s.jsx)(i.td,{children:"Pool-specific percentage of owner accounts that must vote YES or NO for any of the pool proposals to be valid."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"600"})}),(0,s.jsx)(i.td,{children:"Period of time in seconds that any of the pool proposals must last before passing or being rejected."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"vote_enactment"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"300"})}),(0,s.jsx)(i.td,{children:"Period of time that must pass before any of the pool proposals are enacted."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owners"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"PermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"List of accounts/roles with governance control over the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"beneficiaries"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"WeightedPermInfo"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Set of accounts/roles with their respective weights eligible for fund distribution."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"balances"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"100000ukex,20ueth"})}),(0,s.jsx)(i.td,{children:"Array of balances in the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"bool"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"false"})}),(0,s.jsx)(i.td,{children:"Flag to define if the distribution rate is dynamic."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dynamic_rate_period"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"86400"})}),(0,s.jsx)(i.td,{children:"Time in seconds defining the recalculation period for dynamic rates."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"last_dynamic_rate_calc_time"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1615000000"})}),(0,s.jsx)(i.td,{children:"Timestamp of the last dynamic rate calculation."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"PermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1,2"})}),(0,s.jsx)(i.td,{children:"Array of role identifiers for pool ownership."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"owner_accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l...,kira1o9dl..."})}),(0,s.jsx)(i.td,{children:"Array of account addresses with ownership privileges."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedPermInfo type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"roles"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedRole"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of roles with associated weights."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"accounts"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"[]WeightedAccount"})}),(0,s.jsx)(i.td,{}),(0,s.jsx)(i.td,{children:"Array of accounts with associated weights."})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedRole type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})}),(0,s.jsx)(i.th,{})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"role"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"uint64"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1"})}),(0,s.jsx)(i.td,{children:"Identifier for a specific role."}),(0,s.jsx)(i.td,{})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1.2"})}),(0,s.jsx)(i.td,{children:"Dedicated weight for this role in the fund distribution calculation."}),(0,s.jsx)(i.td,{})]})]})]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"WeightedAccount type"})}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"NAME"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"TYPE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"EXAMPLE"})}),(0,s.jsx)(i.th,{children:(0,s.jsx)(i.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"account"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"string"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"kira1yq8l..."})}),(0,s.jsx)(i.td,{children:"Account address."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"weight"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"float"})}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"0.5"})}),(0,s.jsx)(i.td,{children:"Dedicated weight of the account in the fund distribution calculation."})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"89e3520871a14f32992574e037b2ab56",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(i.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(i.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(i.em,{children:"documentation for more details."})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$SIGNER"})})," ",(0,s.jsx)(i.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(i.em,{children:(0,s.jsx)(i.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(i.em,{children:"and"})," ",(0,s.jsxs)(i.em,{children:[(0,s.jsx)(i.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(i.em,{children:"section"})]})}),"\n",(0,s.jsxs)(d.Z,{children:[(0,s.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(i.h2,{id:"6023d3961ce34ce3912f1b9ec59fe03a",children:"Transactions"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"create-spending-pool"})}),(0,s.jsx)(i.th,{children:"Creates a new spending pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.td,{children:"Proposes modifications to a pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"deposit-spending-pool"})}),(0,s.jsx)(i.td,{children:"Allows depositing tokens to the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})}),(0,s.jsx)(i.td,{children:"Registers a beneficiary account."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"claim-spending-pool"})}),(0,s.jsx)(i.td,{children:"Beneficiaries claim tokens."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"817c90ab2c244c149009329236fbb7bf",children:"Create spending pool"}),(0,s.jsxs)(i.p,{children:["Create a new spending pool using the ",(0,s.jsx)(i.code,{children:"create-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."}),", e.g: ",(0,s.jsx)(i.code,{children:"0.5ukex"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending create-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-roles=$OWNERROLES --owner-accounts=$OWNERACCOUNTS \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"e3018b84156f44ad8e253baa52ea506e",children:"Deposit to a spending pool"}),(0,s.jsxs)(i.p,{children:["Deposit tokens to a spending pool using the ",(0,s.jsx)(i.code,{children:"deposit-spending-pool"})," command."]}),(0,s.jsx)(i.p,{children:"Flags"}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be deposited. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"20000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending deposit-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"684a3628c6064523bbfc3dc08e6684bb",children:"Register as beneficiary"}),(0,s.jsxs)(i.p,{children:["Register as a beneficiary using the ",(0,s.jsx)(i.code,{children:"register-spending-pool-beneficiary"})," command."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending register-spending-pool-beneficiary \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})}),(0,s.jsx)(i.h4,{id:"62f567c60fbd44daa345b8311a2793ce",children:"Claim funds from spending pool"}),(0,s.jsxs)(i.p,{children:["Beneficiaries can claim their entitled funds using the ",(0,s.jsx)(i.code,{children:"claim-spending-pool"})," command, provided they are registered. Claims cannot be processed if the claim period has expired or if the pool lacks adequate funds."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending claim-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME\n"})})]}),(0,s.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(i.h2,{id:"0763e82d30c84f298ff2e1a9f3a2fe3f",children:"Queries"}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"pool-names"})}),(0,s.jsx)(i.th,{children:"Retrieve a list of all existing pool names."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-by-name"})}),(0,s.jsx)(i.td,{children:"Retrieve details of a specific pool by its name."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pool-proposals"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of all pool proposals."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"pools-by-account"})}),(0,s.jsx)(i.td,{children:"Retrieve a list of pool names where a specific account can register or claim tokens."})]})]})]}),(0,s.jsx)(i.h4,{id:"68e0b890e2084234b467ec8ed1242a88",children:"List pool names"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all existing pool names."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-shell",children:"sekaid query spending pool-names $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"93326c81b7e34b8ca8a919fc8c76e6d8",children:"Query pool by name"}),(0,s.jsx)(i.p,{children:"Retrieve details of a specific pool by its name."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": The name of the pool to query."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-by-name $NAME $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"00659f8528cd4ca4a4d1a6b9a8397f68",children:"List pool proposals"}),(0,s.jsx)(i.p,{children:"Retrieve a list of all pool proposals."}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pool-proposals $FLAGS_QR | jq\n"})}),(0,s.jsx)(i.h4,{id:"629bf79a0c8147cf9260c970bde7c199",children:"List pools for a specific account"}),(0,s.jsx)(i.p,{children:"Retrieve a list of pool names where a specific KIRA account can register as a beneficiary or claim tokens from."}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Args"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNT"}),": The KIRA account to check."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid query spending pools-by-account $BENEFICIARYACCOUNT $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(i.h2,{id:"15d28fc3227b4d56878f740761c7741b",children:"Governance"}),(0,s.jsx)(i.p,{children:"The operation and parameters of a spending pool is controlled through custom proposals that can only be raised and voted on by the pool's owners. Any KIRA account can create a spending pool and seed it with funds, becoming the first owner in the list. The owner of the spending pool can then assign additional owners, define the rules of the pool's operation, and designate beneficiaries who can claim the pooled tokens."}),(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})}),(0,s.jsx)(i.th,{children:"Proposes modifications to a pool."})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})}),(0,s.jsx)(i.td,{children:"Proposes withdrawal from the pool."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})}),(0,s.jsx)(i.td,{children:"Proposes distribution to beneficiaries."})]})]})]}),(0,s.jsx)(i.h4,{id:"5c008e4804f148c29dea981834a72ecd",children:"Propose pool update"}),(0,s.jsxs)(i.p,{children:["Propose an update to a spending pool using the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-update"})," command. This function allows to add new owners or beneficiaries, or to edit any of the pool's existing properties."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMSTART"}),": The exact start time after which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$CLAIMEND"}),": The exact end time before which tokens can be claimed from the pool, expressed in seconds (Unix time)."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$RATES"}),": Decimal rate of distribution in the smallest token denomination per second. Format: ",(0,s.jsx)(i.code,{children:",..."})," (e.g., ",(0,s.jsx)(i.code,{children:"0.5ukex"}),")."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEQUORUM"}),": Pool specific percentage of owner accounts that must vote YES or NO for a proposal to be valid."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEPERIOD"}),": Time in seconds for which a pool proposal must last before being accepted or rejected."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$VOTEENACTMENT"}),": Time in seconds before a passed pool proposal is enacted."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERROLES"}),": List of roles controlling the pool via proposals, e.g: ",(0,s.jsx)(i.code,{children:"1,2,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$OWNERACCOUNTS"}),": List of account addresses controlling the pool via proposals. Format: ",(0,s.jsx)(i.code,{children:"kira1yq8l(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLES"}),": List of roles eligible for funds distribution, e.g: ",(0,s.jsx)(i.code,{children:"3,4,..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYROLEWEIGHTS"}),": Respective token distribution rate multiplier for beneficiary roles, e.g:",(0,s.jsx)(i.code,{children:"1,1.2,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTWEIGHTS"}),": Token distribution rate multiplier for specific accounts, e.g:",(0,s.jsx)(i.code,{children:"0.5,\u2026"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATE"}),": Boolean flag to enable dynamic rate calculation."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DYNAMICRATEPERIOD"}),": Dynamic period in seconds (Unix time)."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-update-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --claim-start=$CLAIMSTART --claim-end=$CLAIMEND --rates=$RATES \\\n--vote-quorum=$VOTEQUORUM --vote-period=$VOTEPERIOD --vote-enactment=$VOTEENACTMENT \\\n--owner-accounts=$OWNERACCOUNTS --owner-roles=$OWNERROLES \\\n--beneficiary-roles=$BENEFICIARYROLES --beneficiary-role-weights=$BENEFICIARYROLEWEIGHTS \\\n--beneficiary-accounts=$BENEFICIARYACCOUNTS --beneficiary-account-weights=$BENEFICIARYACCOUNTWEIGHTS \\\n--dynamic-rate=$DYNAMICRATE --dynamic-rate-period=$DYNAMICRATEPERIOD\n"})}),(0,s.jsx)(i.h4,{id:"77d10e8ac5ba47829b92b5bcc98a8294",children:"Withdraw funds from spending pool"}),(0,s.jsxs)(i.p,{children:["To create a proposal allowing the withdrawal of funds from the pool to one or more specified accounts, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-spending-pool-withdraw"})," command. Withdrawal is only possible if the receiving accounts are on the list of registered beneficiaries."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$BENEFICIARYACCOUNTS"}),": List of account addresses eligible for funds distribution. Format: ",(0,s.jsx)(i.code,{children:"kira1mig9(...),..."}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$AMOUNTS"}),": Coin denomination and amount to be withdrawn. Format: ",(0,s.jsx)(i.code,{children:""}),", e.g., ",(0,s.jsx)(i.code,{children:"1000ukex"}),"."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-withdraw-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME -beneficiary-accounts=$BENEFICIARYACCOUNTS --amount=$AMOUNTS\n"})}),(0,s.jsx)(i.h4,{id:"fb63f36d40c042638c751b45d87fb570",children:"Force funds distribution"}),(0,s.jsxs)(i.p,{children:["To force the distribution of tokens to all registered beneficiaries, a pool owner can use the ",(0,s.jsx)(i.code,{children:"proposal-distribute-spending-pool"})," command. This function should be used before making upgrades on a pool."]}),(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Flags"})}),(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"$NAME"}),": Name of the spending pool registry."]}),"\n"]}),(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sekaid tx spending proposal-distribute-spending-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]})]})}function p(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,i,n)=>{n.d(i,{Z:()=>t});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var d=n(5893);function t(e){let{children:i,hidden:n,className:t}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,t),hidden:n,children:i})}},4866:(e,i,n)=>{n.d(i,{Z:()=>v});var s=n(7294),r=n(6905),d=n(2466),t=n(6550),o=n(469),c=n(1980),l=n(7392),a=n(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:i}=e;return!!i&&"object"==typeof i&&"value"in i}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:i,children:n}=e;return(0,s.useMemo)((()=>{const e=i??function(e){return h(e).map((e=>{let{props:{value:i,label:n,attributes:s,default:r}}=e;return{value:i,label:n,attributes:s,default:r}}))}(n);return function(e){const i=(0,l.l)(e,((e,i)=>e.value===i.value));if(i.length>0)throw new Error(`Docusaurus error: Duplicate values "${i.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[i,n])}function p(e){let{value:i,tabValues:n}=e;return n.some((e=>e.value===i))}function j(e){let{queryString:i=!1,groupId:n}=e;const r=(0,t.k6)(),d=function(e){let{queryString:i=!1,groupId:n}=e;if("string"==typeof i)return i;if(!1===i)return null;if(!0===i&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:i,groupId:n});return[(0,c._X)(d),(0,s.useCallback)((e=>{if(!d)return;const i=new URLSearchParams(r.location.search);i.set(d,e),r.replace({...r.location,search:i.toString()})}),[d,r])]}function u(e){const{defaultValue:i,queryString:n=!1,groupId:r}=e,d=x(e),[t,c]=(0,s.useState)((()=>function(e){let{defaultValue:i,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(i){if(!p({value:i,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${i}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return i}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:i,tabValues:d}))),[l,h]=j({queryString:n,groupId:r}),[u,f]=function(e){let{groupId:i}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(i),[r,d]=(0,a.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&d.set(e)}),[n,d])]}({groupId:r}),m=(()=>{const e=l??u;return p({value:e,tabValues:d})?e:null})();(0,o.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:t,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:i,block:n,selectedValue:s,selectValue:t,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,d.o5)(),a=e=>{const i=e.currentTarget,n=c.indexOf(i),r=o[n].value;r!==s&&(l(i),t(r))},h=e=>{let i=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;i=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;i=c[n]??c[c.length-1];break}}i?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},i),children:o.map((e=>{let{value:i,label:n,attributes:d}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===i?0:-1,"aria-selected":s===i,ref:e=>c.push(e),onKeyDown:h,onClick:a,...d,className:(0,r.Z)("tabs__item",m.tabItem,d?.className,{"tabs__item--active":s===i}),children:n??i},i)}))})}function y(e){let{lazy:i,children:n,selectedValue:r}=e;const d=(Array.isArray(n)?n:[n]).filter(Boolean);if(i){const e=d.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:d.map(((e,i)=>(0,s.cloneElement)(e,{key:i,hidden:e.props.value!==r})))})}function E(e){const i=u(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...i}),(0,b.jsx)(y,{...e,...i})]})}function v(e){const i=(0,f.Z)();return(0,b.jsx)(E,{...e,children:h(e.children)},String(i))}},1151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>t});var s=n(7294);const r={},d=s.createContext(r);function t(e){const i=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(d.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8b922280.826c59dc.js b/assets/js/8b922280.826c59dc.js deleted file mode 100644 index 7d867b1..0000000 --- a/assets/js/8b922280.826c59dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9833],{5991:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var t=s(5893),i=s(1151),a=s(4866),r=s(5162);const c={title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses",title:"Consensus nodes ranks & statuses",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Consensus nodes ranks & statuses",sidebar_position:3,slug:"/9f763be9-fbd3-452f-8c6e-6e418f34856f"},sidebar:"defaultSidebar",previous:{title:"Jailing & slashing",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},next:{title:"Governance",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"}},l={},h=[{value:"Concept",id:"f34eaf6c97424f8fbb0d31fc614016a3",level:2},{value:"Ranking system",id:"729611044b78402fbb895dd8d0689f8a",level:3},{value:"Ranking reset",id:"859920756f1c4be2a75ab4cdbb9e07b4",level:4},{value:"Node statuses",id:"d8558d49b23249b192b6fa0e826d0b63",level:3},{value:"Pausing node",id:"7c60dcc14b8b4b8cbfdfaae7337efff6",level:4},{value:"Initial framework for determining optimal ranking system values",id:"97a5346b720741029b9847fab7461550",level:3},{value:"Parameters",id:"ec9a31c9c0864679b173c41bd2f6e9b8",level:2},{value:"Validator signing info",id:"036395957b234988b35849522764489c",level:4},{value:"Consensus nodes rank",id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",level:4},{value:"Cli syntax & examples",id:"f6aa9bcf8b9548e08851342e55526bfa",level:2},{value:"Transactions",id:"45932a0c158245b491ff1bfa70861f3a",level:2},{value:"Pause validator",id:"93a2e9f8d825484bb2cd185bc9fdd4cf",level:4},{value:"Unpause validator",id:"bb6f0ac5e8b84c06b9254a10d7b17cda",level:4},{value:"Activating an inactive node",id:"48d5192f5c3142b399d5396a637e7304",level:4},{value:"Queries",id:"c752b88fcac34284994386908ab948c0",level:2},{value:"Active staking pools",id:"690a7c0801d741fe998d1384a038f922",level:4},{value:"Inactive staking pools",id:"3458f5bf4ec9483888609b767a139118",level:4},{value:"Governance",id:"9304f58d70a74166a823067103118abe",level:2},{value:"Reset all validators ranks",id:"8dfa1ec3611d407a8074848dba5f9cd3",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"f34eaf6c97424f8fbb0d31fc614016a3",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The KIRA network encourages consensus nodes uptime (i.e maintain an ",(0,t.jsx)(n.code,{children:"active"})," status) by implementing a ranking system that fosters a dynamic and competitive environment to collectively promote network robustness and high participation levels. KIRA network utilizes the ",(0,t.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," consensus protocol, which ensures liveness by requiring a minimum of 2/3 + 1 of the consensus node set's total voting power to sign a block. While KIRA doesn't employ weighted voting and considers each node as having a single vote, the principle remains that it is not guaranteed for every node to sign every block as up to 1/3 of nodes can miss a block at any given time. This can be due to various factors, such as the random distribution of nodes around the world, limited networking connectivity between them, and the limited time that nodes have to wait for consensus votes. Accordingly, KIRA network's ranking system is designed to adapt to these variables. The system's parameters are fine-tuned by KIRA network governance to align individual node performance with the broader network health. This approach ensures high levels of participation while upholding the robustness of the network."]}),"\n",(0,t.jsx)(n.h3,{id:"729611044b78402fbb895dd8d0689f8a",children:"Ranking system"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"The rank value is a measure of a node's performance and is used to inform the governance system about the node's activity. It does not affect the operation or future revenue of the node, but it may impact the visibility of the node in the public ranking system on the frontend application."})}),"\n",(0,t.jsxs)(n.p,{children:["KIRA network's consensus nodes ranking system and the associated node statuses operates on block production and missed blocks counter and is measured through two performance indicators, ",(0,t.jsx)(n.code,{children:"streak"})," and ",(0,t.jsx)(n.code,{children:"rank"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.code,{children:"streak"})," functions like a short-term performance indicator, showing the sequential number of successful block proposals by a consensus node in real time. This is akin to kill-streaks in video games. A failure to propose a single block resets the ",(0,t.jsx)(n.code,{children:"streak"})," to zero and increases the node\u2019s ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," counter."]}),"\n",(0,t.jsxs)(n.li,{children:["In contrast, the ",(0,t.jsx)(n.code,{children:"rank"})," acts as a long-term performance indicator, reflecting the maximum ",(0,t.jsx)(n.code,{children:"streak"})," a validator has ever achieved. It is the main performance indicator."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["While a node's ",(0,t.jsx)(n.code,{children:"rank"})," may decrease due to missed blocks, the ranking system accommodates for the unpredictability of block production chances and waits until a node misses a ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," number of blocks before considering the node ",(0,t.jsx)(n.code,{children:"offline"}),". When a node\u2019s status becomes ",(0,t.jsx)(n.code,{children:"offline"}),", each subsequent missed block, or ",(0,t.jsx)(n.code,{children:"mischance"})," counter, decreases the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a constant amount, ",(0,t.jsx)(n.code,{children:"mischance_rank_decrease_amount"})," (set to 10 by default). However, if a node's status remains ",(0,t.jsx)(n.code,{children:"offline"})," and their ",(0,t.jsx)(n.code,{children:"mischance"})," score surpasses the ",(0,t.jsx)(n.code,{children:"max_mischance"})," value, defined in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", the system will categorize the node as ",(0,t.jsx)(n.code,{children:"inactive"}),". An ",(0,t.jsx)(n.code,{children:"inactive"})," status triggers a decrease in the node's ",(0,t.jsx)(n.code,{children:"rank"})," by a percentage amount, defined by ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," (set to 50% by default)."]}),"\n",(0,t.jsxs)(n.p,{children:["Consequently, ",(0,t.jsx)(n.code,{children:"inactive"})," consensus nodes get removed from the consensus node set and are barred from producing blocks. They can return to active status only when their operators signal readiness to produce blocks again, having resolved their internal issues, by using the ",(0,t.jsx)(n.code,{children:"activate"})," CLI. The governance can adjust all these ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," to ensure a probabilistically fair decrease in a node's rank."]}),"\n",(0,t.jsx)(n.h4,{id:"859920756f1c4be2a75ab4cdbb9e07b4",children:"Ranking reset"}),"\n",(0,t.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,t.jsx)(n.h3,{id:"d8558d49b23249b192b6fa0e826d0b63",children:"Node statuses"}),"\n",(0,t.jsx)(n.p,{children:"Depending on it\u2019s performance and activity, a consensus node can have one of the following statuses:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"STATUS"}),(0,t.jsx)(n.th,{children:"DESCRIPTION"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsxs)(n.td,{children:["Validator is actively participating in consensus, proposing and signing blocks. Every produced block increases validator rank by ",(0,t.jsx)(n.code,{children:"1"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive"})}),(0,t.jsx)(n.td,{children:"Validator stopped producing blocks and didn't signal to the network any planned maintenance. As the result his rank got slashed."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"paused"})}),(0,t.jsx)(n.td,{children:"Validator node entered maintenance node and is not producing blocks. The rank is not impacted."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"jailed"})}),(0,t.jsxs)(n.td,{children:["Validator is jailed (permanently) due to double signing fault. Governance must investigate reason for the fault and unjail node via ",(0,t.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"proposal"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"7c60dcc14b8b4b8cbfdfaae7337efff6",children:"Pausing node"}),"\n",(0,t.jsxs)(n.p,{children:["For planned maintenance where a consensus node must be offline, it can use the ",(0,t.jsx)(n.code,{children:"pause"})," CLI to remove itself from the consensus node set. This will prevent the its rank from being impacted and the node will not be inactivated. When it is back online, the consensus node can use the ",(0,t.jsx)(n.code,{children:"unpause"})," CLI to signal to the network that it is ready to rejoin the consensus node set."]}),"\n",(0,t.jsx)(n.h3,{id:"97a5346b720741029b9847fab7461550",children:"Initial framework for determining optimal ranking system values"}),"\n",(0,t.jsxs)(n.p,{children:["Determining the optimal values for ",(0,t.jsx)(n.code,{children:"max_mischance"})," and ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," depends on various factors, including the specific network conditions, the desired level of decentralization, average time for automatic recovery and the overall network performance. Based on the average block production rate, expected node uptime, and network latency of existing Cosmos ecosystem chains, the following initial values are proposed."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"mischance_confidence"}),": In the Cosmos ecosystem, the average block time is around 5-7 seconds. To give a node a reasonable amount of time to recover from temporary issues, ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," could be set to a value equivalent to 10 minutes, such as 120 blocks (assuming a 5-second block time). This would allow nodes to recover from short-term issues without being unfairly penalized."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"max_mischance"}),": Assuming an expected node uptime of 99% per day (i.e 14.4min of allowed downtime per day) and considering network latency, we can initially set ",(0,t.jsx)(n.code,{children:"max_mischance"})," to 60 blocks (5min) . This means that, after missing 120 blocks, if a node misses another 60 consecutive blocks, its status will change to being ",(0,t.jsx)(n.code,{children:"inactive"})," and its rank will be slashed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"}),": To create a competitive environment that encourages node operators to maintain high performance, we can set the ",(0,t.jsx)(n.code,{children:"inactive_rank_decrease_percent"})," to 20%. This value is significant enough to incentivize operators to address any issues leading to downtime quickly, without being overly punitive for temporary issues."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ec9a31c9c0864679b173c41bd2f6e9b8",children:"Parameters"}),"\n",(0,t.jsx)(n.h4,{id:"036395957b234988b35849522764489c",children:"Validator signing info"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"address"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"kira1yq8l"}),"..."]}),(0,t.jsx)(n.td,{children:"The address of the consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"start_height"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1500"})}),(0,t.jsx)(n.td,{children:"The height at which the consensus node was first a candidate OR was activated."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"inactive_until"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2023-05-09T00:00:00Z"})}),(0,t.jsx)(n.td,{children:"The timestamp consensus node cannot be activated until."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"missed_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsx)(n.td,{children:"Total missed blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"produced_blocks_counter"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4500"})}),(0,t.jsx)(n.td,{children:"Total produced blocks counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance_confidence"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Mischance confidence counter - counts when node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mischance"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Missed blocks counter - counts after ",(0,t.jsx)(n.code,{children:"mischance_confidence"})," is reached and if node is in ",(0,t.jsx)(n.code,{children:"active"})," status."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"last_present_block"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1575648"})}),(0,t.jsx)(n.td,{children:"The last block height signed by the consensus node."})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"dc9234b0f7b04e8fac5bf3b6ec2e909b",children:"Consensus nodes rank"}),"\n",(0,t.jsxs)(n.p,{children:["Nodes rank and statuses are stored in the ",(0,t.jsx)(n.code,{children:"x/staking"})," module and can be queried using ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus nodes & staking pools"})," CLI."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"val_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.ValAddress"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravaloper1yq8lg..."})}),(0,t.jsxs)(n.td,{children:["The validator key, casted to a Cosmos SDK ",(0,t.jsx)(n.code,{children:"ValAddress"})," type."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pub_key"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sdk.PubKey"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"kiravalconspub1zcjduepqw..."})}),(0,t.jsxs)(n.td,{children:["The public key of the validator, accepted as a ",(0,t.jsx)(n.code,{children:"cosmos.crypto.PubKey"})," interface."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"status"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"active"})}),(0,t.jsx)(n.td,{children:"The current status of the validator."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rank"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"112"})}),(0,t.jsx)(n.td,{children:"A long-term statistic implying the longest streak that a validator ever achieved. This helps to judge real-life performance and reliability of validators."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"streak"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"int64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"10"})}),(0,t.jsx)(n.td,{children:"The consecutive number of times that a given validator successfully proposed a block (since the last time they failed) that was accepted into the blockchain state. Similar to kill-streaks in video games, this implies short-term performance."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"f6aa9bcf8b9548e08851342e55526bfa",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"45932a0c158245b491ff1bfa70861f3a",children:"Transactions"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"pause"})}),(0,t.jsx)(n.th,{children:"Pause a consensus node."})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"unpause"})}),(0,t.jsx)(n.td,{children:"Unpause a consensus node."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"activate"})}),(0,t.jsx)(n.td,{children:"Activate a consensus node previously inactivated for downtime"})]})]})]}),(0,t.jsx)(n.h4,{id:"93a2e9f8d825484bb2cd185bc9fdd4cf",children:"Pause validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"bb6f0ac5e8b84c06b9254a10d7b17cda",children:"Unpause validator"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,t.jsx)(n.h4,{id:"48d5192f5c3142b399d5396a637e7304",children:"Activating an inactive node"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,t.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"c752b88fcac34284994386908ab948c0",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"active-staking-pools"})})}),(0,t.jsx)(n.th,{children:"Query active staking pools."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"inactive-staking-pools"})})}),(0,t.jsx)(n.td,{children:"Query inactive staking pools."})]})})]}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Nodes rank and statuses can be queried using the ",(0,t.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:"Consensus node\u2019s dedicated queries"}),"."]})}),(0,t.jsx)(n.h4,{id:"690a7c0801d741fe998d1384a038f922",children:"Active staking pools"}),(0,t.jsx)(n.p,{children:"List all staking pools currently active and accepting delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing active-staking-pools $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"3458f5bf4ec9483888609b767a139118",children:"Inactive staking pools"}),(0,t.jsx)(n.p,{children:"List staking pools that are inactive and cannot accept delegations."}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing inactive-staking-pools $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"9304f58d70a74166a823067103118abe",children:"Governance"}),(0,t.jsx)(n.table,{children:(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"})}),(0,t.jsx)(n.th,{children:"Proposes to reset the ranking of all validators"})]})})}),(0,t.jsx)(n.h4,{id:"8dfa1ec3611d407a8074848dba5f9cd3",children:"Reset all validators ranks"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-reset-whole-validator-rank"}),", is utilized to raise a governance proposal for resetting the whole validator rank."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid tx custom proposal-reset-whole-validator-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>r});s(7294);var t=s(6905);const i={tabItem:"tabItem_Ymn6"};var a=s(5893);function r(e){let{children:n,hidden:s,className:r}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.Z)(i.tabItem,r),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var t=s(7294),i=s(6905),a=s(2466),r=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:i}}=e;return{value:n,label:s,attributes:t,default:i}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const i=(0,r.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(i.location.search);n.set(a,e),i.replace({...i.location,search:n.toString()})}),[a,i])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,a=u(e),[r,d]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[o,h]=j({queryString:s,groupId:i}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,a]=(0,l.Nk)(s);return[i,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:i}),m=(()=>{const e=o??b;return x({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:r,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=s(5893);function v(e){let{className:n,block:s,selectedValue:t,selectValue:r,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),i=c[s].value;i!==t&&(o(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,i.Z)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:i}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===i));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function k(e){const n=b(e);return(0,p.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(v,{...e,...n}),(0,p.jsx)(g,{...e,...n})]})}function y(e){const n=(0,f.Z)();return(0,p.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>r});var t=s(7294);const i={},a=t.createContext(i);function r(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8bb30d63.7865a799.js b/assets/js/8bb30d63.7865a799.js deleted file mode 100644 index 8f6090c..0000000 --- a/assets/js/8bb30d63.7865a799.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5949],{9843:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=r(5893),n=r(1151);r(4866),r(5162);const s={title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling",title:"Network Parameter Handling",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},sidebar:"defaultSidebar",previous:{title:"Params",permalink:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},next:{title:"INTERX | Middleware",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"}},u={},i=[{value:"Concept",id:"f1e5640fc58341d29bd64a960ce143c5",level:3}];function c(e){const t={code:"code",h3:"h3",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h3,{id:"f1e5640fc58341d29bd64a960ce143c5",children:"Concept"}),"\n",(0,a.jsxs)(t.p,{children:["The Params module is extended from the Cosmos SDK's ",(0,a.jsx)(t.code,{children:"params"})," module. It provides a global parameter store for modules within the network. The module comprises two key types: Keeper and Subspace. Subspace allows for isolated namespaces in the parameter store, where keys are prefixed with a designated namespace, while the Keeper has permission to access all existing namespaces."]}),"\n",(0,a.jsxs)(t.p,{children:["Currently, KIRA only uses the Params module as it is a dependency of the Auth module. The Params module ensures that the Auth module parameters can be modified as needed through the ",(0,a.jsx)(t.code,{children:"x/gov"})," router via a proposal. However, as these parameters are not currently being utilized, the Params module might be deprecated in the future."]}),"\n",(0,a.jsx)(t.p,{children:"For example, here is how the Auth module's Params structure is defined in the Protobuf message format:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-protobuf",children:"protoCopy code\nmessage Params {\n uint64 max_memo_characters = 1;\n uint64 tx_sig_limit = 2;\n uint64 tx_size_cost_per_byte = 3;\n uint64 sig_verify_cost_ed25519 = 4;\n uint64 sig_verify_cost_secp256k1 = 5;\n}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),s=r(2466),o=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,s=m(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[i,d]=f({queryString:r,groupId:n}),[h,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,s]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:n}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,s]),tabValues:s}}var b=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:o,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),n=l[r].value;n!==a&&(i(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,n.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>o});var a=r(7294);const n={},s=a.createContext(n);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8bb30d63.db7cdab9.js b/assets/js/8bb30d63.db7cdab9.js new file mode 100644 index 0000000..21da3ea --- /dev/null +++ b/assets/js/8bb30d63.db7cdab9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5949],{9843:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=r(5893),n=r(1151);r(4866),r(5162);const s={title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling",title:"Network Parameter Handling",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Params",slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",permalink:"/docs.kira.network/docs/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Network Parameter Handling",sidebar_position:1,slug:"/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},sidebar:"defaultSidebar",previous:{title:"Params",permalink:"/docs.kira.network/docs/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"},next:{title:"INTERX | Middleware",permalink:"/docs.kira.network/docs/be25ed12-b476-4a07-8966-9bc4062bd746"}},u={},i=[{value:"Concept",id:"f1e5640fc58341d29bd64a960ce143c5",level:3}];function c(e){const t={code:"code",h3:"h3",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h3,{id:"f1e5640fc58341d29bd64a960ce143c5",children:"Concept"}),"\n",(0,a.jsxs)(t.p,{children:["The Params module is extended from the Cosmos SDK's ",(0,a.jsx)(t.code,{children:"params"})," module. It provides a global parameter store for modules within the network. The module comprises two key types: Keeper and Subspace. Subspace allows for isolated namespaces in the parameter store, where keys are prefixed with a designated namespace, while the Keeper has permission to access all existing namespaces."]}),"\n",(0,a.jsxs)(t.p,{children:["Currently, KIRA only uses the Params module as it is a dependency of the Auth module. The Params module ensures that the Auth module parameters can be modified as needed through the ",(0,a.jsx)(t.code,{children:"x/gov"})," router via a proposal. However, as these parameters are not currently being utilized, the Params module might be deprecated in the future."]}),"\n",(0,a.jsx)(t.p,{children:"For example, here is how the Auth module's Params structure is defined in the Protobuf message format:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-protobuf",children:"protoCopy code\nmessage Params {\n uint64 max_memo_characters = 1;\n uint64 tx_sig_limit = 2;\n uint64 tx_size_cost_per_byte = 3;\n uint64 sig_verify_cost_ed25519 = 4;\n uint64 sig_verify_cost_secp256k1 = 5;\n}\n"})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),s=r(2466),o=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,s=m(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[i,d]=f({queryString:r,groupId:n}),[h,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,s]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:n}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,s]),tabValues:s}}var b=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:o,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),n=l[r].value;n!==a&&(i(t),o(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,n.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>o});var a=r(7294);const n={},s=a.createContext(n);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8bef1ec2.f1859b8a.js b/assets/js/8bef1ec2.f1859b8a.js deleted file mode 100644 index 4a890ca..0000000 --- a/assets/js/8bef1ec2.f1859b8a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[660],{415:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},u=void 0,l={id:"Stack/INTERX--Middleware/Command-Line-Interface",title:"Command Line Interface",description:"Documentation coming soon\u2026",source:"@site/tabs/docs/Stack/INTERX--Middleware/Command-Line-Interface.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Command Line Interface",sidebar_position:5,slug:"/39242b54-c86a-4406-82f9-49cad4ed7c5a"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b"},next:{title:"MIRO | Frontend",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,r.a)(),...e.components};return(0,a.jsx)(t.p,{children:(0,a.jsx)(t.em,{children:"Documentation coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(7294),r=n(6905),o=n(2466),u=n(6550),l=n(469),s=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[u,s]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=b({queryString:n,groupId:r}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return m({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:u,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:u,tabValues:l}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=s.indexOf(t),r=l[n].value;r!==a&&(i(t),u(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=s.indexOf(e.currentTarget)+1;t=s[n]??s[0];break}case"ArrowLeft":{const n=s.indexOf(e.currentTarget)-1;t=s[n]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(I,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>u});var a=n(7294);const r={},o=a.createContext(r);function u(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:u(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8daae4c3.a24bb1ae.js b/assets/js/8daae4c3.a24bb1ae.js deleted file mode 100644 index 83dcc37..0000000 --- a/assets/js/8daae4c3.a24bb1ae.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2949],{7315:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var a=n(5893),i=n(1151);n(4866),n(5162);const r={title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},s=void 0,o={id:"KIRA\u2019s-Economics/Initial-Liquidity-Offering",title:"Initial Liquidity Offering",description:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Initial-Liquidity-Offering.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",permalink:"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},sidebar:"defaultSidebar",previous:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},next:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3"}},l={},d=[];function u(e){const t={li:"li",ol:"ol",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success."}),"\n",(0,a.jsx)(t.p,{children:"The ILO procedure is as follows:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"dApp deployer creates a governance proposal for app submission."}),"\n",(0,a.jsx)(t.li,{children:"The minimum dApp bond must be committed within the proposal duration, set to 7 days by default. This value is set to 1,000,000 KEX by default."}),"\n",(0,a.jsx)(t.li,{children:"For the proposal to pass, 1% of the minimum dApp bond must be committed by the dApp deployer before 7 days have elapsed. The remaining 99% of the bond can be supplied by any other users."}),"\n",(0,a.jsx)(t.li,{children:"If the bonding conditions cannot be satisfied, all participants are refunded - otherwise, the dApp can be launched."}),"\n",(0,a.jsx)(t.li,{children:"Once the dApp has launched, dApp tokens representing stakeholders\u2019 ownership of the dApp are minted according to the token supply specified in the app proposal. They are then paired with all the bonded KEX in a v2 Uniswap-style AMM pool defined by a simple x*y=k bonding curve."}),"\n",(0,a.jsx)(t.li,{children:"A spending pool is created for users who have bonded KEX. They are eligible to claim LP tokens from the spending pool, proportional to their respective bonded amounts. Depending on the dApp proposal, these LP tokens may be immediately claimable or progressively unlocked over time."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To make all classical forms of raising capital and launching dApps possible, KIRA allows for dApp proposals to define whether additional tokens may be issued during and/or after the dApp launch by the dApp deployer. These are referred to as premint and postmint. The unlock rate of the spending pool is also defined by the dApp proposal."}),"\n",(0,a.jsx)(t.p,{children:"Here are a few examples of ways in which these configurable parameters can be used:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Fair Launch - no extra tokens may be issued and all LP coins are immediately unlocked. As an example use case, a lone developer creating a public good dApp might employ this parameter configuration, as the application will not need future emissions to incentivize users. It could also be used by applications funded by the KIRA treasury."}),"\n",(0,a.jsx)(t.li,{children:"User-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens. The premint allowance is set to a small reasonable amount while the postmint function is not used. As an example use case, a small team that needs to hire a few developers could configure their token emissions like this. This would allow them to establish a token treasury and sell their stake to users that are locked in the LP."}),"\n",(0,a.jsx)(t.li,{children:"Investor-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens; premint and postmint have allowances. As an example use case, a large-scale project with more complexity could configure its emissions like this. Premint and postmint would enable the creation of treasury and sale of SAFT agreements. The time when these investor tokens would be issued during the \u201cpostmint\u201d event could be clearly defined. An address for postminted tokens could be set up by the dApp deployer as a vesting mechanism to easily distribute tokens to their rightful owners as well as configure an optional \u201cdrip\u201d for the postmint if needed, so as to not damage investor confidence with an immediate increase of the token supply."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To align ILO participants' incentives with the dApp's success, a minimum threshold is defined for the amount of KEX collateral in the pool, set to 100,000 KEX by default. If the KEX collateral in the pool falls below this threshold, the dApp will enter a depreciation phase, set to around 28 days by default, after which dApp execution will be halted."}),"\n",(0,a.jsxs)(t.p,{children:["To make it worthwhile for validators to execute the dApp code, the dApp LP pool is utilized to create those incentives. Any swaps, deposits, and redemptions will incur a fee that is configurable by governance. The fixed fee will be applied after the swap from where 50% of the corresponding tokens must be burned (deminted), 25% given as a reward to liquidity providers and the remaining 25% will be split between ",(0,a.jsx)("u",{children:"active"})," dApp executors, and verifiers (fishermen). This way pool can provide immediate incentives to the operators and LP providers. Additionally, the premint and postmint tokens can be used to incentivize operators before dApp starts to generate revenue."]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var r=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),i=n(6905),r=n(2466),s=n(6550),o=n(469),l=n(1980),d=n(7392),u=n(12);function c(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return c(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,r=p(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[d,c]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:i}),g=(()=>{const e=d??m;return h({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),c(e),b(e)}),[c,b,r]),tabValues:r}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=o[n].value;i!==a&&(d(t),s(i))},c=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:c,onClick:u,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:c(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>s});var a=n(7294);const i={},r=a.createContext(i);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8daae4c3.bd20f0dc.js b/assets/js/8daae4c3.bd20f0dc.js new file mode 100644 index 0000000..fc05ba4 --- /dev/null +++ b/assets/js/8daae4c3.bd20f0dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2949],{7315:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var a=n(5893),i=n(1151);n(4866),n(5162);const r={title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},s=void 0,o={id:"KIRA\u2019s-Economics/Initial-Liquidity-Offering",title:"Initial Liquidity Offering",description:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Initial-Liquidity-Offering.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Initial Liquidity Offering",sidebar_position:3,slug:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},sidebar:"defaultSidebar",previous:{title:"Rewards and Incentives Structure",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},next:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3"}},l={},d=[];function u(e){const t={li:"li",ol:"ol",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success."}),"\n",(0,a.jsx)(t.p,{children:"The ILO procedure is as follows:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"dApp deployer creates a governance proposal for app submission."}),"\n",(0,a.jsx)(t.li,{children:"The minimum dApp bond must be committed within the proposal duration, set to 7 days by default. This value is set to 1,000,000 KEX by default."}),"\n",(0,a.jsx)(t.li,{children:"For the proposal to pass, 1% of the minimum dApp bond must be committed by the dApp deployer before 7 days have elapsed. The remaining 99% of the bond can be supplied by any other users."}),"\n",(0,a.jsx)(t.li,{children:"If the bonding conditions cannot be satisfied, all participants are refunded - otherwise, the dApp can be launched."}),"\n",(0,a.jsx)(t.li,{children:"Once the dApp has launched, dApp tokens representing stakeholders\u2019 ownership of the dApp are minted according to the token supply specified in the app proposal. They are then paired with all the bonded KEX in a v2 Uniswap-style AMM pool defined by a simple x*y=k bonding curve."}),"\n",(0,a.jsx)(t.li,{children:"A spending pool is created for users who have bonded KEX. They are eligible to claim LP tokens from the spending pool, proportional to their respective bonded amounts. Depending on the dApp proposal, these LP tokens may be immediately claimable or progressively unlocked over time."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To make all classical forms of raising capital and launching dApps possible, KIRA allows for dApp proposals to define whether additional tokens may be issued during and/or after the dApp launch by the dApp deployer. These are referred to as premint and postmint. The unlock rate of the spending pool is also defined by the dApp proposal."}),"\n",(0,a.jsx)(t.p,{children:"Here are a few examples of ways in which these configurable parameters can be used:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Fair Launch - no extra tokens may be issued and all LP coins are immediately unlocked. As an example use case, a lone developer creating a public good dApp might employ this parameter configuration, as the application will not need future emissions to incentivize users. It could also be used by applications funded by the KIRA treasury."}),"\n",(0,a.jsx)(t.li,{children:"User-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens. The premint allowance is set to a small reasonable amount while the postmint function is not used. As an example use case, a small team that needs to hire a few developers could configure their token emissions like this. This would allow them to establish a token treasury and sell their stake to users that are locked in the LP."}),"\n",(0,a.jsx)(t.li,{children:"Investor-Assisted Launch - The LP Spending Pool is configured to slowly distribute LP tokens; premint and postmint have allowances. As an example use case, a large-scale project with more complexity could configure its emissions like this. Premint and postmint would enable the creation of treasury and sale of SAFT agreements. The time when these investor tokens would be issued during the \u201cpostmint\u201d event could be clearly defined. An address for postminted tokens could be set up by the dApp deployer as a vesting mechanism to easily distribute tokens to their rightful owners as well as configure an optional \u201cdrip\u201d for the postmint if needed, so as to not damage investor confidence with an immediate increase of the token supply."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"To align ILO participants' incentives with the dApp's success, a minimum threshold is defined for the amount of KEX collateral in the pool, set to 100,000 KEX by default. If the KEX collateral in the pool falls below this threshold, the dApp will enter a depreciation phase, set to around 28 days by default, after which dApp execution will be halted."}),"\n",(0,a.jsxs)(t.p,{children:["To make it worthwhile for validators to execute the dApp code, the dApp LP pool is utilized to create those incentives. Any swaps, deposits, and redemptions will incur a fee that is configurable by governance. The fixed fee will be applied after the swap from where 50% of the corresponding tokens must be burned (deminted), 25% given as a reward to liquidity providers and the remaining 25% will be split between ",(0,a.jsx)("u",{children:"active"})," dApp executors, and verifiers (fishermen). This way pool can provide immediate incentives to the operators and LP providers. Additionally, the premint and postmint tokens can be used to incentivize operators before dApp starts to generate revenue."]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var r=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),i=n(6905),r=n(2466),s=n(6550),o=n(469),l=n(1980),d=n(7392),u=n(12);function c(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return c(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,r=p(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[d,c]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:i}),g=(()=>{const e=d??m;return h({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),c(e),b(e)}),[c,b,r]),tabValues:r}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=o[n].value;i!==a&&(d(t),s(i))},c=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:c,onClick:u,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:c(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>s});var a=n(7294);const i={},r=a.createContext(i);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9059b3fd.073384b7.js b/assets/js/9059b3fd.073384b7.js new file mode 100644 index 0000000..4a2043f --- /dev/null +++ b/assets/js/9059b3fd.073384b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[315],{1641:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Multistaking/index",title:"Multistaking",description:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/64eb7e84-ab20-454d-953f-57b1cf457790",permalink:"/docs.kira.network/docs/64eb7e84-ab20-454d-953f-57b1cf457790",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/docs/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},next:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/docs/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"}},u={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity."}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:(0,a.jsx)(t.code,{children:"x/staking"})}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:" "}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/multistaking",children:(0,a.jsx)(t.code,{children:"x/multistaking"})})]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),g=(()=>{const e=l??m;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{g&&u(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9059b3fd.8d09d41c.js b/assets/js/9059b3fd.8d09d41c.js deleted file mode 100644 index a76e691..0000000 --- a/assets/js/9059b3fd.8d09d41c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[315],{1641:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Multistaking/index",title:"Multistaking",description:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/64eb7e84-ab20-454d-953f-57b1cf457790",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},next:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"}},u={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity."}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:(0,a.jsx)(t.code,{children:"x/staking"})}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:" "}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/multistaking",children:(0,a.jsx)(t.code,{children:"x/multistaking"})})]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),g=(()=>{const e=l??m;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{g&&u(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90d45f8c.17cd2934.js b/assets/js/90d45f8c.17cd2934.js deleted file mode 100644 index 6d333b5..0000000 --- a/assets/js/90d45f8c.17cd2934.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1366],{7146:(e,d,n)=>{n.r(d),n.d(d,{assets:()=>h,contentTitle:()=>l,default:()=>j,frontMatter:()=>c,metadata:()=>o,toc:()=>a});var s=n(5893),r=n(1151),t=n(4866),i=n(5162);const c={title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},l=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Network-Properties",title:"Network Properties",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Network-Properties.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/b9b95792-b936-4603-8a46-15566f24e3c0",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},sidebar:"defaultSidebar",previous:{title:"Polls",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},next:{title:"Identity Registrar",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92"}},h={},a=[{value:"Concept",id:"ebfaaf65269241b9a32a9bfeea35b3c8",level:2},{value:"Parameters",id:"6b3d949219294d29982ae09b9f70a8ba",level:2},{value:"Cli syntax & examples",id:"dd165dbb682e4cb9b41ccbecbe8874da",level:2},{value:"Transactions",id:"c7b1bcd0db474f468e03cbbcfdb65094",level:2},{value:"Queries",id:"d0f3dff516504a20955bde702560a0c6",level:2},{value:"Query network properties",id:"21971178f4ac42c0be7dcc5885715064",level:4},{value:"Governance",id:"21a4bf9b246540458e513ba56c82c5d5",level:2},{value:"Set a network property",id:"28134ca7a8f74dc7919c699ec7927cf3",level:4}];function x(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.h2,{id:"ebfaaf65269241b9a32a9bfeea35b3c8",children:"Concept"}),"\n",(0,s.jsx)(d.p,{children:"KIRA Network utilizes a unique set of on-chain variables known as Network Properties to help control and regulate various behaviors and characteristics of the SEKAI application on a network-wide basis. These parameters serve as the operational gears of the system, allowing for the adjustment of pivotal features such as KEX inflation rate, the minimum transaction fee for any on-chain message to ensure global transaction spam protection, or even the required minimum percentage of governance members necessary to vote on a proposal, making it valid. Such versatility is particularly beneficial, considering the ever-evolving needs of the community and the potential alterations in the network's operational dynamics. Any changes to these network properties require consensus from the network's governance, ensuring that any alterations align with the wishes of the majority of network participants."}),"\n",(0,s.jsx)(d.h2,{id:"6b3d949219294d29982ae09b9f70a8ba",children:"Parameters"}),"\n",(0,s.jsxs)(d.p,{children:["All network properties and their respective default values (which can also be found ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),")"]}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"#"}),(0,s.jsx)(d.th,{children:"NAME"}),(0,s.jsx)(d.th,{children:"TYPE"}),(0,s.jsx)(d.th,{children:"GENESIS"}),(0,s.jsx)(d.th,{children:"BOUNDS (min - max)"}),(0,s.jsx)(d.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"1"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that must be sent in order to submit any on-chain message. Global transaction spam protection measure."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"2"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be sent along any transaction type. Prevents potential loss of funds while specifying wrong transaction fee amount by the user."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"3"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"vote_quorum"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"33"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Required, minimum percentage of governance members with permission to vote on a given proposal to make said proposal valid. If minimum quorum is not reached then passing said proposal is not possible."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"4"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum time in seconds that proposals must be active and default time for all proposals to remain pending. Duration time of individual proposal can be modified by governance as explained ",(0,s.jsx)(d.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"here"}),"."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"5"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"proposal_enactment_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum time in seconds for the proposals to take effect after they passed"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"6"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_end_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of blocks during which the proposals MUST remain active. This is used to prevent edge cases where ",(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})," is set to value shorter than a single block time, thus making it impossible to vote in time."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"7"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_enactment_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum number of blocks that must pass after proposal passed for the proposal to take effect."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"8"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_foreign_fee_payments"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allow transaction fee payments with tokens other than KEX"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"9"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"When it's certain that validator is offline and failed to participate in a block production, decrease its global rank by the specified value."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"10"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["How many consecutive blocks must the validator miss for the network to change validator status to ",(0,s.jsx)(d.code,{children:"inactive"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"11"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_confidence"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"110"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"How many consecutive blocks must the validator miss for the network to be certain that the node is offline and not participating in the block signing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"12"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["By what percentage should the validator global rank decrease when the said validator node status changes to ",(0,s.jsx)(d.code,{children:"inactive"})," due to not participating in signing new blocks."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"13"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_validators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["When ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur, sets the maximum value in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be transferred between accounts."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"14"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"poor_network_max_bank_send"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of consensus nodes that must be active for the network to be considered healthy. If number of validators falls below this value then ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"15"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unjail_max_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"600"})}),(0,s.jsxs)(d.td,{children:["< ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Maximum amount of time in seconds which a jailed node has to request to be unjailed before becoming permanently jailed (tombstoned)."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"16"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_whitelist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enables whitelist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"17"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_blacklist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enable blacklist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"18"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_identity_approval_tip"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum tip in ",(0,s.jsx)(d.code,{children:"ukex"})," amount that must be sent along ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})," record verification request"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"19"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unique_identity_keys"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"string"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"moniker,username"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Key values that must remain unique in the ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"20"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ubi_hardcap"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"6000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum amount of additional KEX that can be created per year by the UBI module"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"21"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validators_fee_share"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"Percentage cut a block proposer takes from the block\u2019s transaction fees rewards."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"22"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_rate"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.18"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"KEX inflation percentage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"23"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"31557600"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"2629800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})]}),(0,s.jsxs)(d.td,{children:["Period of time in seconds over which current KEX supply is inflated by ",(0,s.jsx)(d.code,{children:"inflation_rate"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"24"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unstaking_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2629800"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"604800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})," or ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Undelegation cooling period (in seconds)"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"25"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_delegators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum number of delegators allowed per staking pool above which ",(0,s.jsx)(d.code,{children:"min_delegation_pushout"})," can be triggered."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"26"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_delegation_pushout"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["The minimum stake multiplier amount a user need to provide to push out the weakest delegator of a staking pool who reach its ",(0,s.jsx)(d.code,{children:"max_delegators"})," capacity"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"27"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"slashing_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"3600"})}),(0,s.jsxs)(d.td,{children:["> ",(0,s.jsx)(d.code,{children:"unstaking_period"})]}),(0,s.jsx)(d.td,{children:"The time window in seconds in which a collusion of double-signing event must occur in order for a slashing proposal to be automatically rised"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"28"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_jailed_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.25"})}),(0,s.jsxs)(d.td,{children:["< one third of ",(0,s.jsx)(d.code,{children:"active"})," nodes"]}),(0,s.jsxs)(d.td,{children:["The percentage threshold of consensus nodes that must double-sign within the time window ",(0,s.jsx)(d.code,{children:"slashing_period"})," in order for a slashing proposal to be automatically rised."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"29"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_slashing_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.01"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"1"})]}),(0,s.jsx)(d.td,{children:"Maximum percentage of slashing that can be applied by governance to a jailed consensus node."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"30"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_custody_reward"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"31"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_buffer_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"8192"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"32"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_tx_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"33"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"abstention_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of rank decrease when absent"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"34"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_abstention"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Max abstention count for councilor"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"35"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum bond amount for the collective to be activated"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"36"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bonding_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"86400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allowed time to reach min_collective_bond"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"37"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_collective_outputs"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Limitation on the maximum number of spending pools configuration per collective"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"38"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_claim_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"14400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"39"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validator_recovery_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of KEX to spend for issuing validator recovery token"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"40"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_annual_inflation"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.35"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum % of KEX by which supply can increase over the period of 1 year"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"41"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_title_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum title size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"42"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_description_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1024"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum description size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"43"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum option size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"44"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_count"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum possible choices in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"45"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_reference_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"512"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum reference size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"46"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_checksum_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum checksum size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"47"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"48"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"49"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_threshold"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"50"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"51"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_bond_duration"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"604800"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"52"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_verifier_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Percentage of LP token supply to be put to be the verifier of the DApp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"53"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_auto_denounce_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"60"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds, time the DApp leader is allowed to send execute-dapp-tx"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"54"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"55"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"56"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"57"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_pool_slippage_default"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Default"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"58"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_ft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"59"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_nft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"60"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"autocompound_interval_num_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"17280"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Block interval for auto-compounding of rewards"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"dd165dbb682e4cb9b41ccbecbe8874da",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(d.admonition,{type:"note",children:(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(d.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(d.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(d.em,{children:"documentation for more details."})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$SIGNER"})})," ",(0,s.jsx)(d.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(d.em,{children:"and"})," ",(0,s.jsxs)(d.em,{children:[(0,s.jsx)(d.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(d.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(d.h2,{id:"c7b1bcd0db474f468e03cbbcfdb65094",children:"Transactions"}),(0,s.jsx)(d.p,{children:"There is no transactions apart from the governance ones for this su-module."})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(d.h2,{id:"d0f3dff516504a20955bde702560a0c6",children:"Queries"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"network-properties"})}),(0,s.jsx)(d.th,{children:"list all network properties and corresponding value"})]})})}),(0,s.jsx)(d.h4,{id:"21971178f4ac42c0be7dcc5885715064",children:"Query network properties"}),(0,s.jsxs)(d.p,{children:["List all network properties and corresponding values using the ",(0,s.jsx)(d.code,{children:"network-properties"})," command."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid query customgov network-properties $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(d.h2,{id:"21a4bf9b246540458e513ba56c82c5d5",children:"Governance"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"set-network-property"})}),(0,s.jsx)(d.th,{children:"Set a network property\u2019s value"})]})})}),(0,s.jsx)(d.h4,{id:"28134ca7a8f74dc7919c699ec7927cf3",children:"Set a network property"}),(0,s.jsxs)(d.p,{children:["Create a proposal to set a value on a network property using the ",(0,s.jsx)(d.code,{children:"set-network-property"})," command followed by the network property ",(0,s.jsx)(d.code,{children:"$PROPERTY"})," and its respective value ",(0,s.jsx)(d.code,{children:"$VALUE"}),"."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Args"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$PROPERTY"}),": The network property to be updated. All properties are available ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),"."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$VALUE"}),": The value to be set for the network property."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Flags"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid tx customgov proposal set-network-property \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPERTY $VALUE\n"})})]})]})]})}function j(e={}){const{wrapper:d}={...(0,r.a)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,d,n)=>{n.d(d,{Z:()=>i});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:d,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:n,children:d})}},4866:(e,d,n)=>{n.d(d,{Z:()=>k});var s=n(7294),r=n(6905),t=n(2466),i=n(6550),c=n(469),l=n(1980),o=n(7392),h=n(12);function a(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:d}=e;return!!d&&"object"==typeof d&&"value"in d}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:d,children:n}=e;return(0,s.useMemo)((()=>{const e=d??function(e){return a(e).map((e=>{let{props:{value:d,label:n,attributes:s,default:r}}=e;return{value:d,label:n,attributes:s,default:r}}))}(n);return function(e){const d=(0,o.l)(e,((e,d)=>e.value===d.value));if(d.length>0)throw new Error(`Docusaurus error: Duplicate values "${d.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[d,n])}function j(e){let{value:d,tabValues:n}=e;return n.some((e=>e.value===d))}function u(e){let{queryString:d=!1,groupId:n}=e;const r=(0,i.k6)(),t=function(e){let{queryString:d=!1,groupId:n}=e;if("string"==typeof d)return d;if(!1===d)return null;if(!0===d&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:d,groupId:n});return[(0,l._X)(t),(0,s.useCallback)((e=>{if(!t)return;const d=new URLSearchParams(r.location.search);d.set(t,e),r.replace({...r.location,search:d.toString()})}),[t,r])]}function p(e){const{defaultValue:d,queryString:n=!1,groupId:r}=e,t=x(e),[i,l]=(0,s.useState)((()=>function(e){let{defaultValue:d,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(d){if(!j({value:d,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${d}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return d}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:d,tabValues:t}))),[o,a]=u({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:d}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(d),[r,t]=(0,h.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:r}),b=(()=>{const e=o??p;return j({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!j({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),m(e)}),[a,m,t]),tabValues:t}}var m=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(5893);function _(e){let{className:d,block:n,selectedValue:s,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),h=e=>{const d=e.currentTarget,n=l.indexOf(d),r=c[n].value;r!==s&&(o(d),i(r))},a=e=>{let d=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;d=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;d=l[n]??l[l.length-1];break}}d?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},d),children:c.map((e=>{let{value:d,label:n,attributes:t}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:s===d?0:-1,"aria-selected":s===d,ref:e=>l.push(e),onKeyDown:a,onClick:h,...t,className:(0,r.Z)("tabs__item",b.tabItem,t?.className,{"tabs__item--active":s===d}),children:n??d},d)}))})}function v(e){let{lazy:d,children:n,selectedValue:r}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(d){const e=t.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:t.map(((e,d)=>(0,s.cloneElement)(e,{key:d,hidden:e.props.value!==r})))})}function g(e){const d=p(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(_,{...e,...d}),(0,f.jsx)(v,{...e,...d})]})}function k(e){const d=(0,m.Z)();return(0,f.jsx)(g,{...e,children:a(e.children)},String(d))}},1151:(e,d,n)=>{n.d(d,{Z:()=>c,a:()=>i});var s=n(7294);const r={},t=s.createContext(r);function i(e){const d=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90d45f8c.c945bd19.js b/assets/js/90d45f8c.c945bd19.js new file mode 100644 index 0000000..9d0acef --- /dev/null +++ b/assets/js/90d45f8c.c945bd19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1366],{7146:(e,d,n)=>{n.r(d),n.d(d,{assets:()=>h,contentTitle:()=>l,default:()=>j,frontMatter:()=>c,metadata:()=>o,toc:()=>a});var s=n(5893),r=n(1151),t=n(4866),i=n(5162);const c={title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},l=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Network-Properties",title:"Network Properties",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Network-Properties.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/b9b95792-b936-4603-8a46-15566f24e3c0",permalink:"/docs.kira.network/docs/b9b95792-b936-4603-8a46-15566f24e3c0",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},sidebar:"defaultSidebar",previous:{title:"Polls",permalink:"/docs.kira.network/docs/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},next:{title:"Identity Registrar",permalink:"/docs.kira.network/docs/d482180d-165a-4c09-8c32-167f061ceb92"}},h={},a=[{value:"Concept",id:"ebfaaf65269241b9a32a9bfeea35b3c8",level:2},{value:"Parameters",id:"6b3d949219294d29982ae09b9f70a8ba",level:2},{value:"Cli Syntax & Examples",id:"dd165dbb682e4cb9b41ccbecbe8874da",level:2},{value:"Transactions",id:"c7b1bcd0db474f468e03cbbcfdb65094",level:2},{value:"Queries",id:"d0f3dff516504a20955bde702560a0c6",level:2},{value:"Query Network Properties",id:"21971178f4ac42c0be7dcc5885715064",level:4},{value:"Governance",id:"21a4bf9b246540458e513ba56c82c5d5",level:2},{value:"Set a Network Property",id:"28134ca7a8f74dc7919c699ec7927cf3",level:4}];function x(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.h2,{id:"ebfaaf65269241b9a32a9bfeea35b3c8",children:"Concept"}),"\n",(0,s.jsx)(d.p,{children:"KIRA Network utilizes a unique set of on-chain variables known as Network Properties to help control and regulate various behaviors and characteristics of the SEKAI application on a network-wide basis. These parameters serve as the operational gears of the system, allowing for the adjustment of pivotal features such as KEX inflation rate, the minimum transaction fee for any on-chain message to ensure global transaction spam protection, or even the required minimum percentage of governance members necessary to vote on a proposal, making it valid. Such versatility is particularly beneficial, considering the ever-evolving needs of the community and the potential alterations in the network's operational dynamics. Any changes to these network properties require consensus from the network's governance, ensuring that any alterations align with the wishes of the majority of network participants."}),"\n",(0,s.jsx)(d.h2,{id:"6b3d949219294d29982ae09b9f70a8ba",children:"Parameters"}),"\n",(0,s.jsxs)(d.p,{children:["All network properties and their respective default values (which can also be found ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),")"]}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"#"}),(0,s.jsx)(d.th,{children:"NAME"}),(0,s.jsx)(d.th,{children:"TYPE"}),(0,s.jsx)(d.th,{children:"GENESIS"}),(0,s.jsx)(d.th,{children:"BOUNDS (min - max)"}),(0,s.jsx)(d.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"1"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that must be sent in order to submit any on-chain message. Global transaction spam protection measure."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"2"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be sent along any transaction type. Prevents potential loss of funds while specifying wrong transaction fee amount by the user."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"3"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"vote_quorum"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"33"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Required, minimum percentage of governance members with permission to vote on a given proposal to make said proposal valid. If minimum quorum is not reached then passing said proposal is not possible."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"4"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum time in seconds that proposals must be active and default time for all proposals to remain pending. Duration time of individual proposal can be modified by governance as explained ",(0,s.jsx)(d.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"here"}),"."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"5"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"proposal_enactment_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum time in seconds for the proposals to take effect after they passed"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"6"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_end_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of blocks during which the proposals MUST remain active. This is used to prevent edge cases where ",(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})," is set to value shorter than a single block time, thus making it impossible to vote in time."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"7"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_enactment_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum number of blocks that must pass after proposal passed for the proposal to take effect."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"8"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_foreign_fee_payments"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allow transaction fee payments with tokens other than KEX"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"9"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"When it's certain that validator is offline and failed to participate in a block production, decrease its global rank by the specified value."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"10"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["How many consecutive blocks must the validator miss for the network to change validator status to ",(0,s.jsx)(d.code,{children:"inactive"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"11"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_confidence"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"110"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"How many consecutive blocks must the validator miss for the network to be certain that the node is offline and not participating in the block signing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"12"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["By what percentage should the validator global rank decrease when the said validator node status changes to ",(0,s.jsx)(d.code,{children:"inactive"})," due to not participating in signing new blocks."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"13"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_validators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["When ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur, sets the maximum value in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be transferred between accounts."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"14"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"poor_network_max_bank_send"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of consensus nodes that must be active for the network to be considered healthy. If number of validators falls below this value then ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"15"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unjail_max_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"600"})}),(0,s.jsxs)(d.td,{children:["< ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Maximum amount of time in seconds which a jailed node has to request to be unjailed before becoming permanently jailed (tombstoned)."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"16"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_whitelist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enables whitelist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"17"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_blacklist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enable blacklist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"18"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_identity_approval_tip"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum tip in ",(0,s.jsx)(d.code,{children:"ukex"})," amount that must be sent along ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})," record verification request"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"19"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unique_identity_keys"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"string"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"moniker,username"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Key values that must remain unique in the ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"20"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ubi_hardcap"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"6000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum amount of additional KEX that can be created per year by the UBI module"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"21"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validators_fee_share"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"Percentage cut a block proposer takes from the block\u2019s transaction fees rewards."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"22"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_rate"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.18"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"KEX inflation percentage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"23"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"31557600"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"2629800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})]}),(0,s.jsxs)(d.td,{children:["Period of time in seconds over which current KEX supply is inflated by ",(0,s.jsx)(d.code,{children:"inflation_rate"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"24"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unstaking_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2629800"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"604800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})," or ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Undelegation cooling period (in seconds)"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"25"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_delegators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum number of delegators allowed per staking pool above which ",(0,s.jsx)(d.code,{children:"min_delegation_pushout"})," can be triggered."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"26"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_delegation_pushout"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["The minimum stake multiplier amount a user need to provide to push out the weakest delegator of a staking pool who reach its ",(0,s.jsx)(d.code,{children:"max_delegators"})," capacity"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"27"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"slashing_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"3600"})}),(0,s.jsxs)(d.td,{children:["> ",(0,s.jsx)(d.code,{children:"unstaking_period"})]}),(0,s.jsx)(d.td,{children:"The time window in seconds in which a collusion of double-signing event must occur in order for a slashing proposal to be automatically rised"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"28"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_jailed_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.25"})}),(0,s.jsxs)(d.td,{children:["< one third of ",(0,s.jsx)(d.code,{children:"active"})," nodes"]}),(0,s.jsxs)(d.td,{children:["The percentage threshold of consensus nodes that must double-sign within the time window ",(0,s.jsx)(d.code,{children:"slashing_period"})," in order for a slashing proposal to be automatically rised."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"29"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_slashing_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.01"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"1"})]}),(0,s.jsx)(d.td,{children:"Maximum percentage of slashing that can be applied by governance to a jailed consensus node."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"30"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_custody_reward"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"31"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_buffer_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"8192"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"32"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_tx_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"33"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"abstention_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of rank decrease when absent"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"34"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_abstention"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Max abstention count for councilor"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"35"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum bond amount for the collective to be activated"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"36"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bonding_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"86400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allowed time to reach min_collective_bond"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"37"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_collective_outputs"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Limitation on the maximum number of spending pools configuration per collective"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"38"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_claim_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"14400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"39"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validator_recovery_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of KEX to spend for issuing validator recovery token"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"40"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_annual_inflation"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.35"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum % of KEX by which supply can increase over the period of 1 year"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"41"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_title_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum title size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"42"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_description_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1024"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum description size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"43"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum option size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"44"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_count"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum possible choices in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"45"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_reference_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"512"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum reference size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"46"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_checksum_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum checksum size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"47"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"48"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"49"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_threshold"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"50"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"51"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_bond_duration"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"604800"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"52"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_verifier_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Percentage of LP token supply to be put to be the verifier of the DApp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"53"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_auto_denounce_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"60"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds, time the DApp leader is allowed to send execute-dapp-tx"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"54"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"55"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"56"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"57"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_pool_slippage_default"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Default"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"58"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_ft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"59"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_nft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"60"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"autocompound_interval_num_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"17280"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Block interval for auto-compounding of rewards"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"dd165dbb682e4cb9b41ccbecbe8874da",children:"Cli Syntax & Examples"}),"\n",(0,s.jsx)(d.admonition,{type:"note",children:(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(d.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(d.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(d.em,{children:"documentation for more details."})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$SIGNER"})})," ",(0,s.jsx)(d.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(d.em,{children:"and"})," ",(0,s.jsxs)(d.em,{children:[(0,s.jsx)(d.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(d.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(d.h2,{id:"c7b1bcd0db474f468e03cbbcfdb65094",children:"Transactions"}),(0,s.jsx)(d.p,{children:"There is no transactions apart from the governance ones for this su-module."})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(d.h2,{id:"d0f3dff516504a20955bde702560a0c6",children:"Queries"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"network-properties"})}),(0,s.jsx)(d.th,{children:"list all network properties and corresponding value"})]})})}),(0,s.jsx)(d.h4,{id:"21971178f4ac42c0be7dcc5885715064",children:"Query Network Properties"}),(0,s.jsxs)(d.p,{children:["List all network properties and corresponding values using the ",(0,s.jsx)(d.code,{children:"network-properties"})," command."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid query customgov network-properties $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(d.h2,{id:"21a4bf9b246540458e513ba56c82c5d5",children:"Governance"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"set-network-property"})}),(0,s.jsx)(d.th,{children:"Set a network property\u2019s value"})]})})}),(0,s.jsx)(d.h4,{id:"28134ca7a8f74dc7919c699ec7927cf3",children:"Set a Network Property"}),(0,s.jsxs)(d.p,{children:["Create a proposal to set a value on a network property using the ",(0,s.jsx)(d.code,{children:"set-network-property"})," command followed by the network property ",(0,s.jsx)(d.code,{children:"$PROPERTY"})," and its respective value ",(0,s.jsx)(d.code,{children:"$VALUE"}),"."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Args"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$PROPERTY"}),": The network property to be updated. All properties are available ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),"."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$VALUE"}),": The value to be set for the network property."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Flags"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid tx customgov proposal set-network-property \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPERTY $VALUE\n"})})]})]})]})}function j(e={}){const{wrapper:d}={...(0,r.a)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,d,n)=>{n.d(d,{Z:()=>i});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:d,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:n,children:d})}},4866:(e,d,n)=>{n.d(d,{Z:()=>k});var s=n(7294),r=n(6905),t=n(2466),i=n(6550),c=n(469),l=n(1980),o=n(7392),h=n(12);function a(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:d}=e;return!!d&&"object"==typeof d&&"value"in d}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:d,children:n}=e;return(0,s.useMemo)((()=>{const e=d??function(e){return a(e).map((e=>{let{props:{value:d,label:n,attributes:s,default:r}}=e;return{value:d,label:n,attributes:s,default:r}}))}(n);return function(e){const d=(0,o.l)(e,((e,d)=>e.value===d.value));if(d.length>0)throw new Error(`Docusaurus error: Duplicate values "${d.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[d,n])}function j(e){let{value:d,tabValues:n}=e;return n.some((e=>e.value===d))}function u(e){let{queryString:d=!1,groupId:n}=e;const r=(0,i.k6)(),t=function(e){let{queryString:d=!1,groupId:n}=e;if("string"==typeof d)return d;if(!1===d)return null;if(!0===d&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:d,groupId:n});return[(0,l._X)(t),(0,s.useCallback)((e=>{if(!t)return;const d=new URLSearchParams(r.location.search);d.set(t,e),r.replace({...r.location,search:d.toString()})}),[t,r])]}function p(e){const{defaultValue:d,queryString:n=!1,groupId:r}=e,t=x(e),[i,l]=(0,s.useState)((()=>function(e){let{defaultValue:d,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(d){if(!j({value:d,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${d}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return d}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:d,tabValues:t}))),[o,a]=u({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:d}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(d),[r,t]=(0,h.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:r}),b=(()=>{const e=o??p;return j({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!j({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),m(e)}),[a,m,t]),tabValues:t}}var m=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(5893);function _(e){let{className:d,block:n,selectedValue:s,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),h=e=>{const d=e.currentTarget,n=l.indexOf(d),r=c[n].value;r!==s&&(o(d),i(r))},a=e=>{let d=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;d=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;d=l[n]??l[l.length-1];break}}d?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},d),children:c.map((e=>{let{value:d,label:n,attributes:t}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:s===d?0:-1,"aria-selected":s===d,ref:e=>l.push(e),onKeyDown:a,onClick:h,...t,className:(0,r.Z)("tabs__item",b.tabItem,t?.className,{"tabs__item--active":s===d}),children:n??d},d)}))})}function v(e){let{lazy:d,children:n,selectedValue:r}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(d){const e=t.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:t.map(((e,d)=>(0,s.cloneElement)(e,{key:d,hidden:e.props.value!==r})))})}function g(e){const d=p(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(_,{...e,...d}),(0,f.jsx)(v,{...e,...d})]})}function k(e){const d=(0,m.Z)();return(0,f.jsx)(g,{...e,children:a(e.children)},String(d))}},1151:(e,d,n)=>{n.d(d,{Z:()=>c,a:()=>i});var s=n(7294);const r={},t=s.createContext(r);function i(e){const d=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/912c70ca.58d8578b.js b/assets/js/912c70ca.58d8578b.js deleted file mode 100644 index 445ee5a..0000000 --- a/assets/js/912c70ca.58d8578b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3028],{9203:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=t(5893),r=t(1151);t(4866),t(5162);const o={title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},i=void 0,s={id:"Stack/SEKAI--Backend/Configuration",title:"Configuration",description:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Configuration.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Configuration",sidebar_position:4,slug:"/b85c7808-d42e-474f-a9b6-0f87d1f59e25"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9"}},l={},c=[{value:"Repository",id:"fbd1c90fa73e4371a1acd39772b84100",level:3},{value:"Default ports",id:"0418932ac4a142c684e702ced8579f8d",level:3},{value:"Node configuration files and directory",id:"87c245337c464ea183434303aebfe46b",level:3},{value:"Client configuration",id:"3d228313019c4d5e86a4d08816eeaeca",level:3}];function d(e){const n={a:"a",code:"code",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port."}),"\n",(0,a.jsx)(n.h3,{id:"fbd1c90fa73e4371a1acd39772b84100",children:"Repository"}),"\n",(0,a.jsxs)(n.p,{children:["The Github repository for SEKAI can be found ",(0,a.jsx)(n.a,{href:"https://github.com/kiracore/sekai",children:(0,a.jsx)(n.strong,{children:"here"})}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"0418932ac4a142c684e702ced8579f8d",children:"Default ports"}),"\n",(0,a.jsx)(n.p,{children:"SEKAI exposes a metadata endpoint to help communicate with the blockchain application via RPC. This endpoint provides information on the types of transactions that can be sent on-chain."}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Transaction types metadata RPC endpoint:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:":26657/metadata"})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Tendermint RPC native endpoints:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"https://docs.tendermint.com/v0.34/rpc/",children:(0,a.jsx)(n.strong,{children:"Documentation Reference"})})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"In addition to the RPC and P2P ports, SEKAI also has a dedicated Prometheus port for monitoring purposes.\nThe specific port number for this port is not provided in the given information."}),"\n",(0,a.jsx)(n.h3,{id:"87c245337c464ea183434303aebfe46b",children:"Node configuration files and directory"}),"\n",(0,a.jsxs)(n.p,{children:["By default, config and data files are stored in the folder located at the\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid"}),"\xa0directory which can be changed by using the\xa0",(0,a.jsx)(n.code,{children:"--home"}),"\xa0flag. It is possible to have multiple home directories that each represent a different blockchain."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-text",children:".# ~/.sekaid\n \u251c\u2500\u2500 data/# Contains the databases used by the node.\n \u2514\u2500\u2500 config/\n \u251c\u2500\u2500 app.toml# Application-related configuration file.\n \u251c\u2500\u2500 config.toml# Tendermint-related configuration file.\n\t \u251c\u2500\u2500 client.toml# Client-related configuration file.\n \u251c\u2500\u2500 genesis.json# The genesis file.\n \u251c\u2500\u2500 node_key.json# Private key to use for node authentication in the p2p protocol.\n \u2514\u2500\u2500 priv_validator_key.json# Private key to use as a validator in the consensus protocol.\n\n"})}),"\n",(0,a.jsxs)(n.p,{children:["The Cosmos SDK automatically generates two configuration files inside\xa0",(0,a.jsx)(n.code,{children:"~/.sekaid/config"})]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"config.toml"}),": This file contains the configuration for the Tendermint consensus engine, including the node's validator address, the minimum gas prices, and the node's peers. In addition, the config.toml file also specifies the location of the data and log directories, as well as the p2p and rpc listen addresses. It may also contain configuration options for the Tendermint WebSocket (WS) server and the ABCI application."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"app.toml"}),": This file contains the configuration for the SEKAI blockchain application such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync..."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"3d228313019c4d5e86a4d08816eeaeca",children:"Client configuration"}),"\n",(0,a.jsxs)(n.p,{children:["We can view the default client config setting by using the ",(0,a.jsx)(n.code,{children:"sekaid config"})," command:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config\n{\n"chain-id": "",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Changes to the default settings can be made according to users preferences. For example, the chain identifier can be changed from a blank name by using:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sekaid config "chain-id" sekai_1\nsekaid config\n{\n"chain-id": "sekai_1",\n"keyring-backend": "os",\n"output": "text",\n"node": "tcp://localhost:26657",\n"broadcast-mode": "sync"\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"Other values can be changed in the same manner."}),"\n",(0,a.jsx)(n.p,{children:"Alternatively, modification can be made directly on in the client.toml."})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>i});t(7294);var a=t(6905);const r={tabItem:"tabItem_Ymn6"};var o=t(5893);function i(e){let{children:n,hidden:t,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>y});var a=t(7294),r=t(6905),o=t(2466),i=t(6550),s=t(469),l=t(1980),c=t(7392),d=t(12);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:r}}=e;return{value:n,label:t,attributes:a,default:r}}))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.k6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(r.location.search);n.set(o,e),r.replace({...r.location,search:n.toString()})}),[o,r])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[c,u]=p({queryString:t,groupId:r}),[m,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,o]=(0,d.Nk)(t);return[r,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:r}),g=(()=>{const e=c??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var b=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:n,block:t,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),r=s[t].value;r!==a&&(c(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n),children:s.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...o,className:(0,r.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function k(e){let{lazy:n,children:t,selectedValue:r}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function j(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...n}),(0,v.jsx)(k,{...e,...n})]})}function y(e){const n=(0,b.Z)();return(0,v.jsx)(j,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>i});var a=t(7294);const r={},o=a.createContext(r);function i(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.0eb58673.js b/assets/js/935f2afb.0eb58673.js new file mode 100644 index 0000000..1c7b68e --- /dev/null +++ b/assets/js/935f2afb.0eb58673.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"category","label":"What is KIRA ?","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/","docId":"What-is-KIRA/Overview","unlisted":false},{"type":"category","label":"SEKAI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e","docId":"What-is-KIRA/SEKAI/Overview","unlisted":false},{"type":"link","label":"Consensus","href":"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418","docId":"What-is-KIRA/SEKAI/Consensus","unlisted":false},{"type":"link","label":"Governance","href":"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa","docId":"What-is-KIRA/SEKAI/Governance","unlisted":false}]},{"type":"link","label":"Middleware - INTERX","href":"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851","docId":"What-is-KIRA/Middleware---INTERX","unlisted":false},{"type":"link","label":"Frontend - MIRO","href":"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a","docId":"What-is-KIRA/-Frontend---MIRO","unlisted":false},{"type":"link","label":"Orchestrator - RYOKAI","href":"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f","docId":"What-is-KIRA/Orchestrator---RYOKAI","unlisted":false},{"type":"category","label":"Layer 2","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5","docId":"What-is-KIRA/Layer-2/Overview","unlisted":false},{"type":"link","label":"Virtual Finality Gadget","href":"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671","docId":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","unlisted":false},{"type":"link","label":"Building on KIRA","href":"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f","docId":"What-is-KIRA/Layer-2/Building-on-KIRA","unlisted":false}]}]},{"type":"category","label":"KIRA\u2019s Economics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c","docId":"KIRA\u2019s-Economics/Overview","unlisted":false},{"type":"link","label":"KEX- KIRA\u2019s Native Token","href":"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326","docId":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","unlisted":false},{"type":"link","label":"Rewards and Incentives Structure","href":"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b","docId":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","unlisted":false},{"type":"link","label":"Initial Liquidity Offering","href":"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351","docId":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","unlisted":false},{"type":"link","label":"Unified Liquid Staking","href":"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3","docId":"KIRA\u2019s-Economics/Unified-Liquid-Staking","unlisted":false}]},{"type":"link","label":"Glossary","href":"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b","docId":"Glossary","unlisted":false}]},"docs":{"Glossary":{"id":"Glossary","title":"Glossary","description":"- RollApp: Decentralized application","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Initial-Liquidity-Offering":{"id":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","title":"Initial Liquidity Offering","description":"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token":{"id":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","title":"KEX- KIRA\u2019s Native Token","description":"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Overview":{"id":"KIRA\u2019s-Economics/Overview","title":"Overview","description":"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure":{"id":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","title":"Rewards and Incentives Structure","description":"Staking Rewards","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Unified-Liquid-Staking":{"id":"KIRA\u2019s-Economics/Unified-Liquid-Staking","title":"Unified Liquid Staking","description":"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.","sidebar":"defaultSidebar"},"What-is-KIRA/-Frontend---MIRO":{"id":"What-is-KIRA/-Frontend---MIRO","title":"Frontend - MIRO","description":"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Building-on-KIRA":{"id":"What-is-KIRA/Layer-2/Building-on-KIRA","title":"Building on KIRA","description":"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Overview":{"id":"What-is-KIRA/Layer-2/Overview","title":"Overview","description":"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Virtual-Finality-Gadget":{"id":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","title":"Virtual Finality Gadget","description":"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.","sidebar":"defaultSidebar"},"What-is-KIRA/Middleware---INTERX":{"id":"What-is-KIRA/Middleware---INTERX","title":"Middleware - INTERX","description":"Overview","sidebar":"defaultSidebar"},"What-is-KIRA/Orchestrator---RYOKAI":{"id":"What-is-KIRA/Orchestrator---RYOKAI","title":"Orchestrator - RYOKAI","description":"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.","sidebar":"defaultSidebar"},"What-is-KIRA/Overview":{"id":"What-is-KIRA/Overview","title":"Overview","description":"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Consensus":{"id":"What-is-KIRA/SEKAI/Consensus","title":"Consensus","description":"Tendermint","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Governance":{"id":"What-is-KIRA/SEKAI/Governance","title":"Governance","description":"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter\'s stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Overview":{"id":"What-is-KIRA/SEKAI/Overview","title":"Overview","description":"SEKAI (\u4e16\u754c) is KIRA\'s core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or \'validators,\' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b8a63d7a.js b/assets/js/935f2afb.b8a63d7a.js deleted file mode 100644 index e786fcb..0000000 --- a/assets/js/935f2afb.b8a63d7a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Overview","href":"/docs.kira.network/","docId":"Overview","unlisted":false},{"type":"category","label":"Stack","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"SEKAI | Backend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","docId":"Stack/SEKAI--Backend/System-Requirements","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","docId":"Stack/SEKAI--Backend/Installation","unlisted":false},{"type":"link","label":"Configuration","href":"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","docId":"Stack/SEKAI--Backend/Configuration","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","docId":"Stack/SEKAI--Backend/Command-Line-Interface","unlisted":false},{"type":"category","label":"Modules","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Multistaking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Consensus nodes & staking pools","href":"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","unlisted":false},{"type":"link","label":"Delegators","href":"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","docId":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","unlisted":false}],"href":"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"},{"type":"category","label":"Slashing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Jailing & slashing","href":"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","docId":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","unlisted":false},{"type":"link","label":"Consensus nodes ranks & statuses","href":"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","docId":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","unlisted":false}],"href":"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"},{"type":"category","label":"Governance","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Proposals & governance structure","href":"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","docId":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","unlisted":false},{"type":"link","label":"Councilors & governance ranking","href":"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","docId":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","unlisted":false},{"type":"link","label":"Roles & Permissions","href":"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","docId":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","unlisted":false},{"type":"link","label":"Polls","href":"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","docId":"Stack/SEKAI--Backend/Modules/Governance/Polls","unlisted":false},{"type":"link","label":"Network Properties","href":"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","docId":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","unlisted":false},{"type":"link","label":"Identity Registrar","href":"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","docId":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","unlisted":false},{"type":"link","label":"Data Registry","href":"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","docId":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","unlisted":false},{"type":"link","label":"Poor Network Conditions","href":"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","docId":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","unlisted":false}],"href":"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},{"type":"link","label":"Layer 2","href":"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","docId":"Stack/SEKAI--Backend/Modules/Layer-2/index","unlisted":false},{"type":"category","label":"Distributor ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fees and staking rewards distribution","href":"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","docId":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","unlisted":false}],"href":"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},{"type":"link","label":"Custody","href":"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","docId":"Stack/SEKAI--Backend/Modules/Custody/index","unlisted":false},{"type":"category","label":"Spending Pool","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Spending Pools","href":"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","docId":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","unlisted":false}],"href":"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},{"type":"link","label":"Staking Collectives","href":"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","docId":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","unlisted":false},{"type":"category","label":"Universal Basic Income","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Universal Basic Income","href":"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","docId":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","unlisted":false}],"href":"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},{"type":"category","label":"Tokens Module","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Rates Registrar","href":"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","unlisted":false},{"type":"link","label":"Token Aliases Registrar","href":"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","unlisted":false},{"type":"link","label":"Governance-regulated Foreign Token Transfers","href":"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","docId":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","unlisted":false}],"href":"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},{"type":"category","label":"Token Basketing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Token Basketing Module","href":"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","docId":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","unlisted":false}],"href":"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"},{"type":"link","label":"Recovery","href":"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","docId":"Stack/SEKAI--Backend/Modules/Recovery/index","unlisted":false},{"type":"category","label":"Upgrade","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Upgrade Module","href":"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","docId":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","unlisted":false}],"href":"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},{"type":"category","label":"Fee processing ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fee processing","href":"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","docId":"Stack/SEKAI--Backend/Modules/Fee-processing/index","unlisted":false}],"href":"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"},{"type":"category","label":"Evidence","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Evidence module","href":"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","docId":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","unlisted":false}],"href":"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"},{"type":"category","label":"BaseApp","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Keys & accounts","href":"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","docId":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","unlisted":false}]},{"type":"link","label":"Bank","href":"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","docId":"Stack/SEKAI--Backend/Modules/Bank","unlisted":false},{"type":"category","label":"Auth ","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction validation & processing","href":"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","docId":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","unlisted":false}],"href":"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115"},{"type":"category","label":"Params","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Network Parameter Handling","href":"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","docId":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","unlisted":false}],"href":"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4"}]}],"href":"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"},{"type":"category","label":"INTERX | Middleware","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Requirements","href":"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","docId":"Stack/INTERX--Middleware/System-Requirements","unlisted":false},{"type":"link","label":"Endpoints","href":"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","docId":"Stack/INTERX--Middleware/Endpoints","unlisted":false},{"type":"link","label":"Installation","href":"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","docId":"Stack/INTERX--Middleware/Installation","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","docId":"Stack/INTERX--Middleware/Command-Line-Interface","unlisted":false}],"href":"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"},{"type":"category","label":"MIRO | Frontend","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","docId":"Stack/MIRO--Frontend/Installation","unlisted":false}],"href":"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},{"type":"link","label":"TORII | Bridge","href":"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","docId":"Stack/TORII--Bridge","unlisted":false}]},{"type":"link","label":"Community","href":"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","docId":"Community","unlisted":false},{"type":"link","label":"Wallet","href":"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","docId":"Wallet","unlisted":false},{"type":"category","label":"Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Bash-utils","href":"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","docId":"Tools/Bash-utils","unlisted":false},{"type":"link","label":"Cosign","href":"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","docId":"Tools/Cosign","unlisted":false}]}]},"docs":{"Community":{"id":"Community","title":"Community","description":"Coming soon\u2026","sidebar":"defaultSidebar"},"Overview":{"id":"Overview","title":"Overview","description":"KIRA Network combines several modular components to provide a full-stack experience:","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Command-Line-Interface":{"id":"Stack/INTERX--Middleware/Command-Line-Interface","title":"Command Line Interface","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Endpoints":{"id":"Stack/INTERX--Middleware/Endpoints","title":"Endpoints","description":"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/index":{"id":"Stack/INTERX--Middleware/index","title":"INTERX | Middleware","description":"Interx","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/Installation":{"id":"Stack/INTERX--Middleware/Installation","title":"Installation","description":"Dependencies","sidebar":"defaultSidebar"},"Stack/INTERX--Middleware/System-Requirements":{"id":"Stack/INTERX--Middleware/System-Requirements","title":"System Requirements","description":"To run the interxd application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/index":{"id":"Stack/MIRO--Frontend/index","title":"MIRO | Frontend","description":"Miro","sidebar":"defaultSidebar"},"Stack/MIRO--Frontend/Installation":{"id":"Stack/MIRO--Frontend/Installation","title":"Installation","description":"Documentation coming soon\u2026","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Command-Line-Interface":{"id":"Stack/SEKAI--Backend/Command-Line-Interface","title":"Command Line Interface","description":"For the latest status on the functionality of Sekai CLI commands and flags, refer to this KM CLI documentation. This resource meticulously tracks the operability of each feature, offering a clear view of what\'s currently functional along with examples and additional information: KIRA Network CLI Status.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Configuration":{"id":"Stack/SEKAI--Backend/Configuration","title":"Configuration","description":"SEKAI is a blockchain network that allows users to query its state via RPC (Remote Procedure Call) and GRPC (gRPC Remote Procedure Call) protocols, as well as propagate blocks through the P2P (Peer-to-Peer) protocol. It is also possible to monitor SEKAI through a dedicated Prometheus port.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/index":{"id":"Stack/SEKAI--Backend/index","title":"SEKAI | Backend","description":"Sekai","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Installation":{"id":"Stack/SEKAI--Backend/Installation","title":"Installation","description":"Installation","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/index":{"id":"Stack/SEKAI--Backend/Modules/Auth/index","title":"Auth","description":"cosmos.sdk/x/auth","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing":{"id":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","title":"Transaction validation & processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Bank":{"id":"Stack/SEKAI--Backend/Modules/Bank","title":"Bank","description":"cosmos.sdk/x/bank","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts":{"id":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","title":"Keys & accounts","description":"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Custody/index":{"id":"Stack/SEKAI--Backend/Modules/Custody/index","title":"Custody","description":"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution":{"id":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","title":"Fees and staking rewards distribution","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Distributor/index":{"id":"Stack/SEKAI--Backend/Modules/Distributor/index","title":"Distributor","description":"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module":{"id":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","title":"Evidence module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Evidence/index":{"id":"Stack/SEKAI--Backend/Modules/Evidence/index","title":"Evidence","description":"x/evidence","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing","title":"Fee processing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Fee-processing/index":{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/index","title":"Fee processing","description":"x/feeprocessing","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking":{"id":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","title":"Councilors & governance ranking","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Data-Registry":{"id":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","title":"Data Registry","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","title":"Identity Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/index":{"id":"Stack/SEKAI--Backend/Modules/Governance/index","title":"Governance","description":"x/gov","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Network-Properties":{"id":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","title":"Network Properties","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Polls":{"id":"Stack/SEKAI--Backend/Modules/Governance/Polls","title":"Polls","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","title":"Poor Network Conditions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure":{"id":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","title":"Proposals & governance structure","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions":{"id":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","title":"Roles & Permissions","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Layer-2/index":{"id":"Stack/SEKAI--Backend/Modules/Layer-2/index","title":"Layer 2","description":"KIRA\'s Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both \'code is law\' and judgment-based applications. This is more than a platform\u2014it\'s a launchpad for developers to define their own rules and easily iterate on diverse applications.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","title":"Consensus nodes & staking pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/Delegators":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","title":"Delegators","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Multistaking/index":{"id":"Stack/SEKAI--Backend/Modules/Multistaking/index","title":"Multistaking","description":"KIRA\'s consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/index":{"id":"Stack/SEKAI--Backend/Modules/Params/index","title":"Params","description":"cosmos.sdk/x/params","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling":{"id":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","title":"Network Parameter Handling","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Recovery/index":{"id":"Stack/SEKAI--Backend/Modules/Recovery/index","title":"Recovery","description":"x/recovery","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","title":"Consensus nodes ranks & statuses","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/index":{"id":"Stack/SEKAI--Backend/Modules/Slashing/index","title":"Slashing","description":"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing":{"id":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","title":"Jailing & slashing","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/index":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/index","title":"Spending Pool","description":"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools":{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","title":"Spending Pools","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Staking-Collectives/index":{"id":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","title":"Staking Collectives","description":"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/index":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/index","title":"Token Basketing","description":"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module\'s fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module":{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","title":"Token Basketing Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","title":"Governance-regulated Foreign Token Transfers","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/index":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/index","title":"Tokens Module","description":"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira\'s native token\'s value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","title":"Token Aliases Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar":{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","title":"Token Rates Registrar","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","title":"Universal Basic Income","description":"Through a Universal Basic Income system, regular KEX tokens are awarded to actively participating network members. The sustainability of the network is maintained by establishing a cap on annual KEX production. It accommodates participants\' engagement by dynamically adjusting the distribution or ensuring fixed intervals.","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income":{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income","title":"Universal Basic Income","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/index":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/index","title":"Upgrade","description":"x/upgrade","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module":{"id":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","title":"Upgrade Module","description":"Concept","sidebar":"defaultSidebar"},"Stack/SEKAI--Backend/System-Requirements":{"id":"Stack/SEKAI--Backend/System-Requirements","title":"System Requirements","description":"To run a sekaid application the following system requirements must be met:","sidebar":"defaultSidebar"},"Stack/TORII--Bridge":{"id":"Stack/TORII--Bridge","title":"TORII | Bridge","description":"Torii","sidebar":"defaultSidebar"},"Tools/Bash-utils":{"id":"Tools/Bash-utils","title":"Bash-utils","description":"https://github.com/KiraCore/tools/releases","sidebar":"defaultSidebar"},"Tools/Cosign":{"id":"Tools/Cosign","title":"Cosign","description":"Cosign","sidebar":"defaultSidebar"},"Wallet":{"id":"Wallet","title":"Wallet","description":"Coming soon\u2026","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/960d39dd.bbc4b46a.js b/assets/js/960d39dd.bbc4b46a.js deleted file mode 100644 index e8282fb..0000000 --- a/assets/js/960d39dd.bbc4b46a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8970],{4025:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var t=r(5893),s=r(1151),i=r(4866),d=r(5162);const a={title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},c=void 0,o={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income",title:"Universal Basic Income",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},sidebar:"defaultSidebar",previous:{title:"Staking Collectives",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e"}},l={},h=[{value:"Concept",id:"7ffc9017e29c48478adefa4f1f84dd92",level:3},{value:"Dynamic mode",id:"2737f72a27dc4d3cab060bdbe4055e83",level:4},{value:"Parameters",id:"f028bb65c4b0422bb3b62ccd2e0a52c5",level:3},{value:"Cli syntax & examples",id:"b3dc078c85c4427c95c52958d0ca5ab6",level:2},{value:"Transactions",id:"47b1445d3df3460e85daf175a211506e",level:2},{value:"Queries",id:"7c4238e3fedc40b2b2d46a697485a072",level:2},{value:"List all existing ubi records",id:"d1d882fb51014efd91039863bae07ed1",level:4},{value:"Query a specific ubi record",id:"b7c6ad0b47b744eba829f570ddfe7c3e",level:4},{value:"Governance",id:"c9550a2bcc6247049aeec0176a8f6060",level:2},{value:"Upsert ubi proposal",id:"96e2058b1db94fe9a1332559fad3d2a2",level:4},{value:"Remove ubi proposal",id:"caae0d4732a441a0a3187300c9593e6e",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"7ffc9017e29c48478adefa4f1f84dd92",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Universal Basic Income (UBI) module in the KIRA network is designed to incentivize non-sybil network participants, such as validators and governance members, through the distribution of a fixed amount of the native KEX token on a regular basis. This helps to ensure the long-term maintenance of network operations and enables these actors to perform their roles effectively. The UBI module uses ",(0,t.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"Spending Pools"})," to distribute the funds to eligible beneficiaries, who can then claim their allotted tokens. The supply of KEX tokens is inflated by a fixed amount at regular intervals, and these tokens are deposited into the designated spending pool(s) for distribution."]}),"\n",(0,t.jsxs)(n.p,{children:["To prevent potential abuse or faults, a ",(0,t.jsx)(n.code,{children:"ubi-hard-cap"})," is set in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", limiting the maximum amount of additional KEX that can be created per year (",(0,t.jsx)(n.code,{children:"6000000"})," KEX by default). Governance members are not allowed to create or modify UBI records in a way that would exceed this hard cap."]}),"\n",(0,t.jsx)(n.h4,{id:"2737f72a27dc4d3cab060bdbe4055e83",children:"Dynamic mode"}),"\n",(0,t.jsxs)(n.p,{children:["Similar to the spending pool, the UBI module provides two modes: dynamic and static, which use the dynamic field. In dynamic mode, the total amount distributed per period decreases by the amount left in the pool. In other words, if some users don't claim their UBI during a particular period, the unclaimed tokens are lost and redistributed in the next period. This is done to limit token inflation and ensure that users are actively claiming their tokens. If the ",(0,t.jsx)(n.code,{children:"dynamic"})," parameter is set to ",(0,t.jsx)(n.code,{children:"false"}),", the spending pool operates in static mode and distributes a fixed amount of tokens every time period. This way, users can be sure of the amount of tokens they will receive during each period, provided they still respect the target spending pool\u2019s ",(0,t.jsx)(n.code,{children:"claim-expiry"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"f028bb65c4b0422bb3b62ccd2e0a52c5",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"KEX-UBI"})}),(0,t.jsx)(n.td,{children:"The name of the UBI contract."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_start"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1643577600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the start of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_end"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1675113600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the end of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_last"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1651401600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the last distribution."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"community"'})}),(0,t.jsx)(n.td,{children:"The spending pool name where the exact amount of KEX should be deposited."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"amount"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsxs)(n.td,{children:["The amount of KEX tokens to be minted and distributed every period into ",(0,t.jsx)(n.code,{children:"pool"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"period"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"86400"})}),(0,t.jsx)(n.td,{children:"Time in seconds that must elapse since distribution_last for the funds to be distributed automatically into the pool."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"dynamic"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"bool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["A boolean field that defines if UBI is dynamic ",(0,t.jsx)(n.code,{children:"true"})," or static ",(0,t.jsx)(n.code,{children:"false"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"b3dc078c85c4427c95c52958d0ca5ab6",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"47b1445d3df3460e85daf175a211506e",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"7c4238e3fedc40b2b2d46a697485a072",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"ubi-records"})}),(0,t.jsx)(n.th,{children:"List all existing UBI records."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ubi-record-by-name"})}),(0,t.jsx)(n.td,{children:"Query a specific UBI record by its name."})]})})]}),(0,t.jsx)(n.h4,{id:"d1d882fb51014efd91039863bae07ed1",children:"List all existing ubi records"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-records $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"b7c6ad0b47b744eba829f570ddfe7c3e",children:"Query a specific ubi record"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI record."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-record-by-name $NAME $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"c9550a2bcc6247049aeec0176a8f6060",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"})}),(0,t.jsx)(n.th,{children:"Create a proposal to insert or update a Universal Basic Income (UBI) distribution."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-remove-ubi"})}),(0,t.jsx)(n.td,{children:"Create a proposal to remove a Universal Basic Income (UBI) distribution."})]})})]}),(0,t.jsx)(n.h4,{id:"96e2058b1db94fe9a1332559fad3d2a2",children:"Upsert ubi proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"}),", creates a proposal to upsert (insert or update) a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of a proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Name of the UBI record (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorPerMinuteIncome"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$POOLNAME"}),": Name of the associated spending pool registry for depositing ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," of KEX (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorBasicRewardsPool"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONSTART"}),": The exact starting time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONEND"}),": The exact ending time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$PERIOD"}),": Period in seconds for the KEX supply inflation by ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," and deposit in the UBI pool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$AMOUNT"}),": The amount of KEX tokens to be minted and distributed per ",(0,t.jsx)(n.code,{children:"$PERIOD"})," into the pool."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-upsert-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--distribution-start=$DISTRIBUTION_START \\\n--distribution-end=$DISTRIBUTION_END \\\n--amount=$AMOUNT \\\n--period=$PERIOD \\\n--pool-name=$POOL_NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})}),(0,t.jsx)(n.h4,{id:"caae0d4732a441a0a3187300c9593e6e",children:"Remove ubi proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-remove-ubi"}),", creates a proposal to remove a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-remove-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>d});r(7294);var t=r(6905);const s={tabItem:"tabItem_Ymn6"};var i=r(5893);function d(e){let{children:n,hidden:r,className:d}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,d),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>T});var t=r(7294),s=r(6905),i=r(2466),d=r(6550),a=r(469),c=r(1980),o=r(7392),l=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function x(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:r}=e;const s=(0,d.k6)(),i=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,c._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function p(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,i=u(e),[d,c]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i}))),[o,h]=b({queryString:r,groupId:s}),[p,m]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,l.Nk)(r);return[s,(0,t.useCallback)((e=>{r&&i.set(e)}),[r,i])]}({groupId:s}),j=(()=>{const e=o??p;return x({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:d,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=r(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=r(5893);function v(e){let{className:n,block:r,selectedValue:t,selectValue:d,tabValues:a}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,i.o5)(),l=e=>{const n=e.currentTarget,r=c.indexOf(n),s=a[r].value;s!==t&&(o(n),d(s))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;n=c[r]??c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;n=c[r]??c[c.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:i}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>c.push(e),onKeyDown:h,onClick:l,...i,className:(0,s.Z)("tabs__item",j.tabItem,i?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function I(e){let{lazy:n,children:r,selectedValue:s}=e;const i=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function g(e){const n=p(e);return(0,f.jsxs)("div",{className:(0,s.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(v,{...e,...n}),(0,f.jsx)(I,{...e,...n})]})}function T(e){const n=(0,m.Z)();return(0,f.jsx)(g,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>d});var t=r(7294);const s={},i=t.createContext(s);function d(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/972e1259.6b16be74.js b/assets/js/972e1259.6b16be74.js new file mode 100644 index 0000000..530079e --- /dev/null +++ b/assets/js/972e1259.6b16be74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3489],{9962:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var t=r(5893),i=r(1151),s=r(4866),d=r(5162);const a={title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},c=void 0,o={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income",title:"Universal Basic Income",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",permalink:"/docs.kira.network/docs/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},sidebar:"defaultSidebar",previous:{title:"Staking Collectives",permalink:"/docs.kira.network/docs/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/docs/865cb42c-7ed4-4607-a446-c7ef3882056e"}},l={},h=[{value:"Concept",id:"7ffc9017e29c48478adefa4f1f84dd92",level:3},{value:"Dynamic Mode",id:"2737f72a27dc4d3cab060bdbe4055e83",level:4},{value:"Parameters",id:"f028bb65c4b0422bb3b62ccd2e0a52c5",level:3},{value:"Cli Syntax & Examples",id:"b3dc078c85c4427c95c52958d0ca5ab6",level:2},{value:"Transactions",id:"47b1445d3df3460e85daf175a211506e",level:2},{value:"Queries",id:"7c4238e3fedc40b2b2d46a697485a072",level:2},{value:"List All Existing Ubi Records",id:"d1d882fb51014efd91039863bae07ed1",level:4},{value:"Query a Specific Ubi Record",id:"b7c6ad0b47b744eba829f570ddfe7c3e",level:4},{value:"Governance",id:"c9550a2bcc6247049aeec0176a8f6060",level:2},{value:"Upsert Ubi Proposal",id:"96e2058b1db94fe9a1332559fad3d2a2",level:4},{value:"Remove Ubi Proposal",id:"caae0d4732a441a0a3187300c9593e6e",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"7ffc9017e29c48478adefa4f1f84dd92",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Universal Basic Income (UBI) module in the KIRA network is designed to incentivize non-sybil network participants, such as validators and governance members, through the distribution of a fixed amount of the native KEX token on a regular basis. This helps to ensure the long-term maintenance of network operations and enables these actors to perform their roles effectively. The UBI module uses ",(0,t.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"Spending Pools"})," to distribute the funds to eligible beneficiaries, who can then claim their allotted tokens. The supply of KEX tokens is inflated by a fixed amount at regular intervals, and these tokens are deposited into the designated spending pool(s) for distribution."]}),"\n",(0,t.jsxs)(n.p,{children:["To prevent potential abuse or faults, a ",(0,t.jsx)(n.code,{children:"ubi-hard-cap"})," is set in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", limiting the maximum amount of additional KEX that can be created per year (",(0,t.jsx)(n.code,{children:"6000000"})," KEX by default). Governance members are not allowed to create or modify UBI records in a way that would exceed this hard cap."]}),"\n",(0,t.jsx)(n.h4,{id:"2737f72a27dc4d3cab060bdbe4055e83",children:"Dynamic Mode"}),"\n",(0,t.jsxs)(n.p,{children:["Similar to the spending pool, the UBI module provides two modes: dynamic and static, which use the dynamic field. In dynamic mode, the total amount distributed per period decreases by the amount left in the pool. In other words, if some users don't claim their UBI during a particular period, the unclaimed tokens are lost and redistributed in the next period. This is done to limit token inflation and ensure that users are actively claiming their tokens. If the ",(0,t.jsx)(n.code,{children:"dynamic"})," parameter is set to ",(0,t.jsx)(n.code,{children:"false"}),", the spending pool operates in static mode and distributes a fixed amount of tokens every time period. This way, users can be sure of the amount of tokens they will receive during each period, provided they still respect the target spending pool\u2019s ",(0,t.jsx)(n.code,{children:"claim-expiry"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"f028bb65c4b0422bb3b62ccd2e0a52c5",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"KEX-UBI"})}),(0,t.jsx)(n.td,{children:"The name of the UBI contract."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_start"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1643577600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the start of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_end"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1675113600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the end of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_last"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1651401600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the last distribution."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"community"'})}),(0,t.jsx)(n.td,{children:"The spending pool name where the exact amount of KEX should be deposited."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"amount"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsxs)(n.td,{children:["The amount of KEX tokens to be minted and distributed every period into ",(0,t.jsx)(n.code,{children:"pool"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"period"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"86400"})}),(0,t.jsx)(n.td,{children:"Time in seconds that must elapse since distribution_last for the funds to be distributed automatically into the pool."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"dynamic"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"bool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["A boolean field that defines if UBI is dynamic ",(0,t.jsx)(n.code,{children:"true"})," or static ",(0,t.jsx)(n.code,{children:"false"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"b3dc078c85c4427c95c52958d0ca5ab6",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(s.Z,{children:[(0,t.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"47b1445d3df3460e85daf175a211506e",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"7c4238e3fedc40b2b2d46a697485a072",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"ubi-records"})}),(0,t.jsx)(n.th,{children:"List all existing UBI records."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ubi-record-by-name"})}),(0,t.jsx)(n.td,{children:"Query a specific UBI record by its name."})]})})]}),(0,t.jsx)(n.h4,{id:"d1d882fb51014efd91039863bae07ed1",children:"List All Existing Ubi Records"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-records $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"b7c6ad0b47b744eba829f570ddfe7c3e",children:"Query a Specific Ubi Record"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI record."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-record-by-name $NAME $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"c9550a2bcc6247049aeec0176a8f6060",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"})}),(0,t.jsx)(n.th,{children:"Create a proposal to insert or update a Universal Basic Income (UBI) distribution."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-remove-ubi"})}),(0,t.jsx)(n.td,{children:"Create a proposal to remove a Universal Basic Income (UBI) distribution."})]})})]}),(0,t.jsx)(n.h4,{id:"96e2058b1db94fe9a1332559fad3d2a2",children:"Upsert Ubi Proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"}),", creates a proposal to upsert (insert or update) a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of a proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Name of the UBI record (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorPerMinuteIncome"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$POOLNAME"}),": Name of the associated spending pool registry for depositing ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," of KEX (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorBasicRewardsPool"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONSTART"}),": The exact starting time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONEND"}),": The exact ending time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$PERIOD"}),": Period in seconds for the KEX supply inflation by ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," and deposit in the UBI pool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$AMOUNT"}),": The amount of KEX tokens to be minted and distributed per ",(0,t.jsx)(n.code,{children:"$PERIOD"})," into the pool."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-upsert-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--distribution-start=$DISTRIBUTION_START \\\n--distribution-end=$DISTRIBUTION_END \\\n--amount=$AMOUNT \\\n--period=$PERIOD \\\n--pool-name=$POOL_NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})}),(0,t.jsx)(n.h4,{id:"caae0d4732a441a0a3187300c9593e6e",children:"Remove Ubi Proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-remove-ubi"}),", creates a proposal to remove a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-remove-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>d});r(7294);var t=r(6905);const i={tabItem:"tabItem_Ymn6"};var s=r(5893);function d(e){let{children:n,hidden:r,className:d}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.Z)(i.tabItem,d),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>T});var t=r(7294),i=r(6905),s=r(2466),d=r(6550),a=r(469),c=r(1980),o=r(7392),l=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:i}}=e;return{value:n,label:r,attributes:t,default:i}}))}(r);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function x(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:r}=e;const i=(0,d.k6)(),s=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,c._X)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(i.location.search);n.set(s,e),i.replace({...i.location,search:n.toString()})}),[s,i])]}function p(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,s=u(e),[d,c]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[o,h]=b({queryString:r,groupId:i}),[p,m]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,s]=(0,l.Nk)(r);return[i,(0,t.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:i}),j=(()=>{const e=o??p;return x({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:d,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,s]),tabValues:s}}var m=r(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=r(5893);function v(e){let{className:n,block:r,selectedValue:t,selectValue:d,tabValues:a}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,s.o5)(),l=e=>{const n=e.currentTarget,r=c.indexOf(n),i=a[r].value;i!==t&&(o(n),d(i))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;n=c[r]??c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;n=c[r]??c[c.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:s}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>c.push(e),onKeyDown:h,onClick:l,...s,className:(0,i.Z)("tabs__item",j.tabItem,s?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function I(e){let{lazy:n,children:r,selectedValue:i}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===i));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function g(e){const n=p(e);return(0,f.jsxs)("div",{className:(0,i.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(v,{...e,...n}),(0,f.jsx)(I,{...e,...n})]})}function T(e){const n=(0,m.Z)();return(0,f.jsx)(g,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>d});var t=r(7294);const i={},s=t.createContext(i);function d(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/972e1259.97c74ae7.js b/assets/js/972e1259.97c74ae7.js deleted file mode 100644 index 0a98f24..0000000 --- a/assets/js/972e1259.97c74ae7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3489],{9962:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var t=r(5893),s=r(1151),i=r(4866),d=r(5162);const a={title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},c=void 0,o={id:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income",title:"Universal Basic Income",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Universal-Basic-Income",slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Universal Basic Income",sidebar_position:2,slug:"/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"},sidebar:"defaultSidebar",previous:{title:"Staking Collectives",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e"}},l={},h=[{value:"Concept",id:"7ffc9017e29c48478adefa4f1f84dd92",level:3},{value:"Dynamic mode",id:"2737f72a27dc4d3cab060bdbe4055e83",level:4},{value:"Parameters",id:"f028bb65c4b0422bb3b62ccd2e0a52c5",level:3},{value:"Cli syntax & examples",id:"b3dc078c85c4427c95c52958d0ca5ab6",level:2},{value:"Transactions",id:"47b1445d3df3460e85daf175a211506e",level:2},{value:"Queries",id:"7c4238e3fedc40b2b2d46a697485a072",level:2},{value:"List all existing ubi records",id:"d1d882fb51014efd91039863bae07ed1",level:4},{value:"Query a specific ubi record",id:"b7c6ad0b47b744eba829f570ddfe7c3e",level:4},{value:"Governance",id:"c9550a2bcc6247049aeec0176a8f6060",level:2},{value:"Upsert ubi proposal",id:"96e2058b1db94fe9a1332559fad3d2a2",level:4},{value:"Remove ubi proposal",id:"caae0d4732a441a0a3187300c9593e6e",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"7ffc9017e29c48478adefa4f1f84dd92",children:"Concept"}),"\n",(0,t.jsxs)(n.p,{children:["The Universal Basic Income (UBI) module in the KIRA network is designed to incentivize non-sybil network participants, such as validators and governance members, through the distribution of a fixed amount of the native KEX token on a regular basis. This helps to ensure the long-term maintenance of network operations and enables these actors to perform their roles effectively. The UBI module uses ",(0,t.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"Spending Pools"})," to distribute the funds to eligible beneficiaries, who can then claim their allotted tokens. The supply of KEX tokens is inflated by a fixed amount at regular intervals, and these tokens are deposited into the designated spending pool(s) for distribution."]}),"\n",(0,t.jsxs)(n.p,{children:["To prevent potential abuse or faults, a ",(0,t.jsx)(n.code,{children:"ubi-hard-cap"})," is set in the ",(0,t.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),", limiting the maximum amount of additional KEX that can be created per year (",(0,t.jsx)(n.code,{children:"6000000"})," KEX by default). Governance members are not allowed to create or modify UBI records in a way that would exceed this hard cap."]}),"\n",(0,t.jsx)(n.h4,{id:"2737f72a27dc4d3cab060bdbe4055e83",children:"Dynamic mode"}),"\n",(0,t.jsxs)(n.p,{children:["Similar to the spending pool, the UBI module provides two modes: dynamic and static, which use the dynamic field. In dynamic mode, the total amount distributed per period decreases by the amount left in the pool. In other words, if some users don't claim their UBI during a particular period, the unclaimed tokens are lost and redistributed in the next period. This is done to limit token inflation and ensure that users are actively claiming their tokens. If the ",(0,t.jsx)(n.code,{children:"dynamic"})," parameter is set to ",(0,t.jsx)(n.code,{children:"false"}),", the spending pool operates in static mode and distributes a fixed amount of tokens every time period. This way, users can be sure of the amount of tokens they will receive during each period, provided they still respect the target spending pool\u2019s ",(0,t.jsx)(n.code,{children:"claim-expiry"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"f028bb65c4b0422bb3b62ccd2e0a52c5",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"NAME"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"TYPE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"EXAMPLE"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"KEX-UBI"})}),(0,t.jsx)(n.td,{children:"The name of the UBI contract."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_start"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1643577600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the start of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_end"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1675113600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the end of the distribution period."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"distribution_last"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1651401600"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the last distribution."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'"community"'})}),(0,t.jsx)(n.td,{children:"The spending pool name where the exact amount of KEX should be deposited."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"amount"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsxs)(n.td,{children:["The amount of KEX tokens to be minted and distributed every period into ",(0,t.jsx)(n.code,{children:"pool"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"period"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"uint64"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"86400"})}),(0,t.jsx)(n.td,{children:"Time in seconds that must elapse since distribution_last for the funds to be distributed automatically into the pool."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"dynamic"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"bool"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["A boolean field that defines if UBI is dynamic ",(0,t.jsx)(n.code,{children:"true"})," or static ",(0,t.jsx)(n.code,{children:"false"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"b3dc078c85c4427c95c52958d0ca5ab6",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"47b1445d3df3460e85daf175a211506e",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"7c4238e3fedc40b2b2d46a697485a072",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"ubi-records"})}),(0,t.jsx)(n.th,{children:"List all existing UBI records."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ubi-record-by-name"})}),(0,t.jsx)(n.td,{children:"Query a specific UBI record by its name."})]})})]}),(0,t.jsx)(n.h4,{id:"d1d882fb51014efd91039863bae07ed1",children:"List all existing ubi records"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-records $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"b7c6ad0b47b744eba829f570ddfe7c3e",children:"Query a specific ubi record"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Args"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI record."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sekaid query ubi ubi-record-by-name $NAME $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"c9550a2bcc6247049aeec0176a8f6060",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"})}),(0,t.jsx)(n.th,{children:"Create a proposal to insert or update a Universal Basic Income (UBI) distribution."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-remove-ubi"})}),(0,t.jsx)(n.td,{children:"Create a proposal to remove a Universal Basic Income (UBI) distribution."})]})})]}),(0,t.jsx)(n.h4,{id:"96e2058b1db94fe9a1332559fad3d2a2",children:"Upsert ubi proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-upsert-ubi"}),", creates a proposal to upsert (insert or update) a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of a proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, text, etc."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Name of the UBI record (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorPerMinuteIncome"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$POOLNAME"}),": Name of the associated spending pool registry for depositing ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," of KEX (e.g., ",(0,t.jsx)(n.code,{children:"ValidatorBasicRewardsPool"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONSTART"}),": The exact starting time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DISTRIBUTIONEND"}),": The exact ending time of the UBI, in Unix timestamps."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$PERIOD"}),": Period in seconds for the KEX supply inflation by ",(0,t.jsx)(n.code,{children:"$AMOUNT"})," and deposit in the UBI pool."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$AMOUNT"}),": The amount of KEX tokens to be minted and distributed per ",(0,t.jsx)(n.code,{children:"$PERIOD"})," into the pool."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-upsert-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--distribution-start=$DISTRIBUTION_START \\\n--distribution-end=$DISTRIBUTION_END \\\n--amount=$AMOUNT \\\n--period=$PERIOD \\\n--pool-name=$POOL_NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})}),(0,t.jsx)(n.h4,{id:"caae0d4732a441a0a3187300c9593e6e",children:"Remove ubi proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-remove-ubi"}),", creates a proposal to remove a Universal Basic Income (UBI) distribution."]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the UBI."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-remove-ubi \\\n--from=$SIGNER $FLAGS_TX \\\n--name=$NAME \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>d});r(7294);var t=r(6905);const s={tabItem:"tabItem_Ymn6"};var i=r(5893);function d(e){let{children:n,hidden:r,className:d}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,d),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>T});var t=r(7294),s=r(6905),i=r(2466),d=r(6550),a=r(469),c=r(1980),o=r(7392),l=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function x(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:r}=e;const s=(0,d.k6)(),i=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,c._X)(i),(0,t.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function p(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,i=u(e),[d,c]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i}))),[o,h]=b({queryString:r,groupId:s}),[p,m]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,l.Nk)(r);return[s,(0,t.useCallback)((e=>{r&&i.set(e)}),[r,i])]}({groupId:s}),j=(()=>{const e=o??p;return x({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{j&&c(j)}),[j]);return{selectedValue:d,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=r(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=r(5893);function v(e){let{className:n,block:r,selectedValue:t,selectValue:d,tabValues:a}=e;const c=[],{blockElementScrollPositionUntilNextRender:o}=(0,i.o5)(),l=e=>{const n=e.currentTarget,r=c.indexOf(n),s=a[r].value;s!==t&&(o(n),d(s))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;n=c[r]??c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;n=c[r]??c[c.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:i}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>c.push(e),onKeyDown:h,onClick:l,...i,className:(0,s.Z)("tabs__item",j.tabItem,i?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function I(e){let{lazy:n,children:r,selectedValue:s}=e;const i=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function g(e){const n=p(e);return(0,f.jsxs)("div",{className:(0,s.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(v,{...e,...n}),(0,f.jsx)(I,{...e,...n})]})}function T(e){const n=(0,m.Z)();return(0,f.jsx)(g,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>d});var t=r(7294);const s={},i=t.createContext(s);function d(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9834c4d1.bedfa807.js b/assets/js/9834c4d1.bedfa807.js deleted file mode 100644 index 48fdedb..0000000 --- a/assets/js/9834c4d1.bedfa807.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1036],{1359:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>x,frontMatter:()=>t,metadata:()=>l,toc:()=>h});var r=s(5893),o=s(1151),c=s(4866),i=s(5162);const t={title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},a=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking",title:"Councilors & governance ranking",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Councilors & governance ranking",sidebar_position:3,slug:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},sidebar:"defaultSidebar",previous:{title:"Proposals & governance structure",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05"},next:{title:"Roles & Permissions",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"}},d={},h=[{value:"Concept",id:"1dd55411694d46b49d4be4c8a3f37f6f",level:2},{value:"Councilor seat",id:"08032ef8b6e84b01b9b06ecc8be78ede",level:3},{value:"Councilor statuses",id:"47ee04ec4d724455814dd13db3e19005",level:3},{value:"Ranking system",id:"219d351e562b427e9e91b88efcd5b77b",level:3},{value:"Pause raking",id:"011f7ecdc0bf4fb894922b3d99e9d2f5",level:4},{value:"Reset ranking",id:"61f40654447345f29b8b91badd65f94e",level:4},{value:"Parameters",id:"a167164d509c49c88dc586e266df4356",level:2},{value:"Cli syntax & examples",id:"55371914bef9468db8b582cc573776d6",level:2},{value:"Transactions",id:"6839c0e109594116986c3bfdf282f92a",level:2},{value:"Claim councilor seat",id:"5f7c76ed81c247f7a6743a762dc04f7d",level:4},{value:"Pause councilor",id:"ff06ca2acb1f48dd885914146a08d4fd",level:4},{value:"Unpause councilor",id:"8c99fc30dd5f481c8247d1daae8d6952",level:4},{value:"Activate councilor",id:"62d7f7ff9f4040b0a4b694038b15dad0",level:4},{value:"Queries",id:"615f1f023f3543ae9e4c1454ecac7bef",level:2},{value:"Query councilors",id:"26b717c801854e9793afe368e12d269a",level:4},{value:"Query non-councilors",id:"f5237a8583e44858844c8dc7ab2ce027",level:4},{value:"Query council registry",id:"25a16eabea2a4ea29ea337bede7e6951",level:4},{value:"Query proposer and voters count",id:"464b5bdc49f249e1bd1856c2cc62add0",level:4},{value:"Governance",id:"9a0bdd12e2fe4d06b71c62956064d408",level:2},{value:"Jailing councilors",id:"4244a636534b4f04adad4fa01d469580",level:4},{value:"Reset all councilors ranks",id:"611ac52d4d99410cb4b4320f118d3bce",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"1dd55411694d46b49d4be4c8a3f37f6f",children:"Concept"}),"\n",(0,r.jsxs)(n.p,{children:["A KIRA account is considered a Councilor if it has at least one whitelisted ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.strong,{children:"Permission or Role"})})," that allows the creation of proposals or voting. Accounts with no Permissions/Roles or blacklisted Permissions/Roles are not considered Councilors. It is essential to note that having permissions or a role does not automatically imply being a councilor. Councilors are governance members who can collude to raise proposals or vote on said proposals. Sudo users (users with sudo permissions such as ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(n.strong,{children:"[Problem Internal Link]"}),") are not considered councilors in this context."]}),"\n",(0,r.jsx)(n.h3,{id:"08032ef8b6e84b01b9b06ecc8be78ede",children:"Councilor seat"}),"\n",(0,r.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,r.jsxs)(n.p,{children:["Sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction is only allowed if the status of the Councilor is ",(0,r.jsx)(n.code,{children:"waiting"})," (see next section)."]}),"\n",(0,r.jsx)(n.p,{children:":::"}),"\n",(0,r.jsxs)(n.p,{children:['Before any governance member can execute their right to create proposals or vote, they must first "claim" their Councilor Seat, similar to how consensus nodes claim their Validator Seat. This action acknowledges the network ',(0,r.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,r.jsx)(n.strong,{children:"Code of Conduct"})})," and allows registering a KIRA user in the governance registrar. When submitting a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction using the ",(0,r.jsx)(n.code,{children:"claim-councilor-seat"})," CLI, the user must supply the following information, which will be persisted in the ",(0,r.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"username"})," - (required) friendly governance member name with minimum 4 non-whitespace characters. It is globally unique and cannot be deleted (just like consensus nodes\u2019 ",(0,r.jsx)(n.code,{children:"moniker"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"description"})," - (optional) a longer description of the councilor"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"social"})," - (optional) comma-separated URL list of any social profiles such as Twitter, Telegram, etc\u2026"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contact"})," - (optional) email address, URL, or another emergency contact"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"avatar"})," - (optional) URL to .SVG image or gif"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"47ee04ec4d724455814dd13db3e19005",children:"Councilor statuses"}),"\n",(0,r.jsx)(n.p,{children:"Councilors have statuses that implies their ability to perform their role in creating proposals and voting."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"STATUS"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"waiting"})}),(0,r.jsxs)(n.td,{children:["Default state after a permission to vote or create a proposal is assigned to the account for the first time. Implies account ability to send a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction to claim a Councilor Seat."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsxs)(n.td,{children:["Default state after sending a ",(0,r.jsx)(n.code,{children:"MsgClaimCouncilor"})," transaction. Implies councilor ability to vote and create proposals."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"inactive"})}),(0,r.jsx)(n.td,{children:"Councilor stopped voting on proposals and didn\u2019t signal to the network any planned absence. As defined by the Ranking System (see section below)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"paused"})}),(0,r.jsx)(n.td,{children:"Councilor signaled planned absence."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"jailed"})}),(0,r.jsx)(n.td,{children:"Councilor is barred from executing any of their permissions."})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"219d351e562b427e9e91b88efcd5b77b",children:"Ranking system"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The councilor's status automatically transitions to ",(0,r.jsx)(n.code,{children:"jailed"})," if they are a consensus node and their node's status changes to ",(0,r.jsx)(n.code,{children:"jailed"})," due to being detected double signing."]})}),"\n",(0,r.jsxs)(n.p,{children:["The Councilor ranking system is used to apply changes to statuses and collect statistics that can be utilized by the governance to determine which network actors fulfill their assigned roles. Note that the ranking of Councilors and Consensus nodes is totally independent and has separate logic. The ranking system is based on proposal creation and proposal votes counters. If the Councilor participates in voting or creates a proposal, their ",(0,r.jsx)(n.code,{children:"rank"})," increases by 1 and the ",(0,r.jsx)(n.code,{children:"abstention"})," counter is set to 0. If the Councilor fails to vote, their rank is decreased by ",(0,r.jsx)(n.code,{children:"abstention_rank_decrease_amount"})," (defined in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), and ",(0,r.jsx)(n.code,{children:"abstention"})," is increased by 1."]}),"\n",(0,r.jsxs)(n.p,{children:["When the ",(0,r.jsx)(n.code,{children:"abstention"})," counter equals or surpasses the ",(0,r.jsx)(n.code,{children:"max_abstention"})," value (set in ",(0,r.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"Network Properties"}),"), a Councilor becomes ",(0,r.jsx)(n.code,{children:"inactive"}),". In this status, they can't vote or initiate proposals, and their ",(0,r.jsx)(n.code,{children:"rank"})," drops to 0. However, their ",(0,r.jsx)(n.code,{children:"abstention"})," count remains. To resume voting, an ",(0,r.jsx)(n.code,{children:"inactive"})," councilor must send a ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," transaction, resetting their ",(0,r.jsx)(n.code,{children:"abstention"})," count to zero."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Keep in mind, governance can tailor transaction fees for each existing message type through the ",(0,r.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"Fee processing"})," module. This means they might impose a higher fee for ",(0,r.jsx)(n.code,{children:"MsgCouncilorActivate"})," to act as a penalty."]})}),"\n",(0,r.jsx)(n.h4,{id:"011f7ecdc0bf4fb894922b3d99e9d2f5",children:"Pause raking"}),"\n",(0,r.jsxs)(n.p,{children:["To prevent the status from becoming ",(0,r.jsx)(n.code,{children:"inactive"})," while being absent for prolonged periods of time, Councilors can submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorPause"})," transaction, which changes their status to ",(0,r.jsx)(n.code,{children:"paused"}),". In the ",(0,r.jsx)(n.code,{children:"paused"})," state, the abstention counter does not change, and the ",(0,r.jsx)(n.code,{children:"rank"})," is not automatically reset, but the Councilor cannot vote or create proposals. To exit the ",(0,r.jsx)(n.code,{children:"paused"})," status, a Councilor must submit a ",(0,r.jsx)(n.code,{children:"MsgCouncilorUnpause"})," transaction, but the ",(0,r.jsx)(n.code,{children:"abstention"})," is not reset as a result."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"rank"})," is reset to 0 if the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"jailed"}),". In the jailed status, a Councilor cannot vote and create proposals unless the Validator is unjailed by the governance, in which case the Councilor's status changes to ",(0,r.jsx)(n.code,{children:"inactive"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"61f40654447345f29b8b91badd65f94e",children:"Reset ranking"}),"\n",(0,r.jsx)(n.p,{children:"It may be useful for the governance to have the ability to reset all ranks and abstention counters of all governance members simultaneously (e.g., incentivized games, etc.). For this purpose, the governance module has a dedicated proposal and corresponding voting permission."}),"\n",(0,r.jsx)(n.h2,{id:"a167164d509c49c88dc586e266df4356",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"address"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"kira1zcjdw..."})}),(0,r.jsx)(n.td,{children:"The account address of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"status"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"active"})}),(0,r.jsx)(n.td,{children:"The current status of the councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rank"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"112"})}),(0,r.jsx)(n.td,{children:"The current rank of the councilor"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"abstention"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"int64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsx)(n.td,{children:"The current number of times the councilor missed to vote for a proposal for which it has the permission to vote for."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"55371914bef9468db8b582cc573776d6",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(c.Z,{children:[(0,r.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"6839c0e109594116986c3bfdf282f92a",children:"Transactions"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor claim-seat"})})}),(0,r.jsx)(n.th,{children:"Claim a councilor seat."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor pause"})})}),(0,r.jsx)(n.td,{children:"Signal an absence as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor unpause"})})}),(0,r.jsx)(n.td,{children:"Signal re-availability as a councilor."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilor activate"})})}),(0,r.jsx)(n.td,{children:"Activate councilor status previously deactivated due to excessive abstention."})]})]})]}),(0,r.jsx)(n.h4,{id:"5f7c76ed81c247f7a6743a762dc04f7d",children:"Claim councilor seat"}),(0,r.jsxs)(n.p,{children:["Claim a councilor seat using the ",(0,r.jsx)(n.code,{children:"claim-seat"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$USERNAME"}),": The username of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$SOCIAL"}),": The social media handle of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$CONTACT"}),": The contact details of the councilor."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$AVATAR"}),": The avatar of the councilor."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor claim-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--address=$ADDRESS --moniker=$MONIKER --username=$USERNAME \\\n--description=$DESCRIPTION --social=$SOCIAL --contact=$CONTACT --avatar=$AVATAR\n"})}),(0,r.jsx)(n.h4,{id:"ff06ca2acb1f48dd885914146a08d4fd",children:"Pause councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you will not be present for a prolonged period of time using the ",(0,r.jsx)(n.code,{children:"pause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor pause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"8c99fc30dd5f481c8247d1daae8d6952",children:"Unpause councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that you wish to regain voting ability after planned absence using the ",(0,r.jsx)(n.code,{children:"unpause"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor unpause \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,r.jsx)(n.h4,{id:"62d7f7ff9f4040b0a4b694038b15dad0",children:"Activate councilor"}),(0,r.jsxs)(n.p,{children:["Signal to the network that Councilor wishes to regain voting ability using the ",(0,r.jsx)(n.code,{children:"activate"})," command."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov councilor activate \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,r.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"615f1f023f3543ae9e4c1454ecac7bef",children:"Queries"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"councilors"})})}),(0,r.jsx)(n.th,{children:"Query all councilors, including their statuses, ranks, and abstention counters."})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"non-councilors"})})}),(0,r.jsx)(n.td,{children:"Query all governance members that are not councilors."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"council-registry"})})}),(0,r.jsx)(n.td,{children:"Query the governance registry by address or moniker."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"proposer-voters-count"})})}),(0,r.jsx)(n.td,{children:"Query separate counts for proposers and voters who can create or vote on at least one type of proposal."})]})]})]}),(0,r.jsx)(n.h4,{id:"26b717c801854e9793afe368e12d269a",children:"Query councilors"}),(0,r.jsx)(n.p,{children:"Query all councilors, waiting or not, including their corresponding statuses, ranks & abstention counters."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"f5237a8583e44858844c8dc7ab2ce027",children:"Query non-councilors"}),(0,r.jsx)(n.p,{children:"Query all governance members that are not councilors."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov non-councilors $FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"25a16eabea2a4ea29ea337bede7e6951",children:"Query council registry"}),(0,r.jsx)(n.p,{children:"Query the governance registry. The registry can be queried by either address or moniker."}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$ADDRESS"}),": The address you want to query information."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$MONIKER"}),": The moniker you want to query information."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov council-registry \\\n--addr=$ADDRESS --moniker=$MONIKER \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(n.h4,{id:"464b5bdc49f249e1bd1856c2cc62add0",children:"Query proposer and voters count"}),(0,r.jsx)(n.p,{children:"Retrieve the count of accounts that can create a proposal (proposers) and the count of accounts that can vote on at least one type of proposal (voters)."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid query customgov proposer_voters_count $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"9a0bdd12e2fe4d06b71c62956064d408",children:"Governance"}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})}),(0,r.jsx)(n.th,{children:"Proposes to jail councilors for violating the network's rules"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})}),(0,r.jsx)(n.td,{children:"Proposes to reset the ranking of all councilors"})]})})]}),(0,r.jsx)(n.h4,{id:"4244a636534b4f04adad4fa01d469580",children:"Jailing councilors"}),(0,r.jsxs)(n.p,{children:["Create a proposal to jail specific councilors using the ",(0,r.jsx)(n.code,{children:"proposal-jail-councilor"})," command followed by councilor(s) ",(0,r.jsx)(n.code,{children:"$COUNCILORS"}),"."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$COUNCILORS"}),": List of councilors to be jailed, comma separated list of addresses."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-jail-councilor \\\n--from=$SIGNER $FLAGS_TX \\\n$COUNCILORS --title=$TITLE --description=$DESCRIPTION\n"})}),(0,r.jsx)(n.h4,{id:"611ac52d4d99410cb4b4320f118d3bce",children:"Reset all councilors ranks"}),(0,r.jsxs)(n.p,{children:["Create a proposal to reset all councilors rank using the ",(0,r.jsx)(n.code,{children:"proposal-reset-whole-councilor-rank"})," command."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sekaid tx customgov proposal proposal-reset-whole-councilor-rank \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION\n"})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var r=s(6905);const o={tabItem:"tabItem_Ymn6"};var c=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,c.jsx)("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var r=s(7294),o=s(6905),c=s(2466),i=s(6550),t=s(469),a=s(1980),l=s(7392),d=s(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:r,default:o}}=e;return{value:n,label:s,attributes:r,default:o}}))}(s);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function x(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:s}=e;const o=(0,i.k6)(),c=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,a._X)(c),(0,r.useCallback)((e=>{if(!c)return;const n=new URLSearchParams(o.location.search);n.set(c,e),o.replace({...o.location,search:n.toString()})}),[c,o])]}function p(e){const{defaultValue:n,queryString:s=!1,groupId:o}=e,c=u(e),[i,a]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!x({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:c}))),[l,h]=j({queryString:s,groupId:o}),[p,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,c]=(0,d.Nk)(s);return[o,(0,r.useCallback)((e=>{s&&c.set(e)}),[s,c])]}({groupId:o}),f=(()=>{const e=l??p;return x({value:e,tabValues:c})?e:null})();(0,t.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),b(e)}),[h,b,c]),tabValues:c}}var b=s(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(5893);function g(e){let{className:n,block:s,selectedValue:r,selectValue:i,tabValues:t}=e;const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.o5)(),d=e=>{const n=e.currentTarget,s=a.indexOf(n),o=t[s].value;o!==r&&(l(n),i(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":s},n),children:t.map((e=>{let{value:n,label:s,attributes:c}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>a.push(e),onKeyDown:h,onClick:d,...c,className:(0,o.Z)("tabs__item",f.tabItem,c?.className,{"tabs__item--active":r===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:o}=e;const c=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=c.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:c.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function y(e){const n=p(e);return(0,m.jsxs)("div",{className:(0,o.Z)("tabs-container",f.tabList),children:[(0,m.jsx)(g,{...e,...n}),(0,m.jsx)(v,{...e,...n})]})}function k(e){const n=(0,b.Z)();return(0,m.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>i});var r=s(7294);const o={},c=r.createContext(o);function i(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/987660e5.f4a4f852.js b/assets/js/987660e5.f4a4f852.js deleted file mode 100644 index 0f31c3e..0000000 --- a/assets/js/987660e5.f4a4f852.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1902],{391:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var a=s(5893),t=s(1151),r=s(4866),i=s(5162);const o={title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools",title:"Consensus nodes & staking pools",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},sidebar:"defaultSidebar",previous:{title:"Multistaking",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"},next:{title:"Delegators",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381"}},l={},h=[{value:"Concept",id:"119370e041bd4a63a2a2649b70fb2e2e",level:2},{value:"Claiming a validator seat",id:"6441658f447b4a418784ab7b0ce4ec34",level:3},{value:"Staking pools status & commissions",id:"df95ed895a6b45968a254d7751bebfe9",level:3},{value:"Performance-based rewards",id:"9884c804414347b9ba608c8c9c006564",level:3},{value:"Consensus nodes ranks and statuses",id:"4d738a03dfa44aa2bc1482fe5e6114a4",level:3},{value:"Consensus node faq",id:"326c9ccbe2aa4040adb5182e269872b2",level:3},{value:"Parameters",id:"0ebbc1da2a434d80be94371717737f36",level:2},{value:"Cli syntax & examples",id:"b3d08c63c9754edd925df694e86eeeee",level:2},{value:"Transactions",id:"55ed760972db41338ee3c66e283156af",level:2},{value:"Claiming a consensus node seat",id:"3fe4d6fb4aac4669aa4033d67a92121f",level:4},{value:"Creating/editing a staking pool",id:"526b85a39e5e4895bbd8025439af5ab9",level:4},{value:"Queries",id:"10b764b83e0f475db4662aafc73454b2",level:2},{value:"Consensus node information",id:"628b4115df9348f692fabb4c2a105d93",level:4},{value:"Staking pool information",id:"39c8e4e079c149589be3a410bf93933d",level:4},{value:"Governance",id:"a72ec328d33f4233a449cd4634882a8c",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"119370e041bd4a63a2a2649b70fb2e2e",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:'The problem of improving the probabilistic finality of PoW consensuses has been treated by a variety of committee-based PoS consensuses such as Tendermint. However, unlike in the former mechanism, where all consensus nodes ("miners") are able to propose a block and one of them is chosen probabilistically, in a committee-based blockchain, blocks are cooperatively created through a voting mechanism. Therefore, the consensus over the "valid" state of the blockchain depends on the voting behavior of all its consensus nodes.'}),"\n",(0,a.jsx)(n.p,{children:"However, since permissionless settings inherently exhibit Sybil vulnerability, assessing nodes' rational behavior becomes impossible. As a result, the prevalent solution has been to apply a weighted voting power rule, where both consensus and governance votes are weighted by their respective stakes. In this paradigm, a block (or a governance proposal) is considered valid when it accumulates at least two-thirds of the total voting power from the consensus nodes set. Regrettably, this approach has often led to the centralization of power in the hands of a few large token holders, as exemplified by Cosmos, where more than two-thirds of voting power of most chains is concentrated in just 5 to 7 entities. And this system, in fact, still does not guarantee that their intentions align with the best interests of the network in the long term."}),"\n",(0,a.jsxs)(n.p,{children:["KIRA builds upon ",(0,a.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," as its consensus engine and introduces fundamental adjustments to the block proposer role, transforming the system into a governance-permissioned one that unlocks powerful features:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["The Committee, a.k.a Consensus node set or \u201cValidator\u201d set, is no longer a fixed number of nodes and/or determined by stake eligibility. Instead, network governance controls who can join and leave the committee, and can set requirements such as proof of individuality (through the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," for instance and which doesn't have to be KYC), community involvement (such as joining consensus node standups), or adherence to the Code of Conduct in the ",(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:"Data Registry"})," to increase sybil resistance."]}),"\n",(0,a.jsxs)(n.li,{children:["The block proposer role rotates according to an equal probability round robin mechanism, meaning that all consensus nodes have an equal chance of proposing new blocks. This also means that they are rewarded equally, rather than proportionally to their stake. More information on rewards distribution can be found in the ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Rewards Distributor"})," module."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"6441658f447b4a418784ab7b0ce4ec34",children:"Claiming a validator seat"}),"\n",(0,a.jsxs)(n.p,{children:['Before any Consensus node can participate in network validation, they must first "claim" their Validator Seat, a process parallel to how governance members claim their Councilor Seat. This action acknowledges the network ',(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,a.jsx)(n.strong,{children:"Code of Conduct"})})," and allows the integration of the node in the consensus registrar. To submit a ",(0,a.jsx)(n.code,{children:"MsgClaimValidator"})," transaction, the account must have permission ",(0,a.jsx)(n.strong,{children:"[Problem Internal Link]"})," , which is assigned either through governance (mainnet) or granted by the sudo account (testnet). In addition, this transaction requires the node's globally unique ",(0,a.jsx)(n.code,{children:"moniker"})," identifier as a parameter. This moniker is a friendly name with minimum 4 non-whitespace characters that can be set in advance by the account via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or directly when submitting the transaction via the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI if it has not been assigned a value yet. If a different value than the existing one is provided, the transaction will fail. This process ensures the unique identity of each consensus node in the network."]}),"\n",(0,a.jsx)(n.h3,{id:"df95ed895a6b45968a254d7751bebfe9",children:"Staking pools status & commissions"}),"\n",(0,a.jsxs)(n.p,{children:["Each consensus node operates its own staking pool where delegators can stake their assets. Each staking pool has a unique ID that is linked to the consensus node's address. The consensus node has the ability to ",(0,a.jsx)(n.code,{children:"enable"})," or ",(0,a.jsx)(n.code,{children:"disable"})," the staking pool, as well as set the commission rate on block rewards. Staking pools play a crucial role in reward distribution on KIRA network. All rewards are managed and distributed through these pools, which helps to streamline the process given the network's diverse range of staking tokens."]}),"\n",(0,a.jsxs)(n.p,{children:["Before the block\u2019s and fee rewards of a given block are distributed to proposer staking pool\u2019s delegators, the proposer takes a percentage of both types of rewards as commissions. Regarding block rewards, subsidized by KEX inflation, each consensus node setup their own staking pool\u2019s ",(0,a.jsx)(n.code,{children:"commission"})," rate. The ",(0,a.jsx)(n.code,{children:"commission"})," rate is a decimal value that cannot be set above ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) and under ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to prevent them from over-charging delegators or undercharging them in order to make ",(0,a.jsx)(n.em,{children:"smaller"})," consensus nodes unprofitable. Commissions over fee rewards from ",(0,a.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"}),", however, are homogeneous to all staking pools and defined by a governance managed ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," network property. Likewise, ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," is capped at ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) but can be set to 0."]}),"\n",(0,a.jsx)(n.h3,{id:"9884c804414347b9ba608c8c9c006564",children:"Performance-based rewards"}),"\n",(0,a.jsx)(n.p,{children:"Consensus nodes are subject to a performance evaluation and the amount of rewards they will actually receive from their commission is pro-rata to their participation in the consensus. If they fail to sign consecutive blocks during a given period, some of those rewards are cut off and sent to the community treasury. Outstanding block and fee rewards are then sent to the consensus node\u2019s staking pool and become claimable by their respective delegators in proportion to the derivative tokens they have. Notice in particular that consensus nodes can be rewarded twice: once through both previous commissions they take as consensus nodes for their service, and once more as delegator if they delegate some assets."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding network rewards distribution mechanisms please refer to the"})," ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,a.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,a.jsx)(n.em,{children:"module.\nFor more information regarding KIRA\u2019s economics, please refer to the"})," ",(0,a.jsx)(n.em,{children:"***"})," ",(0,a.jsx)(n.em,{children:"section."})]}),"\n",(0,a.jsx)(n.h3,{id:"4d738a03dfa44aa2bc1482fe5e6114a4",children:"Consensus nodes ranks and statuses"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"The status of a consensus node and the status of its staking pool are two distinct things. Consensus nodes that have not created a staking pool or have disabled it can still participate in the consensus process and produce blocks, but they will not be eligible for any rewards."})}),"\n",(0,a.jsxs)(n.p,{children:["KIRA network uses a ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"ranking system"})," to incentivize consensus nodes to stay online, or ",(0,a.jsx)(n.code,{children:"active"}),", and create a friendly, competitive environment. The ranking is based on the number of blocks a consensus node produces and the number of missed blocks. If a consensus node signs a block, their rank increases. If a consensus node consecutively fails to sign a block for a certain number of times, they are deemed offline, or ",(0,a.jsx)(n.code,{children:"inactive"}),", and their rank decreases. The ranking system also includes a mechanism for consensus nodes to temporarily pause their node without affecting their rank, and for the governance to reset all ranks periodically. Inactive consensus nodes are removed from the consensus node set, cannot produce blocks and are unable to perform some actions such as editing their staking pool until they signal they are ready to be active again. If a consensus node is inactive, delegators cannot delegate any tokens; they can only undelegate their stake."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding consensus nodes ranking system please refer to the"})," ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,a.jsx)(n.em,{children:"section of KIRA\u2019s slashing module."})]}),"\n",(0,a.jsx)(n.h3,{id:"326c9ccbe2aa4040adb5182e269872b2",children:"Consensus node faq"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"https://hub.cosmos.network/main/validators/validator-faq.html",children:"Cosmos Validator FAQ"})," provides a wealth of information about being a consensus node for anyone interested in learning more about this role."]}),"\n",(0,a.jsx)(n.h2,{id:"0ebbc1da2a434d80be94371717737f36",children:"Parameters"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Staking pool properties"})}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"NAME"})}),(0,a.jsx)(n.th,{children:"TYPE"}),(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"id"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsx)(n.td,{children:"Pool\u2019s ID"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"commission"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsxs)(n.td,{children:["Defines the staking pool\u2019s commission rate over block rewards (cf. ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Untitled"}),")"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"enabled"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"boolean"})})}),(0,a.jsxs)(n.td,{children:["Defines if the pool is enabled or disabled. If set to ",(0,a.jsx)(n.code,{children:"false"})," the pool doesn\u2019t accumulate any reward and delegators are only able to unstake."]})]})]})]}),"\n",(0,a.jsx)(n.h2,{id:"b3d08c63c9754edd925df694e86eeeee",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"55ed760972db41338ee3c66e283156af",children:"Transactions"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"claim-validator-seat"})}),(0,a.jsx)(n.th,{children:"Submit a transaction to claim a consensus node seat in KIRA\u2019s consensus node set."})]})}),(0,a.jsx)(n.tbody,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"upsert-staking-pool"})}),(0,a.jsx)(n.td,{children:"Submit a transaction to create or edit a staking pool as a consensus node."})]})})]}),(0,a.jsx)(n.h4,{id:"3fe4d6fb4aac4669aa4033d67a92121f",children:"Claiming a consensus node seat"}),(0,a.jsxs)(n.p,{children:["To claim a seat in the consensus node set, use the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI command. This requires a ",(0,a.jsx)(n.code,{children:"2"})," permission, obtainable through governance (mainnet) or a sudo account (testnet). Ensure your node's unique moniker identifier is pre-set, via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or provide it directly in the CLI command."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier of the account claiming a consensus node seat."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PUBKEY"}),": Public key of the account claiming a consensus node seat."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customstaking claim-validator-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--moniker=$MONIKER [ --pubkey=$PUBKEY ]\n"})}),(0,a.jsxs)(n.p,{children:["To confirm a successful claim, use the ",(0,a.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,a.jsx)(n.code,{children:"validator"})})," query which should return the following:"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "val_key": "kiravaloper1q0fkns62jl4mfxavxug4rvsp7d4770mfkzupzp",\n "pub_key": {\n "@type": "/cosmos.crypto.ed25519.PubKey",\n "key": "YMPiwZecoXe2m7UrO3hJtl51lYrMCGS+rlGuN1I7dpA="\n },\n "status": "ACTIVE",\n "rank": "49",\n "streak": "49"\n}\n'})}),(0,a.jsx)(n.h4,{id:"526b85a39e5e4895bbd8025439af5ab9",children:"Creating/editing a staking pool"}),(0,a.jsxs)(n.p,{children:["An ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.code,{children:"active"})})," consensus node can use the ",(0,a.jsx)(n.code,{children:"upsert-staking-pool"})," transaction to create or edit its staking pool. The commission rate must be within ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to ",(0,a.jsx)(n.code,{children:"0.5"})," (50%)."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Address of the consensus node (",(0,a.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n"]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COMMISSION"}),": Commission rate of the staking pool."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ENABLED"}),": Status of the staking pool (default=",(0,a.jsx)(n.code,{children:"true"}),")."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking upsert-staking-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--commission=$COMMISSION --enabled=$ENABLED \\\n$VAL\n"})})]}),(0,a.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"10b764b83e0f475db4662aafc73454b2",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"validator"})}),(0,a.jsxs)(n.th,{children:["Query an active consensus node\u2019s information ",(0,a.jsx)(n.em,{children:"(val key"}),", ",(0,a.jsx)(n.em,{children:"rank, active status, streak)"})," using filters."]})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"validators"})}),(0,a.jsx)(n.td,{children:"Query all existing consensus nodes using specific filters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"pools"})}),(0,a.jsxs)(n.td,{children:["Query all existing staking pools and return their respective parameters (",(0,a.jsx)(n.em,{children:"enabled, commission)"})," and current metrics (",(0,a.jsx)(n.em,{children:"total staked tokens"}),", ",(0,a.jsx)(n.em,{children:"total accumulated rewards"}),", \u2026)."]})]})]})]}),(0,a.jsx)(n.h4,{id:"628b4115df9348f692fabb4c2a105d93",children:"Consensus node information"}),(0,a.jsx)(n.p,{children:"Retrieve information about all consensus nodes, including their address, status, streak, and rank, with the following queries."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STATUS"}),": Node status."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PKEY"}),": Public key."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PROP"}),": Proposer."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validators [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER || --status=$STATUS || --pubkey=$PKEY || --proposer=$PROP] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query a specific consensus node\u2019s information using either its account address, its node address or its moniker."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validator [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"39c8e4e079c149589be3a410bf93933d",children:"Staking pool information"}),(0,a.jsx)(n.p,{children:"Query real-time metrics and parameters of all existing staking pools."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"a72ec328d33f4233a449cd4634882a8c",children:"Governance"}),(0,a.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function b(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var a=s(6905);const t={tabItem:"tabItem_Ymn6"};var r=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var a=s(7294),t=s(6905),r=s(2466),i=s(6550),o=s(469),d=s(1980),c=s(7392),l=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:t}}=e;return{value:n,label:s,attributes:a,default:t}}))}(s);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function b(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const t=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(r),(0,a.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace({...t.location,search:n.toString()})}),[r,t])]}function m(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=u(e),[i,d]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[c,h]=f({queryString:s,groupId:t}),[m,p]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,r]=(0,l.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&r.set(e)}),[s,r])]}({groupId:t}),x=(()=>{const e=c??m;return b({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function g(e){let{className:n,block:s,selectedValue:a,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),t=o[s].value;t!==a&&(c(n),i(t))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":s},n),children:o.map((e=>{let{value:n,label:s,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...r,className:(0,t.Z)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:t}=e;const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function k(e){const n=m(e);return(0,j.jsxs)("div",{className:(0,t.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,j.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>i});var a=s(7294);const t={},r=a.createContext(t);function i(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/98fa813a.ce13b914.js b/assets/js/98fa813a.8a466ea4.js similarity index 94% rename from assets/js/98fa813a.ce13b914.js rename to assets/js/98fa813a.8a466ea4.js index 165bf6c..c723650 100644 --- a/assets/js/98fa813a.ce13b914.js +++ b/assets/js/98fa813a.8a466ea4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5643],{4647:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-5",sidebar_position:3,slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},l=void 0,o={id:"Testnet-History/testnet-5",title:"testnet-5",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-5.mdx",sourceDirName:"Testnet-History",slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"testnet-5",sidebar_position:3,slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},sidebar:"defaultSidebar",previous:{title:"testnet-6",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce"},next:{title:"testnet-8",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585"}},c={},i=[{value:"Description",id:"af3f87b3a498484b8964e0c3cd3865a8",level:2},{value:"Post mortem",id:"d93dd740983e4e4395a3c94c39a27e5a",level:2},{value:"Files",id:"9557ae45d0074312a2df0d99e9f93340",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"af3f87b3a498484b8964e0c3cd3865a8",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-5"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"35cfa0e7cee9eaab8c5e84986bbe81780d8c02c6ec76ad385953dc1148d457c0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"26efc7a3deb6fe8a1932cfffbbdf47a86f16811defc0b4a9a00575de6d0868cb"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"d93dd740983e4e4395a3c94c39a27e5a",children:"Post mortem"}),"\n",(0,n.jsx)(t.p,{children:"Depreciated due to planned hard fork at 10:30 PM 2021-10-23"}),"\n",(0,n.jsx)(t.h2,{id:"9557ae45d0074312a2df0d99e9f93340",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/a9831e94-76a1-4bb1-819e-16abca5ead3a/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152702Z&X-Amz-Expires=3600&X-Amz-Signature=276e7935b68656cde099eac9bfdf61670c002436189fa0c4f75dee847b58d521&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/81d6c1cb-3115-47ab-81d9-14ae95543d6f/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152702Z&X-Amz-Expires=3600&X-Amz-Signature=01b8411999dfa01eaca90ca1758fdd58947d7d61b31cde6c9b3b40f14ad4fb61&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>l});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function l(e){let{children:t,hidden:a,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,l),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),l=a(6550),o=a(469),c=a(1980),i=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[l,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=i??m;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&c(v)}),[v]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:l,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),r=o[a].value;r!==n&&(i(t),l(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function j(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>l});var n=a(7294);const r={},s=n.createContext(r);function l(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5643],{4647:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-5",sidebar_position:3,slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},l=void 0,o={id:"Testnet-History/testnet-5",title:"testnet-5",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-5.mdx",sourceDirName:"Testnet-History",slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"testnet-5",sidebar_position:3,slug:"/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},sidebar:"defaultSidebar",previous:{title:"testnet-6",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce"},next:{title:"testnet-8",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585"}},c={},i=[{value:"Description",id:"af3f87b3a498484b8964e0c3cd3865a8",level:2},{value:"Post Mortem",id:"d93dd740983e4e4395a3c94c39a27e5a",level:2},{value:"Files",id:"9557ae45d0074312a2df0d99e9f93340",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"af3f87b3a498484b8964e0c3cd3865a8",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-5"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"35cfa0e7cee9eaab8c5e84986bbe81780d8c02c6ec76ad385953dc1148d457c0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"26efc7a3deb6fe8a1932cfffbbdf47a86f16811defc0b4a9a00575de6d0868cb"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"d93dd740983e4e4395a3c94c39a27e5a",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"Depreciated due to planned hard fork at 10:30 PM 2021-10-23"}),"\n",(0,n.jsx)(t.h2,{id:"9557ae45d0074312a2df0d99e9f93340",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/a9831e94-76a1-4bb1-819e-16abca5ead3a/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165650Z&X-Amz-Expires=3600&X-Amz-Signature=6f133ae774103211788c520dc33dc1ff8ecc0e8752212cb60cebbf37cfd3598d&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/81d6c1cb-3115-47ab-81d9-14ae95543d6f/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165650Z&X-Amz-Expires=3600&X-Amz-Signature=e230acbbf401a88ec08e770a182cb800b206554e46837ce22446b06fbaa535d4&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>l});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function l(e){let{children:t,hidden:a,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,l),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),l=a(6550),o=a(469),c=a(1980),i=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[l,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=i??m;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&c(v)}),[v]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:l,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),r=o[a].value;r!==n&&(i(t),l(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function j(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(x,{...e,...t}),(0,g.jsx)(j,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>l});var n=a(7294);const r={},s=n.createContext(r);function l(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/99a08ffb.5261e951.js b/assets/js/99a08ffb.5261e951.js deleted file mode 100644 index 3e78fad..0000000 --- a/assets/js/99a08ffb.5261e951.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4226],{8619:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);t(4866),t(5162);const r={title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},s=void 0,a={id:"Stack/INTERX--Middleware/Endpoints",title:"Endpoints",description:"Description of all available endpoints including their accepted parameter and expected response format can be queried though :11000/api/metadata endpoint.",source:"@site/tabs/docs/Stack/INTERX--Middleware/Endpoints.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Endpoints",sidebar_position:3,slug:"/27ca73f9-ea33-4ca3-994a-cba651a2c896"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},next:{title:"Installation",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b"}},p={},d=[];function c(n){const e={code:"code",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(e.p,{children:["Description of all available endpoints including their accepted parameter and expected response format can be queried though ",(0,i.jsx)(e.code,{children:":11000/api/metadata"})," endpoint."]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.strong,{children:"Example Metadata Endpoint Response"})}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-json",children:'{\n "functions": {\n "Broadcast": {\n "endpoint": "/api/kira/txs",\n "description": "Broadcast is a function to broadcast signed transaction.",\n "parameters": {\n "mode": {\n "type": "string",\n "optional": true,\n "description": "This represents the broadcast mode. (block, sync, async)"\n },\n "tx": {\n "type": "byte[]",\n "description": "This represents the transaction bytes."\n }\n },\n "response": null\n },\n "Download": {\n "endpoint": "/download",\n "description": "Download is a function to download a data reference or arbitrary data.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents the reference key. (It saves reference data with hashed name. e.g. 2CEE6B1689EDDDD6F08EB1EAEC7D3C4E.)"\n },\n "module": {\n "type": "string",\n "description": "This represents the module name. (e.g. DRR for data reference registry.)"\n }\n },\n "response": null\n },\n "Faucet": {\n "endpoint": "/api/kira/faucet?",\n "description": "Faucet is a function to claim tokens to the account for free.",\n "parameters": {\n "claim": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "token": {\n "type": "string",\n "optional": true,\n "description": "This represents the token name."\n }\n },\n "response": {\n "hash": {\n "description": "The faucet transaction hash"\n }\n }\n },\n "FaucetInfo": {\n "endpoint": "/api/kira/faucet",\n "description": "FaucetInfo is a function to return the available faucet amount",\n "parameters": null,\n "response": {\n "address": {\n "description": "The faucet kira address"\n },\n "balances": {\n "description": "The balances array (amount \\u0026 denom)"\n }\n }\n },\n "QueryAccount": {\n "endpoint": "/api/kira/accounts/{address}",\n "description": "QueryAccount is a function to query the account info.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n }\n },\n "response": {\n "account": {\n "description": "The account info with address, pubkey and sequence."\n }\n }\n },\n "QueryAllIdentityRecordVerifyRequests": {\n "endpoint": "/api/kira/gov/all_identity_verify_requests",\n "description": "QueryAllIdentityRecordVerifyRequests is a function to query all identity record verify requests.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryAllIdentityRecords": {\n "endpoint": "/api/kira/gov/all_identity_records",\n "description": "QueryAllIdentityRecords is a function to query all identity records.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryBalance": {\n "endpoint": "/api/kira/balances/{address}",\n "description": "QueryBalance is a function to query the account balances.",\n "parameters": {\n "address": {\n "type": "string",\n "description": "This represents the account address."\n },\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": {\n "balances": {\n "type": "Coin[]",\n "description": "The account balances with pagination"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryBlockByHeightOrHash": {\n "endpoint": "/api/blocks/{height}",\n "description": "QueryBlockByHeightOrHash is a function to query block by height or hash.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height or hash."\n }\n },\n "response": {\n "block": {\n "description": "The block information"\n },\n "block_id": {\n "description": "The block hash inforamtion"\n }\n }\n },\n "QueryBlockTransactions": {\n "endpoint": "/api/blocks/{height}/transactions",\n "description": "QueryBlockTransactions is a function to query block transactions by height.",\n "parameters": {\n "height": {\n "type": "string",\n "optional": true,\n "description": "This is an option of block height."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "txs": {\n "description": "The transaction information array"\n }\n }\n },\n "QueryBlocks": {\n "endpoint": "/api/blocks",\n "description": "QueryBlocks is a function to query blocks with pagination.",\n "parameters": {\n "maxHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the maximum block height."\n },\n "minHeight": {\n "type": "string",\n "optional": true,\n "description": "This is the option of the minimum block height."\n }\n },\n "response": {\n "block_metas": {\n "description": "The array of block informations"\n },\n "last_height": {\n "description": "The last block height"\n }\n }\n },\n "QueryConsensus": {\n "endpoint": "/api/consensus",\n "description": "QueryConsensus is a function to query consensus info.",\n "parameters": null,\n "response": {\n "average_block_time": {\n "description": "average block time in seconds"\n },\n "commit_time": {\n "description": "The latest commit timestamp"\n },\n "consensus_stopped": {\n "description": "If the consensus is stopped or not"\n },\n "height": {\n "description": "The latest block height"\n },\n "noncommits": {\n "description": "The validators array with no commits"\n },\n "precommits": {\n "description": "The validators array with pre commits"\n },\n "prevotes": {\n "description": "The validators array with prevotes"\n },\n "proposer": {\n "description": "The current proposer kira address"\n },\n "round": {\n "description": "The consensus round"\n },\n "start_time": {\n "description": "The consensus start timestamp"\n },\n "step": {\n "description": "RoundStepNewHeight"\n },\n "triggered_timeout_precommit": {\n "description": "true or false"\n }\n }\n },\n "QueryDashboard": {\n "endpoint": "/api/dashboard",\n "description": "QueryDashboard is a function to query data for the dashboard.",\n "parameters": null,\n "response": {\n "blocks": {\n "type": "struct",\n "description": "The blocks consensus status",\n "fields": {\n "average_time": {\n "type": "number",\n "description": "The average block confirm time"\n },\n "current_height": {\n "type": "number",\n "description": "The current block height"\n },\n "current_transactions": {\n "type": "number",\n "description": "The count of current transactions"\n },\n "latest_time": {\n "type": "number",\n "description": "The latest block confirm time"\n },\n "pending_transactions": {\n "type": "number",\n "description": "The count of pending transactions"\n },\n "since_genesis": {\n "type": "number",\n "description": "The block count after genesis block"\n }\n }\n },\n "consensus_health": {\n "description": "Float value between 0 and 1, represents the health status of the consensus."\n },\n "current_block_validator": {\n "type": "struct",\n "description": "The current block validator info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The validator\'s address"\n },\n "moniker": {\n "type": "string",\n "description": "The validator\'s moniker"\n }\n }\n },\n "proposals": {\n "type": "struct",\n "description": "The proposals count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active proposals"\n },\n "enacting": {\n "type": "number",\n "description": "The count of enacting proposals"\n },\n "finished": {\n "type": "number",\n "description": "The count of finished proposals"\n },\n "proposers": {\n "type": "number",\n "description": "The count of proposers"\n },\n "successful": {\n "type": "number",\n "description": "The count of successful proposals"\n },\n "total": {\n "type": "number",\n "description": "The count of total proposals"\n },\n "voters": {\n "type": "number",\n "description": "The count of voters"\n }\n }\n },\n "validators": {\n "type": "struct",\n "description": "The validators count info",\n "fields": {\n "active": {\n "type": "number",\n "description": "The count of active validators"\n },\n "inactive": {\n "type": "number",\n "description": "The count of in-active validators"\n },\n "jailed": {\n "type": "number",\n "description": "The count of jailed validators"\n },\n "paused": {\n "type": "number",\n "description": "The count of paused validators"\n },\n "total": {\n "type": "number",\n "description": "The count of total validators"\n },\n "waiting": {\n "type": "number",\n "description": "The count of waiting validators"\n }\n }\n }\n }\n },\n "QueryDataReference": {\n "endpoint": "/api/kira/gov/data/{key}",\n "description": "QueryDataReference is a function to query data reference by a key.",\n "parameters": {\n "key": {\n "type": "string",\n "description": "This represents data reference key."\n }\n },\n "response": null\n },\n "QueryDataReferenceKeys": {\n "endpoint": "/api/kira/gov/data_keys",\n "description": "QueryDataReferenceKeys is a function to query data reference keys with pagination.",\n "parameters": {\n "count_total": {\n "type": "number",\n "optional": true,\n "description": "This represents the option to return total count of data reference keys."\n },\n "limit": {\n "type": "number",\n "description": "This represents the page size"\n },\n "offset": {\n "type": "number",\n "description": "This represents the page number"\n }\n },\n "response": null\n },\n "QueryExecutionFee": {\n "endpoint": "/api/kira/gov/execution_fee",\n "description": "QueryExecutionFee is a function to query execution fee by transaction type.",\n "parameters": {\n "message": {\n "type": "string",\n "description": "This is an option of a transaction type"\n }\n },\n "response": {\n "fee": {\n "description": "The execution fee info"\n }\n }\n },\n "QueryExecutionFees": {\n "endpoint": "/api/kira/gov/execution_fees",\n "description": "QueryExecutionFees is a function to query all execution fees.",\n "parameters": null,\n "response": {\n "fees": {\n "type": "array",\n "description": "All execution fees"\n }\n }\n },\n "QueryGenesis": {\n "endpoint": "/api/genesis",\n "description": "QueryGenesis is a function to query genesis.",\n "parameters": null,\n "response": null\n },\n "QueryGenesisSum": {\n "endpoint": "/api/gensum",\n "description": "QueryGenesisSum is a function to query genesis checksum.",\n "parameters": null,\n "response": null\n },\n "QueryIdentityRecord": {\n "endpoint": "/api/kira/gov/identity_record/{id}",\n "description": "QueryIdentityRecord is a function to query identity record by id.",\n "parameters": {\n "id": {\n "type": "number",\n "description": "This is the identity record id."\n }\n },\n "response": {\n "record": {\n "description": "The identity record info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequest": {\n "endpoint": "/api/kira/gov/identity_verify_record/{request_id}",\n "description": "QueryIdentityRecordVerifyRequest is a function to query identity record verify request.",\n "parameters": {\n "request_id": {\n "type": "number",\n "description": "This is the identity record verify request id."\n }\n },\n "response": {\n "verify_record": {\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByApprover": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_approver/{approver}",\n "description": "QueryIdentityRecordVerifyRequestsByApprover is a function to query identity record verify request by approver.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify request approver address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordVerifyRequestsByRequester": {\n "endpoint": "/api/kira/gov/identity_verify_requests_by_requester/{requester}",\n "description": "QueryIdentityRecordVerifyRequestsByRequester is a function to query identity record verify request by requester.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option for pagination. 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."\n },\n "requester": {\n "type": "string",\n "description": "This is the identity record verify requester address."\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "verify_records": {\n "type": "array",\n "description": "The identity record verify request info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The request address of identity record"\n },\n "id": {\n "type": "number",\n "description": "The verify request id"\n },\n "lastRecordEditDate": {\n "type": "string",\n "description": "The latest edit timestamp"\n },\n "recordIds": {\n "type": "array\\u003cnumber\\u003e",\n "description": "The array of identity record id"\n },\n "tip": {\n "type": "Coin",\n "description": "The tip amount for verification",\n "fields": {\n "amount": {\n "type": "string",\n "description": ""\n },\n "denom": {\n "type": "string",\n "description": ""\n }\n }\n },\n "verifier": {\n "type": "string",\n "description": "The verifier address of identity record"\n }\n }\n }\n }\n },\n "QueryIdentityRecordsByAddress": {\n "endpoint": "/api/kira/gov/identity_records/{creator}",\n "description": "QueryIdentityRecordsByAddress is a function to query identity records by address.",\n "parameters": {\n "creator": {\n "type": "string",\n "description": "This is the identity record creator address."\n }\n },\n "response": {\n "records": {\n "type": "array",\n "description": "The identity records info",\n "fields": {\n "address": {\n "type": "string",\n "description": "The address of identity record"\n },\n "date": {\n "type": "string",\n "description": "The identity record timestamp"\n },\n "id": {\n "type": "number",\n "description": "The identity record id"\n },\n "key": {\n "type": "string",\n "description": "The identity record key"\n },\n "value": {\n "type": "string",\n "description": "The identity record value"\n },\n "verifiers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The address list of verifiers"\n }\n }\n }\n }\n },\n "QueryInterxFunctions": {\n "endpoint": "/api/metadata",\n "description": "QueryInterxFunctions is a function to query interx functions.",\n "parameters": null,\n "response": null\n },\n "QueryInterxList": {\n "endpoint": "/api/interx_list",\n "description": "QueryInterxList is a function to query all interx list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "faucet": {\n "type": "string",\n "description": "The faucet kira address"\n },\n "id": {\n "type": "string",\n "description": "The interx public key"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "moniker": {\n "type": "string",\n "description": "From interx configuration"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial INTERX and verify pub_key"\n },\n "type": {\n "type": "string",\n "description": "The node type from interx configuration"\n },\n "version": {\n "type": "string",\n "description": "The interx version from interx configuration"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryInterxStatus": {\n "endpoint": "/api/status",\n "description": "QueryInterxStatus is a function to query interx informations.",\n "parameters": null,\n "response": null\n },\n "QueryKiraFunctions": {\n "endpoint": "/api/kira/metadata",\n "description": "QueryKiraFunctions is a function to query kira functions.",\n "parameters": null,\n "response": null\n },\n "QueryKiraStatus": {\n "endpoint": "/api/kira/status",\n "description": "QueryKiraStatus is a function to query the node status",\n "parameters": null,\n "response": {\n "node_info": {\n "description": "The connected node information"\n },\n "sync_info": {\n "description": "The sync status of connected node"\n },\n "validator_info": {\n "description": "The validator information of connect node"\n }\n }\n },\n "QueryKiraTokensAliases": {\n "endpoint": "/api/kira/tokens/aliases",\n "description": "QueryKiraTokensAliases is a function to query all tokens aliases.",\n "parameters": null,\n "response": null\n },\n "QueryKiraTokensRates": {\n "endpoint": "/api/kira/tokens/rates",\n "description": "QueryKiraTokensRates is a function to query all tokens rates.",\n "parameters": null,\n "response": null\n },\n "QueryNetworkProperties": {\n "endpoint": "/api/kira/gov/network_properties",\n "description": "QueryNetworkProperties is a function to query network properties.",\n "parameters": null,\n "response": null\n },\n "QueryPermissionsByAddress": {\n "endpoint": "/api/kira/gov/permissions_by_address/{val_addr}",\n "description": "QueryPermissionsByAddress is a function to query all permissions by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QueryPrivP2PList": {\n "endpoint": "/api/priv_p2p_list",\n "description": "QueryPrivP2PList is a function to query all private nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The private node id"\n },\n "ip": {\n "type": "string",\n "description": "The local ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryProposal": {\n "endpoint": "/api/kira/gov/proposals/{proposal_id}",\n "description": "QueryProposal is a function to query a proposal by a given proposal_id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "proposal": {\n "description": "The proposal information"\n }\n }\n },\n "QueryProposals": {\n "endpoint": "/api/kira/gov/proposals",\n "description": "QueryProposals is a function to query all proposals.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "reverse": {\n "type": "bool",\n "optional": true,\n "description": "This an option to sort proposals."\n },\n "voter": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": {\n "proposals": {\n "description": "The array of proposals information"\n }\n }\n },\n "QueryPubP2PList": {\n "endpoint": "/api/pub_p2p_list",\n "description": "QueryPubP2PList is a function to query all public nodes list.",\n "parameters": {\n "connected": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only connected ips."\n },\n "format": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific format. usecase: order=simple"\n },\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n },\n "order": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query nodes in a specific order. usecase: order=random"\n },\n "peers_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only peers separated by comma. \\u003cnode_id\\u003e@\\u003cip\\u003e:\\u003cport\\u003e"\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "connected": {\n "type": "bool",\n "description": "If the node is connected with this node"\n },\n "id": {\n "type": "string",\n "description": "The public node id"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "peers": {\n "type": "array\\u003cstring\\u003e",\n "description": "The list of node ids"\n },\n "ping": {\n "type": "number",\n "description": "The time duration in miliseconds to dial p2p and verify p2p node id"\n },\n "port": {\n "type": "number",\n "description": "The p2p port number"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QueryRPCMethods": {\n "endpoint": "/api/rpc_methods",\n "description": "QueryRPCMethods is a function to query all rpc methods available.",\n "parameters": null,\n "response": null\n },\n "QueryRoles": {\n "endpoint": "/api/kira/gov/all_roles",\n "description": "QueryRoles is a function to query all roles.",\n "parameters": null,\n "response": null\n },\n "QueryRolesByAddress": {\n "endpoint": "/api/kira/gov/roles_by_address/{val_addr}",\n "description": "QueryRolesByAddress is a function to query all roles by an address.",\n "parameters": {\n "val_addr": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n }\n },\n "response": null\n },\n "QuerySnapList": {\n "endpoint": "/api/snap_list",\n "description": "QuerySnapList is a function to query all snapshot node list.",\n "parameters": {\n "ip_only": {\n "type": "bool",\n "optional": true,\n "description": "This is an option to query only ip addresses separated by comma."\n }\n },\n "response": {\n "last_update": {\n "type": "number",\n "description": "The last updated timestamp"\n },\n "node_list": {\n "description": "The node list array",\n "fields": {\n "checksum": {\n "type": "string",\n "description": "The snapshot checksum (SHA256)"\n },\n "ip": {\n "type": "string",\n "description": "The public ip address"\n },\n "port": {\n "type": "number",\n "description": "The interx port number"\n },\n "size": {\n "type": "number",\n "description": "The snapshot size in bytes"\n }\n }\n },\n "scanning": {\n "type": "bool",\n "description": "If discovery is still running or not"\n }\n }\n },\n "QuerySpendingPoolProposals": {\n "endpoint": "/api/kira/spending-pool-proposals",\n "description": "QuerySpendingPoolProposals is a function to query list of all spending pool proposals.",\n "parameters": null,\n "response": {\n "names": {\n "description": "The list of all spending pool proposals"\n }\n }\n },\n "QuerySpendingPools": {\n "endpoint": "/api/kira/spending-pools",\n "description": "QuerySpendingPools is a function to query list of all spending pool names.",\n "parameters": {\n "account": {\n "type": "string",\n "optional": true,\n "description": "This represents the kira account address."\n },\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "names": {\n "description": "The list of all spending pools"\n }\n }\n },\n "QueryTotalSupply": {\n "endpoint": "/api/kira/supply",\n "description": "QueryTotalSupply is a function to query total supply.",\n "parameters": null,\n "response": {\n "supply": {\n "type": "Coin[]",\n "description": "The total supply of the network"\n }\n }\n },\n "QueryTransactionHash": {\n "endpoint": "/api/kira/txs/{hash}",\n "description": "QueryTransactionHash is a function to query transaction details from transaction hash.",\n "parameters": {\n "hash": {\n "type": "string",\n "description": "This represents the transaction hash. (e.g. 0x20.....)"\n }\n },\n "response": {\n "hash": {\n "description": "The transaction hash"\n },\n "height": {\n "description": "The block height of transation"\n },\n "tx": {\n "description": "The base-64 encoded transaction"\n },\n "tx_result": {\n "description": "The result of transaction with events, gas info, logs and error code"\n }\n }\n },\n "QueryTransactionResult": {\n "endpoint": "/api/transactions/{txHash}",\n "description": "QueryTransactionResult is a function to query transaction result by hash.",\n "parameters": {\n "txHash": {\n "type": "string",\n "optional": true,\n "description": "This is an option of a transaction hash."\n }\n },\n "response": {\n "block_height": {\n "description": "The block height"\n },\n "block_timestamp": {\n "description": "The block timestamp"\n },\n "confirmation": {\n "description": "The block confirmations of this transaction"\n },\n "fees": {\n "description": "The transaction fee"\n },\n "gas_used": {\n "description": "The gas amount used in transaction"\n },\n "gas_wanted": {\n "description": "The gas limit amount for transaction"\n },\n "hash": {\n "description": "The transaction hash"\n },\n "memo": {\n "description": "The transaction memo"\n },\n "msgs": {\n "description": "The transaction msgs"\n },\n "status": {\n "description": "The transaction status"\n }\n }\n },\n "QueryTransactions": {\n "endpoint": "/api/transactions",\n "description": "QueryTransactions is a function to query transactions of the account filtered by various options like msg type, date, and so on.",\n "parameters": {\n "account": {\n "type": "string",\n "description": "This represents the kira account address."\n },\n "dateEnd": {\n "type": "string",\n "optional": true,\n "description": "This represents the ending point in timestamp or date(DD/MM/YY) format."\n },\n "dateStart": {\n "type": "string",\n "optional": true,\n "description": "This represents the starting point in timestamp or date(DD/MM/YY) format."\n },\n "direction": {\n "type": "string",\n "optional": true,\n "description": "This represents direction of the transaction(outbound, inbound)."\n },\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of total results to be shown. (1 ~ 100)"\n },\n "offset": {\n "type": "int",\n "optional": true,\n "description": "This represents the offset of the first transaction."\n },\n "page": {\n "type": "int",\n "optional": true,\n "description": "This represents the page number of results."\n },\n "page_size": {\n "type": "int",\n "optional": true,\n "description": "This represents the pageSize number of results. (1 ~ 100)"\n },\n "sort": {\n "type": "string",\n "optional": true,\n "description": "This represents how the transactions should be sorted(dateASC, dateDESC)."\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction status(pending, confirmed, failed)."\n },\n "type": {\n "type": "string",\n "optional": true,\n "description": "This represents the transaction type."\n }\n },\n "response": {\n "total_count": {\n "description": "The total transaction count"\n },\n "transactions": {\n "description": "The array of transactions"\n }\n }\n },\n "QueryUBIRecords": {\n "endpoint": "/api/kira/ubi-records",\n "description": "QueryUBIRecords is a function to query ubi records.",\n "parameters": {\n "name": {\n "type": "string",\n "optional": true,\n "description": "This represents the pool name."\n }\n },\n "response": {\n "record": {\n "optional": true,\n "description": "ubi record"\n },\n "records": {\n "optional": true,\n "description": "All ubi records"\n }\n }\n },\n "QueryUnconfirmedTxs": {\n "endpoint": "/api/unconfirmed_txs",\n "description": "QueryUnconfirmedTxs is a function to query unconfirmed transactions.",\n "parameters": {\n "limit": {\n "type": "int",\n "optional": true,\n "description": "This represents the limit of the transaction. (1 ~ 1000)"\n }\n },\n "response": null\n },\n "QueryValidatorInfos": {\n "endpoint": "/api/valoperinfos",\n "description": "QueryValidatorInfos is a function to query validator infos.",\n "parameters": {\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n }\n },\n "response": {\n "info": {\n "description": "The array of validators information"\n },\n "pagination": {\n "description": "The pagination response information like total and next_key"\n }\n }\n },\n "QueryValidators": {\n "endpoint": "/api/valopers",\n "description": "QueryValidators is a function to query validators.",\n "parameters": {\n "address": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given kira address"\n },\n "all": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query all validators."\n },\n "countTotal": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "key": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "limit": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "moniker": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given moniker"\n },\n "offset": {\n "type": "string",\n "optional": true,\n "description": "This is an option to validators pagination. 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."\n },\n "proposer": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given proposer address"\n },\n "pubkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given pubkey"\n },\n "status": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validators by a given status"\n },\n "status_only": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query only status of all validators."\n },\n "valkey": {\n "type": "string",\n "optional": true,\n "description": "This is an option to query validator by a given valoper address"\n }\n },\n "response": {\n "pagination": {\n "description": "The pagination response information like total and next_key"\n },\n "validators": {\n "description": "The array of validators information"\n }\n }\n },\n "QueryVoters": {\n "endpoint": "/api/kira/gov/voters/{proposal_id}",\n "description": "QueryVoters is a function to query voters by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": null\n },\n "QueryVotes": {\n "endpoint": "/api/kira/gov/votes/{proposal_id}",\n "description": "QueryVotes is a function to query votes by a given proposal id.",\n "parameters": {\n "proposal_id": {\n "type": "number",\n "description": "This is an option of a proposal id"\n }\n },\n "response": {\n "votes": {\n "description": "The array of votes information"\n }\n }\n }\n },\n "response_header": {\n "Interx_block": {\n "type": "number",\n "description": "This represents the current block number."\n },\n "Interx_blocktime": {\n "type": "number",\n "description": "This represents the current block timestamp."\n },\n "Interx_chain_id": {\n "type": "number",\n "description": "This represents the current chain id."\n },\n "Interx_hash": {\n "type": "string",\n "description": "This represents the interx response hash."\n },\n "Interx_ref": {\n "type": "string",\n "description": "This represents link to download the data reference."\n },\n "Interx_request_hash": {\n "type": "string",\n "description": "This represents the hash of request parameters."\n },\n "Interx_signature": {\n "type": "string",\n "description": "This represents the interx response signature."\n },\n "Interx_timestamp": {\n "type": "string",\n "description": "This represents the current interx timestamp."\n }\n }\n}\n'})})]})}function u(n={}){const{wrapper:e}={...(0,o.a)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(c,{...n})}):c(n)}},5162:(n,e,t)=>{t.d(e,{Z:()=>s});t(7294);var i=t(6905);const o={tabItem:"tabItem_Ymn6"};var r=t(5893);function s(n){let{children:e,hidden:t,className:s}=n;return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:t,children:e})}},4866:(n,e,t)=>{t.d(e,{Z:()=>_});var i=t(7294),o=t(6905),r=t(2466),s=t(6550),a=t(469),p=t(1980),d=t(7392),c=t(12);function u(n){return i.Children.toArray(n).filter((n=>"\n"!==n)).map((n=>{if(!n||(0,i.isValidElement)(n)&&function(n){const{props:e}=n;return!!e&&"object"==typeof e&&"value"in e}(n))return n;throw new Error(`Docusaurus error: Bad child <${"string"==typeof n.type?n.type:n.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function l(n){const{values:e,children:t}=n;return(0,i.useMemo)((()=>{const n=e??function(n){return u(n).map((n=>{let{props:{value:e,label:t,attributes:i,default:o}}=n;return{value:e,label:t,attributes:i,default:o}}))}(t);return function(n){const e=(0,d.l)(n,((n,e)=>n.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((n=>n.value)).join(", ")}" found in . Every value needs to be unique.`)}(n),n}),[e,t])}function y(n){let{value:e,tabValues:t}=n;return t.some((n=>n.value===e))}function h(n){let{queryString:e=!1,groupId:t}=n;const o=(0,s.k6)(),r=function(n){let{queryString:e=!1,groupId:t}=n;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,p._X)(r),(0,i.useCallback)((n=>{if(!r)return;const e=new URLSearchParams(o.location.search);e.set(r,n),o.replace({...o.location,search:e.toString()})}),[r,o])]}function f(n){const{defaultValue:e,queryString:t=!1,groupId:o}=n,r=l(n),[s,p]=(0,i.useState)((()=>function(n){let{defaultValue:e,tabValues:t}=n;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!y({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((n=>n.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const i=t.find((n=>n.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:e,tabValues:r}))),[d,u]=h({queryString:t,groupId:o}),[f,m]=function(n){let{groupId:e}=n;const t=function(n){return n?`docusaurus.tab.${n}`:null}(e),[o,r]=(0,c.Nk)(t);return[o,(0,i.useCallback)((n=>{t&&r.set(n)}),[t,r])]}({groupId:o}),g=(()=>{const n=d??f;return y({value:n,tabValues:r})?n:null})();(0,a.Z)((()=>{g&&p(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((n=>{if(!y({value:n,tabValues:r}))throw new Error(`Can't select invalid tab value=${n}`);p(n),u(n),m(n)}),[u,m,r]),tabValues:r}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=t(5893);function T(n){let{className:e,block:t,selectedValue:i,selectValue:s,tabValues:a}=n;const p=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=n=>{const e=n.currentTarget,t=p.indexOf(e),o=a[t].value;o!==i&&(d(e),s(o))},u=n=>{let e=null;switch(n.key){case"Enter":c(n);break;case"ArrowRight":{const t=p.indexOf(n.currentTarget)+1;e=p[t]??p[0];break}case"ArrowLeft":{const t=p.indexOf(n.currentTarget)-1;e=p[t]??p[p.length-1];break}}e?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":t},e),children:a.map((n=>{let{value:e,label:t,attributes:r}=n;return(0,b.jsx)("li",{role:"tab",tabIndex:i===e?0:-1,"aria-selected":i===e,ref:n=>p.push(n),onKeyDown:u,onClick:c,...r,className:(0,o.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":i===e}),children:t??e},e)}))})}function v(n){let{lazy:e,children:t,selectedValue:o}=n;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const n=r.find((n=>n.props.value===o));return n?(0,i.cloneElement)(n,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((n,e)=>(0,i.cloneElement)(n,{key:e,hidden:n.props.value!==o})))})}function k(n){const e=f(n);return(0,b.jsxs)("div",{className:(0,o.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(T,{...n,...e}),(0,b.jsx)(v,{...n,...e})]})}function _(n){const e=(0,m.Z)();return(0,b.jsx)(k,{...n,children:u(n.children)},String(e))}},1151:(n,e,t)=>{t.d(e,{Z:()=>a,a:()=>s});var i=t(7294);const o={},r=i.createContext(o);function s(n){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:s(n.components),i.createElement(r.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/9b69848b.d473691a.js b/assets/js/9b69848b.e0155da5.js similarity index 73% rename from assets/js/9b69848b.d473691a.js rename to assets/js/9b69848b.e0155da5.js index 14fde83..83f46e7 100644 --- a/assets/js/9b69848b.d473691a.js +++ b/assets/js/9b69848b.e0155da5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4636],{5909:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-1",sidebar_position:8,slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"},c=void 0,i={id:"Testnet-History/testnet-1",title:"testnet-1",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-1.mdx",sourceDirName:"Testnet-History",slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa",permalink:"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"testnet-1",sidebar_position:8,slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"},sidebar:"defaultSidebar",previous:{title:"testnet-2",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},next:{title:"Testnet System Requirements",permalink:"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03"}},o={},l=[{value:"Description",id:"40a0527efe0e4875be7d8d5022eae3e3",level:2},{value:"Post mortem",id:"e2a7e3452f5b4b848823c3c596c2b046",level:2},{value:"Files",id:"4069104e2fe944cc950a50d6b3051fa3",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"40a0527efe0e4875be7d8d5022eae3e3",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-1"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"26237215b968ecfd201d92c61a13b4c4ce84aa65d57465fe949b2b49f8e66db0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"d00fd0d0b846a68d93f425ba9655bebae18c31ee5687999935899e5d96b4d0be"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"49999"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"e2a7e3452f5b4b848823c3c596c2b046",children:"Post mortem"}),"\n",(0,n.jsx)(t.p,{children:"Duplication of the validator when it's added to the validator set by the state machine. Most likely cause was a validator reactivation & validator claim call occurring at the same time or pause/unpause transaction sent in the same block."}),"\n",(0,n.jsx)(t.h2,{id:"4069104e2fe944cc950a50d6b3051fa3",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/89201084-f3a3-4ae6-af04-fdda7f896378/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152707Z&X-Amz-Expires=3600&X-Amz-Signature=2f75a381c9171659851510dd48226c0f8b72a363305ea4affae0da4bc916712e&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/fdcca3cd-3f19-4bdb-b428-2861b627bec2/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152707Z&X-Amz-Expires=3600&X-Amz-Signature=81f8b6599765a0c0cffcfc2817ab8b151cbc913da549ca33207e4ca88672989c&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/eac70b61-df42-4db4-be13-81a4ef0de236/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152707Z&X-Amz-Expires=3600&X-Amz-Signature=5e65658e6a02e140164e17f8cf38c1cb2773e7737d45e277f3af3d0eab886d28&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/b6595835-c77f-4847-96da-5a8817aac68a/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152707Z&X-Amz-Expires=3600&X-Amz-Signature=8d0ecb590a6a0df044411bd083b3dba3d61439f2aa24c1cc87ea0d4da4a9c83d&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),i=a(469),o=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[c,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:a,groupId:r}),[h,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??h;return f({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{A&&o(A)}),[A]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function g(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=i[a].value;r!==n&&(l(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4636],{5909:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-1",sidebar_position:8,slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"},i=void 0,o={id:"Testnet-History/testnet-1",title:"testnet-1",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-1.mdx",sourceDirName:"Testnet-History",slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa",permalink:"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"testnet-1",sidebar_position:8,slug:"/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa"},sidebar:"defaultSidebar",previous:{title:"testnet-2",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"},next:{title:"Testnet System Requirements",permalink:"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03"}},c={},l=[{value:"Description",id:"40a0527efe0e4875be7d8d5022eae3e3",level:2},{value:"Post Mortem",id:"e2a7e3452f5b4b848823c3c596c2b046",level:2},{value:"Files",id:"4069104e2fe944cc950a50d6b3051fa3",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"40a0527efe0e4875be7d8d5022eae3e3",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-1"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"26237215b968ecfd201d92c61a13b4c4ce84aa65d57465fe949b2b49f8e66db0"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"d00fd0d0b846a68d93f425ba9655bebae18c31ee5687999935899e5d96b4d0be"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"49999"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"e2a7e3452f5b4b848823c3c596c2b046",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"Duplication of the validator when it's added to the validator set by the state machine. Most likely cause was a validator reactivation & validator claim call occurring at the same time or pause/unpause transaction sent in the same block."}),"\n",(0,n.jsx)(t.h2,{id:"4069104e2fe944cc950a50d6b3051fa3",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/89201084-f3a3-4ae6-af04-fdda7f896378/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=676446a0912f4058aaa0d6000cc963934486f5af520e3ff5fbc68cf61bc65870&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/fdcca3cd-3f19-4bdb-b428-2861b627bec2/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=fa0923862dc32f650a34d618586120f7a7567ab7efe58dd73dc85eb4f89fd880&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/eac70b61-df42-4db4-be13-81a4ef0de236/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=30435799f62540207ebdea64b72b8cdf44ba9d6458ee121e0754f0c64e89e15a&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/b6595835-c77f-4847-96da-5a8817aac68a/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165654Z&X-Amz-Expires=3600&X-Amz-Signature=1e4f28e64e6b9d9ac90d23b3f216fbfc7394a4930e3840a77e2718ea62e17476&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>i});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function i(e){let{children:t,hidden:a,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,i),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),i=a(6550),o=a(469),c=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[i,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:a,groupId:r}),[h,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??h;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{A&&c(A)}),[A]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function g(e){let{className:t,block:a,selectedValue:n,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),r=o[a].value;r!==n&&(l(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>i});var n=a(7294);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9be18526.586ce3a4.js b/assets/js/9be18526.586ce3a4.js deleted file mode 100644 index 2310636..0000000 --- a/assets/js/9be18526.586ce3a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3405],{4406:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},l=void 0,u={id:"Wallet",title:"Wallet",description:"Coming soon\u2026",source:"@site/tabs/Docs/Wallet.mdx",sourceDirName:".",slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},sidebar:"defaultSidebar",previous:{title:"Community",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f"},next:{title:"Bash-utils",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>l});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function l(e){let{children:t,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,l),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),l=r(6550),u=r(469),s=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,s._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:l,tabValues:u}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=s.indexOf(t),a=u[r].value;a!==n&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=s.indexOf(e.currentTarget)+1;t=s[r]??s[0];break}case"ArrowLeft":{const r=s.indexOf(e.currentTarget)-1;t=s[r]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>l});var n=r(7294);const a={},o=n.createContext(a);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9be18526.6acec0b7.js b/assets/js/9be18526.6acec0b7.js new file mode 100644 index 0000000..7ba1ba4 --- /dev/null +++ b/assets/js/9be18526.6acec0b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3405],{4406:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},l=void 0,u={id:"Wallet",title:"Wallet",description:"Coming soon\u2026",source:"@site/tabs/Docs/Wallet.mdx",sourceDirName:".",slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",permalink:"/docs.kira.network/docs/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},sidebar:"defaultSidebar",previous:{title:"Community",permalink:"/docs.kira.network/docs/6196d806-d61d-4013-b317-d9f2f8f4008f"},next:{title:"Bash-utils",permalink:"/docs.kira.network/docs/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>l});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function l(e){let{children:t,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,l),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),l=r(6550),u=r(469),s=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,s._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:l,tabValues:u}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=s.indexOf(t),a=u[r].value;a!==n&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=s.indexOf(e.currentTarget)+1;t=s[r]??s[0];break}case"ArrowLeft":{const r=s.indexOf(e.currentTarget)-1;t=s[r]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>l});var n=r(7294);const a={},o=n.createContext(a);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e760a2d.33315ff0.js b/assets/js/9e760a2d.33315ff0.js deleted file mode 100644 index 3f8c7b9..0000000 --- a/assets/js/9e760a2d.33315ff0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3975],{658:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var s=a(5893),i=a(1151),t=a(4866),r=a(5162);const l={title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},o=void 0,c={id:"Stack/SEKAI--Backend/Installation",title:"Installation",description:"Installation",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Installation.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/a026f2da-ef09-4092-af96-aad8db6baf66",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399"},next:{title:"Configuration",permalink:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25"}},d={},h=[{value:"Installation",id:"6b4733753b1141ebadec8da43ee6c8fe",level:2},{value:"Linux/ubuntu",id:"b879a02837014f48ac435a1b2d2d2db5",level:2},{value:"Required tools",id:"5629790c26bb4cedb9025ab46dd70fa2",level:2},{value:"Cosign",id:"95ea60da4e6647de9391afabd8b9c38f",level:3},{value:"Bash-utils",id:"229d311718aa4d5bbeeb225e7731cd40",level:3},{value:"Dependencies",id:"07e9d84107ba48fa862297b2bf6acb74",level:2},{value:"Go",id:"974aeb0c853d4a4db37b900d9d0bec7f",level:4},{value:"Systemd alternative (requires python2 package)",id:"74ddeb9a5add46c18c0561f80984473c",level:4},{value:"Others",id:"bec68255b94b4716b936663f8a1aea8f",level:4},{value:"Sekai installation",id:"417da5606683484286cf1ff21a7340fa",level:2},{value:"Alternative installation processes",id:"63e27c2e5af940218ffe572be0f5320c",level:2},{value:"Using binaries",id:"4b2b70902ddb4c879c948bd0c3cf59c1",level:3},{value:"Using kira manager",id:"a8c091760f38469a96d4b86ba746d162",level:3},{value:"(testing) using a docker base-image release",id:"564d5e42582e4067af0b7fcc4d1bbd99",level:3},{value:"Mac",id:"04d8df0144c14d869178f8bcc13787b2",level:2},{value:"Required tools",id:"df90b4ff57684fec83660debdedfba39",level:2},{value:"Bash v5",id:"e12ff19e5f33489d91417d9c4bd8f954",level:3},{value:"Cosign",id:"0069f1f3f89b4b34a56731be349776be",level:3},{value:"Bash-utils",id:"bf886ff931294e1aad96372d39449386",level:3},{value:"Dependencies",id:"4bae39ed625c475494b196975893306b",level:2},{value:"Golang",id:"66072169c89349f79786b5b4c388b676",level:4},{value:"Others",id:"3bbb84dbac5748b5870a1930d94970b6",level:4},{value:"Sekai installation",id:"fec5cf22760f4560b4a43d52328dff3f",level:2},{value:"Alternative installation processes",id:"fd1fa8f22b214af586fab939156eefb5",level:3},{value:"Using binaries",id:"44bd35a00e7d4292bb2cc44bf69f8959",level:4},{value:"Using kira manager",id:"476faf3ef9b24b3e9e26762cb0f1047c",level:4},{value:"Starting & testing",id:"0dbeaabf1c9d400596731df653b604e4",level:2},{value:"Start",id:"0773614fcfd64317bc7ebf0f8255dfb2",level:4},{value:"Stop",id:"1988428569484528bf9071b77a171046",level:4},{value:"Integration tests",id:"00258775c9f4458bb9ca14d0134429a6",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"6b4733753b1141ebadec8da43ee6c8fe",children:"Installation"}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(r.Z,{value:"linux/ubuntu",label:"Linux/Ubuntu",children:[(0,s.jsx)(n.h2,{id:"b879a02837014f48ac435a1b2d2d2db5",children:"Linux/ubuntu"}),(0,s.jsx)(n.h2,{id:"5629790c26bb4cedb9025ab46dd70fa2",children:"Required tools"}),(0,s.jsx)(n.p,{children:"KIRA requires the installation of two tools, Cosign and Bash-utils, in order to secure the network and simplify the execution of various tasks."}),(0,s.jsx)(n.h3,{id:"95ea60da4e6647de9391afabd8b9c38f",children:"Cosign"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),(0,s.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"229d311718aa4d5bbeeb225e7731cd40",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to securely install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#95ea60da4e6647de9391afabd8b9c38f",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Always source /etc/profile with ",(0,s.jsx)(n.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})}),(0,s.jsx)(n.h2,{id:"07e9d84107ba48fa862297b2bf6acb74",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"974aeb0c853d4a4db37b900d9d0bec7f",children:"Go"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv GOROOT /usr/local/go && setGlobEnv GOPATH /home/go && setGlobEnv GOBIN /usr/local/go/bin && \\\nloadGlobEnvs && setGlobPath $GOROOT && setGlobPath $GOPATH && setGlobPath $GOBIN && loadGlobEnvs && \\\n( go clean -modcache -cache -n || : ) && rm -rfv "$GOROOT" "$GOBIN" "$GOPATH" && GO_VERSION="1.18.2" && \\\nGO_TAR="go$GO_VERSION.$(getPlatform)-$(getArch).tar.gz" && cd /tmp && safeWget ./$GO_TAR https://dl.google.com/go/$GO_TAR \\\n"fc4ad28d0501eaa9c9d6190de3888c9d44d8b5fb02183ce4ae93713f67b8a35b,e54bec97a1a5d230fc2f9ad0880fcbabb5888f30ed9666eca4a91c5a32e86cbc" && \\\ntar -C /usr/local -xf $GO_TAR &>/dev/null && go version\n'})}),(0,s.jsx)(n.h4,{id:"74ddeb9a5add46c18c0561f80984473c",children:"Systemd alternative (requires python2 package)"}),(0,s.jsx)(n.p,{children:"Systemd is a useful service manager that detects errors or memory overflow in the Sekai node and keeps it keeps it running even after system restarts or power outages."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py -O /usr/local/bin/systemctl2 && \\\nchmod +x /usr/local/bin/systemctl2 && \\\nsystemctl2 --version\n"})}),(0,s.jsx)(n.h4,{id:"bec68255b94b4716b936663f8a1aea8f",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"apt-get install jq\n"})}),(0,s.jsx)(n.h2,{id:"417da5606683484286cf1ff21a7340fa",children:"Sekai installation"}),(0,s.jsx)(n.p,{children:"Login as admin & load environment variables."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo -s\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo as env variables within ",(0,s.jsx)(n.code,{children:"/etc/profile"})," (with bash-utils or manually). Sourcing ",(0,s.jsx)(n.code,{children:"/etc/profile"})," is necessary."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nsetGlobEnv NETWORK_NAME "test" && \\\nsetGlobEnv SEKAID_HOME "~/.sekaid-$NETWORK_NAME" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repository and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Verify successful installation"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid version --long\n"})}),(0,s.jsx)(n.h2,{id:"63e27c2e5af940218ffe572be0f5320c",children:"Alternative installation processes"}),(0,s.jsx)(n.h3,{id:"4b2b70902ddb4c879c948bd0c3cf59c1",children:"Using binaries"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cd /tmp && \\\nPLATFORM="$(getPlatform)" && \\\nARCHITECURE="$(getArch)" && \\\nBIN_DEST="/usr/local/bin/sekaid" && \\\nsafeWget ./sekaid.deb "https://github.com/KiraCore/sekai/releases/download/$SEKAI_VERSION/sekai-${PLATFORM}-${ARCHITECURE}.deb" \\\n"$KIRA_COSIGN_PUB" && dpkg-deb -x ./sekaid.deb ./sekaid && cp -fv "sekaid/bin/sekaid" $BIN_DEST && chmod -v 755 $BIN_DEST && \\\nechoInfo "INFO: Installed bash-utils: " && bashUtilsVersion && \\\nechoInfo "INFO: Installed sekaid: " && sekaid version\n'})}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"a8c091760f38469a96d4b86ba746d162",children:"Using kira manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.strong,{children:"[Problem Internal Link]"}),"."]}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"564d5e42582e4067af0b7fcc4d1bbd99",children:"(testing) using a docker base-image release"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/docker/pkgs/container/docker%2Fbase-image",children:"Latest base-image version"})}),(0,s.jsxs)(n.p,{children:["Erase previous instances ",(0,s.jsx)(n.em,{children:"(Optional)"})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker rm -f $(docker ps -a -q) && \\\ndocker image prune -a -f\n"})}),(0,s.jsx)(n.p,{children:"Load base-image in container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'IMG_VERSION="v0.13.14"\n\nBASE_NAME="test" && BASE_IMG="[ghcr.io/kiracore/docker/base-image:](http://ghcr.io/kiracore/docker/kira-base:v0.11.4)$IMG_VERSION" && \\\ndocker run -i -t -d --privileged --net bridge --name $BASE_NAME --hostname test.local $BASE_IMG /bin/bash\n'})}),(0,s.jsx)(n.p,{children:"Enter container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker start -i $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})}),(0,s.jsx)(n.p,{children:"Install Sekai"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Delete container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker rm -f $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})})]}),(0,s.jsxs)(r.Z,{value:"mac",label:"Mac",children:[(0,s.jsx)(n.h2,{id:"04d8df0144c14d869178f8bcc13787b2",children:"Mac"}),(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"The installation process on macOS hasn't been fully tested and may have unresolved issues. We encourage users to report any problems and contribute to improvements."})}),(0,s.jsx)(n.h2,{id:"df90b4ff57684fec83660debdedfba39",children:"Required tools"}),(0,s.jsx)(n.h3,{id:"e12ff19e5f33489d91417d9c4bd8f954",children:"Bash v5"}),(0,s.jsx)(n.p,{children:"Bash is the default command line interpreter for many Unix-based operating systems, including macOS. However MacOS, by default, comes with an older version of Bash (version 3.2.57) due to licensing reasons. Bash V5 is the latest major version and offers numerous improvements and features compared to previous versions. In KIRA, some commands used in scripts might require Bash V5 to properly execute."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Bash V5\nbrew install bash\n\n# Add Bash V5 to the list of acceptable shells\necho "/usr/local/bin/bash" | sudo tee -a /etc/shells\n\n# Change your default shell to Bash V5\nchsh -s /usr/local/bin/bash\n\n# Restart your terminal and check version\necho $BASH_VERSION\n'})}),(0,s.jsx)(n.h3,{id:"0069f1f3f89b4b34a56731be349776be",children:"Cosign"}),(0,s.jsx)(n.p,{children:"Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"bf886ff931294e1aad96372d39449386",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#0069f1f3f89b4b34a56731be349776be",children:"COSIGN tool"})," that will guarantee the integrity of the files and ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#e12ff19e5f33489d91417d9c4bd8f954",children:"Bash V5"})," for better compatibility. They MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms."})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts. It provides various functions for managing environment variables, displaying information, and handling errors. Bash-utils is used in KIRA to streamline and simplify the process of executing various tasks within the network."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})}),(0,s.jsx)(n.h2,{id:"4bae39ed625c475494b196975893306b",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"66072169c89349f79786b5b4c388b676",children:"Golang"}),(0,s.jsx)(n.p,{children:"Install Go"}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"$GOBIN is required as environment variable for building SEKAI"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"setGlobEnv"})," and ",(0,s.jsx)(n.code,{children:"setGlobPath"})," are amongst the commands that do not behave properly. Consider adding/editing the environment variable manually."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Go \nbrew install go\n\n# Assume root permissions \nsudo -s\n\n# Set environment variables (manually)\ngoVersion=$(go version | awk \'{print $3}\' | cut -c 3-) && \\\nGOROOT="/usr/local/Cellar/go/$goVersion" && \\\nGOBIN="$GOROOT/bin" && \\\nGOPATH="$HOME/go" && \\\nPATH="$GOBIN:$GOPATH:$PATH"\n\n# Add variables to /etc/profile\necho "export GOROOT=\\"$GOROOT\\"" >> /etc/profile\necho "export GOBIN=\\"$GOBIN\\"" >> /etc/profile\necho "export GOPATH=\\"$GOPATH\\"" >> /etc/profile\necho "export PATH=\\"$PATH\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h4,{id:"3bbb84dbac5748b5870a1930d94970b6",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew install jq\n"})}),(0,s.jsx)(n.h2,{id:"fec5cf22760f4560b4a43d52328dff3f",children:"Sekai installation"}),(0,s.jsxs)(n.p,{children:["Login as admin & load environment variables. Using bash shell and ",(0,s.jsx)(n.em,{children:"sourcing /etc/profile is necessary."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Assume sudo \nsudo -s && . /etc/profile\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo ",(0,s.jsx)(n.em,{children:"(requires bash-utils)."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repo and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.h3,{id:"fd1fa8f22b214af586fab939156eefb5",children:"Alternative installation processes"}),(0,s.jsx)(n.h4,{id:"44bd35a00e7d4292bb2cc44bf69f8959",children:"Using binaries"}),(0,s.jsx)(n.p,{children:"Unfortunately, it is not possible to install .deb packages on MacOS as of now."}),(0,s.jsx)(n.h4,{id:"476faf3ef9b24b3e9e26762cb0f1047c",children:"Using kira manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.a,{href:"https://testnet.kira.network/",children:"testnet.kira.network"}),"."]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"0dbeaabf1c9d400596731df653b604e4",children:"Starting & testing"}),"\n",(0,s.jsx)(n.h4,{id:"0773614fcfd64317bc7ebf0f8255dfb2",children:"Start"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-start\n"})}),"\n",(0,s.jsx)(n.h4,{id:"1988428569484528bf9071b77a171046",children:"Stop"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-stop\n"})}),"\n",(0,s.jsx)(n.h4,{id:"00258775c9f4458bb9ca14d0134429a6",children:"Integration tests"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Full integration test (duration > 1h) :\nmake test-local \n\n# Individual integration test : \n# available integration tests can be found @ sekai/scripts/test-local/\nmake network-start && scripts/test-local/your-test.sh\n"})})]})}function b(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const i={tabItem:"tabItem_Ymn6"};var t=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>A});var s=a(7294),i=a(6905),t=a(2466),r=a(6550),l=a(469),o=a(1980),c=a(7392),d=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:i}}=e;return{value:n,label:a,attributes:s,default:i}}))}(a);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function b(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:a}=e;const i=(0,r.k6)(),t=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(t),(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:a=!1,groupId:i}=e,t=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:t}))),[c,h]=f({queryString:a,groupId:i}),[g,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,d.Nk)(a);return[i,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:i}),m=(()=>{const e=c??g;return b({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=a(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var I=a(5893);function E(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const n=e.currentTarget,a=o.indexOf(n),i=l[a].value;i!==s&&(c(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,I.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},n),children:l.map((e=>{let{value:n,label:a,attributes:t}=e;return(0,I.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:i}=e;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,I.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function x(e){const n=g(e);return(0,I.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,I.jsx)(E,{...e,...n}),(0,I.jsx)(v,{...e,...n})]})}function A(e){const n=(0,p.Z)();return(0,I.jsx)(x,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>r});var s=a(7294);const i={},t=s.createContext(i);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e760a2d.fef0e32a.js b/assets/js/9e760a2d.fef0e32a.js new file mode 100644 index 0000000..b430117 --- /dev/null +++ b/assets/js/9e760a2d.fef0e32a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3975],{658:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>b,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var s=a(5893),i=a(1151),t=a(4866),r=a(5162);const l={title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},o=void 0,c={id:"Stack/SEKAI--Backend/Installation",title:"Installation",description:"Installation",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Installation.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/a026f2da-ef09-4092-af96-aad8db6baf66",permalink:"/docs.kira.network/docs/a026f2da-ef09-4092-af96-aad8db6baf66",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Installation",sidebar_position:3,slug:"/a026f2da-ef09-4092-af96-aad8db6baf66"},sidebar:"defaultSidebar",previous:{title:"System Requirements",permalink:"/docs.kira.network/docs/d1a56903-4e24-47ce-b39f-f28be9123399"},next:{title:"Configuration",permalink:"/docs.kira.network/docs/b85c7808-d42e-474f-a9b6-0f87d1f59e25"}},d={},h=[{value:"Installation",id:"6b4733753b1141ebadec8da43ee6c8fe",level:2},{value:"Linux/ubuntu",id:"b879a02837014f48ac435a1b2d2d2db5",level:2},{value:"Required Tools",id:"5629790c26bb4cedb9025ab46dd70fa2",level:2},{value:"Cosign",id:"95ea60da4e6647de9391afabd8b9c38f",level:3},{value:"Bash-utils",id:"229d311718aa4d5bbeeb225e7731cd40",level:3},{value:"Dependencies",id:"07e9d84107ba48fa862297b2bf6acb74",level:2},{value:"Go",id:"974aeb0c853d4a4db37b900d9d0bec7f",level:4},{value:"Systemd Alternative (requires Python2 Package)",id:"74ddeb9a5add46c18c0561f80984473c",level:4},{value:"Others",id:"bec68255b94b4716b936663f8a1aea8f",level:4},{value:"Sekai Installation",id:"417da5606683484286cf1ff21a7340fa",level:2},{value:"Alternative Installation Processes",id:"63e27c2e5af940218ffe572be0f5320c",level:2},{value:"Using Binaries",id:"4b2b70902ddb4c879c948bd0c3cf59c1",level:3},{value:"Using KIRA Manager",id:"a8c091760f38469a96d4b86ba746d162",level:3},{value:"(testing) Using a Docker Base-image Release",id:"564d5e42582e4067af0b7fcc4d1bbd99",level:3},{value:"Mac",id:"04d8df0144c14d869178f8bcc13787b2",level:2},{value:"Required Tools",id:"df90b4ff57684fec83660debdedfba39",level:2},{value:"Bash V5",id:"e12ff19e5f33489d91417d9c4bd8f954",level:3},{value:"Cosign",id:"0069f1f3f89b4b34a56731be349776be",level:3},{value:"Bash-utils",id:"bf886ff931294e1aad96372d39449386",level:3},{value:"Dependencies",id:"4bae39ed625c475494b196975893306b",level:2},{value:"Golang",id:"66072169c89349f79786b5b4c388b676",level:4},{value:"Others",id:"3bbb84dbac5748b5870a1930d94970b6",level:4},{value:"Sekai Installation",id:"fec5cf22760f4560b4a43d52328dff3f",level:2},{value:"Alternative Installation Processes",id:"fd1fa8f22b214af586fab939156eefb5",level:3},{value:"Using Binaries",id:"44bd35a00e7d4292bb2cc44bf69f8959",level:4},{value:"Using KIRA Manager",id:"476faf3ef9b24b3e9e26762cb0f1047c",level:4},{value:"Starting & Testing",id:"0dbeaabf1c9d400596731df653b604e4",level:2},{value:"Start",id:"0773614fcfd64317bc7ebf0f8255dfb2",level:4},{value:"Stop",id:"1988428569484528bf9071b77a171046",level:4},{value:"Integration Tests",id:"00258775c9f4458bb9ca14d0134429a6",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"6b4733753b1141ebadec8da43ee6c8fe",children:"Installation"}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(r.Z,{value:"linux/ubuntu",label:"Linux/Ubuntu",children:[(0,s.jsx)(n.h2,{id:"b879a02837014f48ac435a1b2d2d2db5",children:"Linux/ubuntu"}),(0,s.jsx)(n.h2,{id:"5629790c26bb4cedb9025ab46dd70fa2",children:"Required Tools"}),(0,s.jsx)(n.p,{children:"KIRA requires the installation of two tools, Cosign and Bash-utils, in order to secure the network and simplify the execution of various tasks."}),(0,s.jsx)(n.h3,{id:"95ea60da4e6647de9391afabd8b9c38f",children:"Cosign"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"https://github.com/sigstore/cosign"})}),(0,s.jsxs)(n.p,{children:["All KIRA Release Files are signed using ",(0,s.jsx)(n.a,{href:"https://github.com/sigstore/cosign",children:"sigstore cosign tool"}),". Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Assume root permissions\nsudo -s\n\n# Install essential dependencies\napt-get install -y wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nUBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$UBUNTU_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'linux\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="8132cb2fb99a4c60ba8e03b079e12462c27073028a5d08c07ecda67284e0c88d" && \\\nCOSIGN_HASH_AMD="169a53594c437d53ffc401b911b7e70d453f5a2c1f96eb2a736f34f6356c4f2b" && \\\nFILE_HASH=$(sha256sum ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echoErr "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x -v ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB=/usr/keys/kira-cosign.pub && mkdir -p /usr/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"229d311718aa4d5bbeeb225e7731cd40",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to securely install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#95ea60da4e6647de9391afabd8b9c38f",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Always source /etc/profile with ",(0,s.jsx)(n.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})}),(0,s.jsx)(n.h2,{id:"07e9d84107ba48fa862297b2bf6acb74",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"974aeb0c853d4a4db37b900d9d0bec7f",children:"Go"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv GOROOT /usr/local/go && setGlobEnv GOPATH /home/go && setGlobEnv GOBIN /usr/local/go/bin && \\\nloadGlobEnvs && setGlobPath $GOROOT && setGlobPath $GOPATH && setGlobPath $GOBIN && loadGlobEnvs && \\\n( go clean -modcache -cache -n || : ) && rm -rfv "$GOROOT" "$GOBIN" "$GOPATH" && GO_VERSION="1.18.2" && \\\nGO_TAR="go$GO_VERSION.$(getPlatform)-$(getArch).tar.gz" && cd /tmp && safeWget ./$GO_TAR https://dl.google.com/go/$GO_TAR \\\n"fc4ad28d0501eaa9c9d6190de3888c9d44d8b5fb02183ce4ae93713f67b8a35b,e54bec97a1a5d230fc2f9ad0880fcbabb5888f30ed9666eca4a91c5a32e86cbc" && \\\ntar -C /usr/local -xf $GO_TAR &>/dev/null && go version\n'})}),(0,s.jsx)(n.h4,{id:"74ddeb9a5add46c18c0561f80984473c",children:"Systemd Alternative (requires Python2 Package)"}),(0,s.jsx)(n.p,{children:"Systemd is a useful service manager that detects errors or memory overflow in the Sekai node and keeps it keeps it running even after system restarts or power outages."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py -O /usr/local/bin/systemctl2 && \\\nchmod +x /usr/local/bin/systemctl2 && \\\nsystemctl2 --version\n"})}),(0,s.jsx)(n.h4,{id:"bec68255b94b4716b936663f8a1aea8f",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"apt-get install jq\n"})}),(0,s.jsx)(n.h2,{id:"417da5606683484286cf1ff21a7340fa",children:"Sekai Installation"}),(0,s.jsx)(n.p,{children:"Login as admin & load environment variables."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo -s\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo as env variables within ",(0,s.jsx)(n.code,{children:"/etc/profile"})," (with bash-utils or manually). Sourcing ",(0,s.jsx)(n.code,{children:"/etc/profile"})," is necessary."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nsetGlobEnv NETWORK_NAME "test" && \\\nsetGlobEnv SEKAID_HOME "~/.sekaid-$NETWORK_NAME" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repository and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Verify successful installation"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid version --long\n"})}),(0,s.jsx)(n.h2,{id:"63e27c2e5af940218ffe572be0f5320c",children:"Alternative Installation Processes"}),(0,s.jsx)(n.h3,{id:"4b2b70902ddb4c879c948bd0c3cf59c1",children:"Using Binaries"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cd /tmp && \\\nPLATFORM="$(getPlatform)" && \\\nARCHITECURE="$(getArch)" && \\\nBIN_DEST="/usr/local/bin/sekaid" && \\\nsafeWget ./sekaid.deb "https://github.com/KiraCore/sekai/releases/download/$SEKAI_VERSION/sekai-${PLATFORM}-${ARCHITECURE}.deb" \\\n"$KIRA_COSIGN_PUB" && dpkg-deb -x ./sekaid.deb ./sekaid && cp -fv "sekaid/bin/sekaid" $BIN_DEST && chmod -v 755 $BIN_DEST && \\\nechoInfo "INFO: Installed bash-utils: " && bashUtilsVersion && \\\nechoInfo "INFO: Installed sekaid: " && sekaid version\n'})}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"a8c091760f38469a96d4b86ba746d162",children:"Using KIRA Manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.strong,{children:"[Problem Internal Link]"}),"."]}),(0,s.jsx)(n.hr,{}),(0,s.jsx)(n.h3,{id:"564d5e42582e4067af0b7fcc4d1bbd99",children:"(testing) Using a Docker Base-image Release"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/docker/pkgs/container/docker%2Fbase-image",children:"Latest base-image version"})}),(0,s.jsxs)(n.p,{children:["Erase previous instances ",(0,s.jsx)(n.em,{children:"(Optional)"})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker rm -f $(docker ps -a -q) && \\\ndocker image prune -a -f\n"})}),(0,s.jsx)(n.p,{children:"Load base-image in container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'IMG_VERSION="v0.13.14"\n\nBASE_NAME="test" && BASE_IMG="[ghcr.io/kiracore/docker/base-image:](http://ghcr.io/kiracore/docker/kira-base:v0.11.4)$IMG_VERSION" && \\\ndocker run -i -t -d --privileged --net bridge --name $BASE_NAME --hostname test.local $BASE_IMG /bin/bash\n'})}),(0,s.jsx)(n.p,{children:"Enter container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker start -i $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})}),(0,s.jsx)(n.p,{children:"Install Sekai"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.p,{children:"Delete container"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker rm -f $(timeout 3 docker ps --no-trunc -aqf "name=^${BASE_NAME}$" 2> /dev/null || echo -n "")\n'})})]}),(0,s.jsxs)(r.Z,{value:"mac",label:"Mac",children:[(0,s.jsx)(n.h2,{id:"04d8df0144c14d869178f8bcc13787b2",children:"Mac"}),(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"The installation process on macOS hasn't been fully tested and may have unresolved issues. We encourage users to report any problems and contribute to improvements."})}),(0,s.jsx)(n.h2,{id:"df90b4ff57684fec83660debdedfba39",children:"Required Tools"}),(0,s.jsx)(n.h3,{id:"e12ff19e5f33489d91417d9c4bd8f954",children:"Bash V5"}),(0,s.jsx)(n.p,{children:"Bash is the default command line interpreter for many Unix-based operating systems, including macOS. However MacOS, by default, comes with an older version of Bash (version 3.2.57) due to licensing reasons. Bash V5 is the latest major version and offers numerous improvements and features compared to previous versions. In KIRA, some commands used in scripts might require Bash V5 to properly execute."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Bash V5\nbrew install bash\n\n# Add Bash V5 to the list of acceptable shells\necho "/usr/local/bin/bash" | sudo tee -a /etc/shells\n\n# Change your default shell to Bash V5\nchsh -s /usr/local/bin/bash\n\n# Restart your terminal and check version\necho $BASH_VERSION\n'})}),(0,s.jsx)(n.h3,{id:"0069f1f3f89b4b34a56731be349776be",children:"Cosign"}),(0,s.jsx)(n.p,{children:"Cosign is a digital signature utility that is used to verify the authenticity and integrity of a file. When a file is signed with a digital signature, it provides a way to verify that the file has not been tampered with, and also to verify the identity of the person or entity who signed the file. It is used in Kira to sign and verify the authenticity of data, such as proprietary tools, binaries and scripts."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'\n# Install essential dependencies\nbrew install wget\n\n# Download Cosign\nCOSIGN_VERSION="v2.0.0" && \\\nMAC_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" && \\\nif [[ "$(uname -m)" == *"ar"* ]] ; then ARCH="arm64"; else ARCH="amd64" ; fi && \\\n cd /tmp && PLATFORM=$(uname) && declare -l FILE="cosign-${PLATFORM}-${ARCH}" && rm -rfv ./$FILE ./${FILE}.sig && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/$FILE -O ./$FILE && \\\n wget --user-agent="$MAC_AGENT" https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/${FILE}.sig -O ./${FILE}.sig\n\n# If you do NOT have cosign installed already you should check that the "$FILE" has one of the below hashes \n# Hashes are only for the \'mac\' platform, for other platforms please refer to the github repository\nCOSIGN_HASH_ARM="9d7821e1c05da4b07513729cb00d1070c9a95332c66d90fa593ed77d8c72ca2a" && \\\nCOSIGN_HASH_AMD="d2c8fc0edb42a1e9745da1c43a2928cee044f3b8a1b8df64088a384c7e6f5b5d" && \\\nFILE_HASH=$(shasum -a 256 ./$FILE | awk \'{ print $1 }\' | xargs || echo -n "") && \\\nif [ "$FILE_HASH" != "$COSIGN_HASH_ARM" ] && [ "$FILE_HASH" != "$COSIGN_HASH_AMD" ] ; then\n echo "ERROR: Failed to download cosign tool, expected checksum to be \'$COSIGN_HASH_ARM\' or \'$COSIGN_HASH_AMD\', but got \'$FILE_HASH\'"\n exit 1\nelse\n echo "Cosign tool downloaded successfully."\nfi\n\n# Save cosign public key\ncat > ./sigstore-cosign.pub << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhyQCx0E9wQWSFI9ULGwy3BuRklnt\nIqozONbbdbqz11hlRJy9c7SG+hdcFl9jE9uE/dwtuwU2MqU9T/cN0YkWww==\n-----END PUBLIC KEY-----\nEOL\n\n# Verify cosign release\ncosign verify-blob --key="./sigstore-cosign.pub" --signature="./${FILE}.sig" "./$FILE"\n\n# Move cosign to bin directory\nchmod +x ./$FILE && mv -fv ./$FILE /usr/local/bin/cosign \n\n# Check cosign version\ncosign version\n'})}),(0,s.jsx)(n.p,{children:"Add KIRA\u2019s public key"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Save KIRA public key allowing to verify signed releases\nKIRA_COSIGN_PUB="$HOME/keys/kira-cosign.pub" && mkdir -p $HOME/keys && \\\n cat > $KIRA_COSIGN_PUB << EOL\n-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/IrzBQYeMwvKa44/DF/HB7XDpnE+\nf+mU9F/Qbfq25bBWV2+NlYMJv3KvKHNtu3Jknt6yizZjUV4b8WGfKBzFYw==\n-----END PUBLIC KEY-----\nEOL\n\n# Add key to env\necho "export KIRA_COSIGN_PUB=\\"$KIRA_COSIGN_PUB\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h3,{id:"bf886ff931294e1aad96372d39449386",children:"Bash-utils"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The prerequisite to install BU is ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#0069f1f3f89b4b34a56731be349776be",children:"COSIGN tool"})," that will guarantee the integrity of the files and ",(0,s.jsx)(n.a,{href:"/a026f2da-ef09-4092-af96-aad8db6baf66#e12ff19e5f33489d91417d9c4bd8f954",children:"Bash V5"})," for better compatibility. They MUST be installed and KIRA\u2019s public key added before proceeding."]})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms."})}),(0,s.jsx)(n.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts. It provides various functions for managing environment variables, displaying information, and handling errors. Bash-utils is used in KIRA to streamline and simplify the process of executing various tasks within the network."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})}),(0,s.jsx)(n.h2,{id:"4bae39ed625c475494b196975893306b",children:"Dependencies"}),(0,s.jsx)(n.h4,{id:"66072169c89349f79786b5b4c388b676",children:"Golang"}),(0,s.jsx)(n.p,{children:"Install Go"}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"$GOBIN is required as environment variable for building SEKAI"})}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"setGlobEnv"})," and ",(0,s.jsx)(n.code,{children:"setGlobPath"})," are amongst the commands that do not behave properly. Consider adding/editing the environment variable manually."]})}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# Install Go \nbrew install go\n\n# Assume root permissions \nsudo -s\n\n# Set environment variables (manually)\ngoVersion=$(go version | awk \'{print $3}\' | cut -c 3-) && \\\nGOROOT="/usr/local/Cellar/go/$goVersion" && \\\nGOBIN="$GOROOT/bin" && \\\nGOPATH="$HOME/go" && \\\nPATH="$GOBIN:$GOPATH:$PATH"\n\n# Add variables to /etc/profile\necho "export GOROOT=\\"$GOROOT\\"" >> /etc/profile\necho "export GOBIN=\\"$GOBIN\\"" >> /etc/profile\necho "export GOPATH=\\"$GOPATH\\"" >> /etc/profile\necho "export PATH=\\"$PATH\\"" >> /etc/profile\n'})}),(0,s.jsx)(n.h4,{id:"3bbb84dbac5748b5870a1930d94970b6",children:"Others"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew install jq\n"})}),(0,s.jsx)(n.h2,{id:"fec5cf22760f4560b4a43d52328dff3f",children:"Sekai Installation"}),(0,s.jsxs)(n.p,{children:["Login as admin & load environment variables. Using bash shell and ",(0,s.jsx)(n.em,{children:"sourcing /etc/profile is necessary."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Assume sudo \nsudo -s && . /etc/profile\n"})}),(0,s.jsxs)(n.p,{children:["Set desired SEKAI release version and binaries repo ",(0,s.jsx)(n.em,{children:"(requires bash-utils)."})]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'setGlobEnv SEKAI_VERSION "v0.3.39" && \\\nsetGlobEnv SEKAI_REPO "$HOME/sekai" && \\\nloadGlobEnvs\n'})}),(0,s.jsx)(n.p,{children:"Clone repo and install"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'rm -fr $SEKAI_REPO && rm -fr $GOBIN/sekaid && mkdir $SEKAI_REPO && cd $SEKAI_REPO && \\\ngit clone https://github.com/KiraCore/sekai.git -b $SEKAI_VERSION $SEKAI_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed sekaid $(sekaid version)" || echo "FAILED"\n'})}),(0,s.jsx)(n.h3,{id:"fd1fa8f22b214af586fab939156eefb5",children:"Alternative Installation Processes"}),(0,s.jsx)(n.h4,{id:"44bd35a00e7d4292bb2cc44bf69f8959",children:"Using Binaries"}),(0,s.jsx)(n.p,{children:"Unfortunately, it is not possible to install .deb packages on MacOS as of now."}),(0,s.jsx)(n.h4,{id:"476faf3ef9b24b3e9e26762cb0f1047c",children:"Using KIRA Manager"}),(0,s.jsxs)(n.p,{children:["For a detailed KM setup walkthrough, visit ",(0,s.jsx)(n.a,{href:"https://testnet.kira.network/",children:"testnet.kira.network"}),"."]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"0dbeaabf1c9d400596731df653b604e4",children:"Starting & Testing"}),"\n",(0,s.jsx)(n.h4,{id:"0773614fcfd64317bc7ebf0f8255dfb2",children:"Start"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-start\n"})}),"\n",(0,s.jsx)(n.h4,{id:"1988428569484528bf9071b77a171046",children:"Stop"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd $SEKAI_HOME/sekai && \\\nmake network-stop\n"})}),"\n",(0,s.jsx)(n.h4,{id:"00258775c9f4458bb9ca14d0134429a6",children:"Integration Tests"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Full integration test (duration > 1h) :\nmake test-local \n\n# Individual integration test : \n# available integration tests can be found @ sekai/scripts/test-local/\nmake network-start && scripts/test-local/your-test.sh\n"})})]})}function b(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const i={tabItem:"tabItem_Ymn6"};var t=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>A});var s=a(7294),i=a(6905),t=a(2466),r=a(6550),l=a(469),o=a(1980),c=a(7392),d=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:i}}=e;return{value:n,label:a,attributes:s,default:i}}))}(a);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function b(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:a}=e;const i=(0,r.k6)(),t=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(t),(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:a=!1,groupId:i}=e,t=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:t}))),[c,h]=f({queryString:a,groupId:i}),[g,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,d.Nk)(a);return[i,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:i}),m=(()=>{const e=c??g;return b({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=a(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var I=a(5893);function E(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const n=e.currentTarget,a=o.indexOf(n),i=l[a].value;i!==s&&(c(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,I.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},n),children:l.map((e=>{let{value:n,label:a,attributes:t}=e;return(0,I.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:i}=e;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,I.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function x(e){const n=g(e);return(0,I.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,I.jsx)(E,{...e,...n}),(0,I.jsx)(v,{...e,...n})]})}function A(e){const n=(0,p.Z)();return(0,I.jsx)(x,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>r});var s=a(7294);const i={},t=s.createContext(i);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a017177c.15551822.js b/assets/js/a017177c.15551822.js new file mode 100644 index 0000000..f555ec0 --- /dev/null +++ b/assets/js/a017177c.15551822.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4919],{587:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/index",title:"Spending Pool",description:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",permalink:"/docs.kira.network/docs/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},sidebar:"defaultSidebar",previous:{title:"Custody",permalink:"/docs.kira.network/docs/0e1ccab2-5425-473e-be93-5b4a87de5d00"},next:{title:"Spending Pools",permalink:"/docs.kira.network/docs/812fdf31-d225-4daf-a4cd-4501cbc00d95"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/spending",children:(0,a.jsx)(t.code,{children:"x/spending"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a017177c.9b9eb824.js b/assets/js/a017177c.9b9eb824.js deleted file mode 100644 index 50f9cce..0000000 --- a/assets/js/a017177c.9b9eb824.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4919],{587:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Spending-Pool/index",title:"Spending Pool",description:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Spending-Pool",slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Spending Pool",sidebar_position:6,slug:"/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"},sidebar:"defaultSidebar",previous:{title:"Custody",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00"},next:{title:"Spending Pools",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Spending Pool, a native token distribution system in KIRA, allows for token allocation to specified accounts at a set rate and duration. It functions in two modes - fixed and dynamic, to cater to different needs. An open-door policy enables anyone to create a pool, facilitating tokens for network contributors like developers and community managers. Owners govern pool parameters, while beneficiaries are entitled to claim the tokens"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/spending",children:(0,a.jsx)(t.code,{children:"x/spending"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a1152711.bf29efe4.js b/assets/js/a1152711.bf29efe4.js deleted file mode 100644 index e156bbd..0000000 --- a/assets/js/a1152711.bf29efe4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7394],{1261:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>l});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Custody/index",title:"Custody",description:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Custody/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Custody",slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},sidebar:"defaultSidebar",previous:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba"},next:{title:"Spending Pool",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"}},i={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/custody",children:(0,a.jsx)(t.code,{children:"x/custody"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var a=r(7294),n=r(6905),o=r(2466),s=r(6550),u=r(469),i=r(1980),l=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=l??h;return p({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function y(e){let{className:t,block:r,selectedValue:a,selectValue:s,tabValues:u}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=i.indexOf(t),n=u[r].value;n!==a&&(l(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;t=i[r]??i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;t=i[r]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function k(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var a=r(7294);const n={},o=a.createContext(n);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a1152711.e98d6ef5.js b/assets/js/a1152711.e98d6ef5.js new file mode 100644 index 0000000..a1f8bb0 --- /dev/null +++ b/assets/js/a1152711.e98d6ef5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7394],{1261:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>l});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Custody/index",title:"Custody",description:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Custody/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Custody",slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00",permalink:"/docs.kira.network/docs/0e1ccab2-5425-473e-be93-5b4a87de5d00",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},sidebar:"defaultSidebar",previous:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/docs/85d4757d-f36d-4a39-b7ab-62866c1689ba"},next:{title:"Spending Pool",permalink:"/docs.kira.network/docs/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"}},i={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/custody",children:(0,a.jsx)(t.code,{children:"x/custody"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var a=r(7294),n=r(6905),o=r(2466),s=r(6550),u=r(469),i=r(1980),l=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=l??h;return p({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function y(e){let{className:t,block:r,selectedValue:a,selectValue:s,tabValues:u}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=i.indexOf(t),n=u[r].value;n!==a&&(l(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;t=i[r]??i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;t=i[r]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function k(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var a=r(7294);const n={},o=a.createContext(n);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a34cd734.77d4fa9a.js b/assets/js/a34cd734.77d4fa9a.js deleted file mode 100644 index d284b77..0000000 --- a/assets/js/a34cd734.77d4fa9a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[364],{3197:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>j,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),l=n(5162);const c={title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Polls",title:"Polls",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Polls.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},sidebar:"defaultSidebar",previous:{title:"Roles & Permissions",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},next:{title:"Network Properties",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0"}},a={},h=[{value:"Concept",id:"4a059df6e57742028ba3441c9e5b0abd",level:2},{value:"Proposing & voting rights",id:"5cba6ad7964f4ecca8e5dcf67be3762b",level:3},{value:"Decision-making process",id:"25e477b20c7d417eb03cec979abace5d",level:3},{value:"Other relevant network properties",id:"d0c478a7d18c4ce690d835ed6fba620c",level:3},{value:"Parameters",id:"2ae4e0f3094f431793822d60f251dae8",level:2},{value:"Polls parameters",id:"b19d8cba68b0462d8abb0101f2a4e6c1",level:4},{value:"Vote options id",id:"b71c02cda9824b75b833f01a0c7a9fae",level:4},{value:"Polls status",id:"c197e6b006d4495ab3c54944f65fc395",level:4},{value:"Cli syntax & examples",id:"ee6d816aadcd4d328734d41b24214a77",level:2},{value:"Transactions",id:"53e6aec0ccce4df5b49416ddff3cbf1b",level:2},{value:"Create poll",id:"0f28f81a42fa40e6b898566730538466",level:4},{value:"Vote on a poll",id:"72a9d254517a43acb3d4d27d8f743430",level:4},{value:"Queries",id:"0d0d943855964c4ea064602fe4917551",level:2},{value:"Query polls by address",id:"2226e5df59e041e5aee56dd9a328cdb0",level:4},{value:"Query poll votes by id",id:"000ea9f1328542fb90c9c18599dfe9c8",level:4},{value:"Governance",id:"83525905e45340f3b595111c93181b71",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"4a059df6e57742028ba3441c9e5b0abd",children:"Concept"}),"\n",(0,t.jsx)(s.p,{children:"Signaling proposals are a typical practice in blockchain governance activities. They provide a means for the community to gauge sentiment or reach consensus on a particular issue or suggestion without necessitating changes to the blockchain's state. However, these proposals simplify multifaceted issues into binary 'yes/no' votes, potentially distorting the accurate representation of varied community perspectives on complex issues. Additionally, they may slow down decision-making and introduce inefficiency to the overall governance process. Such potential drawbacks have led some projects, such as Ethereum and Celestia, to favor off-chain governance, a shift that arguably contradicts the decentralization principle."}),"\n",(0,t.jsxs)(s.p,{children:["Because of KIRA network's ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"unique governance ranking system"}),", the inclusion of signaling proposals adds another layer of complexity, potentially skewing the decision-making process as votes could be influenced more by score preservation than by authentic opinions. To circumvent these challenges, KIRA network introduces the Poll module, which offers a more inclusive and flexible mechanism for consensus. Unlike traditional signaling proposals, a Poll Proposal allows a select group of individuals to either present their own voting options or vote on pre-existing ones. This approach caters to a wide array of use cases and fosters a more accurate reflection of the diverse interests across various scenarios, such as agreeing on upgrade timeframes, selecting group administrators, or deciding on future changes to the network properties registrar."]}),"\n",(0,t.jsx)(s.h3,{id:"5cba6ad7964f4ecca8e5dcf67be3762b",children:"Proposing & voting rights"}),"\n",(0,t.jsxs)(s.p,{children:["For any users to initiate a Poll, the necessary permission, represented by the ",(0,t.jsx)(s.strong,{children:"[Problem Internal Link]"}),", must be directly assigned to their account or embedded within a Role associated with their account. This permission is automatically granted to ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"})," upon claiming their Councillor Seat. Contrary to KIRA ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals"}),", Polls do not have a corresponding voting permission. Rather, the user submitting the proposal determines which ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," can vote on the particular Poll by setting up a whitelist."]}),"\n",(0,t.jsx)(s.h3,{id:"25e477b20c7d417eb03cec979abace5d",children:"Decision-making process"}),"\n",(0,t.jsxs)(s.p,{children:["The decision-making process for the Poll module operates in line with the principles established by the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals logic"}),", while accommodating the unique requirements of this module. This process is guided by the following key points:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Voting Eligibility:"})," All whitelisted roles can cast a vote per poll. This vote can be changed later on by sending another voting transaction."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Vote Options:"})," A single vote can correspond to one or many voting options, as outlined by the ",(0,t.jsx)(s.code,{children:"options.choices"})," variable."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Custom Choices:"})," Voters are permitted to cast custom choices if the ",(0,t.jsx)(s.code,{children:"options.count"})," exceeds the ",(0,t.jsx)(s.code,{children:"options.values.length"}),". Such custom choices are subsequently added to ",(0,t.jsx)(s.code,{children:"options.values"}),", enabling other users to vote on them. However, each voter can only cast a vote for a specific option once."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Abstain and Veto:"})," Regardless of the defined ",(0,t.jsx)(s.code,{children:"options.values"}),", voters are allowed to vote ",(0,t.jsx)(s.code,{children:"abstain"})," or ",(0,t.jsx)(s.code,{children:"veto"}),". These are reserved values and don't have to match the ",(0,t.jsx)(s.code,{children:"options.type"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Proposal Timeline:"})," Poll proposals do not have an enactment time. A proposal can neither pass, be rejected, nor vetoed before its ",(0,t.jsx)(s.code,{children:"voting_end_time"})," time has elapsed, unless all eligible voters have cast their votes and the result is decisive."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Quorum Requirement:"})," A poll necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process."]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["The poll minimum quorum percentage is the same as the proposal quorum, 33% by default and is configurable by governance via the ",(0,t.jsx)(s.code,{children:"vote_quorum"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,t.jsx)(s.p,{children:"The outcome of a Poll proposal is determined based on the following rules:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Outcome"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Condition"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Passed"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are for any ",(0,t.jsx)(s.code,{children:"Custom"})," options or ",(0,t.jsx)(s.code,{children:"Abstain"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Rejected"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and there is a tie for the highest vote count between two or more options (indicating an indecisive result), or if the sum of ",(0,t.jsx)(s.code,{children:"Abstain"})," and ",(0,t.jsx)(s.code,{children:"NoWithVeto"})," votes is more than or equal to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,t.jsxs)(s.td,{children:["More than or equal to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," percentage of votes are veto."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"QuorumNotReached"})}),(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.code,{children:"vote_quorum"})," was not reached before the end of the poll."]})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"d0c478a7d18c4ce690d835ed6fba620c",children:"Other relevant network properties"}),"\n",(0,t.jsxs)(s.p,{children:["The following ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish limits over some of the Poll parameters:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," denotes the maximum character size of an individual Poll option and is set at ",(0,t.jsx)(s.code,{children:"64"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," sets the maximum number of custom options a Poll can have and is set at ",(0,t.jsx)(s.code,{children:"128"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," is used to indicate the maximum reference size in the poll and has a default value set at ",(0,t.jsx)(s.code,{children:"512"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," represents the maximum checksum size in the poll and is set to default at ",(0,t.jsx)(s.code,{children:"128"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"2ae4e0f3094f431793822d60f251dae8",children:"Parameters"}),"\n",(0,t.jsx)(s.h4,{id:"b19d8cba68b0462d8abb0101f2a4e6c1",children:"Polls parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll_id"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The unique identifier of the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"creator"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"kira1d52r..."})}),(0,t.jsx)(s.td,{children:"The account address of the poll's creator."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"title"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"some title"})}),(0,t.jsxs)(s.td,{children:["The title of the poll, limited to 128 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_title_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"description"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Are you the boss of me now?"})}),(0,t.jsxs)(s.td,{children:["The description of the poll, limited to 1024 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_description_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"reference"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"bafybeifiixdxq4cli6qxib5zfiky7rilb6k66f336nymj4jty6tdsiixre"})}),(0,t.jsxs)(s.td,{children:["Reference to the subject matter of the poll, potentially an IPFS CID or URL. Limited to 512 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"checksum"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"f5aca3b1fafffdcf22a30aafd3392e473592944da28515ae0a06afbc71c27b09"})}),(0,t.jsxs)(s.td,{children:["Checksum for the poll, ensuring data integrity. Limited to 128 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"roles"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[1,2,...]"})}),(0,t.jsx)(s.td,{children:"The roles that are eligible to participate in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"options"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"PollOptions"})}),(0,t.jsx)(s.td,{}),(0,t.jsx)(s.td,{children:"The list of available voting options in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"voting_end_time"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1678386530"})}),(0,t.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"result"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"The result of the poll, updated after the voting period ends."})]})]})]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"PollOptions type"})}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"values"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'["yes","no","maybe","I dont know", "can you repeat the question?"]'})}),(0,t.jsxs)(s.td,{children:["The list of available voting options in the poll, each item limited to 64 characters as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"count"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"5"})}),(0,t.jsxs)(s.td,{children:["The maximum number of voting options that a poll can have, as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"type"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsxs)(s.td,{children:["The type of the options, all user supplied or predefined options must match this type. Possible types: ",(0,t.jsx)(s.code,{children:"string"}),", ",(0,t.jsx)(s.code,{children:"uint"}),", ",(0,t.jsx)(s.code,{children:"int"}),", ",(0,t.jsx)(s.code,{children:"float"}),", ",(0,t.jsx)(s.code,{children:"bool"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"choices"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The maximum number of choices that a voter can select, default is 1."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"b71c02cda9824b75b833f01a0c7a9fae",children:"Vote options id"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_VOTE_OPTION_UNSPECIFIED (0)"})}),(0,t.jsx)(s.td,{children:"No-op vote option."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_ABSTAIN (1)"})}),(0,t.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_CUSTOM (2)"})}),(0,t.jsx)(s.td,{children:"Councilor has voted one or several custom option provided by the proposal."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_NO_WITH_VETO (3)"})}),(0,t.jsx)(s.td,{children:"Councilor strongly disagrees with the poll and wants to prevent it from passing successfully, bypassing the majority vote requirements due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"c197e6b006d4495ab3c54944f65fc395",children:"Polls status"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"STATUS"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_UNKNOWN (0)"})}),(0,t.jsx)(s.td,{children:"Result of the proposal is not yet known/defined."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"Poll reached quorum with one of the options having majority votes and passed successfully."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED (2)"})}),(0,t.jsxs)(s.td,{children:["Proposal was rejected because abstain votes have majority or more than one ",(0,t.jsx)(s.code,{children:"options.values"})," have the highest and same number of votes (indecisive result)."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED_WITH_VETO (3)"})}),(0,t.jsxs)(s.td,{children:["Poll reached quorum but did not pass due to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," being reached."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_PENDING (4)"})}),(0,t.jsx)(s.td,{children:"Poll is not finalized yet and is still awaiting votes."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,t.jsxs)(s.td,{children:["Poll was rejected because it failed to reach ",(0,t.jsx)(s.code,{children:"vote_quorum"}),"."]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"ee6d816aadcd4d328734d41b24214a77",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(l.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(s.h2,{id:"53e6aec0ccce4df5b49416ddff3cbf1b",children:"Transactions"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poll create"})}),(0,t.jsx)(s.th,{children:"Initiates the creation of a new poll."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll vote"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing poll."})]})})]}),(0,t.jsx)(s.h4,{id:"0f28f81a42fa40e6b898566730538466",children:"Create poll"}),(0,t.jsxs)(s.p,{children:["Create a new poll using the ",(0,t.jsx)(s.code,{children:"create"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),": The title of the poll."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the poll, it can be a URL, text, etc."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$REFERENCE"}),": IPFS CID or URL reference to file describing the poll and voting options in depth."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHECKSUM"}),": Reference checksum."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$OPTIONS"}),": The options for the poll in the format variant1, variant2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ROLES"}),": List of roles allowed to take part in the poll vote in the format role1, role2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$COUNT"}),": Maximum number of voting options that a poll can have."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TYPE"}),": Type of the options, all user supplied or predefined options must match its type."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHOICES"}),": Define the maximum number of choices a voter can select."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DURATION"}),": The duration of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION --reference=$REFERENCE --checksum=$CHECKSUM \\\n--options=$OPTIONS --roles=$ROLES --count=$COUNT --type=$TYPE \\\n--choices=$CHOICES --duration=$DURATION\n"})}),(0,t.jsx)(s.h4,{id:"72a9d254517a43acb3d4d27d8f743430",children:"Vote on a poll"}),(0,t.jsxs)(s.p,{children:["Cast a vote on an existing poll using the ",(0,t.jsx)(s.code,{children:"vote"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The ID of the poll you wish to vote on."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_OPTION"}),": The option ID you are voting for."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CUSTOM_VALUE"}),": The custom poll value."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll vote $POLL_ID $POLL_OPTION \\\n--from=$SIGNER $FLAGS_TX \\\n--custom-value=$CUSTOM_VALUE\n"})})]}),(0,t.jsxs)(l.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"0d0d943855964c4ea064602fe4917551",children:"Queries"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"query polls"})}),(0,t.jsx)(s.th,{children:"Lists polls created by a specific address."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"query poll-votes"})}),(0,t.jsx)(s.td,{children:"Lists all votes of a specific poll using its ID."})]})})]}),(0,t.jsx)(s.h4,{id:"2226e5df59e041e5aee56dd9a328cdb0",children:"Query polls by address"}),(0,t.jsx)(s.p,{children:"Retrieve polls created by a specific address."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ADDRESS"}),": The account address."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query polls $ADDRESS $FLAGS_QR | jq\n"})}),(0,t.jsx)(s.h4,{id:"000ea9f1328542fb90c9c18599dfe9c8",children:"Query poll votes by id"}),(0,t.jsx)(s.p,{children:"Lists all votes for a specific poll using the poll\u2019s ID."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The unique identifier of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query poll-votes $POLL_ID $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(l.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"83525905e45340f3b595111c93181b71",children:"Governance"}),(0,t.jsxs)(s.p,{children:["The duration of polls, which is determined by the ",(0,t.jsx)(s.code,{children:"voting_end_time"})," parameter, is shared with proposals. As a result, it can be adjusted using the ",(0,t.jsx)(s.code,{children:"set-proposal-durations-proposal"})," CLI found the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"proposal sub-module"}),"."]})]})]})]})}function j(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>l});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function l(e){let{children:s,hidden:n,className:l}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,l),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var t=n(7294),r=n(6905),i=n(2466),l=n(6550),c=n(469),o=n(1980),d=n(7392),a=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function j(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function p(e){let{queryString:s=!1,groupId:n}=e;const r=(0,l.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function u(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=x(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[d,h]=p({queryString:n,groupId:r}),[u,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,a.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),f=(()=>{const e=d??u;return j({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:l,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const s=e.currentTarget,n=o.indexOf(s),r=c[n].value;r!==t&&(d(s),l(r))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:c.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>o.push(e),onKeyDown:h,onClick:a,...i,className:(0,r.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=u(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",f.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>l});var t=n(7294);const r={},i=t.createContext(r);function l(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a34cd734.91fb1fe3.js b/assets/js/a34cd734.91fb1fe3.js new file mode 100644 index 0000000..d2c15db --- /dev/null +++ b/assets/js/a34cd734.91fb1fe3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[364],{3197:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>j,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),l=n(5162);const c={title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Polls",title:"Polls",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Polls.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243",permalink:"/docs.kira.network/docs/f5e18e49-927a-4a4f-ae70-bb9fc5606243",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},sidebar:"defaultSidebar",previous:{title:"Roles & Permissions",permalink:"/docs.kira.network/docs/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},next:{title:"Network Properties",permalink:"/docs.kira.network/docs/b9b95792-b936-4603-8a46-15566f24e3c0"}},a={},h=[{value:"Concept",id:"4a059df6e57742028ba3441c9e5b0abd",level:2},{value:"Proposing & Voting Rights",id:"5cba6ad7964f4ecca8e5dcf67be3762b",level:3},{value:"Decision-making Process",id:"25e477b20c7d417eb03cec979abace5d",level:3},{value:"Other Relevant Network Properties",id:"d0c478a7d18c4ce690d835ed6fba620c",level:3},{value:"Parameters",id:"2ae4e0f3094f431793822d60f251dae8",level:2},{value:"Polls Parameters",id:"b19d8cba68b0462d8abb0101f2a4e6c1",level:4},{value:"Vote Options Id",id:"b71c02cda9824b75b833f01a0c7a9fae",level:4},{value:"Polls Status",id:"c197e6b006d4495ab3c54944f65fc395",level:4},{value:"Cli Syntax & Examples",id:"ee6d816aadcd4d328734d41b24214a77",level:2},{value:"Transactions",id:"53e6aec0ccce4df5b49416ddff3cbf1b",level:2},{value:"Create Poll",id:"0f28f81a42fa40e6b898566730538466",level:4},{value:"Vote on a Poll",id:"72a9d254517a43acb3d4d27d8f743430",level:4},{value:"Queries",id:"0d0d943855964c4ea064602fe4917551",level:2},{value:"Query Polls by Address",id:"2226e5df59e041e5aee56dd9a328cdb0",level:4},{value:"Query Poll Votes by Id",id:"000ea9f1328542fb90c9c18599dfe9c8",level:4},{value:"Governance",id:"83525905e45340f3b595111c93181b71",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"4a059df6e57742028ba3441c9e5b0abd",children:"Concept"}),"\n",(0,t.jsx)(s.p,{children:"Signaling proposals are a typical practice in blockchain governance activities. They provide a means for the community to gauge sentiment or reach consensus on a particular issue or suggestion without necessitating changes to the blockchain's state. However, these proposals simplify multifaceted issues into binary 'yes/no' votes, potentially distorting the accurate representation of varied community perspectives on complex issues. Additionally, they may slow down decision-making and introduce inefficiency to the overall governance process. Such potential drawbacks have led some projects, such as Ethereum and Celestia, to favor off-chain governance, a shift that arguably contradicts the decentralization principle."}),"\n",(0,t.jsxs)(s.p,{children:["Because of KIRA network's ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"unique governance ranking system"}),", the inclusion of signaling proposals adds another layer of complexity, potentially skewing the decision-making process as votes could be influenced more by score preservation than by authentic opinions. To circumvent these challenges, KIRA network introduces the Poll module, which offers a more inclusive and flexible mechanism for consensus. Unlike traditional signaling proposals, a Poll Proposal allows a select group of individuals to either present their own voting options or vote on pre-existing ones. This approach caters to a wide array of use cases and fosters a more accurate reflection of the diverse interests across various scenarios, such as agreeing on upgrade timeframes, selecting group administrators, or deciding on future changes to the network properties registrar."]}),"\n",(0,t.jsx)(s.h3,{id:"5cba6ad7964f4ecca8e5dcf67be3762b",children:"Proposing & Voting Rights"}),"\n",(0,t.jsxs)(s.p,{children:["For any users to initiate a Poll, the necessary permission, represented by the ",(0,t.jsx)(s.strong,{children:"[Problem Internal Link]"}),", must be directly assigned to their account or embedded within a Role associated with their account. This permission is automatically granted to ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"})," upon claiming their Councillor Seat. Contrary to KIRA ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals"}),", Polls do not have a corresponding voting permission. Rather, the user submitting the proposal determines which ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," can vote on the particular Poll by setting up a whitelist."]}),"\n",(0,t.jsx)(s.h3,{id:"25e477b20c7d417eb03cec979abace5d",children:"Decision-making Process"}),"\n",(0,t.jsxs)(s.p,{children:["The decision-making process for the Poll module operates in line with the principles established by the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals logic"}),", while accommodating the unique requirements of this module. This process is guided by the following key points:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Voting Eligibility:"})," All whitelisted roles can cast a vote per poll. This vote can be changed later on by sending another voting transaction."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Vote Options:"})," A single vote can correspond to one or many voting options, as outlined by the ",(0,t.jsx)(s.code,{children:"options.choices"})," variable."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Custom Choices:"})," Voters are permitted to cast custom choices if the ",(0,t.jsx)(s.code,{children:"options.count"})," exceeds the ",(0,t.jsx)(s.code,{children:"options.values.length"}),". Such custom choices are subsequently added to ",(0,t.jsx)(s.code,{children:"options.values"}),", enabling other users to vote on them. However, each voter can only cast a vote for a specific option once."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Abstain and Veto:"})," Regardless of the defined ",(0,t.jsx)(s.code,{children:"options.values"}),", voters are allowed to vote ",(0,t.jsx)(s.code,{children:"abstain"})," or ",(0,t.jsx)(s.code,{children:"veto"}),". These are reserved values and don't have to match the ",(0,t.jsx)(s.code,{children:"options.type"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Proposal Timeline:"})," Poll proposals do not have an enactment time. A proposal can neither pass, be rejected, nor vetoed before its ",(0,t.jsx)(s.code,{children:"voting_end_time"})," time has elapsed, unless all eligible voters have cast their votes and the result is decisive."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Quorum Requirement:"})," A poll necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process."]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["The poll minimum quorum percentage is the same as the proposal quorum, 33% by default and is configurable by governance via the ",(0,t.jsx)(s.code,{children:"vote_quorum"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,t.jsx)(s.p,{children:"The outcome of a Poll proposal is determined based on the following rules:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Outcome"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Condition"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Passed"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are for any ",(0,t.jsx)(s.code,{children:"Custom"})," options or ",(0,t.jsx)(s.code,{children:"Abstain"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Rejected"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and there is a tie for the highest vote count between two or more options (indicating an indecisive result), or if the sum of ",(0,t.jsx)(s.code,{children:"Abstain"})," and ",(0,t.jsx)(s.code,{children:"NoWithVeto"})," votes is more than or equal to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,t.jsxs)(s.td,{children:["More than or equal to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," percentage of votes are veto."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"QuorumNotReached"})}),(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.code,{children:"vote_quorum"})," was not reached before the end of the poll."]})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"d0c478a7d18c4ce690d835ed6fba620c",children:"Other Relevant Network Properties"}),"\n",(0,t.jsxs)(s.p,{children:["The following ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish limits over some of the Poll parameters:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," denotes the maximum character size of an individual Poll option and is set at ",(0,t.jsx)(s.code,{children:"64"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," sets the maximum number of custom options a Poll can have and is set at ",(0,t.jsx)(s.code,{children:"128"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," is used to indicate the maximum reference size in the poll and has a default value set at ",(0,t.jsx)(s.code,{children:"512"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," represents the maximum checksum size in the poll and is set to default at ",(0,t.jsx)(s.code,{children:"128"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"2ae4e0f3094f431793822d60f251dae8",children:"Parameters"}),"\n",(0,t.jsx)(s.h4,{id:"b19d8cba68b0462d8abb0101f2a4e6c1",children:"Polls Parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll_id"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The unique identifier of the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"creator"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"kira1d52r..."})}),(0,t.jsx)(s.td,{children:"The account address of the poll's creator."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"title"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"some title"})}),(0,t.jsxs)(s.td,{children:["The title of the poll, limited to 128 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_title_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"description"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Are you the boss of me now?"})}),(0,t.jsxs)(s.td,{children:["The description of the poll, limited to 1024 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_description_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"reference"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"bafybeifiixdxq4cli6qxib5zfiky7rilb6k66f336nymj4jty6tdsiixre"})}),(0,t.jsxs)(s.td,{children:["Reference to the subject matter of the poll, potentially an IPFS CID or URL. Limited to 512 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"checksum"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"f5aca3b1fafffdcf22a30aafd3392e473592944da28515ae0a06afbc71c27b09"})}),(0,t.jsxs)(s.td,{children:["Checksum for the poll, ensuring data integrity. Limited to 128 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"roles"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[1,2,...]"})}),(0,t.jsx)(s.td,{children:"The roles that are eligible to participate in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"options"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"PollOptions"})}),(0,t.jsx)(s.td,{}),(0,t.jsx)(s.td,{children:"The list of available voting options in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"voting_end_time"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1678386530"})}),(0,t.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"result"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"The result of the poll, updated after the voting period ends."})]})]})]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"PollOptions type"})}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"values"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'["yes","no","maybe","I dont know", "can you repeat the question?"]'})}),(0,t.jsxs)(s.td,{children:["The list of available voting options in the poll, each item limited to 64 characters as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"count"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"5"})}),(0,t.jsxs)(s.td,{children:["The maximum number of voting options that a poll can have, as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"type"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsxs)(s.td,{children:["The type of the options, all user supplied or predefined options must match this type. Possible types: ",(0,t.jsx)(s.code,{children:"string"}),", ",(0,t.jsx)(s.code,{children:"uint"}),", ",(0,t.jsx)(s.code,{children:"int"}),", ",(0,t.jsx)(s.code,{children:"float"}),", ",(0,t.jsx)(s.code,{children:"bool"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"choices"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The maximum number of choices that a voter can select, default is 1."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"b71c02cda9824b75b833f01a0c7a9fae",children:"Vote Options Id"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_VOTE_OPTION_UNSPECIFIED (0)"})}),(0,t.jsx)(s.td,{children:"No-op vote option."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_ABSTAIN (1)"})}),(0,t.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_CUSTOM (2)"})}),(0,t.jsx)(s.td,{children:"Councilor has voted one or several custom option provided by the proposal."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_NO_WITH_VETO (3)"})}),(0,t.jsx)(s.td,{children:"Councilor strongly disagrees with the poll and wants to prevent it from passing successfully, bypassing the majority vote requirements due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"c197e6b006d4495ab3c54944f65fc395",children:"Polls Status"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"STATUS"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_UNKNOWN (0)"})}),(0,t.jsx)(s.td,{children:"Result of the proposal is not yet known/defined."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"Poll reached quorum with one of the options having majority votes and passed successfully."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED (2)"})}),(0,t.jsxs)(s.td,{children:["Proposal was rejected because abstain votes have majority or more than one ",(0,t.jsx)(s.code,{children:"options.values"})," have the highest and same number of votes (indecisive result)."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED_WITH_VETO (3)"})}),(0,t.jsxs)(s.td,{children:["Poll reached quorum but did not pass due to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," being reached."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_PENDING (4)"})}),(0,t.jsx)(s.td,{children:"Poll is not finalized yet and is still awaiting votes."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,t.jsxs)(s.td,{children:["Poll was rejected because it failed to reach ",(0,t.jsx)(s.code,{children:"vote_quorum"}),"."]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"ee6d816aadcd4d328734d41b24214a77",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(l.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(s.h2,{id:"53e6aec0ccce4df5b49416ddff3cbf1b",children:"Transactions"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poll create"})}),(0,t.jsx)(s.th,{children:"Initiates the creation of a new poll."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll vote"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing poll."})]})})]}),(0,t.jsx)(s.h4,{id:"0f28f81a42fa40e6b898566730538466",children:"Create Poll"}),(0,t.jsxs)(s.p,{children:["Create a new poll using the ",(0,t.jsx)(s.code,{children:"create"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),": The title of the poll."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the poll, it can be a URL, text, etc."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$REFERENCE"}),": IPFS CID or URL reference to file describing the poll and voting options in depth."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHECKSUM"}),": Reference checksum."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$OPTIONS"}),": The options for the poll in the format variant1, variant2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ROLES"}),": List of roles allowed to take part in the poll vote in the format role1, role2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$COUNT"}),": Maximum number of voting options that a poll can have."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TYPE"}),": Type of the options, all user supplied or predefined options must match its type."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHOICES"}),": Define the maximum number of choices a voter can select."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DURATION"}),": The duration of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION --reference=$REFERENCE --checksum=$CHECKSUM \\\n--options=$OPTIONS --roles=$ROLES --count=$COUNT --type=$TYPE \\\n--choices=$CHOICES --duration=$DURATION\n"})}),(0,t.jsx)(s.h4,{id:"72a9d254517a43acb3d4d27d8f743430",children:"Vote on a Poll"}),(0,t.jsxs)(s.p,{children:["Cast a vote on an existing poll using the ",(0,t.jsx)(s.code,{children:"vote"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The ID of the poll you wish to vote on."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_OPTION"}),": The option ID you are voting for."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CUSTOM_VALUE"}),": The custom poll value."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll vote $POLL_ID $POLL_OPTION \\\n--from=$SIGNER $FLAGS_TX \\\n--custom-value=$CUSTOM_VALUE\n"})})]}),(0,t.jsxs)(l.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"0d0d943855964c4ea064602fe4917551",children:"Queries"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"query polls"})}),(0,t.jsx)(s.th,{children:"Lists polls created by a specific address."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"query poll-votes"})}),(0,t.jsx)(s.td,{children:"Lists all votes of a specific poll using its ID."})]})})]}),(0,t.jsx)(s.h4,{id:"2226e5df59e041e5aee56dd9a328cdb0",children:"Query Polls by Address"}),(0,t.jsx)(s.p,{children:"Retrieve polls created by a specific address."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ADDRESS"}),": The account address."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query polls $ADDRESS $FLAGS_QR | jq\n"})}),(0,t.jsx)(s.h4,{id:"000ea9f1328542fb90c9c18599dfe9c8",children:"Query Poll Votes by Id"}),(0,t.jsx)(s.p,{children:"Lists all votes for a specific poll using the poll\u2019s ID."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The unique identifier of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query poll-votes $POLL_ID $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(l.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"83525905e45340f3b595111c93181b71",children:"Governance"}),(0,t.jsxs)(s.p,{children:["The duration of polls, which is determined by the ",(0,t.jsx)(s.code,{children:"voting_end_time"})," parameter, is shared with proposals. As a result, it can be adjusted using the ",(0,t.jsx)(s.code,{children:"set-proposal-durations-proposal"})," CLI found the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"proposal sub-module"}),"."]})]})]})]})}function j(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>l});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function l(e){let{children:s,hidden:n,className:l}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,l),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var t=n(7294),r=n(6905),i=n(2466),l=n(6550),c=n(469),o=n(1980),d=n(7392),a=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function j(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function u(e){let{queryString:s=!1,groupId:n}=e;const r=(0,l.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=x(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[d,h]=u({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,a.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),f=(()=>{const e=d??p;return j({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:l,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const s=e.currentTarget,n=o.indexOf(s),r=c[n].value;r!==t&&(d(s),l(r))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:c.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>o.push(e),onKeyDown:h,onClick:a,...i,className:(0,r.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=p(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",f.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>l});var t=n(7294);const r={},i=t.createContext(r);function l(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a3d9f2e2.0a51e527.js b/assets/js/a3d9f2e2.0a51e527.js deleted file mode 100644 index 15333b8..0000000 --- a/assets/js/a3d9f2e2.0a51e527.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6460],{121:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var r=n(5893),i=n(1151),t=n(4866),o=n(5162);const a={title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure",title:"Proposals & governance structure",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Proposals & governance structure",sidebar_position:2,slug:"/25d26925-50ce-4a4f-836b-fc8486ef8b05"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},next:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"}},d={},h=[{value:"Concept",id:"cec5b8b9f4904b3c98c079258d9a4692",level:2},{value:"Proposing & voting rights",id:"ca1e33b2b3034f5997ca48f9186e1173",level:3},{value:"Permissioned governance set with equitable vote distribution",id:"59c3610b51824c349b62a8d93925a7ea",level:3},{value:"Decision-making process",id:"3bc3fc5003d64c968b703fe0f949bd75",level:3},{value:"Relevant network properties",id:"5584c3f171f24ddfa7a616c344690c83",level:4},{value:"Parameters",id:"c87ca8ad5ef4402aab4f8f9c9768b78b",level:2},{value:"Proposal types",id:"c5381831565e4d2789f7d553745835e5",level:4},{value:"Proposal",id:"e3cd55578cb74dc394f3c4346e73236c",level:4},{value:"Vote types",id:"c48673132aeb432d977a1554e8a86434",level:4},{value:"Proposal status",id:"703d5727415642f2a6b4d33cd6acff0a",level:4},{value:"Cli syntax & examples",id:"b82ffe5632d24d94997e6981477a132b",level:2},{value:"Transactions",id:"54620f9f378f4c1a89d527786da6e1bc",level:2},{value:"Queries",id:"5461ad3bca534f018a45d18d22b0bb69",level:3},{value:"Query proposals",id:"78011608601e48d08d0a071b9cd5c140",level:4},{value:"Query proposal",id:"095905665c39445cb75e2850e4b0dc1b",level:4},{value:"Query vote",id:"63da01ba1e7641f1b655954ba40dd3c0",level:4},{value:"Query votes",id:"8b6123c73e304d50a928294736b65015",level:4},{value:"Query whitelisted proposal voters",id:"9fa5de3738c7484f84dc315dc112c0f5",level:4},{value:"Query all proposal durations",id:"29b4670c8bfc40fd8f62e1f4da02b57d",level:4},{value:"Query proposal duration",id:"c998c2f09f9c47168e2dd081f93f842f",level:4},{value:"Governance",id:"8fc5a2c18add467eba69f2af052d32fc",level:2},{value:"Set proposals duration",id:"d2441765912d4167b72710bad8af4ea0",level:4}];function p(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"cec5b8b9f4904b3c98c079258d9a4692",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"Proposals form the backbone of the governance process within the KIRA Network, empowering selected network members to collectively influence the blockchain application's conduct and make myriad of off-chain decisions."}),"\n",(0,r.jsx)(s.h3,{id:"ca1e33b2b3034f5997ca48f9186e1173",children:"Proposing & voting rights"}),"\n",(0,r.jsx)(s.p,{children:"Two types of network participants are empowered to vote on governance proposals:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Consensus nodes"}),": These are individuals who occupy a validator seat and operate nodes that actively generate new blocks."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Councilors:"})," These are non-validator individuals who, having secured a councilor seat, shoulder the responsibility of network governance."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Together, consensus nodes and councilors constitute the governance set. Inclusion in the governance set doesn't inherently grant the ability to vote on every proposal type. Each governance member necessitates a specific permission to vote on a certain type of proposal. The same principle holds for the creation of new proposals\u2014a specific permission enabling the submission of certain proposals is essential. Permissions can be granted on an individual basis or via roles. This model facilitates an almost infinitely scalable governance system. It allows for the creation of multiple governance sub-councils that can maintain a codependent relationship through ",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Separation_of_powers#Checks_and_balances",children:"checks and balances"})," or any other governance system. This efficient division of responsibilities enables KIRA governance to manage various on-chain parameters, staking interest rates, and more, concurrently. More details on this can be found in the ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"Roles & Permissions"})," section."]}),"\n",(0,r.jsx)(s.h3,{id:"59c3610b51824c349b62a8d93925a7ea",children:"Permissioned governance set with equitable vote distribution"}),"\n",(0,r.jsxs)(s.p,{children:["KIRA's governance structure aims to promotes a non-sybil community\u2014i.e identifiable individuals who cannot own multiple KIRA accounts with the same or different governance permissions. This non-sybil status is curated by the governance set itself, hence termed \u201cpermissionned\u201d or \u201cgovernance curated\u201d governance set. While ",(0,r.jsx)(s.strong,{children:"members do not need to disclose their identity or undergo KYC procedures"}),", they must be identifiable individual entities. This is primarily achieved through KIRA\u2019s ",(0,r.jsx)(s.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"}),", which enables all KIRA users to claim and validate various type of information on-chain. Additionally, the governance has various ways to ensure that new members are genuine individuals\u2014like conducting in-person meetings or group calls."]}),"\n",(0,r.jsx)(s.p,{children:"The voting power among governance members is uniformly distributed. Contrary to governance models where token holdings determine voting weight, KIRA provides equal voting weight to all governance members irrespective of their wealth or token ownership. This mitigates the risk of stolen tokens or accounts being used to manipulate network operations or sway governance votes. This becomes crucial in scenarios where centralized custodians, like exchanges holding large token positions of users, can impact other network operations."}),"\n",(0,r.jsx)(s.h3,{id:"3bc3fc5003d64c968b703fe0f949bd75",children:"Decision-making process"}),"\n",(0,r.jsx)(s.p,{children:"The KIRA Network's decision-making process is orchestrated through the mechanism of proposals. These can be accepted, vetoed, or dismissed by governance members, provided they have the appropriate voting permission."}),"\n",(0,r.jsx)(s.p,{children:"This process is guided by the following principles:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Eligibility:"})," Only those network participants who are ",(0,r.jsx)(s.strong,{children:"validators"})," or ",(0,r.jsx)(s.strong,{children:"councilors"})," (collectively known as ",(0,r.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"}),") are eligible to vote on proposals."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voting Permission:"})," Councilors can vote on a specific proposal only if they have been granted the respective permission that allows them to do so or if they possess a role that encompasses said permission."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Vote Casting:"})," Governance actors have the option to cast one of four distinct vote types: ",(0,r.jsx)(s.code,{children:"yes (1)"}),", ",(0,r.jsx)(s.code,{children:"abstain (2)"}),", ",(0,r.jsx)(s.code,{children:"no (3)"}),", or ",(0,r.jsx)(s.code,{children:"veto (4)"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Proposal Timeline:"})," A proposal cannot be accepted, vetoed, or dismissed until its ",(0,r.jsx)(s.code,{children:"voting_end_time"})," time has elapsed. Furthermore, a proposal cannot take effect until the ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," has elapsed. No votes can be cast during the enactment period, and a proposal only comes into effect after this period ends."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsx)(s.p,{children:"The enactment time allows participants to analyze successful proposal results and act accordingly, avoiding unexpected shifts in voting outcomes."})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Quorum Requirement:"})," A proposal necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process. Failing to meet the quorum results in the proposal being marked as ",(0,r.jsx)(s.code,{children:"QuorumNotReached"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["The default proposal minimum quorum percentage is 33% and is configurable by governance via the ",(0,r.jsx)(s.code,{children:"vote_quorum"})," ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,r.jsx)(s.p,{children:"The outcome of a proposal is determined based on the following rules:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Outcome"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"Condition"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Passed"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are ",(0,r.jsx)(s.code,{children:"yes"})," votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"Rejected"})}),(0,r.jsxs)(s.td,{children:["If quorum is reached and votes of a type other than ",(0,r.jsx)(s.code,{children:"yes"})," sum to more than or equal to ",(0,r.jsxs)(s.span,{className:"katex",children:[(0,r.jsx)(s.span,{className:"katex-mathml",children:(0,r.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,r.jsxs)(s.semantics,{children:[(0,r.jsx)(s.mrow,{children:(0,r.jsxs)(s.mfrac,{children:[(0,r.jsx)(s.mn,{children:"1"}),(0,r.jsx)(s.mn,{children:"2"})]})}),(0,r.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,r.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,r.jsxs)(s.span,{className:"base",children:[(0,r.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,r.jsxs)(s.span,{className:"mord",children:[(0,r.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,r.jsx)(s.span,{className:"mfrac",children:(0,r.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,r.jsxs)(s.span,{className:"vlist-r",children:[(0,r.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,r.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,r.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,r.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,r.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,r.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:(0,r.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,r.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,r.jsx)(s.span,{className:"vlist-r",children:(0,r.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,r.jsx)(s.span,{})})})]})}),(0,r.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,r.jsxs)(s.td,{children:["If more than or equal to ",(0,r.jsx)(s.code,{children:"veto_threshold"})," (default 33.4%) votes are ",(0,r.jsx)(s.code,{children:"veto"})," votes, the proposal is rejected (a minority of members can reject a proposal)."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"QuorumNotReached"})}),(0,r.jsxs)(s.td,{children:["The quorum was not reach before ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"5584c3f171f24ddfa7a616c344690c83",children:"Relevant network properties"}),"\n",(0,r.jsxs)(s.p,{children:["Two fundamental ",(0,r.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish the baseline for proposal duration and enactment timeframes: ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," and ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"}),"."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"minimum_proposal_end_time"})," sets the lower limit for all proposals durations, also known as ",(0,r.jsx)(s.code,{children:"voting_end_time"})," which can be adjusted by the governance for individual proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["The ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," creates a consistent rule that applies to all proposals. It sets each proposal's ",(0,r.jsx)(s.code,{children:"enactment_end_time"})," by adding the ",(0,r.jsx)(s.code,{children:"proposal_enactment_time"})," to that proposal's ",(0,r.jsx)(s.code,{children:"voting_end_time"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"c87ca8ad5ef4402aab4f8f9c9768b78b",children:"Parameters"}),"\n",(0,r.jsx)(s.h4,{id:"c5381831565e4d2789f7d553745835e5",children:"Proposal types"}),"\n",(0,r.jsxs)(s.p,{children:["Existing governance proposals types are listed ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"here"}),"."]}),"\n",(0,r.jsx)(s.h4,{id:"e3cd55578cb74dc394f3c4346e73236c",children:"Proposal"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"TYPE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"EXAMPLE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal_id"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"uint64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1"})}),(0,r.jsx)(s.td,{children:"The unique identifier of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"title"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some title"})}),(0,r.jsx)(s.td,{children:"The title of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some description"})}),(0,r.jsx)(s.td,{children:"The description of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"content"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Any"})}),(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:"The content of the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"submit_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1677781730"})}),(0,r.jsx)(s.td,{children:"The timestamp when the proposal was submitted."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voting_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678386530"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"enactment_end_time"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1678991330"})}),(0,r.jsx)(s.td,{children:"The timestamp indicating the end of the enactment period for the proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_voting_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"17500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"voting_end_time"})," corresponding minimum block height at which the voting period for the proposal ends."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"min_enactment_end_block_height"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int64"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"18500"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"enactment_end_time"})," corresponding minimum block height at which the enactment period for the proposal ends."]})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"c48673132aeb432d977a1554e8a86434",children:"Vote types"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_YES (1)"})}),(0,r.jsx)(s.td,{children:"Councilor agrees with the proposal and wants it to pass successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_ABSTAIN (2)"})}),(0,r.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO (3)"})}),(0,r.jsx)(s.td,{children:"Councilor disagrees with the proposal and wants to prevent it from passing successfully."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_OPTION_NO_WITH_VETO (4)"})}),(0,r.jsx)(s.td,{children:"Councilor strongly disagrees with a proposal and wants to prevent it from passing successfully bypassing the majority vote percentage requirements for approval due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"703d5727415642f2a6b4d33cd6acff0a",children:"Proposal status"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"STATUS"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_UNKNOWN (0)"})}),(0,r.jsx)(s.td,{children:"Result of the proposal is not yet known/defined"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED (1)"})}),(0,r.jsx)(s.td,{children:"Proposal reached quorum, passed successfully, was enacted and took effect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED (2)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass by lacking a minimum of >50% ",(0,r.jsx)(s.code,{children:"yes (1)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_REJECTED_WITH_VETO (3)"})}),(0,r.jsxs)(s.td,{children:["Proposal reached quorum but did NOT pass due to rejection of >50% ",(0,r.jsx)(s.code,{children:"veto (4)"})," votes"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_PENDING (4)"})}),(0,r.jsx)(s.td,{children:"Proposal is not finalized yet and is still awaiting votes"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,r.jsx)(s.td,{children:"Proposal failed to reach quorum and thus was rejected"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_ENACTMENT (6)"})}),(0,r.jsx)(s.td,{children:"Proposal was successful but is awaiting enactment time to be passed and thus enforced"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"VOTE_RESULT_PASSED_WITH_EXEC_FAIL (7)"})}),(0,r.jsx)(s.td,{children:"Execution of the proposal logic failed with an unforeseen exception and no changes were made"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"b82ffe5632d24d94997e6981477a132b",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(t.Z,{children:[(0,r.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"54620f9f378f4c1a89d527786da6e1bc",children:"Transactions"}),(0,r.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,r.jsxs)(o.Z,{value:"tab",label:"Tab",children:[(0,r.jsx)(s.h3,{id:"5461ad3bca534f018a45d18d22b0bb69",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposals"})}),(0,r.jsx)(s.th,{children:"Query all proposals with optional filters."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal"})}),(0,r.jsx)(s.td,{children:"Query details for a specific proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"vote"})}),(0,r.jsx)(s.td,{children:"Query details for a single vote on a proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"votes"})}),(0,r.jsx)(s.td,{children:"Query vote details for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"voters"})}),(0,r.jsx)(s.td,{children:"Query voters for a single proposal."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"all-proposal-durations"})}),(0,r.jsx)(s.td,{children:"Query all proposal durations."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal-duration"})}),(0,r.jsx)(s.td,{children:"Query a specific proposal duration."})]})]})]}),(0,r.jsx)(s.h4,{id:"78011608601e48d08d0a071b9cd5c140",children:"Query proposals"}),(0,r.jsxs)(s.p,{children:["Query all paginated proposals that match optional filters using the ",(0,r.jsx)(s.code,{children:"proposals"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": (Optional) Filter by proposals voted on by this voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposals --voter=$VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"095905665c39445cb75e2850e4b0dc1b",children:"Query proposal"}),(0,r.jsxs)(s.p,{children:["Query details for a proposal using the ",(0,r.jsx)(s.code,{children:"proposal"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov proposal $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"63da01ba1e7641f1b655954ba40dd3c0",children:"Query vote"}),(0,r.jsxs)(s.p,{children:["Query details for a single vote on a proposal using the ",(0,r.jsx)(s.code,{children:"vote"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$VOTER_ADDRESS"}),": The address of the voter."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov vote $PROPOSAL_ID $VOTER_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"8b6123c73e304d50a928294736b65015",children:"Query votes"}),(0,r.jsxs)(s.p,{children:["Query vote details for a single proposal using the ",(0,r.jsx)(s.code,{children:"votes"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov votes $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"9fa5de3738c7484f84dc315dc112c0f5",children:"Query whitelisted proposal voters"}),(0,r.jsxs)(s.p,{children:["Query voters for a single proposal using the ",(0,r.jsx)(s.code,{children:"voters"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_ID"}),": The unique identifier of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov voters $PROPOSAL_ID \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"29b4670c8bfc40fd8f62e1f4da02b57d",children:"Query all proposal durations"}),(0,r.jsxs)(s.p,{children:["Query all proposal durations using the ",(0,r.jsx)(s.code,{children:"all-proposal-durations"})," command."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov all-proposal-durations \\\n$FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"c998c2f09f9c47168e2dd081f93f842f",children:"Query proposal duration"}),(0,r.jsxs)(s.p,{children:["Query a proposal duration using the ",(0,r.jsx)(s.code,{children:"proposal-duration"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPE"}),": The type of the proposal."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov gov proposal-duration $PROPOSAL_TYPE \\\n$FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"8fc5a2c18add467eba69f2af052d32fc",children:"Governance"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"})}),(0,r.jsxs)(s.th,{children:["Proposes to set the ",(0,r.jsx)(s.code,{children:"voting_end_time"})," of specific proposal types"]})]})})}),(0,r.jsx)(s.h4,{id:"d2441765912d4167b72710bad8af4ea0",children:"Set proposals duration"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"set-proposal-durations-proposal"}),", is used to create a proposal to set some proposal ",(0,r.jsx)(s.code,{children:"voting_end_time"})," in one batch. It requires two positional arguments: a list of proposal types and a corresponding list of durations. The command accepts the following flags:"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PROPOSAL_TYPES"}),": A comma-separated list of proposal ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Proposal.go",children:"types"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DURATIONS"}),": A corresponding comma-separated list of durations for the proposal types."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal. This flag is required."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, which can be a URL, some text, etc. This flag is required."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-proposal-durations-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPOSAL_TYPES $DURATIONS\n"})})]})]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var r=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var r=n(7294),i=n(6905),t=n(2466),o=n(6550),a=n(469),l=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:i}}=e;return{value:s,label:n,attributes:r,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function u(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const i=(0,o.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,l._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=p(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!u({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[c,h]=x({queryString:n,groupId:i}),[j,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,d.Nk)(n);return[i,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),f=(()=>{const e=c??j;return u({value:e,tabValues:t})?e:null})();(0,a.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),m(e)}),[h,m,t]),tabValues:t}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function b(e){let{className:s,block:n,selectedValue:r,selectValue:o,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const s=e.currentTarget,n=l.indexOf(s),i=a[n].value;i!==r&&(c(s),o(i))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;s=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;s=l[n]??l[l.length-1];break}}s?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>l.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",f.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function y(e){const s=j(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,g.jsx)(b,{...e,...s}),(0,g.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,g.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var r=n(7294);const i={},t=r.createContext(i);function o(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a46b0ecc.64e8d62a.js b/assets/js/a46b0ecc.64e8d62a.js deleted file mode 100644 index f2bcd59..0000000 --- a/assets/js/a46b0ecc.64e8d62a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4230],{8673:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Multistaking/index",title:"Multistaking",description:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/64eb7e84-ab20-454d-953f-57b1cf457790",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Multistaking",sidebar_position:0,slug:"/64eb7e84-ab20-454d-953f-57b1cf457790"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9"},next:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"}},u={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA's consensus model expands upon Tendermint. It ensures equal block proposal opportunities through a governance-permissioned system. Additionally, its MBPoS system promotes staking of assorted digital assets and advances a native liquid staking feature, offering the ease of staking and trading via derivative tokens for added liquidity."}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:(0,a.jsx)(t.code,{children:"x/staking"})}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/staking",children:" "}),(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/multistaking",children:(0,a.jsx)(t.code,{children:"x/multistaking"})})]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=p({queryString:n,groupId:r}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),g=(()=>{const e=l??m;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{g&&u(g)}),[g]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,s]),tabValues:s}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5498f08.b0d8c498.js b/assets/js/a5498f08.b0d8c498.js deleted file mode 100644 index 9497252..0000000 --- a/assets/js/a5498f08.b0d8c498.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7301],{9461:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},i=void 0,s={id:"Stack/INTERX--Middleware/index",title:"INTERX | Middleware",description:"Interx",source:"@site/tabs/docs/Stack/INTERX--Middleware/index.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/be25ed12-b476-4a07-8966-9bc4062bd746",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},sidebar:"defaultSidebar",previous:{title:"Network Parameter Handling",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},next:{title:"System Requirements",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"}},l={},u=[{value:"Interx",id:"26bed6b827324d9ca7b619252a42cb56",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"26bed6b827324d9ca7b619252a42cb56",children:"Interx"}),"\n",(0,r.jsxs)(t.p,{children:['INTERX - "Interchain NginX", is a decentralized API and Content Availability Layer that enables access to the state of blockchain applications and L2 without relying on any third-party service providers. Decentralized middleware makes it easier to build frontend applications and eliminates the need for difficult-to-maintain light clients. Its main functions are distributed applications proxy, load balancer, replicated storage, and security gateway service for communication between the backend and front end. INTERX requires access to both the GRPC and the Tendermint RPC endpoint (',(0,r.jsx)(t.a,{href:"https://docs.tendermint.com/master/rpc/",children:(0,r.jsx)(t.code,{children:"Tendermint RPC"})}),") of SEKAI node."]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a577e181.5cd351ab.js b/assets/js/a577e181.5cd351ab.js deleted file mode 100644 index 6a11d76..0000000 --- a/assets/js/a577e181.5cd351ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3124],{2194:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/index",title:"Token Basketing",description:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Token-Basketing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},sidebar:"defaultSidebar",previous:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},next:{title:"Token Basketing Module",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"}},u={},l=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/basket",children:(0,a.jsx)(t.code,{children:"x/basket"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:n,groupId:r}),[b,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),k=(()=>{const e=l??b;return h({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{k&&u(k)}),[k]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",k.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",k.tabList),children:[(0,g.jsx)(v,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5d67342.730d25af.js b/assets/js/a5d67342.730d25af.js deleted file mode 100644 index d960755..0000000 --- a/assets/js/a5d67342.730d25af.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7716],{1942:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var a=n(5893),s=n(1151),r=n(4866),i=n(5162);const o={title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},l=void 0,c={id:"Tools/Bash-utils",title:"Bash-utils",description:"https://github.com/KiraCore/tools/releases",source:"@site/tabs/Docs/Tools/Bash-utils.mdx",sourceDirName:"Tools",slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},sidebar:"defaultSidebar",previous:{title:"Wallet",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},next:{title:"Cosign",permalink:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"}},u={},d=[{value:"Linux",id:"437350f2feaf480b8319b68a2666e5dc",level:2},{value:"Macos",id:"fd030ddb84a245fda72e29dc7ddec525",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),"\n",(0,a.jsx)(t.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),"\n",(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["The prerequisite to securely install BU is ",(0,a.jsx)(t.a,{href:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Always source /etc/profile with ",(0,a.jsx)(t.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(t.h2,{id:"437350f2feaf480b8319b68a2666e5dc",children:"Linux"}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})})]}),(0,a.jsxs)(i.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(t.h2,{id:"fd030ddb84a245fda72e29dc7ddec525",children:"Macos"}),(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms. If you wish to contribute in addressing these compatibility issues, contact us !"})}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7294),s=n(6905),r=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(s.location.search);t.set(r,e),s.replace({...s.location,search:t.toString()})}),[r,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,r=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=b({queryString:n,groupId:s}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,r]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:s}),g=(()=>{const e=c??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,r]),tabValues:r}}var m=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=o[n].value;s!==a&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,s.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function E(e){let{lazy:t,children:n,selectedValue:s}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function x(e){const t=p(e);return(0,v.jsxs)("div",{className:(0,s.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(I,{...e,...t}),(0,v.jsx)(E,{...e,...t})]})}function _(e){const t=(0,m.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const s={},r=a.createContext(s);function i(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5d67342.c5430eae.js b/assets/js/a5d67342.c5430eae.js new file mode 100644 index 0000000..4512eb3 --- /dev/null +++ b/assets/js/a5d67342.c5430eae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7716],{1942:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var a=n(5893),s=n(1151),r=n(4866),i=n(5162);const o={title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},l=void 0,c={id:"Tools/Bash-utils",title:"Bash-utils",description:"https://github.com/KiraCore/tools/releases",source:"@site/tabs/Docs/Tools/Bash-utils.mdx",sourceDirName:"Tools",slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",permalink:"/docs.kira.network/docs/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Bash-utils",sidebar_position:0,slug:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"},sidebar:"defaultSidebar",previous:{title:"Wallet",permalink:"/docs.kira.network/docs/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},next:{title:"Cosign",permalink:"/docs.kira.network/docs/a2a22565-f7fd-46ca-9c91-d60101c3b2c7"}},u={},d=[{value:"Linux",id:"437350f2feaf480b8319b68a2666e5dc",level:2},{value:"Macos",id:"fd030ddb84a245fda72e29dc7ddec525",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/tools/releases",children:"https://github.com/KiraCore/tools/releases"})}),"\n",(0,a.jsx)(t.p,{children:"Bash-utils is a collection of utility functions and aliases for Bash shell scripts developed specifically for KIRA to streamline and simplify the process of executing tasks within the network. It provides various functions for managing environment variables, displaying information, and handling errors."}),"\n",(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["The prerequisite to securely install BU is ",(0,a.jsx)(t.a,{href:"/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",children:"COSIGN tool"})," that will guarantee the integrity of the files. It MUST be installed and KIRA\u2019s public key added before proceeding."]})}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Always source /etc/profile with ",(0,a.jsx)(t.code,{children:". /etc/profile"})," when starting a new terminal to use BU."]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"linux",label:"Linux",children:[(0,a.jsx)(t.h2,{id:"437350f2feaf480b8319b68a2666e5dc",children:"Linux"}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'# assume root permissions\nsudo -s && . /etc/profile\n\n# Install essential dependencies\napt-get install -y wget\n\n# Define version of BU you want to install\nTOOLS_VERSION="v0.3.46"\n\n# Download BU script\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\ncd /tmp && FILE_NAME="bash-utils.sh" && rm -rfv ./$FILE_NAME ./${FILE_NAME}.sig && \\\n UBUNTU_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\n wget --user-agent="$UBUNTU_AGENT" "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig\n\n# Verify cosign release\ncosign verify-blob --key "$KIRA_COSIGN_PUB" --signature "/tmp/${FILE_NAME}.sig" "/tmp/$FILE_NAME" --insecure-ignore-tlog --insecure-ignore-sct\n\n# Install BU\nchmod +x ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup && ./etc/profile\n\n# Verify version of BU \nbu bashUtilsVersion\n'})})]}),(0,a.jsxs)(i.Z,{value:"macos",label:"MacOS",children:[(0,a.jsx)(t.h2,{id:"fd030ddb84a245fda72e29dc7ddec525",children:"Macos"}),(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"Unfortunately, certain commands within the bash-utils tool may not behave properly on macOS due to slight variations in command behavior, such as the 'sed' command, which exhibit differences between Mac and Linux platforms. If you wish to contribute in addressing these compatibility issues, contact us !"})}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'sudo -s && . /etc/profile\n\nTOOLS_VERSION="v0.3.46" && FILE_NAME="bash-utils.sh" && \\\nif [ -z "$KIRA_COSIGN_PUB" ] ; then\n echo "ERROR: KIRA_COSIGN_PUB variable is not set. Please refer to cosign installation to add KIRA\'s public key path as variable."\n exit\nfi && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}" -O ./$FILE_NAME && \\\nwget "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${FILE_NAME}.sig" -O ./${FILE_NAME}.sig && \\\ncosign verify-blob --key="$KIRA_COSIGN_PUB" --signature=./${FILE_NAME}.sig ./$FILE_NAME && \\\nchmod -v 555 ./$FILE_NAME && ./$FILE_NAME bashUtilsSetup "/var/kiraglob" && . /etc/profile && \\\necho "Installed bash-utils $(bash-utils bashUtilsVersion)"\n'})})]})]})]})}function f(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var r=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7294),s=n(6905),r=n(2466),i=n(6550),o=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,a.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(s.location.search);t.set(r,e),s.replace({...s.location,search:t.toString()})}),[r,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,r=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[c,d]=b({queryString:n,groupId:s}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,r]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:s}),g=(()=>{const e=c??p;return f({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,r]),tabValues:r}}var m=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=o[n].value;s!==a&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...r,className:(0,s.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function E(e){let{lazy:t,children:n,selectedValue:s}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function x(e){const t=p(e);return(0,v.jsxs)("div",{className:(0,s.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(I,{...e,...t}),(0,v.jsx)(E,{...e,...t})]})}function _(e){const t=(0,m.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const s={},r=a.createContext(s);function i(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6339593.5b3d0521.js b/assets/js/a6339593.5b3d0521.js new file mode 100644 index 0000000..2676d5d --- /dev/null +++ b/assets/js/a6339593.5b3d0521.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4071],{5288:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var i=s(5893),r=s(1151),a=s(4866),t=s(5162);const c={title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts",title:"Keys & accounts",description:"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/BaseApp",slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7",permalink:"/docs.kira.network/docs/31613d97-abfb-4911-b17a-0c83cdba58a7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},sidebar:"defaultSidebar",previous:{title:"Evidence module",permalink:"/docs.kira.network/docs/bd4cce67-2cee-4d9f-9b81-e5643d130438"},next:{title:"Bank",permalink:"/docs.kira.network/docs/04e8b755-d259-40f9-b66c-ddf5223c66fa"}},l={},h=[{value:"Keyring",id:"8a741e374186404b85f2d68fc0e2a672",level:3},{value:"Cli Syntax & Examples",id:"44798a61b8f749ae87a9a72c100ad055",level:2},{value:"Transactions",id:"67708b3e7e8f472b95c3ed04ad88e90c",level:2},{value:"Creating an Account",id:"b0376794dcd34d20be7c2fdbce645294",level:4},{value:"Deleting an Account",id:"c5ce2ab22e8442daad9098283b8e8f46",level:4},{value:"Recovering an Account Using Mnemonic",id:"6f2516dff83e4005835ca6da620fbc50",level:4},{value:"Queries",id:"0e3940d917c543f9bb11928e2b016cd5",level:2},{value:"Retrieve Key Information by Name or Address",id:"adb811fab06c477abbaf56c4b3cc21a6",level:4},{value:"Governance",id:"3bee0a67d26f4c2999ed12de1540a07f",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["An account in the Cosmos SDK, consists of a pair of a public key ",(0,i.jsx)(n.code,{children:"PubKey"})," and a private key ",(0,i.jsx)(n.code,{children:"PrivKey"}),". The ",(0,i.jsx)(n.code,{children:"PubKey"})," can be used to generate various ",(0,i.jsx)(n.code,{children:"Addresses"}),", which identify users and other parties in the application and are associated with messages to identify the sender. The ",(0,i.jsx)(n.code,{children:"PrivKey"})," is used to generate digital signatures to prove that an ",(0,i.jsx)(n.code,{children:"Address"})," associated with the ",(0,i.jsx)(n.code,{children:"PrivKey"})," has approved a specific message."]}),"\n",(0,i.jsxs)(n.p,{children:['KIRA accounts only exist on the blockchain if they have a non-zero balance. This is a feature of the Cosmos SDK that helps prevent the creation of "spam" accounts that do not hold any value. All KIRA addresses are 44 characters long and are ',(0,i.jsx)(n.a,{href:"https://en.bitcoin.it/wiki/Bech32",children:"Bech32"})," encoded with a ",(0,i.jsx)(n.code,{children:"kira"})," prefix (e.g. ",(0,i.jsx)(n.code,{children:"kira1d52rts8wf508uy2sdcx4a0qxjzvqr3dsnesm4w"}),"). These accounts are derived from ",(0,i.jsx)(n.a,{href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"BIP39 mnemonic words"}),", which must be kept safe by the account holder at all times. Losing access to the mnemonic or revealing its contents will result in permanent and irrecoverable loss of funds."]}),"\n",(0,i.jsx)(n.p,{children:"KIRA network defines 3 types of addresses that specify a context where an account is used:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"AccAddress"}),"\xa0identifies users (the sender of a\xa0",(0,i.jsx)(n.code,{children:"message"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ValAddress"}),"\xa0identifies consensus node operators (a.k.a validators)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ConsAddress"}),"\xa0identifies consensus nodes that are participating in consensus. Consensus nodes are derived using the\xa0",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"ed25519"})}),"\xa0curve."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"8a741e374186404b85f2d68fc0e2a672",children:"Keyring"}),"\n",(0,i.jsxs)(n.p,{children:["Like in every Cosmos-based network, Private/Public keys are stored and managed by using an object called a\xa0",(0,i.jsx)(n.a,{href:"https://docs.cosmos.network/v0.47/basics/accounts#keyring",children:(0,i.jsx)(n.code,{children:"Keyring"})})," which default implementation comes from the third-party\xa0",(0,i.jsx)(n.a,{href:"https://github.com/99designs/keyring",children:"99designs/keyring"}),'\xa0library. The private key can be stored in different "backends", such as a file or the operating system\'s own key storage system. The keyring allows users to manage their keys in a secure and convenient way, and can be integrated with various backend storage options to suit the needs of the user. These backends can be specified in the CLI using the ',(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag (cf. )."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"os"})," backend: This backend relies on operating system-specific defaults to handle key storage securely. It is the default option and is designed to meet users' most common needs and provide a comfortable experience without compromising on security."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"file"})," backend: This backend stores the keyring encrypted within the app's configuration directory. It requires a password each time it is accessed, which may result in multiple prompts."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"pass"})," backend: This backend uses the pass utility to manage on-disk encryption of keys' sensitive data and metadata. Keys are stored inside gpg encrypted files within app-specific directories."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"kwallet"})," backend: This backend uses KDE Wallet Manager, which comes installed by default on the GNU/Linux distributions that ships KDE as default desktop environment."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"test"})," backend: This backend is a password-less variation of the file backend and is provided for testing purposes only. It stores keys unencrypted on disk and is not recommended for use in production environments."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"memory"})," backend: This backend stores keys in memory, which are immediately deleted after the program has exited. It is provided for testing purposes only and is not recommended for use in production environments."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"44798a61b8f749ae87a9a72c100ad055",children:"Cli Syntax & Examples"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,i.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,i.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,i.jsx)(n.em,{children:"documentation for more details."})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$SIGNER"})})," ",(0,i.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,i.jsx)(n.em,{children:"and"})," ",(0,i.jsxs)(n.em,{children:[(0,i.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,i.jsx)(n.em,{children:"section"})]})}),"\n",(0,i.jsxs)(a.Z,{children:[(0,i.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,i.jsx)(n.h2,{id:"67708b3e7e8f472b95c3ed04ad88e90c",children:"Transactions"}),(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys add"})}),(0,i.jsx)(n.th,{children:"Add or recover an encrypted private key."})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys delete"})}),(0,i.jsx)(n.td,{children:"Delete a key from the keyring."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys recover"})}),(0,i.jsx)(n.td,{children:"Recover a key using a mnemonic."})]})]})]}),(0,i.jsx)(n.h4,{id:"b0376794dcd34d20be7c2fdbce645294",children:"Creating an Account"}),(0,i.jsxs)(n.p,{children:["To create a new key in the keyring, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand and provide the desired account key name as an argument. You can also specify the keyring backend to use by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. This is important as it determines where the private/public keypair will be stored and how it will be managed. A ",(0,i.jsx)(n.code,{children:"--multisig"}),"\xa0flag can also be provided to group multiple keys together to create a multisig key."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIG"}),": List of key names for constructing a legacy multisig key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for multisig."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOSORT"}),": Keys are taken in the order supplied if true."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Saves key info to file from a JSON format public key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INTERACTIVE"}),": Interactively prompt for BIP39 passphrase and mnemonic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$USELEDGER"}),": Store a reference to a private key on a Ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$RECOVER"}),": Recover an existing key using a seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOBACKUP"}),": Don't print out the seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DRYRUN"}),": Perform action without adding key to local keystore."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$HDPATH"}),": Manual HD Path derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$COINTYPE"}),": Coin type number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT"}),": Account number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INDEX"}),": Address index number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$KEYALGORITHM"}),": Key signing algorithm for generating keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_NAME"}),": The account key name."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys add $ACCOUNT_NAME $FLAGS_TX\n"})}),(0,i.jsx)(n.h4,{id:"c5ce2ab22e8442daad9098283b8e8f46",children:"Deleting an Account"}),(0,i.jsxs)(n.p,{children:["To delete a key from the keyring, use the ",(0,i.jsx)(n.code,{children:"delete"})," subcommand and provide the desired account key address as an argument and specify the keyring backend to delete from by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. ",(0,i.jsx)(n.code,{children:"--force"})," flag can be specified to skip passphrase check and force key deletion unconditionally."]}),(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Removing offline or ledger keys will remove only the public key references stored locally, i.e. private keys stored in a ledger device cannot be deleted with the CLI."})}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$YES"}),": Skip confirmation prompt when deleting keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$FORCE"}),": Remove the key unconditionally without asking for the passphrase."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys delete $ACCOUNT_NAME $FLAGS_TX --force --yes\n"})}),(0,i.jsx)(n.h4,{id:"6f2516dff83e4005835ca6da620fbc50",children:"Recovering an Account Using Mnemonic"}),(0,i.jsxs)(n.p,{children:["To recover an account using its respective mnemonic, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand with the ",(0,i.jsx)(n.code,{children:"\u2014recover"})," flag and provide the desired account key name as an argument."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Args"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_MNEMONIC"}),": The account\u2019s mnemonic."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'yes "$ACCOUNT_MNEMONIC" | sekaid keys add $ACCOUNT_NAME $FLAGS_TX --recover\n'})})]}),(0,i.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,i.jsx)(n.h2,{id:"0e3940d917c543f9bb11928e2b016cd5",children:"Queries"}),(0,i.jsx)(n.table,{children:(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys show"})}),(0,i.jsx)(n.th,{children:"Display key details by name or address."})]})})}),(0,i.jsx)(n.h4,{id:"adb811fab06c477abbaf56c4b3cc21a6",children:"Retrieve Key Information by Name or Address"}),(0,i.jsxs)(n.p,{children:["To display key details, use the ",(0,i.jsx)(n.code,{children:"show"}),' subcommand and provide the account key name or address. This command can handle multiple names or addresses, creating an ephemeral multisig key named "multi" with the keys provided and the specified multisig threshold.']}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_KEY"}),": The account key name or address."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$BECHPREFIX"}),": The Bech32 prefix encoding for a key (e.g., acc, val, cons)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ADDRESS"}),": Output the address only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Output the public key only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DEVICE"}),": Output the address in a ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for a multisig key."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid keys show $ACCOUNT_KEY $FLAGS_QR | jq\n"})})]}),(0,i.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,i.jsx)(n.h2,{id:"3bee0a67d26f4c2999ed12de1540a07f",children:"Governance"}),(0,i.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>t});s(7294);var i=s(6905);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function t(e){let{children:n,hidden:s,className:t}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,t),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var i=s(7294),r=s(6905),a=s(2466),t=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:i,default:r}}=e;return{value:n,label:s,attributes:i,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:s}=e;const r=(0,t.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,i.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[t,d]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=s.find((e=>e.default))??s[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:a}))),[o,h]=m({queryString:s,groupId:r}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(s);return[r,(0,i.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),x=(()=>{const e=o??b;return p({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:t,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function y(e){let{className:n,block:s,selectedValue:i,selectValue:t,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==i&&(o(n),t(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",x.tabItem,a?.className,{"tabs__item--active":i===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:r}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(y,{...e,...n}),(0,j.jsx)(g,{...e,...n})]})}function k(e){const n=(0,f.Z)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>t});var i=s(7294);const r={},a=i.createContext(r);function t(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6339593.830f9a2f.js b/assets/js/a6339593.830f9a2f.js deleted file mode 100644 index 7726e91..0000000 --- a/assets/js/a6339593.830f9a2f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4071],{5288:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var i=s(5893),r=s(1151),a=s(4866),t=s(5162);const c={title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts",title:"Keys & accounts",description:"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/BaseApp",slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},sidebar:"defaultSidebar",previous:{title:"Evidence module",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438"},next:{title:"Bank",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa"}},l={},h=[{value:"Keyring",id:"8a741e374186404b85f2d68fc0e2a672",level:3},{value:"Cli syntax & examples",id:"44798a61b8f749ae87a9a72c100ad055",level:2},{value:"Transactions",id:"67708b3e7e8f472b95c3ed04ad88e90c",level:2},{value:"Creating an account",id:"b0376794dcd34d20be7c2fdbce645294",level:4},{value:"Deleting an account",id:"c5ce2ab22e8442daad9098283b8e8f46",level:4},{value:"Recovering an account using mnemonic",id:"6f2516dff83e4005835ca6da620fbc50",level:4},{value:"Queries",id:"0e3940d917c543f9bb11928e2b016cd5",level:2},{value:"Retrieve key information by name or address",id:"adb811fab06c477abbaf56c4b3cc21a6",level:4},{value:"Governance",id:"3bee0a67d26f4c2999ed12de1540a07f",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["An account in the Cosmos SDK, consists of a pair of a public key ",(0,i.jsx)(n.code,{children:"PubKey"})," and a private key ",(0,i.jsx)(n.code,{children:"PrivKey"}),". The ",(0,i.jsx)(n.code,{children:"PubKey"})," can be used to generate various ",(0,i.jsx)(n.code,{children:"Addresses"}),", which identify users and other parties in the application and are associated with messages to identify the sender. The ",(0,i.jsx)(n.code,{children:"PrivKey"})," is used to generate digital signatures to prove that an ",(0,i.jsx)(n.code,{children:"Address"})," associated with the ",(0,i.jsx)(n.code,{children:"PrivKey"})," has approved a specific message."]}),"\n",(0,i.jsxs)(n.p,{children:['KIRA accounts only exist on the blockchain if they have a non-zero balance. This is a feature of the Cosmos SDK that helps prevent the creation of "spam" accounts that do not hold any value. All KIRA addresses are 44 characters long and are ',(0,i.jsx)(n.a,{href:"https://en.bitcoin.it/wiki/Bech32",children:"Bech32"})," encoded with a ",(0,i.jsx)(n.code,{children:"kira"})," prefix (e.g. ",(0,i.jsx)(n.code,{children:"kira1d52rts8wf508uy2sdcx4a0qxjzvqr3dsnesm4w"}),"). These accounts are derived from ",(0,i.jsx)(n.a,{href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"BIP39 mnemonic words"}),", which must be kept safe by the account holder at all times. Losing access to the mnemonic or revealing its contents will result in permanent and irrecoverable loss of funds."]}),"\n",(0,i.jsx)(n.p,{children:"KIRA network defines 3 types of addresses that specify a context where an account is used:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"AccAddress"}),"\xa0identifies users (the sender of a\xa0",(0,i.jsx)(n.code,{children:"message"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ValAddress"}),"\xa0identifies consensus node operators (a.k.a validators)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ConsAddress"}),"\xa0identifies consensus nodes that are participating in consensus. Consensus nodes are derived using the\xa0",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"ed25519"})}),"\xa0curve."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"8a741e374186404b85f2d68fc0e2a672",children:"Keyring"}),"\n",(0,i.jsxs)(n.p,{children:["Like in every Cosmos-based network, Private/Public keys are stored and managed by using an object called a\xa0",(0,i.jsx)(n.a,{href:"https://docs.cosmos.network/v0.47/basics/accounts#keyring",children:(0,i.jsx)(n.code,{children:"Keyring"})})," which default implementation comes from the third-party\xa0",(0,i.jsx)(n.a,{href:"https://github.com/99designs/keyring",children:"99designs/keyring"}),'\xa0library. The private key can be stored in different "backends", such as a file or the operating system\'s own key storage system. The keyring allows users to manage their keys in a secure and convenient way, and can be integrated with various backend storage options to suit the needs of the user. These backends can be specified in the CLI using the ',(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag (cf. )."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"os"})," backend: This backend relies on operating system-specific defaults to handle key storage securely. It is the default option and is designed to meet users' most common needs and provide a comfortable experience without compromising on security."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"file"})," backend: This backend stores the keyring encrypted within the app's configuration directory. It requires a password each time it is accessed, which may result in multiple prompts."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"pass"})," backend: This backend uses the pass utility to manage on-disk encryption of keys' sensitive data and metadata. Keys are stored inside gpg encrypted files within app-specific directories."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"kwallet"})," backend: This backend uses KDE Wallet Manager, which comes installed by default on the GNU/Linux distributions that ships KDE as default desktop environment."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"test"})," backend: This backend is a password-less variation of the file backend and is provided for testing purposes only. It stores keys unencrypted on disk and is not recommended for use in production environments."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"memory"})," backend: This backend stores keys in memory, which are immediately deleted after the program has exited. It is provided for testing purposes only and is not recommended for use in production environments."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"44798a61b8f749ae87a9a72c100ad055",children:"Cli syntax & examples"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,i.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,i.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,i.jsx)(n.em,{children:"documentation for more details."})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$SIGNER"})})," ",(0,i.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,i.jsx)(n.em,{children:"and"})," ",(0,i.jsxs)(n.em,{children:[(0,i.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,i.jsx)(n.em,{children:"section"})]})}),"\n",(0,i.jsxs)(a.Z,{children:[(0,i.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,i.jsx)(n.h2,{id:"67708b3e7e8f472b95c3ed04ad88e90c",children:"Transactions"}),(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys add"})}),(0,i.jsx)(n.th,{children:"Add or recover an encrypted private key."})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys delete"})}),(0,i.jsx)(n.td,{children:"Delete a key from the keyring."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys recover"})}),(0,i.jsx)(n.td,{children:"Recover a key using a mnemonic."})]})]})]}),(0,i.jsx)(n.h4,{id:"b0376794dcd34d20be7c2fdbce645294",children:"Creating an account"}),(0,i.jsxs)(n.p,{children:["To create a new key in the keyring, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand and provide the desired account key name as an argument. You can also specify the keyring backend to use by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. This is important as it determines where the private/public keypair will be stored and how it will be managed. A ",(0,i.jsx)(n.code,{children:"--multisig"}),"\xa0flag can also be provided to group multiple keys together to create a multisig key."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIG"}),": List of key names for constructing a legacy multisig key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for multisig."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOSORT"}),": Keys are taken in the order supplied if true."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Saves key info to file from a JSON format public key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INTERACTIVE"}),": Interactively prompt for BIP39 passphrase and mnemonic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$USELEDGER"}),": Store a reference to a private key on a Ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$RECOVER"}),": Recover an existing key using a seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOBACKUP"}),": Don't print out the seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DRYRUN"}),": Perform action without adding key to local keystore."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$HDPATH"}),": Manual HD Path derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$COINTYPE"}),": Coin type number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT"}),": Account number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INDEX"}),": Address index number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$KEYALGORITHM"}),": Key signing algorithm for generating keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_NAME"}),": The account key name."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys add $ACCOUNT_NAME $FLAGS_TX\n"})}),(0,i.jsx)(n.h4,{id:"c5ce2ab22e8442daad9098283b8e8f46",children:"Deleting an account"}),(0,i.jsxs)(n.p,{children:["To delete a key from the keyring, use the ",(0,i.jsx)(n.code,{children:"delete"})," subcommand and provide the desired account key address as an argument and specify the keyring backend to delete from by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. ",(0,i.jsx)(n.code,{children:"--force"})," flag can be specified to skip passphrase check and force key deletion unconditionally."]}),(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Removing offline or ledger keys will remove only the public key references stored locally, i.e. private keys stored in a ledger device cannot be deleted with the CLI."})}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$YES"}),": Skip confirmation prompt when deleting keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$FORCE"}),": Remove the key unconditionally without asking for the passphrase."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys delete $ACCOUNT_NAME $FLAGS_TX --force --yes\n"})}),(0,i.jsx)(n.h4,{id:"6f2516dff83e4005835ca6da620fbc50",children:"Recovering an account using mnemonic"}),(0,i.jsxs)(n.p,{children:["To recover an account using its respective mnemonic, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand with the ",(0,i.jsx)(n.code,{children:"\u2014recover"})," flag and provide the desired account key name as an argument."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Args"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_MNEMONIC"}),": The account\u2019s mnemonic."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'yes "$ACCOUNT_MNEMONIC" | sekaid keys add $ACCOUNT_NAME $FLAGS_TX --recover\n'})})]}),(0,i.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,i.jsx)(n.h2,{id:"0e3940d917c543f9bb11928e2b016cd5",children:"Queries"}),(0,i.jsx)(n.table,{children:(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys show"})}),(0,i.jsx)(n.th,{children:"Display key details by name or address."})]})})}),(0,i.jsx)(n.h4,{id:"adb811fab06c477abbaf56c4b3cc21a6",children:"Retrieve key information by name or address"}),(0,i.jsxs)(n.p,{children:["To display key details, use the ",(0,i.jsx)(n.code,{children:"show"}),' subcommand and provide the account key name or address. This command can handle multiple names or addresses, creating an ephemeral multisig key named "multi" with the keys provided and the specified multisig threshold.']}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_KEY"}),": The account key name or address."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$BECHPREFIX"}),": The Bech32 prefix encoding for a key (e.g., acc, val, cons)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ADDRESS"}),": Output the address only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Output the public key only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DEVICE"}),": Output the address in a ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for a multisig key."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid keys show $ACCOUNT_KEY $FLAGS_QR | jq\n"})})]}),(0,i.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,i.jsx)(n.h2,{id:"3bee0a67d26f4c2999ed12de1540a07f",children:"Governance"}),(0,i.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>t});s(7294);var i=s(6905);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function t(e){let{children:n,hidden:s,className:t}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,t),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var i=s(7294),r=s(6905),a=s(2466),t=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:i,default:r}}=e;return{value:n,label:s,attributes:i,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:s}=e;const r=(0,t.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,i.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[t,d]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=s.find((e=>e.default))??s[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:a}))),[o,h]=m({queryString:s,groupId:r}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(s);return[r,(0,i.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),x=(()=>{const e=o??b;return p({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:t,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function y(e){let{className:n,block:s,selectedValue:i,selectValue:t,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==i&&(o(n),t(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",x.tabItem,a?.className,{"tabs__item--active":i===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:r}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(y,{...e,...n}),(0,j.jsx)(g,{...e,...n})]})}function k(e){const n=(0,f.Z)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>t});var i=s(7294);const r={},a=i.createContext(r);function t(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a91ecbd6.a0b84f97.js b/assets/js/a91ecbd6.a0b84f97.js deleted file mode 100644 index 78ba0a2..0000000 --- a/assets/js/a91ecbd6.a0b84f97.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1181],{4705:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=a(5893),l=a(1151),i=a(4866),t=a(5162);const r={title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},m=void 0,c={id:"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution",title:"Fees and staking rewards distribution",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},sidebar:"defaultSidebar",previous:{title:"Distributor",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},next:{title:"Custody",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00"}},h={},d=[{value:"Concept",id:"ebfe9bca3b1a41f9a99263de7a6859d0",level:3},{value:"Network inflation & dynamic adjustments",id:"7af658e285c24b3db1f55295cf4aa3da",level:3},{value:"Inflation equation",id:"a277515bae6a470ead9f4c3449637a5e",level:4},{value:"Inflation and fees distribution mechanisms",id:"4426f62703204963a8cd5d882b829fe2",level:3},{value:"Consensus nodes rewards",id:"efacc54986a74017bc7122e407a8022e",level:4},{value:"Delegators rewards",id:"a962a05151634f10a212361112abccec",level:4},{value:"Parameters",id:"7c2e2b6063ab4eeab948bfa912382577",level:2},{value:"Cli syntax & examples",id:"0a27e950c1bf4bd693101d9dd2a30b6d",level:2},{value:"Transactions",id:"619d389fbbc74cccb1a3989aa0e84431",level:2},{value:"Queries",id:"d40fd29982094b8f90a363cc2c22c314",level:2},{value:"Validator performance",id:"d0ead7ce0a154e1d915ef6e9dc2317c2",level:4},{value:"Treasury",id:"d03e0ebaef66469aa062d0c2c496cc46",level:4},{value:"Performance snapshot period",id:"1a33e1fe4f854f179fa8c0c9a6506d67",level:4},{value:"Governance",id:"f4c3d227c8254e8bb227b30563d52072",level:2}];function x(s){const e={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",menclose:"menclose",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",msubsup:"msubsup",mtext:"mtext",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h3,{id:"ebfe9bca3b1a41f9a99263de7a6859d0",children:"Concept"}),"\n",(0,n.jsx)(e.p,{children:"Committee-based blockchains are among the most popular alternatives to proof-of-work based blockchains, such as Bitcoin. These blockchains use a committee, a.k.a consensus nodes set or \u201cvalidator\u201d set, that executes Byzantine fault tolerant distributed consensus to determine the next block to add to the blockchain. Unlike Bitcoin, where one creator produce a block based on probabilities, in a committee-based blockchain blocks are cooperatively created. As such, properly designing the consensus rewarding schemes is crucial to incentivize consensus nodes in achieving consensus while preventing centralization forces from arising, such as those stemming from miner extractable value (MEV) leakage."}),"\n",(0,n.jsx)(e.p,{children:"By designing the consensus rewarding schemes effectively, committee-based blockchains can achieve a balance between decentralization and incentivization."}),"\n",(0,n.jsx)(e.h3,{id:"7af658e285c24b3db1f55295cf4aa3da",children:"Network inflation & dynamic adjustments"}),"\n",(0,n.jsxs)(e.p,{children:["KEX, the native asset of the KIRA network, undergoes controlled inflation as a strategy to stimulate activity and engagement. Its inflation parameters are defined by network governance, which, in tandem with the ",(0,n.jsx)(e.strong,{children:"[Problem Internal Link]"}),", orchestrates a harmony of incentives that align with the broader strategic vision of the network. The central ambition here is not just about maintaining KEX's economic value, but also ensuring the very security fabric of the network through stakeholder retention and active transactions."]}),"\n",(0,n.jsxs)(e.p,{children:["Here's a detailed look at the relevant ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),":"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_rate"}),": Specifies the KEX inflation percentage.","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"18"})]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"0"})," (Minimum) to ",(0,n.jsx)(e.code,{children:"50"})," (Maximum)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_period"}),": Denotes the time duration in seconds over which the current KEX supply is inflated based on the ",(0,n.jsx)(e.code,{children:"inflation_rate"}),".","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"31557600"})," (equates to 1 year)"]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"2629800"})," (roughly a month) to ",(0,n.jsx)(e.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"max_annual_inflation"}),": This sets a ceiling on the yearly percentage growth of the KEX total supply from the original genesis time."]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation is calculated on a per-block basis and adjusts dynamically through periodic snapshots of the KEX supply taken at the start of each ",(0,n.jsx)(e.code,{children:"inflation_period"}),". This mechanism guarantees precise reward allocations and compliance with the set ",(0,n.jsx)(e.code,{children:"max_annual_inflation"})," cap. It accounts for potential inflationary variations that could emerge from diverse sources like the UBI module or the L2 burning mechanisms. In this context, the network proactively assesses for any projected cap breaches and modulates minting from these sources, ensuring the network's stability is always maintained."]}),"\n",(0,n.jsx)(e.h4,{id:"a277515bae6a470ead9f4c3449637a5e",children:"Inflation equation"}),"\n",(0,n.jsx)(e.p,{children:"Given:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"t"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{start}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = KEX token supply at the start of the ",(0,n.jsx)(e.code,{children:"inflation_period"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," = ",(0,n.jsx)(e.code,{children:"inflation_rate"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"k"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_{block}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"oc"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = Time for a single block"]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation for each block is computed as:\n",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"Inflation\xa0for\xa0block"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mtext,{children:"start"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mi,{children:"R"})]}),(0,n.jsx)(e.mtext,{children:"inflation_period"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mtext,{children:"block"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{\\text{Inflation for block} = \\dfrac{S_{\\text{start}} \\times R}{\\text{inflation\\_period}} \\times T_{\\text{block}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0363em",verticalAlign:"-1.336em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0363em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"Inflation\xa0for\xa0block"})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"inflation_period"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"start"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"block"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0363em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.336em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsxs)(e.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,n.jsx)(e.code,{children:"inflation_rate"})," of 15%, and an ",(0,n.jsx)(e.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"3600"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mn,{children:"300500000"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"0.15"})]}),(0,n.jsx)(e.mn,{children:"31557600"})]})}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"3600"}),(0,n.jsx)(e.mo,{children:"\u2248"}),(0,n.jsx)(e.mn,{children:"5142"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord",children:"31557600"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord",children:"300500000"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"0.15"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"\u2248"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,n.jsx)(e.h3,{id:"4426f62703204963a8cd5d882b829fe2",children:"Inflation and fees distribution mechanisms"}),"\n",(0,n.jsx)(e.p,{children:"This section explores how block and fee rewards are calculated for each participant: Consensus nodes and Delegators. Both play distinct roles in maintaining and securing the KIRA network, and their reward mechanisms are underpinned by specific parameters that measure their contributions and engagement. For Consensus nodes, it is the performance parameter that evaluates their consistency and efficiency in the network's consensus. In contrast, for Delegators, it's about the magnitude of their stake, representing their vested interest and commitment to the network. These foundational parameters ensure that rewards are allocated fairly, recognizing genuine efforts and investments in the network's growth and stability."}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:["Rewards are allocated to the proposer and its associated staking pools ",(0,n.jsx)("u",{children:(0,n.jsx)(e.strong,{children:"at the beginning of the following new block"})}),". Make sure to account for this one-block lag when considering rewards allocation across all roles in the network."]})}),"\n",(0,n.jsx)(e.h4,{id:"efacc54986a74017bc7122e407a8022e",children:"Consensus nodes rewards"}),"\n",(0,n.jsxs)(e.p,{children:["Consensus nodes are not rewarded based on the amount of stake backing them. Instead, they charge a self-defined ",(0,n.jsx)(e.code,{children:"commission"})," rate on block rewards (KEX inflation). They also benefit from up to 50% of fee rewards, which consist of a basket of different tokens used for paying transaction fees, including KEX. This percentage is defined by the ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," set by governance."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"For more information regarding network consensus nodes commissions please refer to the"})," ",(0,n.jsx)(e.em,{children:"module."})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Performance parameter"})}),"\n",(0,n.jsxs)(e.p,{children:["A critical aspect of reward distribution for Consensus nodes is the performance parameter, denoted as ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),". This parameter evaluates a node's participation in the network consensus. Specifically, it measures how often that node has successfully signed blocks over the last ",(0,n.jsx)(e.code,{children:"snapshot-period"}),", which defaults to 1000 blocks. The ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," value is then used to scale its rewards when it poposes a block; if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," is below 100%, the node will only receive a corresponding fraction of the available rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"N"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"d"})]})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{P = \\dfrac{N_{signed}}{S_{period}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0124em",verticalAlign:"-1.3121em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0124em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.9721em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0124em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.3121em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"K"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"})]})})]}),(0,n.jsx)(e.code,{children:"ukex"}),", if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]}),"\u2019s proposer has a ",(0,n.jsx)(e.code,{children:"commission"})," rate ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," and a performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," , it will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"BR_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{BR_{c} = K*R*P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"E.g: assuming a block yielding 100 KEX, if its proposer has a"}),"\xa0",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"commission"})})," ",(0,n.jsx)(e.em,{children:"rate set to 30% and a current"})," ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," ",(0,n.jsx)(e.em,{children:"of 50%, it will only receive 15 KEX and 15 KEX will be transferred to the community treasury. The remaining 70 KEX are split between its delegators and the proposer itself IF it has a self-stake."})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["The amount of fee rewards a block proposer will receive for a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," carrying a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," from its transactions, given a current network property ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," and the proposer's current performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),", is ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with:"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} * VFS * P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h4,{id:"a962a05151634f10a212361112abccec",children:"Delegators rewards"}),"\n",(0,n.jsx)(e.p,{children:"The distribution of remaining rewards incentives to delegators is proportional to their shares, which are calculated in two distinct ways. Delegators' shares regarding block rewards are determined by their global stake (total staked to all consensus nodes), while the shares regarding fee rewards are determined by the stakes they have delegated locally (total staked to the block proposer). This means that consensus nodes with less stake and greater implied risk will offer better returns on investment to delegators than those with more stake and lower implied risk, provided they do not trigger any slashing events. This incentivizes delegators who are in the network solely for profit to gradually shift their preferences to lower-staked consensus nodes that gain a sufficient amount of reputation in order to maximize their revenues. As a result, stakes across consensus nodes will tend to be evenly distributed, preventing the centralization of stakes among a few consensus nodes."}),"\n",(0,n.jsxs)(e.p,{children:["Whitelisted tokens that are eligible for staking, including KEX, are entitled to a limited amount of rewards (block or fee rewards) as determined by governance through their individual parameter ",(0,n.jsx)(e.code,{children:"reward_cap"})," in the ",(0,n.jsx)(e.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"}),". Allocating a defined percentage of rewards to each eligible staking token has the effect of attracting users from other networks. This is because if no one is staking a specific token, its annual percentage yield (APY) is infinite as no one is able to claim the respective share of rewards, which are instead sent to the community treasury. This incentivizes users to stake these tokens in order to receive a share of the rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Delegators shares"})}),"\n",(0,n.jsxs)(e.p,{children:["Understanding the calculation of delegators shares is important due to the system's inherent token diversity. The key takeaway is that a delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is obtained by calculating the distinctive share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," for each of the eligible staking tokens ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"i_{}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8369em",verticalAlign:"-0.1774em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),". This allows to avoid comparing each token nominal value, or any other reference value, which would be an unnecessary overhead. The delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is then calculated by summing each ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," multiplied by the corresponding token's ",(0,n.jsx)(e.code,{children:"reward_cap"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"RC_{i}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8607em",verticalAlign:"-0.1774em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.munderover,{children:[(0,n.jsx)(e.mo,{children:"\u2211"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{S_D = \\sum_{i=1}^{n} S_{D_{i}} * RC_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.6091em",verticalAlign:"-1.6177em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.9914em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.6091em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mop op-limits",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.6514em"},children:[(0,n.jsxs)(e.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"="}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{children:(0,n.jsx)(e.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,n.jsxs)(e.span,{style:{top:"-4.3em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.2777em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.9914em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.6091em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.6177em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.p,{children:"The difference lies in whether the calculation is intended to represent the delegator's global share for block rewards, which is determined by considering all different tokens staked by the delegator in the network, or the local share for fee rewards, which is determined by considering only the tokens staked by the delegator in the current block proposer's staking pool."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"\xa0"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ukex"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K_c*R \\texttt{ ukex}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"\xa0ukex"})})]})]})]})," (",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," being the proposer ",(0,n.jsx)(e.code,{children:"commission"})," rate), a delegator with a local share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Br_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Br_{c} = K*R*S_D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Given a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yielding a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]}),", with ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," the current ",(0,n.jsx)(e.code,{children:"validators_fee_share"}),", a delegator with a global share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will receive ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} *S_D*VFS}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h2,{id:"7c2e2b6063ab4eeab948bfa912382577",children:"Parameters"}),"\n",(0,n.jsx)(e.p,{children:"N/A"}),"\n",(0,n.jsx)(e.h2,{id:"0a27e950c1bf4bd693101d9dd2a30b6d",children:"Cli syntax & examples"}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(e.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(e.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(e.em,{children:"documentation for more details."})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$SIGNER"})})," ",(0,n.jsx)(e.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(e.em,{children:"and"})," ",(0,n.jsxs)(e.em,{children:[(0,n.jsx)(e.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(e.em,{children:"section"})]})}),"\n",(0,n.jsxs)(i.Z,{children:[(0,n.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(e.h2,{id:"619d389fbbc74cccb1a3989aa0e84431",children:"Transactions"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]}),(0,n.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(e.h2,{id:"d40fd29982094b8f90a363cc2c22c314",children:"Queries"}),(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:(0,n.jsx)(e.code,{children:"snapshot-period-performance"})}),(0,n.jsx)(e.th,{children:"Retrieve the current performance of a specific consensus node."})]})}),(0,n.jsxs)(e.tbody,{children:[(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"fees-treasury"})}),(0,n.jsx)(e.td,{children:"Get fees treasury details."})]}),(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"snapshot-period"})}),(0,n.jsx)(e.td,{children:"Retrieve snapshot period performance details."})]})]})]}),(0,n.jsx)(e.h4,{id:"d0ead7ce0a154e1d915ef6e9dc2317c2",children:"Validator performance"}),(0,n.jsxs)(e.p,{children:["Retrieve the current performance of a specific validator using the ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," subcommand followed by the validator\u2019s address."]}),(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Args"})}),(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:(0,n.jsx)(e.code,{children:"$"})}),(0,n.jsx)(e.code,{children:"ADDR"})," Address of the consensus node."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period-performance $ADDR $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"d03e0ebaef66469aa062d0c2c496cc46",children:"Treasury"}),(0,n.jsxs)(e.p,{children:["Fetch the treasury details using the ",(0,n.jsx)(e.code,{children:"fees-treasury"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor fees-treasury $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"1a33e1fe4f854f179fa8c0c9a6506d67",children:"Performance snapshot period"}),(0,n.jsxs)(e.p,{children:["Retrieve the current snapshot period performance details using the ",(0,n.jsx)(e.code,{children:"snapshot-period"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(e.h2,{id:"f4c3d227c8254e8bb227b30563d52072",children:"Governance"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]})]})]})}function p(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(x,{...s})}):x(s)}},5162:(s,e,a)=>{a.d(e,{Z:()=>t});a(7294);var n=a(6905);const l={tabItem:"tabItem_Ymn6"};var i=a(5893);function t(s){let{children:e,hidden:a,className:t}=s;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,t),hidden:a,children:e})}},4866:(s,e,a)=>{a.d(e,{Z:()=>f});var n=a(7294),l=a(6905),i=a(2466),t=a(6550),r=a(469),m=a(1980),c=a(7392),h=a(12);function d(s){return n.Children.toArray(s).filter((s=>"\n"!==s)).map((s=>{if(!s||(0,n.isValidElement)(s)&&function(s){const{props:e}=s;return!!e&&"object"==typeof e&&"value"in e}(s))return s;throw new Error(`Docusaurus error: Bad child <${"string"==typeof s.type?s.type:s.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(s){const{values:e,children:a}=s;return(0,n.useMemo)((()=>{const s=e??function(s){return d(s).map((s=>{let{props:{value:e,label:a,attributes:n,default:l}}=s;return{value:e,label:a,attributes:n,default:l}}))}(a);return function(s){const e=(0,c.l)(s,((s,e)=>s.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((s=>s.value)).join(", ")}" found in . Every value needs to be unique.`)}(s),s}),[e,a])}function p(s){let{value:e,tabValues:a}=s;return a.some((s=>s.value===e))}function o(s){let{queryString:e=!1,groupId:a}=s;const l=(0,t.k6)(),i=function(s){let{queryString:e=!1,groupId:a}=s;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,m._X)(i),(0,n.useCallback)((s=>{if(!i)return;const e=new URLSearchParams(l.location.search);e.set(i,s),l.replace({...l.location,search:e.toString()})}),[i,l])]}function j(s){const{defaultValue:e,queryString:a=!1,groupId:l}=s,i=x(s),[t,m]=(0,n.useState)((()=>function(s){let{defaultValue:e,tabValues:a}=s;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((s=>s.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((s=>s.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[c,d]=o({queryString:a,groupId:l}),[j,g]=function(s){let{groupId:e}=s;const a=function(s){return s?`docusaurus.tab.${s}`:null}(e),[l,i]=(0,h.Nk)(a);return[l,(0,n.useCallback)((s=>{a&&i.set(s)}),[a,i])]}({groupId:l}),N=(()=>{const s=c??j;return p({value:s,tabValues:i})?s:null})();(0,r.Z)((()=>{N&&m(N)}),[N]);return{selectedValue:t,selectValue:(0,n.useCallback)((s=>{if(!p({value:s,tabValues:i}))throw new Error(`Can't select invalid tab value=${s}`);m(s),d(s),g(s)}),[d,g,i]),tabValues:i}}var g=a(2389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var u=a(5893);function y(s){let{className:e,block:a,selectedValue:n,selectValue:t,tabValues:r}=s;const m=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),h=s=>{const e=s.currentTarget,a=m.indexOf(e),l=r[a].value;l!==n&&(c(e),t(l))},d=s=>{let e=null;switch(s.key){case"Enter":h(s);break;case"ArrowRight":{const a=m.indexOf(s.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(s.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return(0,u.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},e),children:r.map((s=>{let{value:e,label:a,attributes:i}=s;return(0,u.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:s=>m.push(s),onKeyDown:d,onClick:h,...i,className:(0,l.Z)("tabs__item",N.tabItem,i?.className,{"tabs__item--active":n===e}),children:a??e},e)}))})}function v(s){let{lazy:e,children:a,selectedValue:l}=s;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const s=i.find((s=>s.props.value===l));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return(0,u.jsx)("div",{className:"margin-top--md",children:i.map(((s,e)=>(0,n.cloneElement)(s,{key:e,hidden:s.props.value!==l})))})}function b(s){const e=j(s);return(0,u.jsxs)("div",{className:(0,l.Z)("tabs-container",N.tabList),children:[(0,u.jsx)(y,{...s,...e}),(0,u.jsx)(v,{...s,...e})]})}function f(s){const e=(0,g.Z)();return(0,u.jsx)(b,{...s,children:d(s.children)},String(e))}},1151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>t});var n=a(7294);const l={},i=n.createContext(l);function t(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:t(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/a91ecbd6.fc36564e.js b/assets/js/a91ecbd6.fc36564e.js new file mode 100644 index 0000000..e417e42 --- /dev/null +++ b/assets/js/a91ecbd6.fc36564e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1181],{4705:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=a(5893),l=a(1151),i=a(4866),t=a(5162);const r={title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},m=void 0,c={id:"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution",title:"Fees and staking rewards distribution",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",permalink:"/docs.kira.network/docs/85d4757d-f36d-4a39-b7ab-62866c1689ba",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fees and staking rewards distribution",sidebar_position:3,slug:"/85d4757d-f36d-4a39-b7ab-62866c1689ba"},sidebar:"defaultSidebar",previous:{title:"Distributor",permalink:"/docs.kira.network/docs/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},next:{title:"Custody",permalink:"/docs.kira.network/docs/0e1ccab2-5425-473e-be93-5b4a87de5d00"}},h={},d=[{value:"Concept",id:"ebfe9bca3b1a41f9a99263de7a6859d0",level:3},{value:"Network Inflation & Dynamic Adjustments",id:"7af658e285c24b3db1f55295cf4aa3da",level:3},{value:"Inflation Equation",id:"a277515bae6a470ead9f4c3449637a5e",level:4},{value:"Inflation and Fees Distribution Mechanisms",id:"4426f62703204963a8cd5d882b829fe2",level:3},{value:"Consensus Nodes Rewards",id:"efacc54986a74017bc7122e407a8022e",level:4},{value:"Delegators Rewards",id:"a962a05151634f10a212361112abccec",level:4},{value:"Parameters",id:"7c2e2b6063ab4eeab948bfa912382577",level:2},{value:"Cli Syntax & Examples",id:"0a27e950c1bf4bd693101d9dd2a30b6d",level:2},{value:"Transactions",id:"619d389fbbc74cccb1a3989aa0e84431",level:2},{value:"Queries",id:"d40fd29982094b8f90a363cc2c22c314",level:2},{value:"Validator Performance",id:"d0ead7ce0a154e1d915ef6e9dc2317c2",level:4},{value:"Treasury",id:"d03e0ebaef66469aa062d0c2c496cc46",level:4},{value:"Performance Snapshot Period",id:"1a33e1fe4f854f179fa8c0c9a6506d67",level:4},{value:"Governance",id:"f4c3d227c8254e8bb227b30563d52072",level:2}];function x(s){const e={a:"a",admonition:"admonition",annotation:"annotation",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",menclose:"menclose",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",msubsup:"msubsup",mtext:"mtext",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h3,{id:"ebfe9bca3b1a41f9a99263de7a6859d0",children:"Concept"}),"\n",(0,n.jsx)(e.p,{children:"Committee-based blockchains are among the most popular alternatives to proof-of-work based blockchains, such as Bitcoin. These blockchains use a committee, a.k.a consensus nodes set or \u201cvalidator\u201d set, that executes Byzantine fault tolerant distributed consensus to determine the next block to add to the blockchain. Unlike Bitcoin, where one creator produce a block based on probabilities, in a committee-based blockchain blocks are cooperatively created. As such, properly designing the consensus rewarding schemes is crucial to incentivize consensus nodes in achieving consensus while preventing centralization forces from arising, such as those stemming from miner extractable value (MEV) leakage."}),"\n",(0,n.jsx)(e.p,{children:"By designing the consensus rewarding schemes effectively, committee-based blockchains can achieve a balance between decentralization and incentivization."}),"\n",(0,n.jsx)(e.h3,{id:"7af658e285c24b3db1f55295cf4aa3da",children:"Network Inflation & Dynamic Adjustments"}),"\n",(0,n.jsxs)(e.p,{children:["KEX, the native asset of the KIRA network, undergoes controlled inflation as a strategy to stimulate activity and engagement. Its inflation parameters are defined by network governance, which, in tandem with the ",(0,n.jsx)(e.strong,{children:"[Problem Internal Link]"}),", orchestrates a harmony of incentives that align with the broader strategic vision of the network. The central ambition here is not just about maintaining KEX's economic value, but also ensuring the very security fabric of the network through stakeholder retention and active transactions."]}),"\n",(0,n.jsxs)(e.p,{children:["Here's a detailed look at the relevant ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"}),":"]}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_rate"}),": Specifies the KEX inflation percentage.","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"18"})]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"0"})," (Minimum) to ",(0,n.jsx)(e.code,{children:"50"})," (Maximum)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"inflation_period"}),": Denotes the time duration in seconds over which the current KEX supply is inflated based on the ",(0,n.jsx)(e.code,{children:"inflation_rate"}),".","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:["Default: ",(0,n.jsx)(e.code,{children:"31557600"})," (equates to 1 year)"]}),"\n",(0,n.jsxs)(e.li,{children:["Range: ",(0,n.jsx)(e.code,{children:"2629800"})," (roughly a month) to ",(0,n.jsx)(e.code,{children:"31557600"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsx)(e.code,{children:"max_annual_inflation"}),": This sets a ceiling on the yearly percentage growth of the KEX total supply from the original genesis time."]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation is calculated on a per-block basis and adjusts dynamically through periodic snapshots of the KEX supply taken at the start of each ",(0,n.jsx)(e.code,{children:"inflation_period"}),". This mechanism guarantees precise reward allocations and compliance with the set ",(0,n.jsx)(e.code,{children:"max_annual_inflation"})," cap. It accounts for potential inflationary variations that could emerge from diverse sources like the UBI module or the L2 burning mechanisms. In this context, the network proactively assesses for any projected cap breaches and modulates minting from these sources, ensuring the network's stability is always maintained."]}),"\n",(0,n.jsx)(e.h4,{id:"a277515bae6a470ead9f4c3449637a5e",children:"Inflation Equation"}),"\n",(0,n.jsx)(e.p,{children:"Given:"}),"\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"t"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{start}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = KEX token supply at the start of the ",(0,n.jsx)(e.code,{children:"inflation_period"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," = ",(0,n.jsx)(e.code,{children:"inflation_rate"})]}),"\n",(0,n.jsxs)(e.li,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"k"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_{block}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"oc"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," = Time for a single block"]}),"\n"]}),"\n",(0,n.jsxs)(e.p,{children:["The inflation for each block is computed as:\n",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"Inflation\xa0for\xa0block"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mtext,{children:"start"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mi,{children:"R"})]}),(0,n.jsx)(e.mtext,{children:"inflation_period"})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mtext,{children:"block"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{\\text{Inflation for block} = \\dfrac{S_{\\text{start}} \\times R}{\\text{inflation\\_period}} \\times T_{\\text{block}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0363em",verticalAlign:"-1.336em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0363em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"Inflation\xa0for\xa0block"})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord",children:"inflation_period"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"start"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"block"})})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0363em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0363em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.336em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),"\n",(0,n.jsxs)(e.blockquote,{children:["\n",(0,n.jsxs)(e.p,{children:["Example over a period of 3600 seconds: For a starting KEX token supply at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]})})]})," of 300500000, an ",(0,n.jsx)(e.code,{children:"inflation_rate"})," of 15%, and an ",(0,n.jsx)(e.code,{children:"inflation_period"})," of 31557600 seconds, all delegators staking their coins from ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"3600"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small {T2-T1 = 3600}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.69em",verticalAlign:"-0.075em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"})]})]})})]})," seconds would cumulatively qualify to claim ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mstyle,{displaystyle:"true",scriptlevel:"0",children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mn,{children:"300500000"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"0.15"})]}),(0,n.jsx)(e.mn,{children:"31557600"})]})}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsx)(e.mn,{children:"3600"}),(0,n.jsx)(e.mo,{children:"\u2248"}),(0,n.jsx)(e.mn,{children:"5142"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{ \\dfrac{300500000 \\times 0.15}{31557600} \\times 3600 \\approx 5142}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.8067em",verticalAlign:"-0.6174em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size5 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3214em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord",children:"31557600"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord",children:"300500000"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"0.15"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size5 size6"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"3600"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"\u2248"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord",children:"5142"})]})]})})]})," KEX at ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mstyle,{mathsize:"0.9em",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"2"})]})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\small{T2}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.615em"}}),(0,n.jsxs)(e.span,{className:"mord sizing reset-size6 size5",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"mord",children:"2"})]})]})})]}),"."]}),"\n"]}),"\n",(0,n.jsx)(e.h3,{id:"4426f62703204963a8cd5d882b829fe2",children:"Inflation and Fees Distribution Mechanisms"}),"\n",(0,n.jsx)(e.p,{children:"This section explores how block and fee rewards are calculated for each participant: Consensus nodes and Delegators. Both play distinct roles in maintaining and securing the KIRA network, and their reward mechanisms are underpinned by specific parameters that measure their contributions and engagement. For Consensus nodes, it is the performance parameter that evaluates their consistency and efficiency in the network's consensus. In contrast, for Delegators, it's about the magnitude of their stake, representing their vested interest and commitment to the network. These foundational parameters ensure that rewards are allocated fairly, recognizing genuine efforts and investments in the network's growth and stability."}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:["Rewards are allocated to the proposer and its associated staking pools ",(0,n.jsx)("u",{children:(0,n.jsx)(e.strong,{children:"at the beginning of the following new block"})}),". Make sure to account for this one-block lag when considering rewards allocation across all roles in the network."]})}),"\n",(0,n.jsx)(e.h4,{id:"efacc54986a74017bc7122e407a8022e",children:"Consensus Nodes Rewards"}),"\n",(0,n.jsxs)(e.p,{children:["Consensus nodes are not rewarded based on the amount of stake backing them. Instead, they charge a self-defined ",(0,n.jsx)(e.code,{children:"commission"})," rate on block rewards (KEX inflation). They also benefit from up to 50% of fee rewards, which consist of a basket of different tokens used for paying transaction fees, including KEX. This percentage is defined by the ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsx)(e.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," set by governance."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"For more information regarding network consensus nodes commissions please refer to the"})," ",(0,n.jsx)(e.em,{children:"module."})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Performance parameter"})}),"\n",(0,n.jsxs)(e.p,{children:["A critical aspect of reward distribution for Consensus nodes is the performance parameter, denoted as ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),". This parameter evaluates a node's participation in the network consensus. Specifically, it measures how often that node has successfully signed blocks over the last ",(0,n.jsx)(e.code,{children:"snapshot-period"}),", which defaults to 1000 blocks. The ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," value is then used to scale its rewards when it poposes a block; if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," is below 100%, the node will only receive a corresponding fraction of the available rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"N"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"d"})]})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{P = \\dfrac{N_{signed}}{S_{period}}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.0124em",verticalAlign:"-1.3121em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.7003em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.0124em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.109em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.9721em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7003em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.0124em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.0124em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.3121em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"K"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"})]})})]}),(0,n.jsx)(e.code,{children:"ukex"}),", if ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]}),"\u2019s proposer has a ",(0,n.jsx)(e.code,{children:"commission"})," rate ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," and a performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]})," , it will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"BR_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{BR_{c} = K*R*P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0077em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"E.g: assuming a block yielding 100 KEX, if its proposer has a"}),"\xa0",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"commission"})})," ",(0,n.jsx)(e.em,{children:"rate set to 30% and a current"})," ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," ",(0,n.jsx)(e.em,{children:"of 50%, it will only receive 15 KEX and 15 KEX will be transferred to the community treasury. The remaining 70 KEX are split between its delegators and the proposer itself IF it has a self-stake."})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["The amount of fee rewards a block proposer will receive for a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," carrying a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," from its transactions, given a current network property ",(0,n.jsx)(e.code,{children:"validators_fee_share"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," and the proposer's current performance ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"P"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})]}),", is ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with:"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"P"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} * VFS * P}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h4,{id:"a962a05151634f10a212361112abccec",children:"Delegators Rewards"}),"\n",(0,n.jsx)(e.p,{children:"The distribution of remaining rewards incentives to delegators is proportional to their shares, which are calculated in two distinct ways. Delegators' shares regarding block rewards are determined by their global stake (total staked to all consensus nodes), while the shares regarding fee rewards are determined by the stakes they have delegated locally (total staked to the block proposer). This means that consensus nodes with less stake and greater implied risk will offer better returns on investment to delegators than those with more stake and lower implied risk, provided they do not trigger any slashing events. This incentivizes delegators who are in the network solely for profit to gradually shift their preferences to lower-staked consensus nodes that gain a sufficient amount of reputation in order to maximize their revenues. As a result, stakes across consensus nodes will tend to be evenly distributed, preventing the centralization of stakes among a few consensus nodes."}),"\n",(0,n.jsxs)(e.p,{children:["Whitelisted tokens that are eligible for staking, including KEX, are entitled to a limited amount of rewards (block or fee rewards) as determined by governance through their individual parameter ",(0,n.jsx)(e.code,{children:"reward_cap"})," in the ",(0,n.jsx)(e.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"}),". Allocating a defined percentage of rewards to each eligible staking token has the effect of attracting users from other networks. This is because if no one is staking a specific token, its annual percentage yield (APY) is infinite as no one is able to claim the respective share of rewards, which are instead sent to the community treasury. This incentivizes users to stake these tokens in order to receive a share of the rewards."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Delegators shares"})}),"\n",(0,n.jsxs)(e.p,{children:["Understanding the calculation of delegators shares is important due to the system's inherent token diversity. The key takeaway is that a delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is obtained by calculating the distinctive share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," for each of the eligible staking tokens ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"i_{}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8369em",verticalAlign:"-0.1774em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),". This allows to avoid comparing each token nominal value, or any other reference value, which would be an unnecessary overhead. The delegator's share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is then calculated by summing each ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_{D_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9587em",verticalAlign:"-0.2754em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," multiplied by the corresponding token's ",(0,n.jsx)(e.code,{children:"reward_cap"})," ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"RC_{i}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8607em",verticalAlign:"-0.1774em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.munderover,{children:[(0,n.jsx)(e.mo,{children:"\u2211"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"})]})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{S_D = \\sum_{i=1}^{n} S_{D_{i}} * RC_{i}}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.6091em",verticalAlign:"-1.6177em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.9914em"},children:[(0,n.jsxs)(e.span,{style:{top:"-5.6091em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mop op-limits",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.6514em"},children:[(0,n.jsxs)(e.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"="}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{children:(0,n.jsx)(e.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,n.jsxs)(e.span,{style:{top:"-4.3em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.2777em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3448em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.3488em",marginLeft:"-0.0278em",marginRight:"0.0714em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.5em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1792em"},children:(0,n.jsx)(e.span,{})})})]})})]})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2754em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1774em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.9914em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"5.6091em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"3.6091em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.6177em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.p,{children:"The difference lies in whether the calculation is intended to represent the delegator's global share for block rewards, which is determined by considering all different tokens staked by the delegator in the network, or the local share for fee rewards, which is determined by considering only the tokens staked by the delegator in the current block proposer's staking pool."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Block rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Assuming a block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yieldin_g_ ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mtext,{children:"\xa0"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ukex"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"K_c*R \\texttt{ ukex}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"\xa0ukex"})})]})]})]})," (",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," being the proposer ",(0,n.jsx)(e.code,{children:"commission"})," rate), a delegator with a local share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will be entitled to the following block reward ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Br_c"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),":"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"K"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Br_{c} = K*R*S_D}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.5133em",verticalAlign:"-0.49em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.0233em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.5133em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"K"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.0233em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.5133em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.5133em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.49em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Fee rewards"})," distribution works as follow:"]}),"\n",(0,n.jsxs)(e.p,{children:["Given a current block ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"C"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"C"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"})]})})]})," yielding a basket of fee rewards ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[\\texttt{ueth}_{c},\\texttt{ubnb}_{c},...,\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ueth"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"ubnb"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]}),", with ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"VFS"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})]})," the current ",(0,n.jsx)(e.code,{children:"validators_fee_share"}),", a delegator with a global share ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"S_D"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," will receive ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ueth"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"ubnb"})]}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mo,{separator:"true",children:","}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"[Fr^\\texttt{ueth}_{c},Fr^\\texttt{ubnb}_{c},...,Fr^\\texttt{u}_{c}]"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0408em",verticalAlign:"-0.25em"}}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ueth"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"ubnb"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord",children:"..."}),(0,n.jsx)(e.span,{className:"mpunct",children:","}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.7908em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:"]"})]})})]})," with"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.menclose,{notation:"box",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"false",children:(0,n.jsx)(e.mstyle,{scriptlevel:"0",displaystyle:"true",children:(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mtext,{mathvariant:"monospace",children:"u"}),(0,n.jsx)(e.mi,{children:"c"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"D"})]}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"S"})]})})})})})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\boxed{Fr^\\texttt{u}_{c} = \\texttt{u}_{c} *S_D*VFS}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.7678em",verticalAlign:"-0.587em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1808em"},children:[(0,n.jsxs)(e.span,{style:{top:"-3.7678em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"boxpad",children:(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8408em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.453em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.113em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord text mtight",children:(0,n.jsx)(e.span,{className:"mord texttt mtight",children:"u"})})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.247em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord text",children:(0,n.jsx)(e.span,{className:"mord texttt",children:"u"})}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.1514em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"c"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3283em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"FS"})]})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.1808em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.7678em"}}),(0,n.jsx)(e.span,{className:"stretchy fbox",style:{height:"1.7678em",borderStyle:"solid",borderWidth:"0.04em"}})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.587em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})}),"\n",(0,n.jsx)(e.h2,{id:"7c2e2b6063ab4eeab948bfa912382577",children:"Parameters"}),"\n",(0,n.jsx)(e.p,{children:"N/A"}),"\n",(0,n.jsx)(e.h2,{id:"0a27e950c1bf4bd693101d9dd2a30b6d",children:"Cli Syntax & Examples"}),"\n",(0,n.jsx)(e.admonition,{type:"note",children:(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,n.jsx)(e.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,n.jsx)(e.em,{children:"Roles & Permissions"})})," ",(0,n.jsx)(e.em,{children:"documentation for more details."})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$SIGNER"})})," ",(0,n.jsx)(e.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,n.jsx)(e.em,{children:(0,n.jsx)(e.code,{children:"$FLAGS_TX"})})," ",(0,n.jsx)(e.em,{children:"and"})," ",(0,n.jsxs)(e.em,{children:[(0,n.jsx)(e.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,n.jsx)(e.em,{children:"section"})]})}),"\n",(0,n.jsxs)(i.Z,{children:[(0,n.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,n.jsx)(e.h2,{id:"619d389fbbc74cccb1a3989aa0e84431",children:"Transactions"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]}),(0,n.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,n.jsx)(e.h2,{id:"d40fd29982094b8f90a363cc2c22c314",children:"Queries"}),(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:(0,n.jsx)(e.code,{children:"snapshot-period-performance"})}),(0,n.jsx)(e.th,{children:"Retrieve the current performance of a specific consensus node."})]})}),(0,n.jsxs)(e.tbody,{children:[(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"fees-treasury"})}),(0,n.jsx)(e.td,{children:"Get fees treasury details."})]}),(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"snapshot-period"})}),(0,n.jsx)(e.td,{children:"Retrieve snapshot period performance details."})]})]})]}),(0,n.jsx)(e.h4,{id:"d0ead7ce0a154e1d915ef6e9dc2317c2",children:"Validator Performance"}),(0,n.jsxs)(e.p,{children:["Retrieve the current performance of a specific validator using the ",(0,n.jsx)(e.code,{children:"snapshot-period-performance"})," subcommand followed by the validator\u2019s address."]}),(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"Args"})}),(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:(0,n.jsx)(e.code,{children:"$"})}),(0,n.jsx)(e.code,{children:"ADDR"})," Address of the consensus node."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period-performance $ADDR $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"d03e0ebaef66469aa062d0c2c496cc46",children:"Treasury"}),(0,n.jsxs)(e.p,{children:["Fetch the treasury details using the ",(0,n.jsx)(e.code,{children:"fees-treasury"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor fees-treasury $FLAGS_QR | jq\n"})}),(0,n.jsx)(e.h4,{id:"1a33e1fe4f854f179fa8c0c9a6506d67",children:"Performance Snapshot Period"}),(0,n.jsxs)(e.p,{children:["Retrieve the current snapshot period performance details using the ",(0,n.jsx)(e.code,{children:"snapshot-period"})," subcommand."]}),(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-bash",children:"sekaid query distributor snapshot-period $FLAGS_QR | jq\n"})})]}),(0,n.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,n.jsx)(e.h2,{id:"f4c3d227c8254e8bb227b30563d52072",children:"Governance"}),(0,n.jsx)(e.p,{children:"There is no transactions other than queries for this sub-module"})]})]})]})}function p(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(x,{...s})}):x(s)}},5162:(s,e,a)=>{a.d(e,{Z:()=>t});a(7294);var n=a(6905);const l={tabItem:"tabItem_Ymn6"};var i=a(5893);function t(s){let{children:e,hidden:a,className:t}=s;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,t),hidden:a,children:e})}},4866:(s,e,a)=>{a.d(e,{Z:()=>f});var n=a(7294),l=a(6905),i=a(2466),t=a(6550),r=a(469),m=a(1980),c=a(7392),h=a(12);function d(s){return n.Children.toArray(s).filter((s=>"\n"!==s)).map((s=>{if(!s||(0,n.isValidElement)(s)&&function(s){const{props:e}=s;return!!e&&"object"==typeof e&&"value"in e}(s))return s;throw new Error(`Docusaurus error: Bad child <${"string"==typeof s.type?s.type:s.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(s){const{values:e,children:a}=s;return(0,n.useMemo)((()=>{const s=e??function(s){return d(s).map((s=>{let{props:{value:e,label:a,attributes:n,default:l}}=s;return{value:e,label:a,attributes:n,default:l}}))}(a);return function(s){const e=(0,c.l)(s,((s,e)=>s.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((s=>s.value)).join(", ")}" found in . Every value needs to be unique.`)}(s),s}),[e,a])}function p(s){let{value:e,tabValues:a}=s;return a.some((s=>s.value===e))}function o(s){let{queryString:e=!1,groupId:a}=s;const l=(0,t.k6)(),i=function(s){let{queryString:e=!1,groupId:a}=s;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,m._X)(i),(0,n.useCallback)((s=>{if(!i)return;const e=new URLSearchParams(l.location.search);e.set(i,s),l.replace({...l.location,search:e.toString()})}),[i,l])]}function j(s){const{defaultValue:e,queryString:a=!1,groupId:l}=s,i=x(s),[t,m]=(0,n.useState)((()=>function(s){let{defaultValue:e,tabValues:a}=s;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!p({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((s=>s.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((s=>s.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[c,d]=o({queryString:a,groupId:l}),[j,g]=function(s){let{groupId:e}=s;const a=function(s){return s?`docusaurus.tab.${s}`:null}(e),[l,i]=(0,h.Nk)(a);return[l,(0,n.useCallback)((s=>{a&&i.set(s)}),[a,i])]}({groupId:l}),N=(()=>{const s=c??j;return p({value:s,tabValues:i})?s:null})();(0,r.Z)((()=>{N&&m(N)}),[N]);return{selectedValue:t,selectValue:(0,n.useCallback)((s=>{if(!p({value:s,tabValues:i}))throw new Error(`Can't select invalid tab value=${s}`);m(s),d(s),g(s)}),[d,g,i]),tabValues:i}}var g=a(2389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var u=a(5893);function y(s){let{className:e,block:a,selectedValue:n,selectValue:t,tabValues:r}=s;const m=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),h=s=>{const e=s.currentTarget,a=m.indexOf(e),l=r[a].value;l!==n&&(c(e),t(l))},d=s=>{let e=null;switch(s.key){case"Enter":h(s);break;case"ArrowRight":{const a=m.indexOf(s.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(s.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return(0,u.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},e),children:r.map((s=>{let{value:e,label:a,attributes:i}=s;return(0,u.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:s=>m.push(s),onKeyDown:d,onClick:h,...i,className:(0,l.Z)("tabs__item",N.tabItem,i?.className,{"tabs__item--active":n===e}),children:a??e},e)}))})}function v(s){let{lazy:e,children:a,selectedValue:l}=s;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const s=i.find((s=>s.props.value===l));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return(0,u.jsx)("div",{className:"margin-top--md",children:i.map(((s,e)=>(0,n.cloneElement)(s,{key:e,hidden:s.props.value!==l})))})}function b(s){const e=j(s);return(0,u.jsxs)("div",{className:(0,l.Z)("tabs-container",N.tabList),children:[(0,u.jsx)(y,{...s,...e}),(0,u.jsx)(v,{...s,...e})]})}function f(s){const e=(0,g.Z)();return(0,u.jsx)(b,{...s,children:d(s.children)},String(e))}},1151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>t});var n=a(7294);const l={},i=n.createContext(l);function t(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:t(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/aa0fd5ad.4ff94267.js b/assets/js/aa0fd5ad.4ff94267.js deleted file mode 100644 index 42de3c5..0000000 --- a/assets/js/aa0fd5ad.4ff94267.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9959],{6036:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>o});var a=n(5893),i=n(1151),t=n(4866),r=n(5162);const l={title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module",title:"Token Basketing Module",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Basketing Module",sidebar_position:3,slug:"/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},sidebar:"defaultSidebar",previous:{title:"Token Basketing",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69"},next:{title:"Recovery",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce"}},h={},o=[{value:"Concept",id:"dee6d8b2107344fe995e07952c58450a",level:2},{value:"Tokens weight assignment in baskets",id:"e52c86f592f54948a7e9d56035887420",level:3},{value:"How users deposits translate to basket derivatives tokens",id:"c6b93328531d4437b4fd633cfc0bd1ec",level:4},{value:"Maximum weight-adjusted tokens shares",id:"742d96e2022c4aaeb0f8afc88d4eef4d",level:4},{value:"Operational controls and limits",id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",level:3},{value:"Basket composition and balance maintenance",id:"f303da5b316c4e78b187c8a27d7037fd",level:3},{value:"Aggregated tokens swapping mechanisms",id:"310bf045cb5b40b0a87eb0ea67e056e4",level:3},{value:"Surplus: a basket\u2019s insurance funds",id:"7a4d7fa663774bb284c6578bd17412d6",level:3},{value:"Kira's unique staking derivatives & rewards handling",id:"7fb7ac4e4df74fcd8d3d7a386b847006",level:3},{value:"Block rewards",id:"5976fae452a2415fab9163a3992765fd",level:4},{value:"Fee rewards",id:"26b6027e680241218a5ba007479be9ea",level:4},{value:"Parameters",id:"2ce953f4d8764a9a918cb72cf7ac1307",level:2},{value:"Token basket",id:"187f22edd8b24181bfef12a3df57f1a5",level:4},{value:"Cli syntax & examples",id:"097ff40bd32544e69bd7c9d4748f8df7",level:2},{value:"Transactions",id:"30bfcd03f11d4db7861628860a95e7b6",level:2},{value:"Deposit aggregated tokens into basket",id:"3a7f68279fba4c2d91b2428de6ba5276",level:4},{value:"Withdraw aggregated tokens from basket",id:"90d712248db44c1bbc09d5f2317af4f0",level:4},{value:"Swap basket tokens",id:"eb2c7bea02754d51a72b2e60257835b5",level:4},{value:"Disable basket deposits, withdrawals, and swaps (emergency)",id:"8645486cd3d84de4acf812a490aefcb7",level:4},{value:"Claim derivatives basket rewards",id:"d302bf9450344b4b8959aa731d8f6bce",level:4},{value:"Queries",id:"7d27c0249006442d9cb2d2d7f6829c95",level:2},{value:"Query basket by denomination",id:"73a9aefa563946c58360b0d0fe187f35",level:4},{value:"Query basket by id",id:"960d7be6739e4d8ba45956c94d2f1653",level:4},{value:"List token baskets",id:"e83b30b0043148e3be023e966ef67bba",level:4},{value:"Query historical mints",id:"6bd3ad80788a49bf89968bfdd4d993c1",level:4},{value:"Query historical burns",id:"e4c7b1471e6a425098e9757badb898bd",level:4},{value:"Query historical swaps",id:"5223c1d7ab66430a9cc477b185a62642",level:4},{value:"Governance",id:"775c6181c6754e6a8f53f1202e2ff4ca",level:2},{value:"Creating and updating a token basket proposal",id:"07ad892215ee4b78a824587f8ab87eb8",level:4},{value:"Editing an existing token basket proposal",id:"76b8b2489e2241c8bd45e9076798e1df",level:4},{value:"Withdrawing surplus from a basket proposal",id:"618b95deb0154e119dd71f4e98cf02e4",level:4}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mstyle:"mstyle",msub:"msub",munderover:"munderover",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h2,{id:"dee6d8b2107344fe995e07952c58450a",children:"Concept"}),"\n",(0,a.jsxs)(s.p,{children:["The Token Basketing Module allows users to combine multiple individual derivatives with the same denomination into a single, easily tradable and exchangeable token. For example, KIRA native liquid staking derivatives ",(0,a.jsx)(s.code,{children:"V/"})," that are issued when staking tokens in KIRA network and which are specific to the consensus node ",(0,a.jsx)(s.code,{children:"V"}),", can be aggregated using a basket. An other use case would be to aggregate different foreign tokens such as various USD stablecoins like ",(0,a.jsx)(s.code,{children:"usdt"})," or ",(0,a.jsx)(s.code,{children:"usdc"})," (similarly to Curve\u2019s 3pool), or IBC wrapped tokens, into a single, more easily tradable and stakable asset."]}),"\n",(0,a.jsx)(s.p,{children:"However, unlike common liquidity pools like Curve or Uniswap, Token Baskets do not depend on a bonding curve equation to determine the price and are simply based on fixed weights assigned to each individual token. They are only intended to consolidate the liquidity of tokens that are collateralized/pegged by the same underlying asset. In addition, one of the unique properties of Token Baskets compared to liquidity pools is that the list of tokens in the basket can be expanded or contracted over time, while the name of the basket token representing the aggregated assets remains the same."}),"\n",(0,a.jsx)(s.p,{children:"Token Baskets facilitate token swaps, which are subject to daily limits and are executed at fixed ratios with a programmed slippage. The surplus between the actual exchange ratio and the slippage serves as an insurance fund controlled by governance to protect token holders in the event of a depeg. Overall, the Token Basketing Module is not intended to operate as an exchange, but rather as a tool for insurance and risk management, allowing users to distribute their risks among multiple assets with the same underlying peg."}),"\n",(0,a.jsx)(s.h3,{id:"e52c86f592f54948a7e9d56035887420",children:"Tokens weight assignment in baskets"}),"\n",(0,a.jsxs)(s.p,{children:['The specific tokens that can be deposited into a basket are pre-determined. To ensure that different tokens collateralized by the same underlying asset can be accurately represented in the basket, weights are assigned to each token. These weights define the corresponding amount of the underlying derivative for a given amount of the token. For example, a "USD fiat basket" can be created by assigning a weight of ',(0,a.jsx)(s.code,{children:"1/3.6725 = 0.2722940776"})," to the ",(0,a.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/United_Arab_Emirates_dirham#:~:text=USD%5B1%5D-,1%20USD%20%3D%203.6725%20AED,-The%20United%20Arab",children:"United Arab Emirates dirham"}),", which is pegged to 1 USD at a rate of 1 USD = 3.6725 AED. The weight of a token can also be used to unify the number of decimal places among multiple aggregate coins with different decimal places. For instance, if two tokens, ",(0,a.jsx)(s.code,{children:"A"})," and ",(0,a.jsx)(s.code,{children:"B"}),", both collateralized by the same underlying asset have different numbers of decimal places (e.g. ",(0,a.jsx)(s.code,{children:"A"})," has 3 decimal places, ",(0,a.jsx)(s.code,{children:"B"})," has 2 decimal places), weights we can be assigned to each token to unify their decimal places. For example, a weight of ",(0,a.jsx)(s.code,{children:"1.00"})," can be assigned to ",(0,a.jsx)(s.code,{children:"A"})," and a weight of ",(0,a.jsx)(s.code,{children:"0.01"})," to ",(0,a.jsx)(s.code,{children:"B"}),". This means that 1 unit of ",(0,a.jsx)(s.code,{children:"A"})," is equal to 100 units of ",(0,a.jsx)(s.code,{children:"B"}),", and the basket will be expressed in terms of ",(0,a.jsx)(s.code,{children:"A"}),", which has 3 decimal places. This allows the basket to represent the underlying value of both tokens in a consistent way, using a single number of decimal places."]}),"\n",(0,a.jsxs)(s.p,{children:["The governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," otherwise there will not be enough tokens in the basket to redeem. For example, if the basket ",(0,a.jsx)(s.code,{children:"B"})," includes tokens A, B, and C, the governance must ensure that ",(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsx)(s.mrow,{children:(0,a.jsxs)(s.mstyle,{mathsize:"0.9em",children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"+"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"("}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{children:"\xd7"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"})]})]}),(0,a.jsx)(s.mo,{fence:"true",children:")"})]}),(0,a.jsx)(s.mo,{children:"\u2265"}),(0,a.jsxs)(s.msub,{children:[(0,a.jsx)(s.mi,{children:"B"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mo,{children:"<"}),(0,a.jsx)(s.mi,{children:"d"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mo,{children:">"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"l"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"d"})]})]})]})}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\small \\left(A_{amount} \\times A_{weight}\\right) + \\left(B_{amount} \\times B_{weight}\\right) + \\left(C_{amount} \\times C_{weight}\\right) \\geq B_{\\_.total\\_amount\\_issued}"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"0em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin sizing reset-size6 size5",children:"+"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.2725em"}}),(0,a.jsxs)(s.span,{className:"minner sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mopen sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:"("}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2601em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\xd7"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0715em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.2796em"},children:(0,a.jsx)(s.span,{})})})]})})]}),(0,a.jsx)(s.span,{className:"mclose sizing reset-size5 size6 delimcenter",style:{top:"0.025em"},children:")"})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel sizing reset-size6 size5",children:"\u2265"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.936em",verticalAlign:"-0.321em"}}),(0,a.jsxs)(s.span,{className:"mord sizing reset-size6 size5",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,a.jsx)(s.span,{className:"msupsub",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.313em"},children:(0,a.jsxs)(s.span,{style:{top:"-2.45em",marginLeft:"-0.0502em",marginRight:"0.0556em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"2.6em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size5 size2 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"<"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"m"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:">"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"ss"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.3567em"},children:(0,a.jsx)(s.span,{})})})]})})]})]})]})]}),". If the weights are not correctly configured, the governance proposal to update the basket weights will fail."]}),"\n",(0,a.jsx)(s.h4,{id:"c6b93328531d4437b4fd633cfc0bd1ec",children:"How users deposits translate to basket derivatives tokens"}),"\n",(0,a.jsxs)(s.p,{children:["When users deposit a combination of tokens ",(0,a.jsx)(s.code,{children:"A, B, C\u2026"})," which have the same underlying asset/peg ",(0,a.jsx)(s.code,{children:""})," into the corresponding basket ",(0,a.jsx)(s.code,{children:"B"}),", they receive an amount of token ",(0,a.jsx)(s.code,{children:"B/"})," which represent their weight-adjusted share of the total basket pool, similarly to Uniswap LP tokens. For instance, if a user deposits 100 units of token ",(0,a.jsx)(s.code,{children:"A"})," with a weight of 0.5 into the basket ",(0,a.jsx)(s.code,{children:"B5/ABC"}),", they will receive 50 units of tokens."]}),"\n",(0,a.jsx)(s.h4,{id:"742d96e2022c4aaeb0f8afc88d4eef4d",children:"Maximum weight-adjusted tokens shares"}),"\n",(0,a.jsxs)(s.p,{children:["To prevent scenarios where one or more of the aggregated tokens becomes worthless or loses its peg, a ",(0,a.jsx)(s.code,{children:"tokens_cap"})," field sets the maximum percentage of the total ",(0,a.jsx)(s.strong,{children:"weight-adjusted"})," supply that can be deposited for a given aggregated token (default 1, or 100%). If the amount of tokens to be deposited or swapped would result in the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," being exceeded for any of the aggregated tokens, the transaction interacting with the basket will fail."]}),"\n",(0,a.jsx)(s.h3,{id:"b6b3fe9dc04b4d91a6a6525a9ed71eca",children:"Operational controls and limits"}),"\n",(0,a.jsxs)(s.p,{children:["Token baskets include ",(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," boolean fields that can globally prohibit deposits, withdraws, or swaps of one or more specific tokens in the basket. ",(0,a.jsx)(s.strong,{children:"These fields can be disabled without the need to go through a governance proposal"}),", although only accounts with the permission 61 can perform this action. This is meant to allow necessary flexibility in managing the basket, i.e. responding to potential depeg scenarios or other time-sensitive issues with individual tokens which require quick intervention."]}),"\n",(0,a.jsxs)(s.p,{children:["To prevent abuse or manipulation of the Token Baskets (i.e. infinite supply of one of the aggregated tokens being flooded into the basket until the ",(0,a.jsx)(s.code,{children:"tokens_cap"})," is reached), Token Baskets have limits on the amount of tokens that can be minted (created), burned (redeemed for tokens), or swapped over a defined period ",(0,a.jsx)(s.code,{children:"limits_period"}),". These limits are defined by the ",(0,a.jsx)(s.code,{children:"mints_max"}),", ",(0,a.jsx)(s.code,{children:"burns_max"}),", and ",(0,a.jsx)(s.code,{children:"swaps_max"})," fields, respectively.\nTo prevent dust spam attacks, minimum amounts of the aggregate and basket tokens that must be minted, burned, or swapped in a single transaction are also defined by the ",(0,a.jsx)(s.code,{children:"mints_min"}),", ",(0,a.jsx)(s.code,{children:"burns_min"}),", and ",(0,a.jsx)(s.code,{children:"swaps_min"})," fields, respectively. Transactions that do not meet these minimum amounts will not be processed."]}),"\n",(0,a.jsx)(s.h3,{id:"f303da5b316c4e78b187c8a27d7037fd",children:"Basket composition and balance maintenance"}),"\n",(0,a.jsx)(s.p,{children:"The claim process is designed to ensure that the basket remains balanced at all time by calculating the ratio at which each token should be credited to the withdrawing user to restore, or at least improve, the proper weighting of the pool\u2019s balances after a withdrawal. This means that the redemption of pooled tokens against the pool\u2019s derivative will always be adjusted based on the current pool balances, potentially resulting in a higher proportion of a specific token if the pool is imbalanced due to previous selective swaps and withdrawals."}),"\n",(0,a.jsx)(s.h3,{id:"310bf045cb5b40b0a87eb0ea67e056e4",children:"Aggregated tokens swapping mechanisms"}),"\n",(0,a.jsxs)(s.p,{children:["Token Baskets implement a simple swap mechanism that enables users to exchange one or multiple aggregated tokens for a set of specific ones. This function provides a convenient way for users to consolidate their holdings into a desired set of tokens. However, the swap incurs a fixed ",(0,a.jsx)(s.code,{children:"swap_fee"})," and a variable ",(0,a.jsx)(s.code,{children:"slippage_fee"})," with a minimum ",(0,a.jsx)(s.code,{children:"slippage-fee-min"}),' defined in the basket properties. The fees are calculated dynamically based on the degree to which the swap is disbalancing the basket. The greater the disbalance, the higher the "slippage" penalty will be. The slippage is a programmatic function and do not result from a changes in token value as seen in Liquidity Pools, as the value of all tokens remains constant.']}),"\n",(0,a.jsx)(s.p,{children:"A crucial aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,a.jsx)(s.span,{className:"katex-display",children:(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mo,{fence:"true",children:"\u230a"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsxs)(s.munderover,{children:[(0,a.jsx)(s.mo,{children:"\u2211"}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mn,{children:"0"})]}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mo,{children:"\u2212"}),(0,a.jsx)(s.mn,{children:"1"})]})]}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"w"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mi,{children:"g"}),(0,a.jsx)(s.mi,{children:"h"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mo,{children:"\u22c5"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"k"}),(0,a.jsx)(s.mi,{children:"e"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"["}),(0,a.jsx)(s.mi,{children:"i"}),(0,a.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"."}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"m"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"u"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.mo,{fence:"true",children:"\u230b"})]}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsx)(s.mi,{children:"c"}),(0,a.jsx)(s.mi,{children:"o"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"s"}),(0,a.jsx)(s.mi,{children:"t"}),(0,a.jsx)(s.mi,{children:"a"}),(0,a.jsx)(s.mi,{children:"n"}),(0,a.jsx)(s.mi,{children:"t"})]}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"\\left \\lfloor{ \\sum_{i=0}^{tokens.Length - 1}tokens[i].weight \\cdot tokens[i].amount}\\right \\rfloor = constant"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"3.1609em",verticalAlign:"-1.2777em"}}),(0,a.jsxs)(s.span,{className:"minner",children:[(0,a.jsx)(s.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230a"})}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mop op-limits",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.8832em"},children:[(0,a.jsxs)(s.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"i"}),(0,a.jsx)(s.span,{className:"mrel mtight",children:"="}),(0,a.jsx)(s.span,{className:"mord mtight",children:"0"})]})})]}),(0,a.jsxs)(s.span,{style:{top:"-3.05em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{children:(0,a.jsx)(s.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,a.jsxs)(s.span,{style:{top:"-4.3471em",marginLeft:"0em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3.05em"}}),(0,a.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsxs)(s.span,{className:"mord mtight",children:[(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"s"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal mtight",children:"h"}),(0,a.jsx)(s.span,{className:"mbin mtight",children:"\u2212"}),(0,a.jsx)(s.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"1.2777em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"h"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mopen",children:"["}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,a.jsx)(s.span,{className:"mclose",children:"]"}),(0,a.jsx)(s.span,{className:"mord",children:"."}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"o"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"u"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]}),(0,a.jsx)(s.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,a.jsx)(s.span,{className:"delimsizing size4",children:"\u230b"})})]}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.6151em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"co"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"an"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]})}),"\n",(0,a.jsxs)(s.p,{children:["This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the ",(0,a.jsx)(s.code,{children:"surplus"}),", while the ",(0,a.jsx)(s.code,{children:"basket_swap_fee"})," is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."]}),"\n",(0,a.jsx)(s.h3,{id:"7a4d7fa663774bb284c6578bd17412d6",children:"Surplus: a basket\u2019s insurance funds"}),"\n",(0,a.jsxs)(s.p,{children:["Unlike Uniswap, where swap fees are given to LP providers by issuing LP tokens proportionally, baskets swap fees paid by users and deposits from the governance are recorded in a separate ",(0,a.jsx)(s.code,{children:"surplus"})," and do not issue additional basket tokens ",(0,a.jsx)(s.code,{children:"B/"}),". These ",(0,a.jsx)(s.code,{children:"surplus"}),' serve as insurance funds to protect users against depeg events and can also collect any potential staking rewards yielded by aggregated tokens and "donations". In the event of a token losing its peg, the ',(0,a.jsx)(s.code,{children:"deposits"}),", ",(0,a.jsx)(s.code,{children:"withdraws"}),", and ",(0,a.jsx)(s.code,{children:"swaps"})," properties of the depegged token may be set to ",(0,a.jsx)(s.code,{children:"false"}),", and the governance will deposit the necessary amount of tokens from the ",(0,a.jsx)(s.code,{children:"surplus"})," and/or the community treasury into the basket to re-adjust the weights, so that the remaining basket tokens ",(0,a.jsx)(s.code,{children:"B/"})," can redeem the equivalent value in the form of all aggregate tokens. Although ",(0,a.jsx)(s.code,{children:"surplus"})," funds are dedicated to their corresponding basket, the governance has the ability to redeem their entire content for redistribution to other baskets if necessary."]}),"\n",(0,a.jsx)(s.h3,{id:"7fb7ac4e4df74fcd8d3d7a386b847006",children:"Kira's unique staking derivatives & rewards handling"}),"\n",(0,a.jsxs)(s.p,{children:["The Token basketing module deals with a unique scenario regarding KIRA's staking derivatives ",(0,a.jsx)(s.code,{children:"V/"}),", which accumulate block and fee rewards for their holders over time. Users pooling their ",(0,a.jsx)(s.code,{children:"V/"})," tokens to the corresponding basket are only entitled to the block rewards accumulated by the basket on their behalf. However, it is important to note that, due to how the basket token operates, block rewards become mutualized once the derivative is pooled, meaning users may gain or lose some percentage of block rewards (compared to simply holding the individual ",(0,a.jsx)(s.code,{children:"V/"})," itself) based on consensus nodes performance and commission rate. That being said, in KIRA, a consensus node cannot set it\u2019s commission above 50% (or lower, depending on current network properties), hence any potential loss is minimized and should be viewed as a reasonable fee for the superior liquidity service offered by the basket."]}),"\n",(0,a.jsx)(s.h4,{id:"5976fae452a2415fab9163a3992765fd",children:"Block rewards"}),"\n",(0,a.jsxs)(s.p,{children:["Staking derivative baskets do not track the ",(0,a.jsx)(s.code,{children:"B/"})," holdings of individual users over time, nor do they issue new ones to account for block rewards. Instead, they accommodate the earnings from block rewards by adjusting the weight of the different ",(0,a.jsx)(s.code,{children:"V/"})," pooled in the basket. As a result, the value that a ",(0,a.jsx)(s.code,{children:"B/"})," can redeem for the pooled tokens increases over time as block rewards accumulate, while the total number of issued ",(0,a.jsx)(s.code,{children:"B/"})," tokens remains unchanged."]}),"\n",(0,a.jsx)(s.h4,{id:"26b6027e680241218a5ba007479be9ea",children:"Fee rewards"}),"\n",(0,a.jsxs)(s.p,{children:["On the other hand, fee rewards are not accounted for and are simply sent to the pool's ",(0,a.jsx)(s.code,{children:"surplus"})," insurance fund."]}),"\n",(0,a.jsx)(s.h2,{id:"2ce953f4d8764a9a918cb72cf7ac1307",children:"Parameters"}),"\n",(0,a.jsx)(s.h4,{id:"187f22edd8b24181bfef12a3df57f1a5",children:"Token basket"}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"id"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1"})}),(0,a.jsx)(s.td,{children:"Basket identifier"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"suffix"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usd"})}),(0,a.jsxs)(s.td,{children:["Basket token denom suffix. Resulting basket token denom would be ",(0,a.jsx)(s.code,{children:"B1/usd"}),' if suffix value is "usd"']})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"description"})}),(0,a.jsx)(s.td,{children:"Basket description"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]BasketToken"})}),(0,a.jsx)(s.td,{}),(0,a.jsx)(s.td,{children:"Array of aggregated tokens with their corresponding weights, current basket balance and transaction abilities status"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Total supply of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that can be minted"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"tokens_cap"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.9"})}),(0,a.jsx)(s.td,{children:"The maximum percentage of the basket supply that a single aggregated token can represent. Transactions such as minting, burning, and swapping will fail if they cause an aggregated token's supply to exceed this percentage. Decimal from 0 to 1"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"limits_period"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"uint64"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"86400"})}),(0,a.jsx)(s.td,{children:"Period after which all mint, swap & burn limits are reset (in Unix time/seconds, default 1 day)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable all aggregated token deposits (",(0,a.jsx)(s.code,{children:"B1/usd"})," minting is disabled)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," that must be minted per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"mints_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"10000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily ",(0,a.jsx)(s.code,{children:"B1/usd"})," issuance"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemption per transaction (spam prevention)"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burns_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of ",(0,a.jsx)(s.code,{children:"B1/usd"})," redemptions"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_disabled"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"boolean"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"false"})}),(0,a.jsxs)(s.td,{children:[(0,a.jsx)(s.code,{children:"true"})," to disable basket swaps"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100"})}),(0,a.jsxs)(s.td,{children:["Minimum amount of aggregate tokens, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"}),", that must be swapped in a single transaction"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps_max"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"100000000000"})}),(0,a.jsxs)(s.td,{children:["Maximum cumulative daily amount of basket swaps, expressed in ",(0,a.jsx)(s.code,{children:"B1/usd"})]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap_fee"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Percentage fee to be paid for swapping tokens. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"slippage_fee_min"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.0015"})}),(0,a.jsx)(s.td,{children:"Minimum percentage to be paid as penalty for disbalancing the basket. Decimal from 0 to 1, default 0.0015 (0.15%)"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"surplus"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"[]sdk.Coin"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:'["1000ukex","20000ueth"]'})}),(0,a.jsx)(s.td,{children:"Insurance funds from excess tokens accumulated as result of fee rewards from KIRA\u2019s staking derivative and/or swaps fees"})]})]})]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"BasketToken type"})}),"\n",(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"NAME"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"TYPE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"EXAMPLE"})}),(0,a.jsx)(s.th,{children:(0,a.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"denom"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"string"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"usdt"})}),(0,a.jsx)(s.td,{children:"Denom of one of the aggregate tokens"})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"weight"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"float"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"0.99"})}),(0,a.jsx)(s.td,{children:"Relative value of the token to its underlying derivative. Here, 100 deposit should result in 99 issuance."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"amount"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"int"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"1000000"})}),(0,a.jsxs)(s.td,{children:["Total deposited amount of ",(0,a.jsx)(s.code,{children:"usdt"})," available for withdrawal"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"deposits"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if deposits of ",(0,a.jsx)(s.code,{children:"usdt"})," resulting in minting are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"withdraws"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if withdrawals of ",(0,a.jsx)(s.code,{children:"usdt"})," as result of burns are allowed"]})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swaps"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"bool"})}),(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"true"})}),(0,a.jsxs)(s.td,{children:["Defines if swaps of ",(0,a.jsx)(s.code,{children:"usdt"})," for other tokens are allowed"]})]})]})]}),"\n",(0,a.jsx)(s.h2,{id:"097ff40bd32544e69bd7c9d4748f8df7",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(s.em,{children:"documentation for more details."})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$SIGNER"})})," ",(0,a.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(s.em,{children:(0,a.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(s.em,{children:"and"})," ",(0,a.jsxs)(s.em,{children:[(0,a.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(s.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(s.h2,{id:"30bfcd03f11d4db7861628860a95e7b6",children:"Transactions"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"mint-basket-tokens"})}),(0,a.jsx)(s.th,{children:"Deposit aggregated tokens into a basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"burn-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Withdraw aggregated tokens from a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"swap-basket-tokens"})}),(0,a.jsx)(s.td,{children:"Swap tokens within a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-deposits"})}),(0,a.jsx)(s.td,{children:"Disable deposits into baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-withdraws"})}),(0,a.jsx)(s.td,{children:"Disable withdrawals from baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"disable-basket-swaps"})}),(0,a.jsx)(s.td,{children:"Disable swaps in baskets (emergency)."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"basket-claim-rewards"})}),(0,a.jsx)(s.td,{children:"Claim rewards from staking derivative baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"3a7f68279fba4c2d91b2428de6ba5276",children:"Deposit aggregated tokens into basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"mint-basket-tokens"})," command is used to deposit aggregated tokens into a specific basket, identified by ",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DEPOSIT_AMOUNTS"}),": Coin denomination and amount to be deposited, formatted as ",(0,a.jsx)(s.code,{children:""})," or as a comma-separated list."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket mint-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DEPOSIT_AMOUNTS\n"})}),(0,a.jsx)(s.h4,{id:"90d712248db44c1bbc09d5f2317af4f0",children:"Withdraw aggregated tokens from basket"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"burn-basket-tokens"})," command allows for the withdrawal of aggregated tokens from a basket by burning the corresponding amount of basket token ",(0,a.jsx)(s.code,{children:"$REDEMPTION"}),"."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$REDEMPTION"}),": Amount of basket token to be redeemed, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket burn-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $REDEMPTION\n"})}),(0,a.jsx)(s.h4,{id:"eb2c7bea02754d51a72b2e60257835b5",children:"Swap basket tokens"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"swap-basket-tokens"})," command is used for swapping tokens within a basket, alternating pairs of input token amounts and their corresponding desired output tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IN_AMOUNTn"})," and ",(0,a.jsx)(s.code,{children:"$OUT_TOKENn"}),": Pairs of the amount of a token to swap from and the token to swap to, formatted as ",(0,a.jsx)(s.code,{children:""}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket swap-basket-tokens \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $IN_AMOUNT1 $OUT_TOKEN1 $IN_AMOUNT2 $OUT_TOKEN2 (...)\n"})}),(0,a.jsx)(s.h4,{id:"8645486cd3d84de4acf812a490aefcb7",children:"Disable basket deposits, withdrawals, and swaps (emergency)"}),(0,a.jsxs)(s.p,{children:["Commands like ",(0,a.jsx)(s.code,{children:"disable-basket-deposits"}),", ",(0,a.jsx)(s.code,{children:"disable-basket-withdraws"}),", and ",(0,a.jsx)(s.code,{children:"disable-basket-swaps"})," are used to globally disable respective basket abilities, requiring sudo permission 61."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": Unique ID of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DISABLED"}),": Boolean (",(0,a.jsx)(s.code,{children:"true"})," to disable the ability)."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket disable-basket-deposits \\\n--from=$SIGNER $FLAGS_TX \\\n$BASKET_ID $DISABLED\n"})}),(0,a.jsx)(s.h4,{id:"d302bf9450344b4b8959aa731d8f6bce",children:"Claim derivatives basket rewards"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"basket-claim-rewards"})," command is used to claim outstanding rewards of staking derivative baskets for one or many aggregate ",(0,a.jsx)(s.code,{children:"V"})," tokens."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS"}),": A list of coins specifying the amount and denomination."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket basket-claim-rewards \\\n--from=$SIGNER $FLAGS_TX \\\n$TOKENS\n"})})]}),(0,a.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(s.h2,{id:"7d27c0249006442d9cb2d2d7f6829c95",children:"Queries"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"token-basket-by-denom"})}),(0,a.jsx)(s.th,{children:"Query a single basket by its denominat"})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-basket-by-id"})}),(0,a.jsx)(s.td,{children:"Query details of a basket by its ID."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"token-baskets"})}),(0,a.jsx)(s.td,{children:"List baskets filtered by denominations/derivatives."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-mints"})}),(0,a.jsx)(s.td,{children:"Query historical mints for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-burns"})}),(0,a.jsx)(s.td,{children:"Query historical burns for a basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"historical-swaps"})}),(0,a.jsx)(s.td,{children:"Query historical swaps made in a basket."})]})]})]}),(0,a.jsx)(s.h4,{id:"73a9aefa563946c58360b0d0fe187f35",children:"Query basket by denomination"}),(0,a.jsxs)(s.p,{children:["Retrieve a single token basket based on its denomination using the ",(0,a.jsx)(s.code,{children:"token-basket-by-denom"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOM"}),": The token denomination of the basket, formatted as ",(0,a.jsx)(s.code,{children:"B/"}),"."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-denom $DENOM $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"960d7be6739e4d8ba45956c94d2f1653",children:"Query basket by id"}),(0,a.jsxs)(s.p,{children:["Retrieve details of a token basket using its unique ID with the ",(0,a.jsx)(s.code,{children:"token-basket-by-id"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The unique identifier of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-basket-by-id $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e83b30b0043148e3be023e966ef67bba",children:"List token baskets"}),(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If ",(0,a.jsx)(s.code,{children:"$DENOMS"})," is not provided, it returns all token baskets."]})}),(0,a.jsxs)(s.p,{children:["Retrieve token baskets by filtering them based on aggregated token denominations and staking derivatives using the ",(0,a.jsx)(s.code,{children:"token-baskets"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DENOMS"}),": A comma-separated list of token denominations."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$IS_DERIVATIVE"}),": Specify if the tokens are staking derivatives (",(0,a.jsx)(s.code,{children:"true"})," or ",(0,a.jsx)(s.code,{children:"false"}),")."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket token-baskets $DENOMS $IS_DERIVATIVE $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"6bd3ad80788a49bf89968bfdd4d993c1",children:"Query historical mints"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical mints for a token basket within the specified ",(0,a.jsx)(s.code,{children:"limits_period"})," using the ",(0,a.jsx)(s.code,{children:"historical-mints"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-mints $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"e4c7b1471e6a425098e9757badb898bd",children:"Query historical burns"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical burns for a token basket using the ",(0,a.jsx)(s.code,{children:"historical-burns"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-burns $BASKET_ID $FLAGS_QR | jq\n"})}),(0,a.jsx)(s.h4,{id:"5223c1d7ab66430a9cc477b185a62642",children:"Query historical swaps"}),(0,a.jsxs)(s.p,{children:["Retrieve a list of historical swaps made in a token basket with the ",(0,a.jsx)(s.code,{children:"historical-swaps"})," command."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the token basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid query basket historical-swaps $BASKET_ID $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(s.h2,{id:"775c6181c6754e6a8f53f1202e2ff4ca",children:"Governance"}),(0,a.jsxs)(s.table,{children:[(0,a.jsx)(s.thead,{children:(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.th,{children:(0,a.jsx)(s.code,{children:"proposal-create-basket"})}),(0,a.jsx)(s.th,{children:"Create a proposal to create a new token basket."})]})}),(0,a.jsxs)(s.tbody,{children:[(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-edit-basket"})}),(0,a.jsx)(s.td,{children:"Create a proposal to edit an existing token basket."})]}),(0,a.jsxs)(s.tr,{children:[(0,a.jsx)(s.td,{children:(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})}),(0,a.jsx)(s.td,{children:"Create a proposal to withdraw surplus from baskets."})]})]})]}),(0,a.jsx)(s.h4,{id:"07ad892215ee4b78a824587f8ab87eb8",children:"Creating and updating a token basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-create-basket"})," CLI command creates a token basket proposal. To vote on this proposal, accounts require permission 59. This command allows for specifying various parameters related to the basket such as its suffix, description, tokens included, and various limits and fees associated with the basket."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_SUFFIX"}),": The suffix of the basket token."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_DESCRIPTION"}),": The description of the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_TOKENS"}),": Comma-separated list of aggregated tokens with corresponding rates and abilities."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TOKENS_CAP"}),": Tokens cap on the basket."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$LIMITS_PERIOD"}),": Period after which limits are reset."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_DISABLED"}),": Disable all basket\u2019s deposits."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MIN"}),": Minimum amount of basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$MINTS_MAX"}),": Maximum cumulative daily basket token issuance."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_DISABLED"}),": Disable all basket\u2019s redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MIN"}),": Minimum amount of basket token redemption."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BURNS_MAX"}),": Maximum cumulative daily amount of basket token redemptions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_DISABLED"}),": Disable all basket swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MIN"}),": Minimum amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAPS_MAX"}),": Maximum cumulative daily amount of aggregated tokens swaps."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SWAP_FEE"}),": Percentage fee for swapping tokens."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$SLIPPAGE_FEE_MIN"}),": Minimum percentage penalty for disbalancing the basket."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-create-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"76b8b2489e2241c8bd45e9076798e1df",children:"Editing an existing token basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-edit-basket"})," CLI command is used to edit existing baskets. This editing process requires governance permissions similar to those required for creating a basket, and the basket\u2019s ID (",(0,a.jsx)(s.code,{children:"$BASKET_ID"}),") must be specified."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Similar flags to ",(0,a.jsx)(s.code,{children:"proposal-create-basket"}),"."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_ID"}),": The ID of the basket to be edited."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx basket proposal-edit-basket \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--basket-suffix=$BASKET_SUFFIX --basket-description=$BASKET_DESCRIPTION \\\n--basket-tokens=$BASKET_TOKENS --tokens-cap=$TOKENS_CAP --limits-period=$LIMITS_PERIOD \\\n--mints-disabled=$MINTS_DISABLED \\\n--mints-min=$MINTS_MIN --mints-max=$MINTS_MAX \\\n--burns-disabled=$BURNS_DISABLED \\\n--burns-min=$BURNS_MIN --burns-max=$BURNS_MAX \\\n--swaps-disabled=$SWAPS_DISABLED \\\n--swaps-min=$SWAPS_MIN --swaps-max=$SWAPS_MAX \\\n--swap-fee=$SWAP_FEE --slippage-fee-min=$SLIPPAGE_FEE_MIN\n"})}),(0,a.jsx)(s.h4,{id:"618b95deb0154e119dd71f4e98cf02e4",children:"Withdrawing surplus from a basket proposal"}),(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.code,{children:"proposal-basket-withdraw-surplus"})," CLI command is for creating a proposal to withdraw surplus from specific baskets."]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Args"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$BASKET_IDS"}),": A comma-separated list of basket IDs from which the surplus will be withdrawn."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$RECEIVER_ADDR"}),": The target address for the surplus withdrawal."]}),"\n"]}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"Flags"})}),(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal-basket-withdraw-surplus \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var t=n(5893);function r(e){let{children:s,hidden:n,className:r}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>v});var a=n(7294),i=n(6905),t=n(2466),r=n(6550),l=n(469),d=n(1980),c=n(7392),h=n(12);function o(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function m(e){const{values:s,children:n}=e;return(0,a.useMemo)((()=>{const e=s??function(e){return o(e).map((e=>{let{props:{value:s,label:n,attributes:a,default:i}}=e;return{value:s,label:n,attributes:a,default:i}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function j(e){let{queryString:s=!1,groupId:n}=e;const i=(0,r.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(t),(0,a.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(i.location.search);s.set(t,e),i.replace({...i.location,search:s.toString()})}),[t,i])]}function p(e){const{defaultValue:s,queryString:n=!1,groupId:i}=e,t=m(e),[r,d]=(0,a.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:s,tabValues:t}))),[c,o]=j({queryString:n,groupId:i}),[p,u]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[i,t]=(0,h.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:i}),g=(()=>{const e=c??p;return x({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);d(e),o(e),u(e)}),[o,u,t]),tabValues:t}}var u=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function f(e){let{className:s,block:n,selectedValue:a,selectValue:r,tabValues:l}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),h=e=>{const s=e.currentTarget,n=d.indexOf(s),i=l[n].value;i!==a&&(c(s),r(i))},o=e=>{let s=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:a===s?0:-1,"aria-selected":a===s,ref:e=>d.push(e),onKeyDown:o,onClick:h,...t,className:(0,i.Z)("tabs__item",g.tabItem,t?.className,{"tabs__item--active":a===s}),children:n??s},s)}))})}function k(e){let{lazy:s,children:n,selectedValue:i}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==i})))})}function N(e){const s=p(e);return(0,b.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(f,{...e,...s}),(0,b.jsx)(k,{...e,...s})]})}function v(e){const s=(0,u.Z)();return(0,b.jsx)(N,{...e,children:o(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>r});var a=n(7294);const i={},t=a.createContext(i);function r(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ac024f28.220fbd21.js b/assets/js/ac024f28.220fbd21.js deleted file mode 100644 index 177ebcc..0000000 --- a/assets/js/ac024f28.220fbd21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[700],{8363:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>j,frontMatter:()=>o,metadata:()=>t,toc:()=>h});var r=i(5893),n=i(1151),l=i(4866),d=i(5162);const o={title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},c=void 0,t={id:"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions",title:"Roles & Permissions",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Roles & Permissions",sidebar_position:4,slug:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},sidebar:"defaultSidebar",previous:{title:"Councilors & governance ranking",permalink:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e"},next:{title:"Polls",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243"}},a={},h=[{value:"Concept",id:"c77098bc9e8041d3acd7dd398e7ce168",level:2},{value:"Permissions",id:"ea6396ff8b684c33be953070bdcf0c51",level:4},{value:"Roles",id:"f7f0069d7e1946fdb56c457decd61991",level:4},{value:"Role & account permission conflicts",id:"52640fd598564b83a8e9fb3cdfce60fb",level:4},{value:"Parameters",id:"7a84ff7ef7da4a5788f659d6e6b40ef9",level:2},{value:"Permissions",id:"a516249604cb46369b786e5027ea2e21",level:4},{value:"Roles",id:"7e46e604d88f4bf5a973278b7a07fc98",level:4},{value:"Cli syntax & examples",id:"20129a3a61f14bba9861c2ce8a335580",level:2},{value:"Transactions",id:"6956f08df3304390b41be91ffec19717",level:2},{value:"Create role",id:"05f8eb77251f4664b5db97fd10c85434",level:4},{value:"Assign role",id:"de3cc4eb44cc480f9f85d2613a052e2c",level:4},{value:"Remove role",id:"86664c10b2854fcea46b0fc465fc7133",level:4},{value:"Whitelist role permission",id:"9412158de9b64d889bcb9957f4c9d8a2",level:4},{value:"Blacklist role\u2019s permission",id:"dd9cce6cffdb4b06b89242b13892d8ee",level:4},{value:"Remove role\u2019s whitelisted permission",id:"08639ca85c164ac4bd0c035bfe232a9f",level:4},{value:"Remove role\u2019s blacklisted permission",id:"41e4a72abd5349489db98323b5ba9d73",level:4},{value:"Whitelist account permission",id:"806238882b114b9b818e6a4b93ae3dee",level:4},{value:"Remove account whitelisted permission",id:"73c6b6b57b1e40d19dd9b4b091a2ac10",level:4},{value:"Blacklist account\u2019s permission",id:"7e6f13bfe51a44f4a2d1125572528767",level:4},{value:"Remove account\u2019s blacklisted permissions",id:"c254a608b08b401b98a80afa5c721cbf",level:4},{value:"Queries",id:"d4546bd70d5747b0b56c7b5a5f90ba05",level:2},{value:"Query address permissions",id:"1018f8a098ca4fc9891ecaffe65b0339",level:4},{value:"Query addresses by whitelisted permission",id:"d64eae3fd3ce4145a744034780ddc81a",level:4},{value:"Query addresses by blacklisted permission",id:"ec0852ec6a0a40a787bd2e8a8836a769",level:4},{value:"Query all registered roles",id:"848cd8553b3944c9bc4cf25bb3bd85b2",level:4},{value:"Query roles assigned to an address",id:"a719c37b64024561a35c9ad33b079087",level:4},{value:"Query role by sid",id:"77f5556c25ce49bb873b2fccd2a75877",level:4},{value:"Query addresses by whitelisted role",id:"ff2f390f256f426494b137a77239437f",level:4},{value:"Governance",id:"f8617dce42da4177a1015785d162b8d0",level:2},{value:"Assign role to account",id:"2cba8bc4ac50409f9af216999523c632",level:4},{value:"Unassign role from account",id:"e99b9d5473494b51b34730686f4d8e1a",level:4},{value:"Blacklist permission for account",id:"b17783c615fe489f9a6550edb1bcc84f",level:4},{value:"Remove blacklisted permission from account",id:"7c12a8e15a03468d87431ea5d4468b3d",level:4},{value:"Whitelist permission for account",id:"1074bc39423844269d35aded62d9f3b4",level:4},{value:"Remove whitelisted permission from account",id:"dc2d828fb55e44dd88188df10db25cf1",level:4},{value:"Create role",id:"a5fc56bdaaf2483187994e6efcae14f5",level:4},{value:"Remove role",id:"539e8162fe6a4eb6833a3e99172225c5",level:4},{value:"Whitelist permission for role",id:"6ecd24fdd2934c9c8c163afea00da82d",level:4},{value:"Remove whitelisted permission from role",id:"1b6b5015b7d34dfb8779e5f3752c56fb",level:4},{value:"Blacklist permission for role",id:"e6cd57ceb5544e7c948187a8ce51b704",level:4},{value:"Remove blacklisted permission from role",id:"6cff372affa745ef8edbe5525b774a4e",level:4}];function x(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"c77098bc9e8041d3acd7dd398e7ce168",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"KIRA governance system utilizes a combination of Roles & Permissions to create a multi-layered governance structure that enables a diverse range of councilors to participate and contribute to the network's decision-making processes. The system operates with just two rules enabling it to bootstrap and evolve almost any imaginable governance model. The rules state that :"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"Only whitelisted actors can execute on-chain actions (submit transactions of a given type)."}),"\n",(0,r.jsx)(s.li,{children:"Whitelisted actors can only execute on-chain actions that they have been given the permission to execute."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"For example, a multicameral system can be created where subsets of councilors specialize in creating and voting on specific subsets of proposals. Alternatively, a separation of power through checks and balances can be implemented, preventing a single governance branch from achieving a privileged position. Overall, the KIRA governance system is designed to be flexible and adaptable, allowing it to constantly improve its efficiency and decentralization without relying on factors such as wealth or stake distribution. This makes it an effective tool for ensuring that network actors are motivated and aligned towards common goals, which is crucial for achieving consensus within the network."}),"\n",(0,r.jsx)(s.h4,{id:"ea6396ff8b684c33be953070bdcf0c51",children:"Permissions"}),"\n",(0,r.jsxs)(s.p,{children:["In KIRA network, every type of transaction that can be sent to SEKAI has a unique permission identifier associated with it and there exist two types of permissions: governance permissions and sudo permissions. Governance permissions allow changes to be made through a governance proposal process, and is always associated with two permissions: proposal creation and voting. Sudo permissions, on the other hand, allow users to make changes directly, bypassing any governance proposal. These permission identifiers can be added to the whitelist or blacklist of an individual KIRA account or a role \u2014 more on this in the following section. If the permission identifier is on the account's whitelist, the account is able to send the corresponding transaction to the blockchain. If the identifier is not on the account's whitelist or is on its blacklist, the account is not able to send the transaction, with the exception of ",(0,r.jsx)(s.code,{children:"MsgSend"}),", and ",(0,r.jsx)(s.code,{children:"MsgMultiSend"})," transactions. For example, if you want to allow a KIRA account to claim a validator seat on the blockchain, you must add the ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," permission to its whitelist. Only then will the account be able to use the ",(0,r.jsx)(s.code,{children:"claim-validator-seat"})," CLI command to send the ",(0,r.jsx)(s.code,{children:"MsgClaimValidator"})," transaction."]}),"\n",(0,r.jsx)(s.h4,{id:"f7f0069d7e1946fdb56c457decd61991",children:"Roles"}),"\n",(0,r.jsxs)(s.p,{children:["To make it easier to manage hundreds of different permissions, KIRA uses a concept of roles. A role is a collection of permissions that can be associated to a specific KIRA address. This allows the network to manage the permissions of all addresses associated with a role at once, rather than having to change permissions for each individual address. Each permission assigned to a role or individual address can have its own defined parameters, which can be used as input for the function that is triggered when a network actor submits a particular type of transaction. These parameters allow for more granular control of permissions, ensuring that the responsibilities and power of individual network actors can vary widely within the governance model. If the permissions associated with a role are changed, the permissions of all accounts that have been assigned that role will also be changed. Roles can be assigned either by a group of governance members with the appropriate permissions ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," and ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"}),", or by a sudo member ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),"\n",(0,r.jsx)(s.h4,{id:"52640fd598564b83a8e9fb3cdfce60fb",children:"Role & account permission conflicts"}),"\n",(0,r.jsx)(s.p,{children:"Permissions in the KIRA governance system can be managed at both account and role levels, each with separate whitelists and blacklists. Within the same type (account or role), a permission cannot be present on both the whitelist and the blacklist. In other words, if a permission is on a role's blacklist, it cannot be added to the role's whitelist, and vice versa. The same rule applies to account whitelists and blacklists."}),"\n",(0,r.jsx)(s.p,{children:"It is important to note that conflicting permissions between account and role levels are possible. In cases where conflicts arise between an account's and a role's whitelists and blacklists, the blacklisted permissions always take precedence. This means that if a permission is blacklisted at either the account or role level, the user will be denied that permission, regardless of any whitelists."}),"\n",(0,r.jsx)(s.admonition,{type:"tip",children:(0,r.jsxs)(s.p,{children:["Suppose a user has permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," whitelisted on their account and is also assigned to a role that has permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," blacklisted. In this case, the user will be denied permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"}),", as the blacklisted permission takes precedence over the whitelisted permission."]})}),"\n",(0,r.jsx)(s.h2,{id:"7a84ff7ef7da4a5788f659d6e6b40ef9",children:"Parameters"}),"\n",(0,r.jsx)(s.h4,{id:"a516249604cb46369b786e5027ea2e21",children:"Permissions"}),"\n",(0,r.jsxs)(s.p,{children:["Existing permissions and their correspond types and identifiers are listed ",(0,r.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/permission.proto",children:"here"}),", or in the following page:"]}),"\n",(0,r.jsx)(s.h4,{id:"7e46e604d88f4bf5a973278b7a07fc98",children:"Roles"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"TYPE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"EXAMPLE"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"id"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"int"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"1"})}),(0,r.jsx)(s.td,{children:"Identification number of the role - auto assigned"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"sid"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some name"})}),(0,r.jsx)(s.td,{children:"Unique identification name of the role"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"description"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"string"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"some text"})}),(0,r.jsx)(s.td,{children:"Description of the role"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"20129a3a61f14bba9861c2ce8a335580",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"6956f08df3304390b41be91ffec19717",children:"Transactions"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"role create role"})}),(0,r.jsx)(s.th,{children:"Create a new role with permissions."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role assign"})}),(0,r.jsx)(s.td,{children:"Assign a role to an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role unassign role"})}),(0,r.jsx)(s.td,{children:"Remove a role from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Blacklist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Remove a whitelisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Remove a blacklisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Whitelist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission whitelist"})}),(0,r.jsx)(s.td,{children:"Assign a permission to an account's whitelist."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission blacklist"})}),(0,r.jsx)(s.td,{children:"Assign a permission to an account's blacklist."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission remove-whitelisted"})}),(0,r.jsx)(s.td,{children:"Remove a whitelisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"permission remove-blacklisted"})}),(0,r.jsx)(s.td,{children:"Remove a blacklisted permission from an account."})]})]})]}),(0,r.jsx)(s.h4,{id:"05f8eb77251f4664b5db97fd10c85434",children:"Create role"}),(0,r.jsxs)(s.p,{children:["Create a new role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"create"})," command followed by the role's unique identifier ",(0,r.jsx)(s.code,{children:"$ROLE_SID"})," and a description ",(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Variables"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": Unique string identifier for the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": A brief description of the role."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role create role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,r.jsx)(s.h4,{id:"de3cc4eb44cc480f9f85d2613a052e2c",children:"Assign role"}),(0,r.jsxs)(s.p,{children:["Assign a role with sudo permissions to an account using the ",(0,r.jsx)(s.code,{children:"assign"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be assigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address to which the role will be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role assign \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,r.jsx)(s.h4,{id:"86664c10b2854fcea46b0fc465fc7133",children:"Remove role"}),(0,r.jsxs)(s.p,{children:["Remove a role with sudo permissions from an account using the ",(0,r.jsx)(s.code,{children:"remove role"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role to be removed."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TARGET_ADDRESS"}),": The target address from which the role will be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove role \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID --addr=$TARGET_ADDRESS\n"})}),(0,r.jsx)(s.h4,{id:"9412158de9b64d889bcb9957f4c9d8a2",children:"Whitelist role permission"}),(0,r.jsxs)(s.p,{children:["Whitelist a permission to a role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"whitelist-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be whitelisted."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"dd9cce6cffdb4b06b89242b13892d8ee",children:"Blacklist role\u2019s permission"}),(0,r.jsxs)(s.p,{children:["Blacklist a permission for a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"blacklist-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the permission to be blacklisted."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"08639ca85c164ac4bd0c035bfe232a9f",children:"Remove role\u2019s whitelisted permission"}),(0,r.jsxs)(s.p,{children:["Remove a whitelisted permission from a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the whitelisted permission to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"41e4a72abd5349489db98323b5ba9d73",children:"Remove role\u2019s blacklisted permission"}),(0,r.jsxs)(s.p,{children:["Remove a blacklisted permission from a governance role with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"})," command followed by the role's identifier ",(0,r.jsx)(s.code,{children:"$ROLE_ID"})," and the permission's identifier ",(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),"."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_ID"}),": The unique identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The unique identifier of the blacklisted permission to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n$ROLE_ID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"806238882b114b9b818e6a4b93ae3dee",children:"Whitelist account permission"}),(0,r.jsxs)(s.p,{children:["Assign permission to a Kira address whitelist with sudo permissions using the ",(0,r.jsx)(s.code,{children:"whitelist"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission whitelist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"73c6b6b57b1e40d19dd9b4b091a2ac10",children:"Remove account whitelisted permission"}),(0,r.jsxs)(s.p,{children:["Remove whitelisted permission from an address with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-whitelisted"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-whitelisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"7e6f13bfe51a44f4a2d1125572528767",children:"Blacklist account\u2019s permission"}),(0,r.jsxs)(s.p,{children:["Assign permission to a Kira account blacklist with sudo permissions using the ",(0,r.jsx)(s.code,{children:"blacklist"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions should be set."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be assigned."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission blacklist \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})}),(0,r.jsx)(s.h4,{id:"c254a608b08b401b98a80afa5c721cbf",children:"Remove account\u2019s blacklisted permissions"}),(0,r.jsxs)(s.p,{children:["Remove blacklisted permission from an address with sudo permissions using the ",(0,r.jsx)(s.code,{children:"remove-blacklisted"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which permissions should be removed."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION"}),": The permission value to be removed."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov permission remove-blacklisted \\\n--from=$SIGNER $FLAGS_TX \\\n--addr=$ADDRESS --permission=$PERMISSION\n"})})]}),(0,r.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(s.h2,{id:"d4546bd70d5747b0b56c7b5a5f90ba05",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"permissions"})}),(0,r.jsx)(s.th,{children:"Query permissions of a specific KIRA address."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"whitelisted-permission-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a whitelisted permission."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"blacklisted-permission-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a blacklisted permission."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"all-roles"})}),(0,r.jsx)(s.td,{children:"Query all registered roles in the KIRA network."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"roles"})}),(0,r.jsx)(s.td,{children:"Query roles assigned to a specific KIRA address."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"role"})}),(0,r.jsx)(s.td,{children:"Query information about a role using its Service Identifier (SID)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"whitelisted-role-addresses"})}),(0,r.jsx)(s.td,{children:"Query addresses associated with a whitelisted role."})]})]})]}),(0,r.jsx)(s.h4,{id:"1018f8a098ca4fc9891ecaffe65b0339",children:"Query address permissions"}),(0,r.jsxs)(s.p,{children:["Retrieve the permissions associated with a specific KIRA address using the ",(0,r.jsx)(s.code,{children:"permissions"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDR"}),": The address whose permissions are to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov permissions $ADDR $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"d64eae3fd3ce4145a744034780ddc81a",children:"Query addresses by whitelisted permission"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific whitelisted permission using the ",(0,r.jsx)(s.code,{children:"whitelisted-permission-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERM"}),": The whitelisted permission value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"ec0852ec6a0a40a787bd2e8a8836a769",children:"Query addresses by blacklisted permission"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses that are associated with a specific blacklisted permission using the ",(0,r.jsx)(s.code,{children:"blacklisted-permission-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERM"}),": The blacklisted permission value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov blacklisted-permission-addresses $PERM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"848cd8553b3944c9bc4cf25bb3bd85b2",children:"Query all registered roles"}),(0,r.jsxs)(s.p,{children:["Retrieve a list of all registered roles in the KIRA network using the ",(0,r.jsx)(s.code,{children:"all-roles"})," command."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov all-roles $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"a719c37b64024561a35c9ad33b079087",children:"Query roles assigned to an address"}),(0,r.jsxs)(s.p,{children:["Retrieve the roles assigned to a specific KIRA address using the ",(0,r.jsx)(s.code,{children:"roles"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDR"}),": The address whose roles are to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov roles $ADDR $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"77f5556c25ce49bb873b2fccd2a75877",children:"Query role by sid"}),(0,r.jsxs)(s.p,{children:["Retrieve information about a specific role using its SID (Service Identifier) with the ",(0,r.jsx)(s.strong,{children:(0,r.jsx)(s.code,{children:"role"})})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_IDENTIFIER"}),": The SID of the role to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov role $ROLE_IDENTIFIER $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"ff2f390f256f426494b137a77239437f",children:"Query addresses by whitelisted role"}),(0,r.jsxs)(s.p,{children:["List all KIRA addresses associated with a specific whitelisted role using the ",(0,r.jsx)(s.code,{children:"whitelisted-role-addresses"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE"}),": The whitelisted role value to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query customgov whitelisted-role-addresses $ROLE $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"f8617dce42da4177a1015785d162b8d0",children:"Governance"}),(0,r.jsxs)(s.p,{children:["To assign governance permissions, a group of governance members must submit and vote a proposal using ",(0,r.jsx)(s.code,{children:"whitelist-permission"})," with the appropriate proposal creation permission 4 and voting permission 5. Sudo permissions can be assigned by an account which has the permission 1."]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposal account assign-role"})}),(0,r.jsx)(s.th,{children:"Proposal to assign a role to an address."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account unassign-role"})}),(0,r.jsx)(s.td,{children:"Proposal to unassign a role from an address."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to blacklist a permission for an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to whitelist a permission for an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal account remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from an account."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role create"})}),(0,r.jsx)(s.td,{children:"Proposal to create a new role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove"})}),(0,r.jsx)(s.td,{children:"Proposal to remove an existing role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role whitelist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to whitelist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove-whitelisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a whitelisted permission from a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role blacklist-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to blacklist a permission for a role."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"proposal role remove-blacklisted-permission"})}),(0,r.jsx)(s.td,{children:"Proposal to remove a blacklisted permission from a role."})]})]})]}),(0,r.jsx)(s.h4,{id:"2cba8bc4ac50409f9af216999523c632",children:"Assign role to account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"assign-role"}),", is utilized to create a proposal for assigning a role to an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be assigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address to which the role will be assigned. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account assign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"e99b9d5473494b51b34730686f4d8e1a",children:"Unassign role from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"unassign-role"}),", creates a proposal for unassigning a role from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be unassigned."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the role will be unassigned. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account unassign-role \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"b17783c615fe489f9a6550edb1bcc84f",children:"Blacklist permission for account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"blacklist-permission"}),", is for creating a proposal to blacklist a specific permission for an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"7c12a8e15a03468d87431ea5d4468b3d",children:"Remove blacklisted permission from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the blacklisted permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the blacklisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"1074bc39423844269d35aded62d9f3b4",children:"Whitelist permission for account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"whitelist-permission"}),", is used for creating a proposal to whitelist a specific permission for an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address for which permissions will be set. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx customgov proposal account whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"dc2d828fb55e44dd88188df10db25cf1",children:"Remove whitelisted permission from account"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from an address."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the whitelisted permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ADDRESS"}),": The address from which the whitelisted permission will be removed. Requires a valid blockchain address."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal account remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--address=$ADDRESS \\\n$PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"a5fc56bdaaf2483187994e6efcae14f5",children:"Create role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"create"}),", is for raising a governance proposal to create a new role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the new role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_DESCRIPTION"}),": The description of the new role."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$WHITELIST_PERMS"}),": A comma-separated list of permission IDs to be whitelisted for the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$BLACKLIST_PERMS"}),": A comma-separated list of permission IDs to be blacklisted for the role."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--whitelist-perms=$WHITELIST_PERMS \\\n--blacklist-perms=$BLACKLIST_PERMS \\\n$ROLE_SID $ROLE_DESCRIPTION\n"})}),(0,r.jsx)(s.h4,{id:"539e8162fe6a4eb6833a3e99172225c5",children:"Remove role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove"}),", raises a governance proposal for removing an existing role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role to be removed."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID\n"})}),(0,r.jsx)(s.h4,{id:"6ecd24fdd2934c9c8c163afea00da82d",children:"Whitelist permission for role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"whitelist-permission"}),", is for whitelisting permissions for a specific role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be whitelisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role whitelist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"1b6b5015b7d34dfb8779e5f3752c56fb",children:"Remove whitelisted permission from role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-whitelisted-permission"}),", removes a whitelisted permission from a role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-whitelisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"e6cd57ceb5544e7c948187a8ce51b704",children:"Blacklist permission for role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"blacklist-permission"}),", is for blacklisting permissions for a specific role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be blacklisted. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role blacklist-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})}),(0,r.jsx)(s.h4,{id:"6cff372affa745ef8edbe5525b774a4e",children:"Remove blacklisted permission from role"}),(0,r.jsxs)(s.p,{children:["The CLI command, ",(0,r.jsx)(s.code,{children:"remove-blacklisted-permission"}),", removes a blacklisted permission from a role."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ROLE_SID"}),": The string identifier of the role."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$PERMISSION_ID"}),": The ID of the permission to be removed. Must be an integer."]}),"\n"]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The proposal\u2019s description."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal role remove-blacklisted-permission \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$ROLE_SID $PERMISSION_ID\n"})})]})]})]})}function j(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}},5162:(e,s,i)=>{i.d(s,{Z:()=>d});i(7294);var r=i(6905);const n={tabItem:"tabItem_Ymn6"};var l=i(5893);function d(e){let{children:s,hidden:i,className:d}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,d),hidden:i,children:s})}},4866:(e,s,i)=>{i.d(s,{Z:()=>S});var r=i(7294),n=i(6905),l=i(2466),d=i(6550),o=i(469),c=i(1980),t=i(7392),a=i(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:i}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:i,attributes:r,default:n}}=e;return{value:s,label:i,attributes:r,default:n}}))}(i);return function(e){const s=(0,t.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,i])}function j(e){let{value:s,tabValues:i}=e;return i.some((e=>e.value===s))}function m(e){let{queryString:s=!1,groupId:i}=e;const n=(0,d.k6)(),l=function(e){let{queryString:s=!1,groupId:i}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:s,groupId:i});return[(0,c._X)(l),(0,r.useCallback)((e=>{if(!l)return;const s=new URLSearchParams(n.location.search);s.set(l,e),n.replace({...n.location,search:s.toString()})}),[l,n])]}function p(e){const{defaultValue:s,queryString:i=!1,groupId:n}=e,l=x(e),[d,c]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=i.find((e=>e.default))??i[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:l}))),[t,h]=m({queryString:i,groupId:n}),[p,u]=function(e){let{groupId:s}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(s),[n,l]=(0,a.Nk)(i);return[n,(0,r.useCallback)((e=>{i&&l.set(e)}),[i,l])]}({groupId:n}),b=(()=>{const e=t??p;return j({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{b&&c(b)}),[b]);return{selectedValue:d,selectValue:(0,r.useCallback)((e=>{if(!j({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),u(e)}),[h,u,l]),tabValues:l}}var u=i(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=i(5893);function g(e){let{className:s,block:i,selectedValue:r,selectValue:d,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:t}=(0,l.o5)(),a=e=>{const s=e.currentTarget,i=c.indexOf(s),n=o[i].value;n!==r&&(t(s),d(n))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;s=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;s=c[i]??c[c.length-1];break}}s?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":i},s),children:o.map((e=>{let{value:s,label:i,attributes:l}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>c.push(e),onKeyDown:h,onClick:a,...l,className:(0,n.Z)("tabs__item",b.tabItem,l?.className,{"tabs__item--active":r===s}),children:i??s},s)}))})}function I(e){let{lazy:s,children:i,selectedValue:n}=e;const l=(Array.isArray(i)?i:[i]).filter(Boolean);if(s){const e=l.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:l.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==n})))})}function v(e){const s=p(e);return(0,f.jsxs)("div",{className:(0,n.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(g,{...e,...s}),(0,f.jsx)(I,{...e,...s})]})}function S(e){const s=(0,u.Z)();return(0,f.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>d});var r=i(7294);const n={},l=r.createContext(n);function d(e){const s=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),r.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/adad4f3e.bbe60c6c.js b/assets/js/adad4f3e.bbe60c6c.js new file mode 100644 index 0000000..685cf44 --- /dev/null +++ b/assets/js/adad4f3e.bbe60c6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5585],{3893:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var n=a(5893),i=a(1151);a(4866),a(5162);const r={title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},s=void 0,o={id:"What-is-KIRA/Middleware---INTERX",title:"Middleware - INTERX",description:"Overview",source:"@site/tabs/learn/What-is-KIRA/Middleware---INTERX.mdx",sourceDirName:"What-is-KIRA",slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Middleware - INTERX",sidebar_position:2,slug:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},sidebar:"defaultSidebar",previous:{title:"Governance",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},next:{title:"Frontend - MIRO",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a"}},l={},c=[{value:"Overview",id:"eb2dd95b428040f69624153b50823d71",level:2},{value:"Kira\u2019s Approach to Data Availability",id:"3c497e92703a473c871d03e7972516cf",level:3},{value:"Decentralized Api Gateway Through Swarm Request",id:"64165f6d3db54be68a8aa002dfb06fa1",level:2}];function d(e){const t={h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"eb2dd95b428040f69624153b50823d71",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"INTERX (\u30a4\u30f3\u30bf\u30fc\u30a8\u30c3\u30af\u30b9) is KIRA's decentralized middleware service and is often referred to as KIRA\u2019s Content Availability Layer. It is responsible for node monitoring, peer discovery, response caching, proxy, load balancing, storage, sequencing, and propagation (targeted gossiping) of data and transactions between client-facing applications and KIRA\u2019s back-end services such as L2 apps or SEKAI. It optimizes communication across users, nodes, and Rollapps by enabling the formation of well-connected network subnets dedicated to each application."}),"\n",(0,n.jsx)(t.p,{children:"INTERX simplifies the transition from Web2 to Web3 for developers by removing the complexity of blockchain interactions. Web3 interactions often involve dealing with smart contracts and complex interfaces that must be queried and interpreted like Ethereum's ABI or decoded like SCALE encoded metadata for Substrate RPC, an overwhelming and cumbersome change from the straightforward API calls typical for Web2 environments. By offering a familiar Web2-like API interface and acting as the default 'Sequencer' for applications, INTERX reduces the learning curve of Web3, empowering developers to focus more on their business logic."}),"\n",(0,n.jsx)(t.p,{children:"One of INTERX's most important features is its combination of digital signatures and fraud proofs to effectively function as a decentralized API. This feature eliminates the need for light client implementations and maintenance, as well as dependence on centralized SSL certificate authorities."}),"\n",(0,n.jsx)(t.h3,{id:"3c497e92703a473c871d03e7972516cf",children:"Kira\u2019s Approach to Data Availability"}),"\n",(0,n.jsx)(t.p,{children:"Traditional systems often treat all application data uniformly\u2014both user balances and arbitrary data\u2014 a method that compromises UX and practicality. This is particularly true when quick access to essential and trusted information, like user balances, is required during unexpected interruptions in the application\u2019s sequencing process (e.g. requests rate limiting). KIRA addresses this by clearly distinguishing these types of data. Specifically, user balances can be directly settled on SEKAI, KIRA\u2019s base layer, leveraging account abstraction. This arrangement allows Layer 2 applications to be treated similarly to user accounts, enabling them to perform on-chain actions such as issuing tokens, participating in governance, staking, and even communicating with other applications as if they were autonomous humans."}),"\n",(0,n.jsx)(t.p,{children:"In managing and ensuring the availability of arbitrary application data, INTERX adopts a specialized implementation designed to enhance the data replication versus network overhead ratio. This implementation is underpinned by four foundational concepts:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Integrated Data Management:"})," Consensus nodes operate and autoscale INTERX containers alongside their RollApp execution containers, akin to how edge nodes function within traditional Web2 networks. An edge node serves as a conduit between local environments (SEKAI and RollApp containers in KIRA\u2019s case) and the external world. In this setup, essential data is directly accessible on the same devices that execute the application, thus reducing latency and the dependency issues seen when DA is handled by an external network."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Dedicated DA Sub-networks"}),": Leveraging its node discovery capabilities, INTERX assigns each RollApp its own firewalled and rate-limited DA 'subnet'. This architecture optimizes bandwidth utilization and resource allocation by reducing the exchange and management of the application\u2019s data only to the nodes directly relevant to the application\u2014namely, its executors and verifiers."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Adaptive Data Replication"}),": Traditional DA systems often employ a one-size-fits-all replication factor. Essentially, they define the level of redundancy through a fixed number of copies distributed within the network to ensure data availability. In practice, however, individual applications have distinct requirements for data access speed and replication based on the data type. With INTERX, RollApp data is replicated based on the individual needs of executors and verifiers. Developers can scale this replication level to align precisely with their application's needs, such as minimum bandwidth utilization for noncritical data and/or maximum possible security for application-critical data."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Caching:"})," INTERX implements a caching mechanism to efficiently manage high-demand scenarios and prevent system overload. This feature is especially important in KIRA, where SEKAI\u2019s block time can be extended based on the number of consensus nodes involved, influencing the likelihood of data being queried multiple times before any updates occur. By storing data after its initial retrieval, INTERX can swiftly respond to duplicate requests, conserving resources required to perform complex queries and thus maintaining network responsiveness."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"64165f6d3db54be68a8aa002dfb06fa1",children:"Decentralized Api Gateway Through Swarm Request"}),"\n",(0,n.jsx)(t.p,{children:"A distinctive feature of INTERX is its functionality as a decentralized RPC gateway. This capability stems from its unique setup where each INTERX node, regardless of its associated subnet, is linked to a KIRA account address, with all responses being digitally signed. This architecture allows users to query multiple nodes simultaneously and evaluate the responses against each other. Such a mechanism enables users to identify nodes that consistently deliver precise responses and craft off-chain fraud proofs against nodes disseminating fraudulent or inconsistent data."}),"\n",(0,n.jsx)(t.p,{children:"While light clients theoretically offer higher security through block-by-block consensus verification (without storing data), they fall short due to the maintenance they require. This maintenance challenge becomes particularly pronounced across hundreds or thousands of applications in a growing multi-chain world. By enabling the creation of fraud proofs, INTERX introduces a practical alternative for decentralization. It establishes a balance between the security offered by light clients and the convenience of Infura-style RPC providers. Through repeated queries to a broad spectrum of INTERX nodes, users can achieve a level of security comparable to that of light clients, assuming these nodes are either verified through the Identity Registrar or have stakes involved. This system underscores that even a single honest INTERX node in the query batch can trigger the eviction or slashing of dishonest ones. However, for maximum safety, users are recommended to operate their own INTERX node as well as a SEKAI instance, essentially running a full node."})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var r=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),r=a(2466),s=a(6550),o=a(469),l=a(1980),c=a(7392),d=a(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,s.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,r=h(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[c,u]=f({queryString:a,groupId:i}),[b,m]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,d.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:i}),g=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var m=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const t=e.currentTarget,a=l.indexOf(t),i=o[a].value;i!==n&&(c(t),s(i))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,i.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function I(e){const t=b(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,v.jsx)(I,{...e,children:u(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>s});var n=a(7294);const i={},r=n.createContext(i);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b078c616.0d837391.js b/assets/js/b078c616.0d837391.js deleted file mode 100644 index 7dc6659..0000000 --- a/assets/js/b078c616.0d837391.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3987],{8226:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>j,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),l=n(5162);const c={title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Governance/Polls",title:"Polls",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Polls.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Polls",sidebar_position:5,slug:"/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},sidebar:"defaultSidebar",previous:{title:"Roles & Permissions",permalink:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536"},next:{title:"Network Properties",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0"}},a={},h=[{value:"Concept",id:"4a059df6e57742028ba3441c9e5b0abd",level:2},{value:"Proposing & voting rights",id:"5cba6ad7964f4ecca8e5dcf67be3762b",level:3},{value:"Decision-making process",id:"25e477b20c7d417eb03cec979abace5d",level:3},{value:"Other relevant network properties",id:"d0c478a7d18c4ce690d835ed6fba620c",level:3},{value:"Parameters",id:"2ae4e0f3094f431793822d60f251dae8",level:2},{value:"Polls parameters",id:"b19d8cba68b0462d8abb0101f2a4e6c1",level:4},{value:"Vote options id",id:"b71c02cda9824b75b833f01a0c7a9fae",level:4},{value:"Polls status",id:"c197e6b006d4495ab3c54944f65fc395",level:4},{value:"Cli syntax & examples",id:"ee6d816aadcd4d328734d41b24214a77",level:2},{value:"Transactions",id:"53e6aec0ccce4df5b49416ddff3cbf1b",level:2},{value:"Create poll",id:"0f28f81a42fa40e6b898566730538466",level:4},{value:"Vote on a poll",id:"72a9d254517a43acb3d4d27d8f743430",level:4},{value:"Queries",id:"0d0d943855964c4ea064602fe4917551",level:2},{value:"Query polls by address",id:"2226e5df59e041e5aee56dd9a328cdb0",level:4},{value:"Query poll votes by id",id:"000ea9f1328542fb90c9c18599dfe9c8",level:4},{value:"Governance",id:"83525905e45340f3b595111c93181b71",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",math:"math",mfrac:"mfrac",mn:"mn",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"4a059df6e57742028ba3441c9e5b0abd",children:"Concept"}),"\n",(0,t.jsx)(s.p,{children:"Signaling proposals are a typical practice in blockchain governance activities. They provide a means for the community to gauge sentiment or reach consensus on a particular issue or suggestion without necessitating changes to the blockchain's state. However, these proposals simplify multifaceted issues into binary 'yes/no' votes, potentially distorting the accurate representation of varied community perspectives on complex issues. Additionally, they may slow down decision-making and introduce inefficiency to the overall governance process. Such potential drawbacks have led some projects, such as Ethereum and Celestia, to favor off-chain governance, a shift that arguably contradicts the decentralization principle."}),"\n",(0,t.jsxs)(s.p,{children:["Because of KIRA network's ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"unique governance ranking system"}),", the inclusion of signaling proposals adds another layer of complexity, potentially skewing the decision-making process as votes could be influenced more by score preservation than by authentic opinions. To circumvent these challenges, KIRA network introduces the Poll module, which offers a more inclusive and flexible mechanism for consensus. Unlike traditional signaling proposals, a Poll Proposal allows a select group of individuals to either present their own voting options or vote on pre-existing ones. This approach caters to a wide array of use cases and fosters a more accurate reflection of the diverse interests across various scenarios, such as agreeing on upgrade timeframes, selecting group administrators, or deciding on future changes to the network properties registrar."]}),"\n",(0,t.jsx)(s.h3,{id:"5cba6ad7964f4ecca8e5dcf67be3762b",children:"Proposing & voting rights"}),"\n",(0,t.jsxs)(s.p,{children:["For any users to initiate a Poll, the necessary permission, represented by the ",(0,t.jsx)(s.strong,{children:"[Problem Internal Link]"}),", must be directly assigned to their account or embedded within a Role associated with their account. This permission is automatically granted to ",(0,t.jsx)(s.a,{href:"/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",children:"Councilors"})," upon claiming their Councillor Seat. Contrary to KIRA ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals"}),", Polls do not have a corresponding voting permission. Rather, the user submitting the proposal determines which ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:"roles"})," can vote on the particular Poll by setting up a whitelist."]}),"\n",(0,t.jsx)(s.h3,{id:"25e477b20c7d417eb03cec979abace5d",children:"Decision-making process"}),"\n",(0,t.jsxs)(s.p,{children:["The decision-making process for the Poll module operates in line with the principles established by the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"Proposals logic"}),", while accommodating the unique requirements of this module. This process is guided by the following key points:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Voting Eligibility:"})," All whitelisted roles can cast a vote per poll. This vote can be changed later on by sending another voting transaction."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Vote Options:"})," A single vote can correspond to one or many voting options, as outlined by the ",(0,t.jsx)(s.code,{children:"options.choices"})," variable."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Custom Choices:"})," Voters are permitted to cast custom choices if the ",(0,t.jsx)(s.code,{children:"options.count"})," exceeds the ",(0,t.jsx)(s.code,{children:"options.values.length"}),". Such custom choices are subsequently added to ",(0,t.jsx)(s.code,{children:"options.values"}),", enabling other users to vote on them. However, each voter can only cast a vote for a specific option once."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Abstain and Veto:"})," Regardless of the defined ",(0,t.jsx)(s.code,{children:"options.values"}),", voters are allowed to vote ",(0,t.jsx)(s.code,{children:"abstain"})," or ",(0,t.jsx)(s.code,{children:"veto"}),". These are reserved values and don't have to match the ",(0,t.jsx)(s.code,{children:"options.type"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Proposal Timeline:"})," Poll proposals do not have an enactment time. A proposal can neither pass, be rejected, nor vetoed before its ",(0,t.jsx)(s.code,{children:"voting_end_time"})," time has elapsed, unless all eligible voters have cast their votes and the result is decisive."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Quorum Requirement:"})," A poll necessitates a minimum number of votes, or a quorum, to be considered valid. The quorum is essential for ensuring adequate participation and representation in the decision-making process."]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["The poll minimum quorum percentage is the same as the proposal quorum, 33% by default and is configurable by governance via the ",(0,t.jsx)(s.code,{children:"vote_quorum"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),"."]})}),"\n",(0,t.jsx)(s.p,{children:"The outcome of a Poll proposal is determined based on the following rules:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Outcome"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"Condition"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Passed"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and more than ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>50%) of all votes are for any ",(0,t.jsx)(s.code,{children:"Custom"})," options or ",(0,t.jsx)(s.code,{children:"Abstain"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Rejected"})}),(0,t.jsxs)(s.td,{children:["If quorum is reached and there is a tie for the highest vote count between two or more options (indicating an indecisive result), or if the sum of ",(0,t.jsx)(s.code,{children:"Abstain"})," and ",(0,t.jsx)(s.code,{children:"NoWithVeto"})," votes is more than or equal to ",(0,t.jsxs)(s.span,{className:"katex",children:[(0,t.jsx)(s.span,{className:"katex-mathml",children:(0,t.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,t.jsxs)(s.semantics,{children:[(0,t.jsx)(s.mrow,{children:(0,t.jsxs)(s.mfrac,{children:[(0,t.jsx)(s.mn,{children:"1"}),(0,t.jsx)(s.mn,{children:"2"})]})}),(0,t.jsx)(s.annotation,{encoding:"application/x-tex",children:"1\\over 2"})]})})}),(0,t.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,t.jsxs)(s.span,{className:"base",children:[(0,t.jsx)(s.span,{className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,t.jsxs)(s.span,{className:"mord",children:[(0,t.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,t.jsx)(s.span,{className:"mfrac",children:(0,t.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,t.jsxs)(s.span,{className:"vlist-r",children:[(0,t.jsxs)(s.span,{className:"vlist",style:{height:"0.8451em"},children:[(0,t.jsxs)(s.span,{style:{top:"-2.655em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"2"})})})]}),(0,t.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,t.jsxs)(s.span,{style:{top:"-3.394em"},children:[(0,t.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,t.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:(0,t.jsx)(s.span,{className:"mord mtight",children:"1"})})})]})]}),(0,t.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,t.jsx)(s.span,{className:"vlist-r",children:(0,t.jsx)(s.span,{className:"vlist",style:{height:"0.345em"},children:(0,t.jsx)(s.span,{})})})]})}),(0,t.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})})]})," (>=50%) of all votes."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"RejectedWithVeto"})}),(0,t.jsxs)(s.td,{children:["More than or equal to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," percentage of votes are veto."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"QuorumNotReached"})}),(0,t.jsxs)(s.td,{children:[(0,t.jsx)(s.code,{children:"vote_quorum"})," was not reached before the end of the poll."]})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"d0c478a7d18c4ce690d835ed6fba620c",children:"Other relevant network properties"}),"\n",(0,t.jsxs)(s.p,{children:["The following ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," establish limits over some of the Poll parameters:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," denotes the maximum character size of an individual Poll option and is set at ",(0,t.jsx)(s.code,{children:"64"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," sets the maximum number of custom options a Poll can have and is set at ",(0,t.jsx)(s.code,{children:"128"})," by default."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," is used to indicate the maximum reference size in the poll and has a default value set at ",(0,t.jsx)(s.code,{children:"512"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["The ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," represents the maximum checksum size in the poll and is set to default at ",(0,t.jsx)(s.code,{children:"128"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"2ae4e0f3094f431793822d60f251dae8",children:"Parameters"}),"\n",(0,t.jsx)(s.h4,{id:"b19d8cba68b0462d8abb0101f2a4e6c1",children:"Polls parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll_id"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The unique identifier of the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"creator"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"cosmos-sdk/types.AccAddress"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"kira1d52r..."})}),(0,t.jsx)(s.td,{children:"The account address of the poll's creator."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"title"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"some title"})}),(0,t.jsxs)(s.td,{children:["The title of the poll, limited to 128 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_title_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"description"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"Are you the boss of me now?"})}),(0,t.jsxs)(s.td,{children:["The description of the poll, limited to 1024 characters by default as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_description_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"reference"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"bafybeifiixdxq4cli6qxib5zfiky7rilb6k66f336nymj4jty6tdsiixre"})}),(0,t.jsxs)(s.td,{children:["Reference to the subject matter of the poll, potentially an IPFS CID or URL. Limited to 512 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_reference_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"checksum"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"f5aca3b1fafffdcf22a30aafd3392e473592944da28515ae0a06afbc71c27b09"})}),(0,t.jsxs)(s.td,{children:["Checksum for the poll, ensuring data integrity. Limited to 128 characters by default, by the ",(0,t.jsx)(s.code,{children:"max_proposal_checksum_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"roles"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]uint64"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[1,2,...]"})}),(0,t.jsx)(s.td,{children:"The roles that are eligible to participate in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"options"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"PollOptions"})}),(0,t.jsx)(s.td,{}),(0,t.jsx)(s.td,{children:"The list of available voting options in the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"voting_end_time"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"google.protobuf.Timestamp"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1678386530"})}),(0,t.jsx)(s.td,{children:"The timestamp indicating the end of the voting period for the poll."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"result"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"The result of the poll, updated after the voting period ends."})]})]})]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"PollOptions type"})}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"values"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:'["yes","no","maybe","I dont know", "can you repeat the question?"]'})}),(0,t.jsxs)(s.td,{children:["The list of available voting options in the poll, each item limited to 64 characters as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_size"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"count"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"5"})}),(0,t.jsxs)(s.td,{children:["The maximum number of voting options that a poll can have, as defined by the ",(0,t.jsx)(s.code,{children:"max_proposal_poll_option_count"})," network property."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"type"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"string"})}),(0,t.jsxs)(s.td,{children:["The type of the options, all user supplied or predefined options must match this type. Possible types: ",(0,t.jsx)(s.code,{children:"string"}),", ",(0,t.jsx)(s.code,{children:"uint"}),", ",(0,t.jsx)(s.code,{children:"int"}),", ",(0,t.jsx)(s.code,{children:"float"}),", ",(0,t.jsx)(s.code,{children:"bool"}),"."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"choices"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"int"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"1"})}),(0,t.jsx)(s.td,{children:"The maximum number of choices that a voter can select, default is 1."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"b71c02cda9824b75b833f01a0c7a9fae",children:"Vote options id"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"VOTE OPTION"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_VOTE_OPTION_UNSPECIFIED (0)"})}),(0,t.jsx)(s.td,{children:"No-op vote option."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_ABSTAIN (1)"})}),(0,t.jsx)(s.td,{children:"Councilor has no strong opinion on the proposal, but wants to signify that they took note of it."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_CUSTOM (2)"})}),(0,t.jsx)(s.td,{children:"Councilor has voted one or several custom option provided by the proposal."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_OPTION_NO_WITH_VETO (3)"})}),(0,t.jsx)(s.td,{children:"Councilor strongly disagrees with the poll and wants to prevent it from passing successfully, bypassing the majority vote requirements due to concerns highly impacting network operations or safety."})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"c197e6b006d4495ab3c54944f65fc395",children:"Polls status"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"STATUS"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_UNKNOWN (0)"})}),(0,t.jsx)(s.td,{children:"Result of the proposal is not yet known/defined."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_PASSED (1)"})}),(0,t.jsx)(s.td,{children:"Poll reached quorum with one of the options having majority votes and passed successfully."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED (2)"})}),(0,t.jsxs)(s.td,{children:["Proposal was rejected because abstain votes have majority or more than one ",(0,t.jsx)(s.code,{children:"options.values"})," have the highest and same number of votes (indecisive result)."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_REJECTED_WITH_VETO (3)"})}),(0,t.jsxs)(s.td,{children:["Poll reached quorum but did not pass due to ",(0,t.jsx)(s.code,{children:"veto_threshold"})," being reached."]})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_PENDING (4)"})}),(0,t.jsx)(s.td,{children:"Poll is not finalized yet and is still awaiting votes."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"POLL_RESULT_QUORUM_NOT_REACHED (5)"})}),(0,t.jsxs)(s.td,{children:["Poll was rejected because it failed to reach ",(0,t.jsx)(s.code,{children:"vote_quorum"}),"."]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"ee6d816aadcd4d328734d41b24214a77",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(l.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(s.h2,{id:"53e6aec0ccce4df5b49416ddff3cbf1b",children:"Transactions"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poll create"})}),(0,t.jsx)(s.th,{children:"Initiates the creation of a new poll."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poll vote"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing poll."})]})})]}),(0,t.jsx)(s.h4,{id:"0f28f81a42fa40e6b898566730538466",children:"Create poll"}),(0,t.jsxs)(s.p,{children:["Create a new poll using the ",(0,t.jsx)(s.code,{children:"create"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),": The title of the poll."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the poll, it can be a URL, text, etc."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$REFERENCE"}),": IPFS CID or URL reference to file describing the poll and voting options in depth."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHECKSUM"}),": Reference checksum."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$OPTIONS"}),": The options for the poll in the format variant1, variant2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ROLES"}),": List of roles allowed to take part in the poll vote in the format role1, role2, ..."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$COUNT"}),": Maximum number of voting options that a poll can have."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$TYPE"}),": Type of the options, all user supplied or predefined options must match its type."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CHOICES"}),": Define the maximum number of choices a voter can select."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$DURATION"}),": The duration of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll create \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION --reference=$REFERENCE --checksum=$CHECKSUM \\\n--options=$OPTIONS --roles=$ROLES --count=$COUNT --type=$TYPE \\\n--choices=$CHOICES --duration=$DURATION\n"})}),(0,t.jsx)(s.h4,{id:"72a9d254517a43acb3d4d27d8f743430",children:"Vote on a poll"}),(0,t.jsxs)(s.p,{children:["Cast a vote on an existing poll using the ",(0,t.jsx)(s.code,{children:"vote"})," command."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The ID of the poll you wish to vote on."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_OPTION"}),": The option ID you are voting for."]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$CUSTOM_VALUE"}),": The custom poll value."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov poll vote $POLL_ID $POLL_OPTION \\\n--from=$SIGNER $FLAGS_TX \\\n--custom-value=$CUSTOM_VALUE\n"})})]}),(0,t.jsxs)(l.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"0d0d943855964c4ea064602fe4917551",children:"Queries"}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"query polls"})}),(0,t.jsx)(s.th,{children:"Lists polls created by a specific address."})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"query poll-votes"})}),(0,t.jsx)(s.td,{children:"Lists all votes of a specific poll using its ID."})]})})]}),(0,t.jsx)(s.h4,{id:"2226e5df59e041e5aee56dd9a328cdb0",children:"Query polls by address"}),(0,t.jsx)(s.p,{children:"Retrieve polls created by a specific address."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$ADDRESS"}),": The account address."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query polls $ADDRESS $FLAGS_QR | jq\n"})}),(0,t.jsx)(s.h4,{id:"000ea9f1328542fb90c9c18599dfe9c8",children:"Query poll votes by id"}),(0,t.jsx)(s.p,{children:"Lists all votes for a specific poll using the poll\u2019s ID."}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"$POLL_ID"}),": The unique identifier of the poll."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query poll-votes $POLL_ID $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(l.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"83525905e45340f3b595111c93181b71",children:"Governance"}),(0,t.jsxs)(s.p,{children:["The duration of polls, which is determined by the ",(0,t.jsx)(s.code,{children:"voting_end_time"})," parameter, is shared with proposals. As a result, it can be adjusted using the ",(0,t.jsx)(s.code,{children:"set-proposal-durations-proposal"})," CLI found the ",(0,t.jsx)(s.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"proposal sub-module"}),"."]})]})]})]})}function j(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(x,{...e})}):x(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>l});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function l(e){let{children:s,hidden:n,className:l}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,l),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>T});var t=n(7294),r=n(6905),i=n(2466),l=n(6550),c=n(469),o=n(1980),d=n(7392),a=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,d.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function j(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function p(e){let{queryString:s=!1,groupId:n}=e;const r=(0,l.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function u(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=x(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!j({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[d,h]=p({queryString:n,groupId:r}),[u,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,a.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),f=(()=>{const e=d??u;return j({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=n(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:l,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const s=e.currentTarget,n=o.indexOf(s),r=c[n].value;r!==t&&(d(s),l(r))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:c.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>o.push(e),onKeyDown:h,onClick:a,...i,className:(0,r.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=u(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",f.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function T(e){const s=(0,m.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>l});var t=n(7294);const r={},i=t.createContext(r);function l(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2d1e94f.3a7c27c3.js b/assets/js/b2d1e94f.3a7c27c3.js new file mode 100644 index 0000000..7014218 --- /dev/null +++ b/assets/js/b2d1e94f.3a7c27c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2091],{4614:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var a=s(5893),t=s(1151),r=s(4866),i=s(5162);const o={title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools",title:"Consensus nodes & staking pools",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",permalink:"/docs.kira.network/docs/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},sidebar:"defaultSidebar",previous:{title:"Multistaking",permalink:"/docs.kira.network/docs/64eb7e84-ab20-454d-953f-57b1cf457790"},next:{title:"Delegators",permalink:"/docs.kira.network/docs/94e4d0a6-8e45-469c-89a5-8ec65ca16381"}},l={},h=[{value:"Concept",id:"119370e041bd4a63a2a2649b70fb2e2e",level:2},{value:"Claiming a Validator Seat",id:"6441658f447b4a418784ab7b0ce4ec34",level:3},{value:"Staking Pools Status & Commissions",id:"df95ed895a6b45968a254d7751bebfe9",level:3},{value:"Performance-based Rewards",id:"9884c804414347b9ba608c8c9c006564",level:3},{value:"Consensus Nodes Ranks and Statuses",id:"4d738a03dfa44aa2bc1482fe5e6114a4",level:3},{value:"Consensus Node Faq",id:"326c9ccbe2aa4040adb5182e269872b2",level:3},{value:"Parameters",id:"0ebbc1da2a434d80be94371717737f36",level:2},{value:"Cli Syntax & Examples",id:"b3d08c63c9754edd925df694e86eeeee",level:2},{value:"Transactions",id:"55ed760972db41338ee3c66e283156af",level:2},{value:"Claiming a Consensus Node Seat",id:"3fe4d6fb4aac4669aa4033d67a92121f",level:4},{value:"Creating/editing a Staking Pool",id:"526b85a39e5e4895bbd8025439af5ab9",level:4},{value:"Queries",id:"10b764b83e0f475db4662aafc73454b2",level:2},{value:"Consensus Node Information",id:"628b4115df9348f692fabb4c2a105d93",level:4},{value:"Staking Pool Information",id:"39c8e4e079c149589be3a410bf93933d",level:4},{value:"Governance",id:"a72ec328d33f4233a449cd4634882a8c",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"119370e041bd4a63a2a2649b70fb2e2e",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:'The problem of improving the probabilistic finality of PoW consensuses has been treated by a variety of committee-based PoS consensuses such as Tendermint. However, unlike in the former mechanism, where all consensus nodes ("miners") are able to propose a block and one of them is chosen probabilistically, in a committee-based blockchain, blocks are cooperatively created through a voting mechanism. Therefore, the consensus over the "valid" state of the blockchain depends on the voting behavior of all its consensus nodes.'}),"\n",(0,a.jsx)(n.p,{children:"However, since permissionless settings inherently exhibit Sybil vulnerability, assessing nodes' rational behavior becomes impossible. As a result, the prevalent solution has been to apply a weighted voting power rule, where both consensus and governance votes are weighted by their respective stakes. In this paradigm, a block (or a governance proposal) is considered valid when it accumulates at least two-thirds of the total voting power from the consensus nodes set. Regrettably, this approach has often led to the centralization of power in the hands of a few large token holders, as exemplified by Cosmos, where more than two-thirds of voting power of most chains is concentrated in just 5 to 7 entities. And this system, in fact, still does not guarantee that their intentions align with the best interests of the network in the long term."}),"\n",(0,a.jsxs)(n.p,{children:["KIRA builds upon ",(0,a.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," as its consensus engine and introduces fundamental adjustments to the block proposer role, transforming the system into a governance-permissioned one that unlocks powerful features:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["The Committee, a.k.a Consensus node set or \u201cValidator\u201d set, is no longer a fixed number of nodes and/or determined by stake eligibility. Instead, network governance controls who can join and leave the committee, and can set requirements such as proof of individuality (through the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," for instance and which doesn't have to be KYC), community involvement (such as joining consensus node standups), or adherence to the Code of Conduct in the ",(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:"Data Registry"})," to increase sybil resistance."]}),"\n",(0,a.jsxs)(n.li,{children:["The block proposer role rotates according to an equal probability round robin mechanism, meaning that all consensus nodes have an equal chance of proposing new blocks. This also means that they are rewarded equally, rather than proportionally to their stake. More information on rewards distribution can be found in the ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Rewards Distributor"})," module."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"6441658f447b4a418784ab7b0ce4ec34",children:"Claiming a Validator Seat"}),"\n",(0,a.jsxs)(n.p,{children:['Before any Consensus node can participate in network validation, they must first "claim" their Validator Seat, a process parallel to how governance members claim their Councilor Seat. This action acknowledges the network ',(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,a.jsx)(n.strong,{children:"Code of Conduct"})})," and allows the integration of the node in the consensus registrar. To submit a ",(0,a.jsx)(n.code,{children:"MsgClaimValidator"})," transaction, the account must have permission ",(0,a.jsx)(n.strong,{children:"[Problem Internal Link]"})," , which is assigned either through governance (mainnet) or granted by the sudo account (testnet). In addition, this transaction requires the node's globally unique ",(0,a.jsx)(n.code,{children:"moniker"})," identifier as a parameter. This moniker is a friendly name with minimum 4 non-whitespace characters that can be set in advance by the account via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or directly when submitting the transaction via the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI if it has not been assigned a value yet. If a different value than the existing one is provided, the transaction will fail. This process ensures the unique identity of each consensus node in the network."]}),"\n",(0,a.jsx)(n.h3,{id:"df95ed895a6b45968a254d7751bebfe9",children:"Staking Pools Status & Commissions"}),"\n",(0,a.jsxs)(n.p,{children:["Each consensus node operates its own staking pool where delegators can stake their assets. Each staking pool has a unique ID that is linked to the consensus node's address. The consensus node has the ability to ",(0,a.jsx)(n.code,{children:"enable"})," or ",(0,a.jsx)(n.code,{children:"disable"})," the staking pool, as well as set the commission rate on block rewards. Staking pools play a crucial role in reward distribution on KIRA network. All rewards are managed and distributed through these pools, which helps to streamline the process given the network's diverse range of staking tokens."]}),"\n",(0,a.jsxs)(n.p,{children:["Before the block\u2019s and fee rewards of a given block are distributed to proposer staking pool\u2019s delegators, the proposer takes a percentage of both types of rewards as commissions. Regarding block rewards, subsidized by KEX inflation, each consensus node setup their own staking pool\u2019s ",(0,a.jsx)(n.code,{children:"commission"})," rate. The ",(0,a.jsx)(n.code,{children:"commission"})," rate is a decimal value that cannot be set above ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) and under ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to prevent them from over-charging delegators or undercharging them in order to make ",(0,a.jsx)(n.em,{children:"smaller"})," consensus nodes unprofitable. Commissions over fee rewards from ",(0,a.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"}),", however, are homogeneous to all staking pools and defined by a governance managed ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," network property. Likewise, ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," is capped at ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) but can be set to 0."]}),"\n",(0,a.jsx)(n.h3,{id:"9884c804414347b9ba608c8c9c006564",children:"Performance-based Rewards"}),"\n",(0,a.jsx)(n.p,{children:"Consensus nodes are subject to a performance evaluation and the amount of rewards they will actually receive from their commission is pro-rata to their participation in the consensus. If they fail to sign consecutive blocks during a given period, some of those rewards are cut off and sent to the community treasury. Outstanding block and fee rewards are then sent to the consensus node\u2019s staking pool and become claimable by their respective delegators in proportion to the derivative tokens they have. Notice in particular that consensus nodes can be rewarded twice: once through both previous commissions they take as consensus nodes for their service, and once more as delegator if they delegate some assets."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding network rewards distribution mechanisms please refer to the"})," ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,a.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,a.jsx)(n.em,{children:"module.\nFor more information regarding KIRA\u2019s economics, please refer to the"})," ",(0,a.jsx)(n.em,{children:"***"})," ",(0,a.jsx)(n.em,{children:"section."})]}),"\n",(0,a.jsx)(n.h3,{id:"4d738a03dfa44aa2bc1482fe5e6114a4",children:"Consensus Nodes Ranks and Statuses"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"The status of a consensus node and the status of its staking pool are two distinct things. Consensus nodes that have not created a staking pool or have disabled it can still participate in the consensus process and produce blocks, but they will not be eligible for any rewards."})}),"\n",(0,a.jsxs)(n.p,{children:["KIRA network uses a ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"ranking system"})," to incentivize consensus nodes to stay online, or ",(0,a.jsx)(n.code,{children:"active"}),", and create a friendly, competitive environment. The ranking is based on the number of blocks a consensus node produces and the number of missed blocks. If a consensus node signs a block, their rank increases. If a consensus node consecutively fails to sign a block for a certain number of times, they are deemed offline, or ",(0,a.jsx)(n.code,{children:"inactive"}),", and their rank decreases. The ranking system also includes a mechanism for consensus nodes to temporarily pause their node without affecting their rank, and for the governance to reset all ranks periodically. Inactive consensus nodes are removed from the consensus node set, cannot produce blocks and are unable to perform some actions such as editing their staking pool until they signal they are ready to be active again. If a consensus node is inactive, delegators cannot delegate any tokens; they can only undelegate their stake."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding consensus nodes ranking system please refer to the"})," ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,a.jsx)(n.em,{children:"section of KIRA\u2019s slashing module."})]}),"\n",(0,a.jsx)(n.h3,{id:"326c9ccbe2aa4040adb5182e269872b2",children:"Consensus Node Faq"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"https://hub.cosmos.network/main/validators/validator-faq.html",children:"Cosmos Validator FAQ"})," provides a wealth of information about being a consensus node for anyone interested in learning more about this role."]}),"\n",(0,a.jsx)(n.h2,{id:"0ebbc1da2a434d80be94371717737f36",children:"Parameters"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Staking pool properties"})}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"NAME"})}),(0,a.jsx)(n.th,{children:"TYPE"}),(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"id"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsx)(n.td,{children:"Pool\u2019s ID"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"commission"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsxs)(n.td,{children:["Defines the staking pool\u2019s commission rate over block rewards (cf. ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Untitled"}),")"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"enabled"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"boolean"})})}),(0,a.jsxs)(n.td,{children:["Defines if the pool is enabled or disabled. If set to ",(0,a.jsx)(n.code,{children:"false"})," the pool doesn\u2019t accumulate any reward and delegators are only able to unstake."]})]})]})]}),"\n",(0,a.jsx)(n.h2,{id:"b3d08c63c9754edd925df694e86eeeee",children:"Cli Syntax & Examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"55ed760972db41338ee3c66e283156af",children:"Transactions"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"claim-validator-seat"})}),(0,a.jsx)(n.th,{children:"Submit a transaction to claim a consensus node seat in KIRA\u2019s consensus node set."})]})}),(0,a.jsx)(n.tbody,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"upsert-staking-pool"})}),(0,a.jsx)(n.td,{children:"Submit a transaction to create or edit a staking pool as a consensus node."})]})})]}),(0,a.jsx)(n.h4,{id:"3fe4d6fb4aac4669aa4033d67a92121f",children:"Claiming a Consensus Node Seat"}),(0,a.jsxs)(n.p,{children:["To claim a seat in the consensus node set, use the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI command. This requires a ",(0,a.jsx)(n.code,{children:"2"})," permission, obtainable through governance (mainnet) or a sudo account (testnet). Ensure your node's unique moniker identifier is pre-set, via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or provide it directly in the CLI command."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier of the account claiming a consensus node seat."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PUBKEY"}),": Public key of the account claiming a consensus node seat."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customstaking claim-validator-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--moniker=$MONIKER [ --pubkey=$PUBKEY ]\n"})}),(0,a.jsxs)(n.p,{children:["To confirm a successful claim, use the ",(0,a.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,a.jsx)(n.code,{children:"validator"})})," query which should return the following:"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "val_key": "kiravaloper1q0fkns62jl4mfxavxug4rvsp7d4770mfkzupzp",\n "pub_key": {\n "@type": "/cosmos.crypto.ed25519.PubKey",\n "key": "YMPiwZecoXe2m7UrO3hJtl51lYrMCGS+rlGuN1I7dpA="\n },\n "status": "ACTIVE",\n "rank": "49",\n "streak": "49"\n}\n'})}),(0,a.jsx)(n.h4,{id:"526b85a39e5e4895bbd8025439af5ab9",children:"Creating/editing a Staking Pool"}),(0,a.jsxs)(n.p,{children:["An ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.code,{children:"active"})})," consensus node can use the ",(0,a.jsx)(n.code,{children:"upsert-staking-pool"})," transaction to create or edit its staking pool. The commission rate must be within ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to ",(0,a.jsx)(n.code,{children:"0.5"})," (50%)."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Address of the consensus node (",(0,a.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n"]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COMMISSION"}),": Commission rate of the staking pool."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ENABLED"}),": Status of the staking pool (default=",(0,a.jsx)(n.code,{children:"true"}),")."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking upsert-staking-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--commission=$COMMISSION --enabled=$ENABLED \\\n$VAL\n"})})]}),(0,a.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"10b764b83e0f475db4662aafc73454b2",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"validator"})}),(0,a.jsxs)(n.th,{children:["Query an active consensus node\u2019s information ",(0,a.jsx)(n.em,{children:"(val key"}),", ",(0,a.jsx)(n.em,{children:"rank, active status, streak)"})," using filters."]})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"validators"})}),(0,a.jsx)(n.td,{children:"Query all existing consensus nodes using specific filters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"pools"})}),(0,a.jsxs)(n.td,{children:["Query all existing staking pools and return their respective parameters (",(0,a.jsx)(n.em,{children:"enabled, commission)"})," and current metrics (",(0,a.jsx)(n.em,{children:"total staked tokens"}),", ",(0,a.jsx)(n.em,{children:"total accumulated rewards"}),", \u2026)."]})]})]})]}),(0,a.jsx)(n.h4,{id:"628b4115df9348f692fabb4c2a105d93",children:"Consensus Node Information"}),(0,a.jsx)(n.p,{children:"Retrieve information about all consensus nodes, including their address, status, streak, and rank, with the following queries."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STATUS"}),": Node status."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PKEY"}),": Public key."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PROP"}),": Proposer."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validators [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER || --status=$STATUS || --pubkey=$PKEY || --proposer=$PROP] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query a specific consensus node\u2019s information using either its account address, its node address or its moniker."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validator [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"39c8e4e079c149589be3a410bf93933d",children:"Staking Pool Information"}),(0,a.jsx)(n.p,{children:"Query real-time metrics and parameters of all existing staking pools."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"a72ec328d33f4233a449cd4634882a8c",children:"Governance"}),(0,a.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function b(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var a=s(6905);const t={tabItem:"tabItem_Ymn6"};var r=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var a=s(7294),t=s(6905),r=s(2466),i=s(6550),o=s(469),d=s(1980),c=s(7392),l=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:t}}=e;return{value:n,label:s,attributes:a,default:t}}))}(s);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function b(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const t=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(r),(0,a.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace({...t.location,search:n.toString()})}),[r,t])]}function m(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=u(e),[i,d]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[c,h]=f({queryString:s,groupId:t}),[m,p]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,r]=(0,l.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&r.set(e)}),[s,r])]}({groupId:t}),x=(()=>{const e=c??m;return b({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function g(e){let{className:n,block:s,selectedValue:a,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),t=o[s].value;t!==a&&(c(n),i(t))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":s},n),children:o.map((e=>{let{value:n,label:s,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...r,className:(0,t.Z)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:t}=e;const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function k(e){const n=m(e);return(0,j.jsxs)("div",{className:(0,t.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,j.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>i});var a=s(7294);const t={},r=a.createContext(t);function i(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2d1e94f.ec9b7506.js b/assets/js/b2d1e94f.ec9b7506.js deleted file mode 100644 index 4e2a4e7..0000000 --- a/assets/js/b2d1e94f.ec9b7506.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2091],{4614:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var a=s(5893),t=s(1151),r=s(4866),i=s(5162);const o={title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},d=void 0,c={id:"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools",title:"Consensus nodes & staking pools",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Consensus nodes & staking pools",sidebar_position:2,slug:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},sidebar:"defaultSidebar",previous:{title:"Multistaking",permalink:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790"},next:{title:"Delegators",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381"}},l={},h=[{value:"Concept",id:"119370e041bd4a63a2a2649b70fb2e2e",level:2},{value:"Claiming a validator seat",id:"6441658f447b4a418784ab7b0ce4ec34",level:3},{value:"Staking pools status & commissions",id:"df95ed895a6b45968a254d7751bebfe9",level:3},{value:"Performance-based rewards",id:"9884c804414347b9ba608c8c9c006564",level:3},{value:"Consensus nodes ranks and statuses",id:"4d738a03dfa44aa2bc1482fe5e6114a4",level:3},{value:"Consensus node faq",id:"326c9ccbe2aa4040adb5182e269872b2",level:3},{value:"Parameters",id:"0ebbc1da2a434d80be94371717737f36",level:2},{value:"Cli syntax & examples",id:"b3d08c63c9754edd925df694e86eeeee",level:2},{value:"Transactions",id:"55ed760972db41338ee3c66e283156af",level:2},{value:"Claiming a consensus node seat",id:"3fe4d6fb4aac4669aa4033d67a92121f",level:4},{value:"Creating/editing a staking pool",id:"526b85a39e5e4895bbd8025439af5ab9",level:4},{value:"Queries",id:"10b764b83e0f475db4662aafc73454b2",level:2},{value:"Consensus node information",id:"628b4115df9348f692fabb4c2a105d93",level:4},{value:"Staking pool information",id:"39c8e4e079c149589be3a410bf93933d",level:4},{value:"Governance",id:"a72ec328d33f4233a449cd4634882a8c",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"119370e041bd4a63a2a2649b70fb2e2e",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:'The problem of improving the probabilistic finality of PoW consensuses has been treated by a variety of committee-based PoS consensuses such as Tendermint. However, unlike in the former mechanism, where all consensus nodes ("miners") are able to propose a block and one of them is chosen probabilistically, in a committee-based blockchain, blocks are cooperatively created through a voting mechanism. Therefore, the consensus over the "valid" state of the blockchain depends on the voting behavior of all its consensus nodes.'}),"\n",(0,a.jsx)(n.p,{children:"However, since permissionless settings inherently exhibit Sybil vulnerability, assessing nodes' rational behavior becomes impossible. As a result, the prevalent solution has been to apply a weighted voting power rule, where both consensus and governance votes are weighted by their respective stakes. In this paradigm, a block (or a governance proposal) is considered valid when it accumulates at least two-thirds of the total voting power from the consensus nodes set. Regrettably, this approach has often led to the centralization of power in the hands of a few large token holders, as exemplified by Cosmos, where more than two-thirds of voting power of most chains is concentrated in just 5 to 7 entities. And this system, in fact, still does not guarantee that their intentions align with the best interests of the network in the long term."}),"\n",(0,a.jsxs)(n.p,{children:["KIRA builds upon ",(0,a.jsx)(n.a,{href:"https://tendermint.com/",children:"Tendermint"})," as its consensus engine and introduces fundamental adjustments to the block proposer role, transforming the system into a governance-permissioned one that unlocks powerful features:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["The Committee, a.k.a Consensus node set or \u201cValidator\u201d set, is no longer a fixed number of nodes and/or determined by stake eligibility. Instead, network governance controls who can join and leave the committee, and can set requirements such as proof of individuality (through the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," for instance and which doesn't have to be KYC), community involvement (such as joining consensus node standups), or adherence to the Code of Conduct in the ",(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:"Data Registry"})," to increase sybil resistance."]}),"\n",(0,a.jsxs)(n.li,{children:["The block proposer role rotates according to an equal probability round robin mechanism, meaning that all consensus nodes have an equal chance of proposing new blocks. This also means that they are rewarded equally, rather than proportionally to their stake. More information on rewards distribution can be found in the ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Rewards Distributor"})," module."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"6441658f447b4a418784ab7b0ce4ec34",children:"Claiming a validator seat"}),"\n",(0,a.jsxs)(n.p,{children:['Before any Consensus node can participate in network validation, they must first "claim" their Validator Seat, a process parallel to how governance members claim their Councilor Seat. This action acknowledges the network ',(0,a.jsx)(n.a,{href:"/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",children:(0,a.jsx)(n.strong,{children:"Code of Conduct"})})," and allows the integration of the node in the consensus registrar. To submit a ",(0,a.jsx)(n.code,{children:"MsgClaimValidator"})," transaction, the account must have permission ",(0,a.jsx)(n.strong,{children:"[Problem Internal Link]"})," , which is assigned either through governance (mainnet) or granted by the sudo account (testnet). In addition, this transaction requires the node's globally unique ",(0,a.jsx)(n.code,{children:"moniker"})," identifier as a parameter. This moniker is a friendly name with minimum 4 non-whitespace characters that can be set in advance by the account via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or directly when submitting the transaction via the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI if it has not been assigned a value yet. If a different value than the existing one is provided, the transaction will fail. This process ensures the unique identity of each consensus node in the network."]}),"\n",(0,a.jsx)(n.h3,{id:"df95ed895a6b45968a254d7751bebfe9",children:"Staking pools status & commissions"}),"\n",(0,a.jsxs)(n.p,{children:["Each consensus node operates its own staking pool where delegators can stake their assets. Each staking pool has a unique ID that is linked to the consensus node's address. The consensus node has the ability to ",(0,a.jsx)(n.code,{children:"enable"})," or ",(0,a.jsx)(n.code,{children:"disable"})," the staking pool, as well as set the commission rate on block rewards. Staking pools play a crucial role in reward distribution on KIRA network. All rewards are managed and distributed through these pools, which helps to streamline the process given the network's diverse range of staking tokens."]}),"\n",(0,a.jsxs)(n.p,{children:["Before the block\u2019s and fee rewards of a given block are distributed to proposer staking pool\u2019s delegators, the proposer takes a percentage of both types of rewards as commissions. Regarding block rewards, subsidized by KEX inflation, each consensus node setup their own staking pool\u2019s ",(0,a.jsx)(n.code,{children:"commission"})," rate. The ",(0,a.jsx)(n.code,{children:"commission"})," rate is a decimal value that cannot be set above ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) and under ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to prevent them from over-charging delegators or undercharging them in order to make ",(0,a.jsx)(n.em,{children:"smaller"})," consensus nodes unprofitable. Commissions over fee rewards from ",(0,a.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"}),", however, are homogeneous to all staking pools and defined by a governance managed ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," network property. Likewise, ",(0,a.jsx)(n.code,{children:"validators_fee_share"})," is capped at ",(0,a.jsx)(n.code,{children:"0.5"})," (50%) but can be set to 0."]}),"\n",(0,a.jsx)(n.h3,{id:"9884c804414347b9ba608c8c9c006564",children:"Performance-based rewards"}),"\n",(0,a.jsx)(n.p,{children:"Consensus nodes are subject to a performance evaluation and the amount of rewards they will actually receive from their commission is pro-rata to their participation in the consensus. If they fail to sign consecutive blocks during a given period, some of those rewards are cut off and sent to the community treasury. Outstanding block and fee rewards are then sent to the consensus node\u2019s staking pool and become claimable by their respective delegators in proportion to the derivative tokens they have. Notice in particular that consensus nodes can be rewarded twice: once through both previous commissions they take as consensus nodes for their service, and once more as delegator if they delegate some assets."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding network rewards distribution mechanisms please refer to the"})," ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,a.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,a.jsx)(n.em,{children:"module.\nFor more information regarding KIRA\u2019s economics, please refer to the"})," ",(0,a.jsx)(n.em,{children:"***"})," ",(0,a.jsx)(n.em,{children:"section."})]}),"\n",(0,a.jsx)(n.h3,{id:"4d738a03dfa44aa2bc1482fe5e6114a4",children:"Consensus nodes ranks and statuses"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"The status of a consensus node and the status of its staking pool are two distinct things. Consensus nodes that have not created a staking pool or have disabled it can still participate in the consensus process and produce blocks, but they will not be eligible for any rewards."})}),"\n",(0,a.jsxs)(n.p,{children:["KIRA network uses a ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"ranking system"})," to incentivize consensus nodes to stay online, or ",(0,a.jsx)(n.code,{children:"active"}),", and create a friendly, competitive environment. The ranking is based on the number of blocks a consensus node produces and the number of missed blocks. If a consensus node signs a block, their rank increases. If a consensus node consecutively fails to sign a block for a certain number of times, they are deemed offline, or ",(0,a.jsx)(n.code,{children:"inactive"}),", and their rank decreases. The ranking system also includes a mechanism for consensus nodes to temporarily pause their node without affecting their rank, and for the governance to reset all ranks periodically. Inactive consensus nodes are removed from the consensus node set, cannot produce blocks and are unable to perform some actions such as editing their staking pool until they signal they are ready to be active again. If a consensus node is inactive, delegators cannot delegate any tokens; they can only undelegate their stake."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"For more information regarding consensus nodes ranking system please refer to the"})," ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,a.jsx)(n.em,{children:"section of KIRA\u2019s slashing module."})]}),"\n",(0,a.jsx)(n.h3,{id:"326c9ccbe2aa4040adb5182e269872b2",children:"Consensus node faq"}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"https://hub.cosmos.network/main/validators/validator-faq.html",children:"Cosmos Validator FAQ"})," provides a wealth of information about being a consensus node for anyone interested in learning more about this role."]}),"\n",(0,a.jsx)(n.h2,{id:"0ebbc1da2a434d80be94371717737f36",children:"Parameters"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Staking pool properties"})}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"NAME"})}),(0,a.jsx)(n.th,{children:"TYPE"}),(0,a.jsx)(n.th,{children:(0,a.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"id"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsx)(n.td,{children:"Pool\u2019s ID"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"commission"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"int"})}),(0,a.jsxs)(n.td,{children:["Defines the staking pool\u2019s commission rate over block rewards (cf. ",(0,a.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Untitled"}),")"]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"enabled"})}),(0,a.jsx)(n.td,{children:(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"boolean"})})}),(0,a.jsxs)(n.td,{children:["Defines if the pool is enabled or disabled. If set to ",(0,a.jsx)(n.code,{children:"false"})," the pool doesn\u2019t accumulate any reward and delegators are only able to unstake."]})]})]})]}),"\n",(0,a.jsx)(n.h2,{id:"b3d08c63c9754edd925df694e86eeeee",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(r.Z,{children:[(0,a.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"55ed760972db41338ee3c66e283156af",children:"Transactions"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"claim-validator-seat"})}),(0,a.jsx)(n.th,{children:"Submit a transaction to claim a consensus node seat in KIRA\u2019s consensus node set."})]})}),(0,a.jsx)(n.tbody,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"upsert-staking-pool"})}),(0,a.jsx)(n.td,{children:"Submit a transaction to create or edit a staking pool as a consensus node."})]})})]}),(0,a.jsx)(n.h4,{id:"3fe4d6fb4aac4669aa4033d67a92121f",children:"Claiming a consensus node seat"}),(0,a.jsxs)(n.p,{children:["To claim a seat in the consensus node set, use the ",(0,a.jsx)(n.code,{children:"claim-validator-seat"})," CLI command. This requires a ",(0,a.jsx)(n.code,{children:"2"})," permission, obtainable through governance (mainnet) or a sudo account (testnet). Ensure your node's unique moniker identifier is pre-set, via the ",(0,a.jsx)(n.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Identity Registrar"})," module, or provide it directly in the CLI command."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier of the account claiming a consensus node seat."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PUBKEY"}),": Public key of the account claiming a consensus node seat."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customstaking claim-validator-seat \\\n--from=$SIGNER $FLAGS_TX \\\n--moniker=$MONIKER [ --pubkey=$PUBKEY ]\n"})}),(0,a.jsxs)(n.p,{children:["To confirm a successful claim, use the ",(0,a.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,a.jsx)(n.code,{children:"validator"})})," query which should return the following:"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "val_key": "kiravaloper1q0fkns62jl4mfxavxug4rvsp7d4770mfkzupzp",\n "pub_key": {\n "@type": "/cosmos.crypto.ed25519.PubKey",\n "key": "YMPiwZecoXe2m7UrO3hJtl51lYrMCGS+rlGuN1I7dpA="\n },\n "status": "ACTIVE",\n "rank": "49",\n "streak": "49"\n}\n'})}),(0,a.jsx)(n.h4,{id:"526b85a39e5e4895bbd8025439af5ab9",children:"Creating/editing a staking pool"}),(0,a.jsxs)(n.p,{children:["An ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,a.jsx)(n.code,{children:"active"})})," consensus node can use the ",(0,a.jsx)(n.code,{children:"upsert-staking-pool"})," transaction to create or edit its staking pool. The commission rate must be within ",(0,a.jsx)(n.code,{children:"0.01"})," (1%) to ",(0,a.jsx)(n.code,{children:"0.5"})," (50%)."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Address of the consensus node (",(0,a.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n"]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COMMISSION"}),": Commission rate of the staking pool."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ENABLED"}),": Status of the staking pool (default=",(0,a.jsx)(n.code,{children:"true"}),")."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking upsert-staking-pool \\\n--from=$SIGNER $FLAGS_TX \\\n--commission=$COMMISSION --enabled=$ENABLED \\\n$VAL\n"})})]}),(0,a.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"10b764b83e0f475db4662aafc73454b2",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"validator"})}),(0,a.jsxs)(n.th,{children:["Query an active consensus node\u2019s information ",(0,a.jsx)(n.em,{children:"(val key"}),", ",(0,a.jsx)(n.em,{children:"rank, active status, streak)"})," using filters."]})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"validators"})}),(0,a.jsx)(n.td,{children:"Query all existing consensus nodes using specific filters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"pools"})}),(0,a.jsxs)(n.td,{children:["Query all existing staking pools and return their respective parameters (",(0,a.jsx)(n.em,{children:"enabled, commission)"})," and current metrics (",(0,a.jsx)(n.em,{children:"total staked tokens"}),", ",(0,a.jsx)(n.em,{children:"total accumulated rewards"}),", \u2026)."]})]})]})]}),(0,a.jsx)(n.h4,{id:"628b4115df9348f692fabb4c2a105d93",children:"Consensus node information"}),(0,a.jsx)(n.p,{children:"Retrieve information about all consensus nodes, including their address, status, streak, and rank, with the following queries."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STATUS"}),": Node status."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PKEY"}),": Public key."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$PROP"}),": Proposer."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validators [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER || --status=$STATUS || --pubkey=$PKEY || --proposer=$PROP] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query a specific consensus node\u2019s information using either its account address, its node address or its moniker."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDR"}),": Account address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$VAL"}),": Node address."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MONIKER"}),": Moniker identifier."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customstaking validator [--addr=$ADDR || --val-addr=$VAL || --moniker=$MONIKER] $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"39c8e4e079c149589be3a410bf93933d",children:"Staking pool information"}),(0,a.jsx)(n.p,{children:"Query real-time metrics and parameters of all existing staking pools."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"a72ec328d33f4233a449cd4634882a8c",children:"Governance"}),(0,a.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function b(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>i});s(7294);var a=s(6905);const t={tabItem:"tabItem_Ymn6"};var r=s(5893);function i(e){let{children:n,hidden:s,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,i),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>y});var a=s(7294),t=s(6905),r=s(2466),i=s(6550),o=s(469),d=s(1980),c=s(7392),l=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:t}}=e;return{value:n,label:s,attributes:a,default:t}}))}(s);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function b(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const t=(0,i.k6)(),r=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(r),(0,a.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace({...t.location,search:n.toString()})}),[r,t])]}function m(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=u(e),[i,d]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!b({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:r}))),[c,h]=f({queryString:s,groupId:t}),[m,p]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,r]=(0,l.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&r.set(e)}),[s,r])]}({groupId:t}),x=(()=>{const e=c??m;return b({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function g(e){let{className:n,block:s,selectedValue:a,selectValue:i,tabValues:o}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),t=o[s].value;t!==a&&(c(n),i(t))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":s},n),children:o.map((e=>{let{value:n,label:s,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...r,className:(0,t.Z)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:t}=e;const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function k(e){const n=m(e);return(0,j.jsxs)("div",{className:(0,t.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function y(e){const n=(0,p.Z)();return(0,j.jsx)(k,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>i});var a=s(7294);const t={},r=a.createContext(t);function i(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4558825.52d1690f.js b/assets/js/b4558825.52d1690f.js deleted file mode 100644 index 6312d09..0000000 --- a/assets/js/b4558825.52d1690f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6113],{6634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},s=void 0,i={id:"What-is-KIRA/-Frontend---MIRO",title:"Frontend - MIRO",description:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.",source:"@site/tabs/Learn/What-is-KIRA/-Frontend---MIRO.mdx",sourceDirName:"What-is-KIRA",slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a",permalink:"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},sidebar:"defaultSidebar",previous:{title:"Middleware - INTERX",permalink:"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},next:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f"}},l={},u=[];function c(e){const t={a:"a",admonition:"admonition",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets."}),"\n",(0,a.jsx)(t.p,{children:"The defining feature of MIRO is its self-contained design. Once the MIRO page is loaded into a user's browser, it operates entirely locally on the user's computer. This means all actions taken within MIRO, from transactions to account management, happen within the user's device without the need reliance on external hosting servers. The only requirement is a connection to at least one local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:"Notably, MIRO does not rely on light clients and leverages the security of INTERX for blockchain communication. This is possible thanks to INTERX\u2019s swarm request feature, which is designed to work optimally when MIRO interfaces with multiple INTERX nodes, ideally operated by different entities. While it's possible to connect MIRO to a single node, the real strength of swarm requests lies in their ability to cross check signed responses from multiple nodes to identify any inconsistencies and allow the creation of fraud proofs against false data. Such a strategy achieves a level of security comparable to that of light clients, with the safeguard that even one honest node among several can uphold the integrity of the system."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive explanation of how INTERX's swarm requests leverage signed responses to bolster security, refer to the ",(0,a.jsx)(t.a,{href:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",children:"Middleware - INTERX"})," page."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??p;return h({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4558825.6e1ba61e.js b/assets/js/b4558825.6e1ba61e.js new file mode 100644 index 0000000..ec222a3 --- /dev/null +++ b/assets/js/b4558825.6e1ba61e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6113],{6634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},s=void 0,i={id:"What-is-KIRA/-Frontend---MIRO",title:"Frontend - MIRO",description:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.",source:"@site/tabs/Learn/What-is-KIRA/-Frontend---MIRO.mdx",sourceDirName:"What-is-KIRA",slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Frontend - MIRO",sidebar_position:3,slug:"/b5188aa1-563f-45e3-906a-9d71b80bd47a"},sidebar:"defaultSidebar",previous:{title:"Middleware - INTERX",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851"},next:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f"}},l={},u=[];function c(e){const t={a:"a",admonition:"admonition",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets."}),"\n",(0,a.jsx)(t.p,{children:"The defining feature of MIRO is its self-contained design. Once the MIRO page is loaded into a user's browser, it operates entirely locally on the user's computer. This means all actions taken within MIRO, from transactions to account management, happen within the user's device without the need reliance on external hosting servers. The only requirement is a connection to at least one local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:"Notably, MIRO does not rely on light clients and leverages the security of INTERX for blockchain communication. This is possible thanks to INTERX\u2019s swarm request feature, which is designed to work optimally when MIRO interfaces with multiple INTERX nodes, ideally operated by different entities. While it's possible to connect MIRO to a single node, the real strength of swarm requests lies in their ability to cross check signed responses from multiple nodes to identify any inconsistencies and allow the creation of fraud proofs against false data. Such a strategy achieves a level of security comparable to that of light clients, with the safeguard that even one honest node among several can uphold the integrity of the system."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive explanation of how INTERX's swarm requests leverage signed responses to bolster security, refer to the ",(0,a.jsx)(t.a,{href:"/8a93bc9c-ce24-4129-96d5-9bbe381f6851",children:"Middleware - INTERX"})," page."]})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),i=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=f(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??p;return h({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9bae124.aeff9868.js b/assets/js/b9bae124.aeff9868.js new file mode 100644 index 0000000..83d1a83 --- /dev/null +++ b/assets/js/b9bae124.aeff9868.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2621],{9050:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Governance/index",title:"Governance",description:"x/gov",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",permalink:"/docs.kira.network/docs/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/docs/9f763be9-fbd3-452f-8c6e-6e418f34856f"},next:{title:"Proposals & governance structure",permalink:"/docs.kira.network/docs/25d26925-50ce-4a4f-836b-fc8486ef8b05"}},l={},i=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/gov/",children:(0,n.jsx)(t.code,{children:"x/gov"})})}),"\n",(0,n.jsx)(t.p,{children:"A flexible and adaptable governance structure that allows for a diverse range of participants, a.k.a Councilors, to contribute to KIRA decision-making processes. Unique features include a multi-layered approach to roles and permissions and an Identity Registrar allowing users to verify their own or others' profile claims on-chain, fostering Sybil resistance within the network."})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??h;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9bae124.bd55bccf.js b/assets/js/b9bae124.bd55bccf.js deleted file mode 100644 index 8ac43f7..0000000 --- a/assets/js/b9bae124.bd55bccf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2621],{9050:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Governance/index",title:"Governance",description:"x/gov",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f"},next:{title:"Proposals & governance structure",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05"}},l={},i=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/gov/",children:(0,n.jsx)(t.code,{children:"x/gov"})})}),"\n",(0,n.jsx)(t.p,{children:"A flexible and adaptable governance structure that allows for a diverse range of participants, a.k.a Councilors, to contribute to KIRA decision-making processes. Unique features include a multi-layered approach to roles and permissions and an Identity Registrar allowing users to verify their own or others' profile claims on-chain, fostering Sybil resistance within the network."})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??h;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9c4b4b0.38e50d3f.js b/assets/js/b9c4b4b0.38e50d3f.js deleted file mode 100644 index 5673dfa..0000000 --- a/assets/js/b9c4b4b0.38e50d3f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9697],{4563:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},i=void 0,s={id:"Stack/INTERX--Middleware/index",title:"INTERX | Middleware",description:"Interx",source:"@site/tabs/Docs/Stack/INTERX--Middleware/index.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/be25ed12-b476-4a07-8966-9bc4062bd746",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},sidebar:"defaultSidebar",previous:{title:"Network Parameter Handling",permalink:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},next:{title:"System Requirements",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"}},l={},u=[{value:"Interx",id:"26bed6b827324d9ca7b619252a42cb56",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"26bed6b827324d9ca7b619252a42cb56",children:"Interx"}),"\n",(0,r.jsxs)(t.p,{children:['INTERX - "Interchain NginX", is a decentralized API and Content Availability Layer that enables access to the state of blockchain applications and L2 without relying on any third-party service providers. Decentralized middleware makes it easier to build frontend applications and eliminates the need for difficult-to-maintain light clients. Its main functions are distributed applications proxy, load balancer, replicated storage, and security gateway service for communication between the backend and front end. INTERX requires access to both the GRPC and the Tendermint RPC endpoint (',(0,r.jsx)(t.a,{href:"https://docs.tendermint.com/master/rpc/",children:(0,r.jsx)(t.code,{children:"Tendermint RPC"})}),") of SEKAI node."]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9c4b4b0.c45c8a85.js b/assets/js/b9c4b4b0.c45c8a85.js new file mode 100644 index 0000000..317f5f2 --- /dev/null +++ b/assets/js/b9c4b4b0.c45c8a85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9697],{4563:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},i=void 0,s={id:"Stack/INTERX--Middleware/index",title:"INTERX | Middleware",description:"Interx",source:"@site/tabs/Docs/Stack/INTERX--Middleware/index.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/be25ed12-b476-4a07-8966-9bc4062bd746",permalink:"/docs.kira.network/docs/be25ed12-b476-4a07-8966-9bc4062bd746",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"INTERX | Middleware",sidebar_position:1,slug:"/be25ed12-b476-4a07-8966-9bc4062bd746"},sidebar:"defaultSidebar",previous:{title:"Network Parameter Handling",permalink:"/docs.kira.network/docs/e9523d9e-40b5-40ed-9773-7fc36af1cdcd"},next:{title:"System Requirements",permalink:"/docs.kira.network/docs/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"}},l={},u=[{value:"Interx",id:"26bed6b827324d9ca7b619252a42cb56",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"26bed6b827324d9ca7b619252a42cb56",children:"Interx"}),"\n",(0,r.jsxs)(t.p,{children:['INTERX - "Interchain NginX", is a decentralized API and Content Availability Layer that enables access to the state of blockchain applications and L2 without relying on any third-party service providers. Decentralized middleware makes it easier to build frontend applications and eliminates the need for difficult-to-maintain light clients. Its main functions are distributed applications proxy, load balancer, replicated storage, and security gateway service for communication between the backend and front end. INTERX requires access to both the GRPC and the Tendermint RPC endpoint (',(0,r.jsx)(t.a,{href:"https://docs.tendermint.com/master/rpc/",children:(0,r.jsx)(t.code,{children:"Tendermint RPC"})}),") of SEKAI node."]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var r=n(7294),a=n(6905),o=n(2466),i=n(6550),s=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function w(e){let{className:t,block:n,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(u(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function I(e){const t=(0,h.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var r=n(7294);const a={},o=r.createContext(a);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bc73d675.b1dbac03.js b/assets/js/bc73d675.b1dbac03.js deleted file mode 100644 index 208059e..0000000 --- a/assets/js/bc73d675.b1dbac03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[30],{4814:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},u=void 0,s={id:"Community",title:"Community",description:"Coming soon\u2026",source:"@site/tabs/docs/Community.mdx",sourceDirName:".",slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Community",sidebar_position:2,slug:"/6196d806-d61d-4013-b317-d9f2f8f4008f"},sidebar:"defaultSidebar",previous:{title:"TORII | Bridge",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9"},next:{title:"Wallet",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"}},l={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=m({queryString:n,groupId:a}),[p,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??p;return b({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(i(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd930d6d.e813f9a5.js b/assets/js/bd930d6d.e813f9a5.js deleted file mode 100644 index c056385..0000000 --- a/assets/js/bd930d6d.e813f9a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2365],{803:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},s=void 0,l={id:"Stack/MIRO--Frontend/index",title:"MIRO | Frontend",description:"Miro",source:"@site/tabs/docs/Stack/MIRO--Frontend/index.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a"},next:{title:"Installation",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"}},u={},i=[{value:"Miro",id:"72526372563b49a6a4f7341623bac78f",level:2}];function c(e){const t={a:"a",h2:"h2",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"72526372563b49a6a4f7341623bac78f",children:"Miro"}),"\n",(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) - is a KIRA network frontend application and web wallet that allows users to interact with the KIRA blockchain through the decentralized API, INTERX. It provides an easy-to-use interface for managing KIRA accounts and assets, making it accessible to a wide range of users. MIRO web application is static and fully self-contained. This means that once the page is loaded into your browser all actions you take occur locally on your computer. There is no need for any hosting servers or access to the internet beyond the IP of any local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/miro",children:(0,a.jsx)(t.strong,{children:"MIRO | Source code"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),u=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=h({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=l[n].value;r!==a&&(i(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bda39025.56a286f0.js b/assets/js/bda39025.56a286f0.js deleted file mode 100644 index cbe94c4..0000000 --- a/assets/js/bda39025.56a286f0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1338],{1658:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var i=s(5893),r=s(1151),a=s(4866),t=s(5162);const c={title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},d=void 0,o={id:"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts",title:"Keys & accounts",description:"An account in the Cosmos SDK, consists of a pair of a public key PubKey and a private key PrivKey. The PubKey can be used to generate various Addresses, which identify users and other parties in the application and are associated with messages to identify the sender. The PrivKey is used to generate digital signatures to prove that an Address associated with the PrivKey has approved a specific message.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/BaseApp",slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7",permalink:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Keys & accounts",sidebar_position:0,slug:"/31613d97-abfb-4911-b17a-0c83cdba58a7"},sidebar:"defaultSidebar",previous:{title:"Evidence module",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438"},next:{title:"Bank",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa"}},l={},h=[{value:"Keyring",id:"8a741e374186404b85f2d68fc0e2a672",level:3},{value:"Cli syntax & examples",id:"44798a61b8f749ae87a9a72c100ad055",level:2},{value:"Transactions",id:"67708b3e7e8f472b95c3ed04ad88e90c",level:2},{value:"Creating an account",id:"b0376794dcd34d20be7c2fdbce645294",level:4},{value:"Deleting an account",id:"c5ce2ab22e8442daad9098283b8e8f46",level:4},{value:"Recovering an account using mnemonic",id:"6f2516dff83e4005835ca6da620fbc50",level:4},{value:"Queries",id:"0e3940d917c543f9bb11928e2b016cd5",level:2},{value:"Retrieve key information by name or address",id:"adb811fab06c477abbaf56c4b3cc21a6",level:4},{value:"Governance",id:"3bee0a67d26f4c2999ed12de1540a07f",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["An account in the Cosmos SDK, consists of a pair of a public key ",(0,i.jsx)(n.code,{children:"PubKey"})," and a private key ",(0,i.jsx)(n.code,{children:"PrivKey"}),". The ",(0,i.jsx)(n.code,{children:"PubKey"})," can be used to generate various ",(0,i.jsx)(n.code,{children:"Addresses"}),", which identify users and other parties in the application and are associated with messages to identify the sender. The ",(0,i.jsx)(n.code,{children:"PrivKey"})," is used to generate digital signatures to prove that an ",(0,i.jsx)(n.code,{children:"Address"})," associated with the ",(0,i.jsx)(n.code,{children:"PrivKey"})," has approved a specific message."]}),"\n",(0,i.jsxs)(n.p,{children:['KIRA accounts only exist on the blockchain if they have a non-zero balance. This is a feature of the Cosmos SDK that helps prevent the creation of "spam" accounts that do not hold any value. All KIRA addresses are 44 characters long and are ',(0,i.jsx)(n.a,{href:"https://en.bitcoin.it/wiki/Bech32",children:"Bech32"})," encoded with a ",(0,i.jsx)(n.code,{children:"kira"})," prefix (e.g. ",(0,i.jsx)(n.code,{children:"kira1d52rts8wf508uy2sdcx4a0qxjzvqr3dsnesm4w"}),"). These accounts are derived from ",(0,i.jsx)(n.a,{href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"BIP39 mnemonic words"}),", which must be kept safe by the account holder at all times. Losing access to the mnemonic or revealing its contents will result in permanent and irrecoverable loss of funds."]}),"\n",(0,i.jsx)(n.p,{children:"KIRA network defines 3 types of addresses that specify a context where an account is used:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"AccAddress"}),"\xa0identifies users (the sender of a\xa0",(0,i.jsx)(n.code,{children:"message"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ValAddress"}),"\xa0identifies consensus node operators (a.k.a validators)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ConsAddress"}),"\xa0identifies consensus nodes that are participating in consensus. Consensus nodes are derived using the\xa0",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"ed25519"})}),"\xa0curve."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"8a741e374186404b85f2d68fc0e2a672",children:"Keyring"}),"\n",(0,i.jsxs)(n.p,{children:["Like in every Cosmos-based network, Private/Public keys are stored and managed by using an object called a\xa0",(0,i.jsx)(n.a,{href:"https://docs.cosmos.network/v0.47/basics/accounts#keyring",children:(0,i.jsx)(n.code,{children:"Keyring"})})," which default implementation comes from the third-party\xa0",(0,i.jsx)(n.a,{href:"https://github.com/99designs/keyring",children:"99designs/keyring"}),'\xa0library. The private key can be stored in different "backends", such as a file or the operating system\'s own key storage system. The keyring allows users to manage their keys in a secure and convenient way, and can be integrated with various backend storage options to suit the needs of the user. These backends can be specified in the CLI using the ',(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag (cf. )."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"os"})," backend: This backend relies on operating system-specific defaults to handle key storage securely. It is the default option and is designed to meet users' most common needs and provide a comfortable experience without compromising on security."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"file"})," backend: This backend stores the keyring encrypted within the app's configuration directory. It requires a password each time it is accessed, which may result in multiple prompts."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"pass"})," backend: This backend uses the pass utility to manage on-disk encryption of keys' sensitive data and metadata. Keys are stored inside gpg encrypted files within app-specific directories."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"kwallet"})," backend: This backend uses KDE Wallet Manager, which comes installed by default on the GNU/Linux distributions that ships KDE as default desktop environment."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"test"})," backend: This backend is a password-less variation of the file backend and is provided for testing purposes only. It stores keys unencrypted on disk and is not recommended for use in production environments."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"memory"})," backend: This backend stores keys in memory, which are immediately deleted after the program has exited. It is provided for testing purposes only and is not recommended for use in production environments."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"44798a61b8f749ae87a9a72c100ad055",children:"Cli syntax & examples"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,i.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,i.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,i.jsx)(n.em,{children:"documentation for more details."})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$SIGNER"})})," ",(0,i.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,i.jsx)(n.em,{children:(0,i.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,i.jsx)(n.em,{children:"and"})," ",(0,i.jsxs)(n.em,{children:[(0,i.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,i.jsx)(n.em,{children:"section"})]})}),"\n",(0,i.jsxs)(a.Z,{children:[(0,i.jsxs)(t.Z,{value:"transactions",label:"Transactions",children:[(0,i.jsx)(n.h2,{id:"67708b3e7e8f472b95c3ed04ad88e90c",children:"Transactions"}),(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys add"})}),(0,i.jsx)(n.th,{children:"Add or recover an encrypted private key."})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys delete"})}),(0,i.jsx)(n.td,{children:"Delete a key from the keyring."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"keys recover"})}),(0,i.jsx)(n.td,{children:"Recover a key using a mnemonic."})]})]})]}),(0,i.jsx)(n.h4,{id:"b0376794dcd34d20be7c2fdbce645294",children:"Creating an account"}),(0,i.jsxs)(n.p,{children:["To create a new key in the keyring, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand and provide the desired account key name as an argument. You can also specify the keyring backend to use by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. This is important as it determines where the private/public keypair will be stored and how it will be managed. A ",(0,i.jsx)(n.code,{children:"--multisig"}),"\xa0flag can also be provided to group multiple keys together to create a multisig key."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIG"}),": List of key names for constructing a legacy multisig key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for multisig."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOSORT"}),": Keys are taken in the order supplied if true."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Saves key info to file from a JSON format public key."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INTERACTIVE"}),": Interactively prompt for BIP39 passphrase and mnemonic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$USELEDGER"}),": Store a reference to a private key on a Ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$RECOVER"}),": Recover an existing key using a seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$NOBACKUP"}),": Don't print out the seed phrase."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DRYRUN"}),": Perform action without adding key to local keystore."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$HDPATH"}),": Manual HD Path derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$COINTYPE"}),": Coin type number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT"}),": Account number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$INDEX"}),": Address index number for HD derivation."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$KEYALGORITHM"}),": Key signing algorithm for generating keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_NAME"}),": The account key name."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys add $ACCOUNT_NAME $FLAGS_TX\n"})}),(0,i.jsx)(n.h4,{id:"c5ce2ab22e8442daad9098283b8e8f46",children:"Deleting an account"}),(0,i.jsxs)(n.p,{children:["To delete a key from the keyring, use the ",(0,i.jsx)(n.code,{children:"delete"})," subcommand and provide the desired account key address as an argument and specify the keyring backend to delete from by setting the ",(0,i.jsx)(n.code,{children:"$FLAGS_TX"})," environment variable or by manually using the ",(0,i.jsx)(n.code,{children:"--keyring-backend"})," flag. ",(0,i.jsx)(n.code,{children:"--force"})," flag can be specified to skip passphrase check and force key deletion unconditionally."]}),(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Removing offline or ledger keys will remove only the public key references stored locally, i.e. private keys stored in a ledger device cannot be deleted with the CLI."})}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$YES"}),": Skip confirmation prompt when deleting keys."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$FORCE"}),": Remove the key unconditionally without asking for the passphrase."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"sekaid keys delete $ACCOUNT_NAME $FLAGS_TX --force --yes\n"})}),(0,i.jsx)(n.h4,{id:"6f2516dff83e4005835ca6da620fbc50",children:"Recovering an account using mnemonic"}),(0,i.jsxs)(n.p,{children:["To recover an account using its respective mnemonic, use the ",(0,i.jsx)(n.code,{children:"add"})," subcommand with the ",(0,i.jsx)(n.code,{children:"\u2014recover"})," flag and provide the desired account key name as an argument."]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Args"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_MNEMONIC"}),": The account\u2019s mnemonic."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'yes "$ACCOUNT_MNEMONIC" | sekaid keys add $ACCOUNT_NAME $FLAGS_TX --recover\n'})})]}),(0,i.jsxs)(t.Z,{value:"queries",label:"Queries",children:[(0,i.jsx)(n.h2,{id:"0e3940d917c543f9bb11928e2b016cd5",children:"Queries"}),(0,i.jsx)(n.table,{children:(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"keys show"})}),(0,i.jsx)(n.th,{children:"Display key details by name or address."})]})})}),(0,i.jsx)(n.h4,{id:"adb811fab06c477abbaf56c4b3cc21a6",children:"Retrieve key information by name or address"}),(0,i.jsxs)(n.p,{children:["To display key details, use the ",(0,i.jsx)(n.code,{children:"show"}),' subcommand and provide the account key name or address. This command can handle multiple names or addresses, creating an ephemeral multisig key named "multi" with the keys provided and the specified multisig threshold.']}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Flags"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ACCOUNT_KEY"}),": The account key name or address."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$BECHPREFIX"}),": The Bech32 prefix encoding for a key (e.g., acc, val, cons)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$ADDRESS"}),": Output the address only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$PUBLICKEY"}),": Output the public key only."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$DEVICE"}),": Output the address in a ledger device."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"$MULTISIGTHRESHOLD"}),": K out of N required signatures for a multisig key."]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid keys show $ACCOUNT_KEY $FLAGS_QR | jq\n"})})]}),(0,i.jsxs)(t.Z,{value:"governance",label:"Governance",children:[(0,i.jsx)(n.h2,{id:"3bee0a67d26f4c2999ed12de1540a07f",children:"Governance"}),(0,i.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>t});s(7294);var i=s(6905);const r={tabItem:"tabItem_Ymn6"};var a=s(5893);function t(e){let{children:n,hidden:s,className:t}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,t),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var i=s(7294),r=s(6905),a=s(2466),t=s(6550),c=s(469),d=s(1980),o=s(7392),l=s(12);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:i,default:r}}=e;return{value:n,label:s,attributes:i,default:r}}))}(s);return function(e){const n=(0,o.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:s}=e;const r=(0,t.k6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d._X)(a),(0,i.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[t,d]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=s.find((e=>e.default))??s[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:a}))),[o,h]=m({queryString:s,groupId:r}),[b,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,l.Nk)(s);return[r,(0,i.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),x=(()=>{const e=o??b;return p({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{x&&d(x)}),[x]);return{selectedValue:t,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,a]),tabValues:a}}var f=s(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function y(e){let{className:n,block:s,selectedValue:i,selectValue:t,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,a.o5)(),l=e=>{const n=e.currentTarget,s=d.indexOf(n),r=c[s].value;r!==i&&(o(n),t(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...a,className:(0,r.Z)("tabs__item",x.tabItem,a?.className,{"tabs__item--active":i===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:r}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function v(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,j.jsx)(y,{...e,...n}),(0,j.jsx)(g,{...e,...n})]})}function k(e){const n=(0,f.Z)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>t});var i=s(7294);const r={},a=i.createContext(r);function t(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c0bdbdf6.5d1703d6.js b/assets/js/c0bdbdf6.5d1703d6.js deleted file mode 100644 index 511d655..0000000 --- a/assets/js/c0bdbdf6.5d1703d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6703],{7008:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=r(5893),s=r(1151),d=r(4866),i=r(5162);const a={title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module",title:"Upgrade Module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},sidebar:"defaultSidebar",previous:{title:"Upgrade",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},next:{title:"Fee processing",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"}},o={},h=[{value:"Concept",id:"6ba6105bbb57434085533c9c0e0497e0",level:3},{value:"Parameters",id:"3e04b070eb15440fb32be7705a85fbdc",level:3},{value:"Upgrade configuration examples",id:"26a1fdae5da44a1087d2e19c99f98566",level:4},{value:"Upgrade plan example",id:"0cff5a2dae1b4f039c904237df25449e",level:4},{value:"Upgrade process",id:"8576cd2745b74f64bd2df866b9ebc5cf",level:3},{value:"Manual hard fork",id:"e101effdd1aa446eac7633d2a4475c77",level:4},{value:"Cli syntax & examples",id:"e33d542c95414e01b67b21abf61aa961",level:2},{value:"Transactions",id:"d5522dd8578142d582074acef31f2b66",level:2},{value:"Queries",id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",level:2},{value:"Display the current plan",id:"75bbe2df40cf4062b80245ade1980630",level:4},{value:"Display the next plan",id:"d84065dd1cd5451f84968808880db451",level:4},{value:"Governance",id:"a2174efb55d24eb48f3b046437db2148",level:2},{value:"Set network upgrade plan proposal",id:"776b14b4fa314e0ca4387826d49a9346",level:4},{value:"Cancel network upgrade plan proposal",id:"6afe9d8499b640ad960d44e4e210bebd",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"6ba6105bbb57434085533c9c0e0497e0",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:'The Upgrade Module plays a crucial role in ensuring seamless transitions between different versions of the KIRA Network while preserving the current chain state. KIRA\'s governance is responsible for managing the upgrade process with permissions to propose and vote on the "Upgrade Plan". The Upgrade Plan is a set of JSON-formatted instructions hosted on-chain that details how and when validators should proceed with the upgrade. Additionally, the Upgrade Module offers a unique feature that informs new network participants about the necessary software resources to join the network, thereby ensuring the process of acquiring essential references and checksums is entirely trustless.'}),"\n",(0,t.jsx)(n.p,{children:"Upgrades can occur as either Hard Forks or Soft Forks. Hard Forks are executed when the new blockchain application is incompatible with the current chain state storage, requiring launching from a new genesis with a new chain ID to prevent double signing. On the other hand, Soft Forks are executed when no impact on the chain-state is expected, allowing the network to continue with the same chain ID without exporting and generating a new genesis file."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),"\n",(0,t.jsx)(n.h3,{id:"3e04b070eb15440fb32be7705a85fbdc",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Parameter"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Type"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Example"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Description"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118"})}),(0,t.jsx)(n.td,{children:"Name of the plan"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_enrolment_duration"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"90"})}),(0,t.jsx)(n.td,{children:"Expected duration of upgrade in seconds"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"new_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-9"})}),(0,t.jsx)(n.td,{children:"Identifier of the new chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"old_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-8"})}),(0,t.jsx)(n.td,{children:"Identifier of the current chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposalID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"668"})}),(0,t.jsx)(n.td,{children:"ID of the update proposal. It is set automatically."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"reboot_required"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsx)(n.td,{children:"Defines if nodes require OS reboot"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"resources"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"array"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'{"version": "testnet-9","url":https://github.com/KiraCore/kira","id": "kira"},'})}),(0,t.jsxs)(n.td,{children:["A list of resources to be used in the pipeline, such as images or external dependencies. Includes: ",(0,t.jsx)(n.code,{children:"url"}),", ",(0,t.jsx)(n.code,{children:"checksum"}),", ",(0,t.jsx)(n.code,{children:"version"}),", ",(0,t.jsx)(n.code,{children:"id"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rollback_checksum"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118-roll"})}),(0,t.jsx)(n.td,{children:"Checksum to use when rolling back the chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"skip_handler"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if ",(0,t.jsx)(n.code,{children:"sekaid"})," on-chain handlers of the upgrade process should be skipped. If ",(0,t.jsx)(n.code,{children:"true"}),", ",(0,t.jsx)(n.code,{children:"sekaid"})," version changes will be omitted and the network will continue running. If ",(0,t.jsx)(n.code,{children:"false"}),", the network will halt at the ",(0,t.jsx)(n.code,{children:"upgrade_time"})," and remain stopped until ",(0,t.jsx)(n.code,{children:"sekaid"})," binary is upgraded"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"instate_upgrade"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if database state should be deleted or persisted. If set to ",(0,t.jsx)(n.code,{children:"true"})," then a Hard Fork will be executed and the ",(0,t.jsx)(n.code,{children:"new_chain_id"})," and ",(0,t.jsx)(n.code,{children:"old_chain_id"})," must be different. If set to ",(0,t.jsx)(n.code,{children:"false"})," , a Soft Fork will be executed and the database does not have to be erased."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade_time"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1641573000"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the exact time the update should be executed"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"26a1fdae5da44a1087d2e19c99f98566",children:"Upgrade configuration examples"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Hard Fork with no change made in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries such as INTERX or infrastructure manager, and wiping old database state (e.g. to save disk space)","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"true"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Hard Fork with changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade network in the case where old database state is incompatible with new release","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Soft Fork without changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries, but preserve old database state","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be the same as ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"0cff5a2dae1b4f039c904237df25449e",children:"Upgrade plan example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n\t"plan": {\n\t\t"max_enrolment_duration": "90",\n\t\t"name": "upgrade-118",\n\t\t"new_chain_id": "testnet-9",\n\t\t"old_chain_id": "testnet-8",\n\t\t"proposalID": "668",\n\t\t"reboot_required": true,\n\t\t"resources": [\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/kira",\n\t\t\t"id": "kira"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "sekai"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "interx"\n\t\t\t}\n\t\t],\n\t\t"rollback_checksum": "upgrade-118-roll",\n\t\t"skip_handler": true,\n\t\t"upgrade_time": "1641573000"\n\t\t}\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"8576cd2745b74f64bd2df866b9ebc5cf",children:"Upgrade process"}),"\n",(0,t.jsx)(n.p,{children:"The KIRA network can be upgraded through an off-chain mechanism executed by the daemon service of the KIRA Manager (KM). However, it is not mandatory to use KM to upgrade the network, and node operators can set up their own dedicated CD/CI pipeline tools, such as Jenkins or Teamcity."}),"\n",(0,t.jsx)(n.p,{children:"To keep up-to-date with upcoming upgrades, operators can obtain information from two INTERX endpoints:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/current_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/current_plan"})})}),": The \u201ccurrent\u201d plan contains information and resources regarding the current release."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/next_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/next_plan"})})}),": The \u201cnext\u201d plan contains information and resources regarding the upcoming release. Nodes can also obtain resource references, such as GitHub links and branches, specified in the \u201ccurrent\u201d plan endpoint of a trusted node while joining the network for the very first time."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"e101effdd1aa446eac7633d2a4475c77",children:"Manual hard fork"}),"\n",(0,t.jsxs)(n.p,{children:["If a new genesis file is required for a hard fork, and KM is not used, node operators must create it by first exporting genesis at the block height where the network stopped (node daemon should be shut down), and then passing it through a dedicated ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. It should be noted that the ",(0,t.jsx)(n.code,{children:"sekaid"})," application must be upgraded prior to executing the ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. Otherwise, it might not be able to interpret and convert the old genesis to the new."]}),"\n",(0,t.jsx)(n.p,{children:"Node operators can execute the following steps to manually hard fork the network:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'SEKAI="/home/go/src/github.com/kiracore/sekai"\nEXPORTED_GENESIS="/tmp/exported-genesis.json"\nNEW_GENESIS="/tmp/new-genesis.json"\n\n# Cleanup old files\nrm -fv $EXPORTED_GENESIS $NEW_GENESIS\n\n# Ensure sekaid process is killed gracefully\npkill -15 sekaid || echoWarn "WARNING: Failed to kill sekaid, process might already be dead"\n\n# Export current genesis\nsekaid export --home=$SEKAID_HOME > $EXPORTED_GENESIS\n\n# Update repository\ncd $SEKAI\ngit fetch --all\ngit checkout $BRANCH_TO_CHECKOUT\nmake install\n\n# Convert exported genesis to a new compatible version\nsekaid new-genesis-from-exported $EXPORTED_GENESIS $NEW_GENESIS\n\n'})}),"\n",(0,t.jsx)(n.h2,{id:"e33d542c95414e01b67b21abf61aa961",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(d.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"d5522dd8578142d582074acef31f2b66",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"current-plan"})}),(0,t.jsx)(n.th,{children:"Query the current network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"next-plan"})}),(0,t.jsx)(n.td,{children:"Query the next network upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"75bbe2df40cf4062b80245ade1980630",children:"Display the current plan"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"current-plan"})," command to retrieve the current network upgrade plan."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade current-plan $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"d84065dd1cd5451f84968808880db451",children:"Display the next plan"}),(0,t.jsxs)(n.p,{children:["To query the next network upgrade plan, use the ",(0,t.jsx)(n.code,{children:"next-plan"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade next-plan $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"a2174efb55d24eb48f3b046437db2148",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-set-plan"})}),(0,t.jsx)(n.th,{children:"Create a proposal to set a network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-cancel-plan"})}),(0,t.jsx)(n.td,{children:"Create a proposal to cancel an existing upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"776b14b4fa314e0ca4387826d49a9346",children:"Set network upgrade plan proposal"}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-set-plan"}),", is used to create a proposal to set an upgrade plan for the network. If voted, the upgrade plan is saved and will be overwritten by any subsequent proposals voted before the ",(0,t.jsx)(n.code,{children:"$MIN_UPGRADE_TIME"}),". The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$UPGRADEMEMO"}),": Upgrade proposal memo."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Upgrade name."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$INSTATEUPGRADE"}),": Boolean indicating instate upgrade (true for hard fork with new genesis file/soft fork)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$SKIPHANDLER"}),": Boolean indicating if handler should be skipped (true if change in sekaid version)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$OLDCHAINID"}),": Old chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NEWCHAINID"}),": New chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MINUPGRADETIME"}),": Unix timestamp of the exact time the update should be executed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$RESOURCES"}),": List of resources to be used in the pipeline."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ROLLBACKMEMO"}),": Checksum to use when rolling back the chain."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MAXENROLLMENTDURATION"}),": Expected duration of upgrade in seconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$REBOOTREQUIRED"}),": Node reboot requirement (true if required)."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-set-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --resources=$RESOURCES \\\n--min-upgrade-time=$MIN_UPGRADE_TIME \\\n--old-chain-id=$OLD_CHAIN_ID \\\n--new-chain-id=$NEW_CHAIN_ID \\\n--rollback-memo=$ROLLBACK_MEMO \\\n--max-enrollment-duration=$MAX_ENROLLMENT_DURATION \\\n--upgrade-memo=$UPGRADE_MEMO \\\n--instate-upgrade=$INSTATE_UPGRADE \\\n--reboot-required=$REBOOT_REQUIRED \\\n--skip-handler=$SKIP_HANDLER\n"})}),(0,t.jsx)(n.h4,{id:"6afe9d8499b640ad960d44e4e210bebd",children:"Cancel network upgrade plan proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-cancel-plan"}),", is used to create a proposal to cancel an existing upgrade plan for the network. This proposal is not necessary if the goal is the replace an upgrade plan as the ",(0,t.jsx)(n.code,{children:"proposal-set-plan"})," command overwrite any existing upgrade plan. The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the upgrade plan to be cancelled."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-cancel-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]}),"\n",(0,t.jsx)(n.hr,{})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>i});r(7294);var t=r(6905);const s={tabItem:"tabItem_Ymn6"};var d=r(5893);function i(e){let{children:n,hidden:r,className:i}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>w});var t=r(7294),s=r(6905),d=r(2466),i=r(6550),a=r(469),l=r(1980),c=r(7392),o=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:r}=e;const s=(0,i.k6)(),d=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,l._X)(d),(0,t.useCallback)((e=>{if(!d)return;const n=new URLSearchParams(s.location.search);n.set(d,e),s.replace({...s.location,search:n.toString()})}),[d,s])]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,d=u(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:d}))),[c,h]=x({queryString:r,groupId:s}),[j,f]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,d]=(0,o.Nk)(r);return[s,(0,t.useCallback)((e=>{r&&d.set(e)}),[r,d])]}({groupId:s}),b=(()=>{const e=c??j;return p({value:e,tabValues:d})?e:null})();(0,a.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=r(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function m(e){let{className:n,block:r,selectedValue:t,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,d.o5)(),o=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),i(s))},h=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:d}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:h,onClick:o,...d,className:(0,s.Z)("tabs__item",b.tabItem,d?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function k(e){let{lazy:n,children:r,selectedValue:s}=e;const d=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=d.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:d.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(m,{...e,...n}),(0,g.jsx)(k,{...e,...n})]})}function w(e){const n=(0,f.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var t=r(7294);const s={},d=t.createContext(s);function i(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c0bdbdf6.be365faf.js b/assets/js/c0bdbdf6.be365faf.js new file mode 100644 index 0000000..d6ed023 --- /dev/null +++ b/assets/js/c0bdbdf6.be365faf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6703],{7008:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=r(5893),s=r(1151),d=r(4866),i=r(5162);const a={title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module",title:"Upgrade Module",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",permalink:"/docs.kira.network/docs/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},sidebar:"defaultSidebar",previous:{title:"Upgrade",permalink:"/docs.kira.network/docs/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},next:{title:"Fee processing",permalink:"/docs.kira.network/docs/184c11ed-4849-4ec5-acd0-f795b7abf467"}},o={},h=[{value:"Concept",id:"6ba6105bbb57434085533c9c0e0497e0",level:3},{value:"Parameters",id:"3e04b070eb15440fb32be7705a85fbdc",level:3},{value:"Upgrade Configuration Examples",id:"26a1fdae5da44a1087d2e19c99f98566",level:4},{value:"Upgrade Plan Example",id:"0cff5a2dae1b4f039c904237df25449e",level:4},{value:"Upgrade Process",id:"8576cd2745b74f64bd2df866b9ebc5cf",level:3},{value:"Manual Hard Fork",id:"e101effdd1aa446eac7633d2a4475c77",level:4},{value:"Cli Syntax & Examples",id:"e33d542c95414e01b67b21abf61aa961",level:2},{value:"Transactions",id:"d5522dd8578142d582074acef31f2b66",level:2},{value:"Queries",id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",level:2},{value:"Display the Current Plan",id:"75bbe2df40cf4062b80245ade1980630",level:4},{value:"Display the Next Plan",id:"d84065dd1cd5451f84968808880db451",level:4},{value:"Governance",id:"a2174efb55d24eb48f3b046437db2148",level:2},{value:"Set Network Upgrade Plan Proposal",id:"776b14b4fa314e0ca4387826d49a9346",level:4},{value:"Cancel Network Upgrade Plan Proposal",id:"6afe9d8499b640ad960d44e4e210bebd",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"6ba6105bbb57434085533c9c0e0497e0",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:'The Upgrade Module plays a crucial role in ensuring seamless transitions between different versions of the KIRA Network while preserving the current chain state. KIRA\'s governance is responsible for managing the upgrade process with permissions to propose and vote on the "Upgrade Plan". The Upgrade Plan is a set of JSON-formatted instructions hosted on-chain that details how and when validators should proceed with the upgrade. Additionally, the Upgrade Module offers a unique feature that informs new network participants about the necessary software resources to join the network, thereby ensuring the process of acquiring essential references and checksums is entirely trustless.'}),"\n",(0,t.jsx)(n.p,{children:"Upgrades can occur as either Hard Forks or Soft Forks. Hard Forks are executed when the new blockchain application is incompatible with the current chain state storage, requiring launching from a new genesis with a new chain ID to prevent double signing. On the other hand, Soft Forks are executed when no impact on the chain-state is expected, allowing the network to continue with the same chain ID without exporting and generating a new genesis file."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),"\n",(0,t.jsx)(n.h3,{id:"3e04b070eb15440fb32be7705a85fbdc",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Parameter"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Type"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Example"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Description"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118"})}),(0,t.jsx)(n.td,{children:"Name of the plan"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_enrolment_duration"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"90"})}),(0,t.jsx)(n.td,{children:"Expected duration of upgrade in seconds"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"new_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-9"})}),(0,t.jsx)(n.td,{children:"Identifier of the new chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"old_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-8"})}),(0,t.jsx)(n.td,{children:"Identifier of the current chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposalID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"668"})}),(0,t.jsx)(n.td,{children:"ID of the update proposal. It is set automatically."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"reboot_required"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsx)(n.td,{children:"Defines if nodes require OS reboot"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"resources"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"array"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'{"version": "testnet-9","url":https://github.com/KiraCore/kira","id": "kira"},'})}),(0,t.jsxs)(n.td,{children:["A list of resources to be used in the pipeline, such as images or external dependencies. Includes: ",(0,t.jsx)(n.code,{children:"url"}),", ",(0,t.jsx)(n.code,{children:"checksum"}),", ",(0,t.jsx)(n.code,{children:"version"}),", ",(0,t.jsx)(n.code,{children:"id"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rollback_checksum"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118-roll"})}),(0,t.jsx)(n.td,{children:"Checksum to use when rolling back the chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"skip_handler"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if ",(0,t.jsx)(n.code,{children:"sekaid"})," on-chain handlers of the upgrade process should be skipped. If ",(0,t.jsx)(n.code,{children:"true"}),", ",(0,t.jsx)(n.code,{children:"sekaid"})," version changes will be omitted and the network will continue running. If ",(0,t.jsx)(n.code,{children:"false"}),", the network will halt at the ",(0,t.jsx)(n.code,{children:"upgrade_time"})," and remain stopped until ",(0,t.jsx)(n.code,{children:"sekaid"})," binary is upgraded"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"instate_upgrade"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if database state should be deleted or persisted. If set to ",(0,t.jsx)(n.code,{children:"true"})," then a Hard Fork will be executed and the ",(0,t.jsx)(n.code,{children:"new_chain_id"})," and ",(0,t.jsx)(n.code,{children:"old_chain_id"})," must be different. If set to ",(0,t.jsx)(n.code,{children:"false"})," , a Soft Fork will be executed and the database does not have to be erased."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade_time"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1641573000"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the exact time the update should be executed"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"26a1fdae5da44a1087d2e19c99f98566",children:"Upgrade Configuration Examples"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Hard Fork with no change made in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries such as INTERX or infrastructure manager, and wiping old database state (e.g. to save disk space)","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"true"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Hard Fork with changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade network in the case where old database state is incompatible with new release","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Soft Fork without changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries, but preserve old database state","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be the same as ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"0cff5a2dae1b4f039c904237df25449e",children:"Upgrade Plan Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n\t"plan": {\n\t\t"max_enrolment_duration": "90",\n\t\t"name": "upgrade-118",\n\t\t"new_chain_id": "testnet-9",\n\t\t"old_chain_id": "testnet-8",\n\t\t"proposalID": "668",\n\t\t"reboot_required": true,\n\t\t"resources": [\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/kira",\n\t\t\t"id": "kira"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "sekai"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "interx"\n\t\t\t}\n\t\t],\n\t\t"rollback_checksum": "upgrade-118-roll",\n\t\t"skip_handler": true,\n\t\t"upgrade_time": "1641573000"\n\t\t}\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"8576cd2745b74f64bd2df866b9ebc5cf",children:"Upgrade Process"}),"\n",(0,t.jsx)(n.p,{children:"The KIRA network can be upgraded through an off-chain mechanism executed by the daemon service of the KIRA Manager (KM). However, it is not mandatory to use KM to upgrade the network, and node operators can set up their own dedicated CD/CI pipeline tools, such as Jenkins or Teamcity."}),"\n",(0,t.jsx)(n.p,{children:"To keep up-to-date with upcoming upgrades, operators can obtain information from two INTERX endpoints:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/current_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/current_plan"})})}),": The \u201ccurrent\u201d plan contains information and resources regarding the current release."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/next_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/next_plan"})})}),": The \u201cnext\u201d plan contains information and resources regarding the upcoming release. Nodes can also obtain resource references, such as GitHub links and branches, specified in the \u201ccurrent\u201d plan endpoint of a trusted node while joining the network for the very first time."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"e101effdd1aa446eac7633d2a4475c77",children:"Manual Hard Fork"}),"\n",(0,t.jsxs)(n.p,{children:["If a new genesis file is required for a hard fork, and KM is not used, node operators must create it by first exporting genesis at the block height where the network stopped (node daemon should be shut down), and then passing it through a dedicated ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. It should be noted that the ",(0,t.jsx)(n.code,{children:"sekaid"})," application must be upgraded prior to executing the ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. Otherwise, it might not be able to interpret and convert the old genesis to the new."]}),"\n",(0,t.jsx)(n.p,{children:"Node operators can execute the following steps to manually hard fork the network:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'SEKAI="/home/go/src/github.com/kiracore/sekai"\nEXPORTED_GENESIS="/tmp/exported-genesis.json"\nNEW_GENESIS="/tmp/new-genesis.json"\n\n# Cleanup old files\nrm -fv $EXPORTED_GENESIS $NEW_GENESIS\n\n# Ensure sekaid process is killed gracefully\npkill -15 sekaid || echoWarn "WARNING: Failed to kill sekaid, process might already be dead"\n\n# Export current genesis\nsekaid export --home=$SEKAID_HOME > $EXPORTED_GENESIS\n\n# Update repository\ncd $SEKAI\ngit fetch --all\ngit checkout $BRANCH_TO_CHECKOUT\nmake install\n\n# Convert exported genesis to a new compatible version\nsekaid new-genesis-from-exported $EXPORTED_GENESIS $NEW_GENESIS\n\n'})}),"\n",(0,t.jsx)(n.h2,{id:"e33d542c95414e01b67b21abf61aa961",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(d.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"d5522dd8578142d582074acef31f2b66",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"current-plan"})}),(0,t.jsx)(n.th,{children:"Query the current network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"next-plan"})}),(0,t.jsx)(n.td,{children:"Query the next network upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"75bbe2df40cf4062b80245ade1980630",children:"Display the Current Plan"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"current-plan"})," command to retrieve the current network upgrade plan."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade current-plan $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"d84065dd1cd5451f84968808880db451",children:"Display the Next Plan"}),(0,t.jsxs)(n.p,{children:["To query the next network upgrade plan, use the ",(0,t.jsx)(n.code,{children:"next-plan"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade next-plan $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"a2174efb55d24eb48f3b046437db2148",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-set-plan"})}),(0,t.jsx)(n.th,{children:"Create a proposal to set a network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-cancel-plan"})}),(0,t.jsx)(n.td,{children:"Create a proposal to cancel an existing upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"776b14b4fa314e0ca4387826d49a9346",children:"Set Network Upgrade Plan Proposal"}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-set-plan"}),", is used to create a proposal to set an upgrade plan for the network. If voted, the upgrade plan is saved and will be overwritten by any subsequent proposals voted before the ",(0,t.jsx)(n.code,{children:"$MIN_UPGRADE_TIME"}),". The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$UPGRADEMEMO"}),": Upgrade proposal memo."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Upgrade name."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$INSTATEUPGRADE"}),": Boolean indicating instate upgrade (true for hard fork with new genesis file/soft fork)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$SKIPHANDLER"}),": Boolean indicating if handler should be skipped (true if change in sekaid version)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$OLDCHAINID"}),": Old chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NEWCHAINID"}),": New chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MINUPGRADETIME"}),": Unix timestamp of the exact time the update should be executed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$RESOURCES"}),": List of resources to be used in the pipeline."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ROLLBACKMEMO"}),": Checksum to use when rolling back the chain."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MAXENROLLMENTDURATION"}),": Expected duration of upgrade in seconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$REBOOTREQUIRED"}),": Node reboot requirement (true if required)."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-set-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --resources=$RESOURCES \\\n--min-upgrade-time=$MIN_UPGRADE_TIME \\\n--old-chain-id=$OLD_CHAIN_ID \\\n--new-chain-id=$NEW_CHAIN_ID \\\n--rollback-memo=$ROLLBACK_MEMO \\\n--max-enrollment-duration=$MAX_ENROLLMENT_DURATION \\\n--upgrade-memo=$UPGRADE_MEMO \\\n--instate-upgrade=$INSTATE_UPGRADE \\\n--reboot-required=$REBOOT_REQUIRED \\\n--skip-handler=$SKIP_HANDLER\n"})}),(0,t.jsx)(n.h4,{id:"6afe9d8499b640ad960d44e4e210bebd",children:"Cancel Network Upgrade Plan Proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-cancel-plan"}),", is used to create a proposal to cancel an existing upgrade plan for the network. This proposal is not necessary if the goal is the replace an upgrade plan as the ",(0,t.jsx)(n.code,{children:"proposal-set-plan"})," command overwrite any existing upgrade plan. The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the upgrade plan to be cancelled."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-cancel-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]}),"\n",(0,t.jsx)(n.hr,{})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>i});r(7294);var t=r(6905);const s={tabItem:"tabItem_Ymn6"};var d=r(5893);function i(e){let{children:n,hidden:r,className:i}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>w});var t=r(7294),s=r(6905),d=r(2466),i=r(6550),a=r(469),l=r(1980),c=r(7392),o=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:r}=e;const s=(0,i.k6)(),d=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,l._X)(d),(0,t.useCallback)((e=>{if(!d)return;const n=new URLSearchParams(s.location.search);n.set(d,e),s.replace({...s.location,search:n.toString()})}),[d,s])]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,d=u(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:d}))),[c,h]=x({queryString:r,groupId:s}),[j,f]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,d]=(0,o.Nk)(r);return[s,(0,t.useCallback)((e=>{r&&d.set(e)}),[r,d])]}({groupId:s}),b=(()=>{const e=c??j;return p({value:e,tabValues:d})?e:null})();(0,a.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=r(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function m(e){let{className:n,block:r,selectedValue:t,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,d.o5)(),o=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),i(s))},h=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:d}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:h,onClick:o,...d,className:(0,s.Z)("tabs__item",b.tabItem,d?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function k(e){let{lazy:n,children:r,selectedValue:s}=e;const d=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=d.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:d.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(m,{...e,...n}),(0,g.jsx)(k,{...e,...n})]})}function w(e){const n=(0,f.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var t=r(7294);const s={},d=t.createContext(s);function i(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c63d9c91.43a052c0.js b/assets/js/c63d9c91.43a052c0.js new file mode 100644 index 0000000..933b60f --- /dev/null +++ b/assets/js/c63d9c91.43a052c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3698],{3086:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>t,metadata:()=>m,toc:()=>c});var n=a(5893),i=a(1151);a(4866),a(5162);const t={title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},l=void 0,m={id:"KIRA\u2019s-Economics/Unified-Liquid-Staking",title:"Unified Liquid Staking",description:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Unified-Liquid-Staking.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/492e443f-5703-4d95-8508-a101405efde3",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},sidebar:"defaultSidebar",previous:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},next:{title:"Glossary",permalink:"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b"}},r={},c=[];function h(s){const e={annotation:"annotation",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",munderover:"munderover",p:"p",semantics:"semantics",span:"span",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default."}),"\n",(0,n.jsx)(e.p,{children:"Liquid staking has multiple pain points in the current DeFi landscape. Due to competition within the LSD sector, LSD liquidity is fragmented across DeFi. Furthermore, each LSD must be integrated individually for use within DeFi protocols, which introduces coordination overhead, additional attack vectors, and value leaks."}),"\n",(0,n.jsx)(e.p,{children:"KIRA's Token Basketing module solves for the friction associated with liquid staking by aggregating users' receipt tokens by their liquidity denominations, into cohesive fungible assets."}),"\n",(0,n.jsx)(e.p,{children:"The Token Basketing module's AMM is self-rebalancing and offers swaps without price impact."}),"\n",(0,n.jsx)(e.p,{children:"A important aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"\u230a"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.munderover,{children:[(0,n.jsx)(e.mo,{children:"\u2211"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"0"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"L"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mo,{children:"\u22c5"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]}),(0,n.jsx)(e.mo,{fence:"true",children:"\u230b"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\left \\lfloor{ \\sum_{i=0}^{tokens.Length - 1}tokens[i].weight \\cdot tokens[i].amount}\\right \\rfloor = constant"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.1609em",verticalAlign:"-1.2777em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"\u230a"})}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mop op-limits",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.8832em"},children:[(0,n.jsxs)(e.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"="}),(0,n.jsx)(e.span,{className:"mord mtight",children:"0"})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{children:(0,n.jsx)(e.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,n.jsxs)(e.span,{style:{top:"-4.3471em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"L"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mbin mtight",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.2777em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mclose",children:"]"}),(0,n.jsx)(e.span,{className:"mord",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mclose",children:"]"}),(0,n.jsx)(e.span,{className:"mord",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"\u230b"})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6151em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"co"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"an"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the surplus, while the swap fee is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."}),"\n",(0,n.jsx)(e.p,{children:"Assets within the pool are weighted according to their underlying staked value - these predetermined weights dictate the fixed price ratios at which incoming swaps are filled."}),"\n",(0,n.jsx)(e.p,{children:"Governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens B otherwise there will not be enough tokens in the basket to redeem. For example, if the basket B includes tokens A, B, and C, the governance must ensure that"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"\u2265"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"I"}),(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsx)(e.mo,{children:">"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\left(A_{amount} \\times A_{weight}\\right) + \\left(B_{amount} \\times B_{weight}\\right) + \\left(C_{amount} \\times C_{weight}\\right) \\geq B_{\\_.total\\_amount\\_issued}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"\u2265"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0503em",verticalAlign:"-0.367em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.07847em"},children:"I"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"ss"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.367em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"If the weights are not correctly configured, the governance proposal to update the basket weights will fail."}),"\n",(0,n.jsx)(e.p,{children:"To protect against depegging scenarios, each token has a configurable maximum limit within its basket. In the event that an incoming swap would disbalance the composition of a particular basket, dynamic fees are adjusted to return it to equilibrium, incentivizing swaps rebalancing the basket over swaps that do not."}),"\n",(0,n.jsx)(e.p,{children:"As token baskets are built into the base layer, this same weighting system adjusts automatically for changes in underlying staked value. Staking rewards and slashing penalties are automatically accounted for, without dependence on any third-party oracle."}),"\n",(0,n.jsx)(e.p,{children:"Should intervention be required from onchain governance, multiple failsafe mechanisms exist. Validators can vote to include or exclude tokens from baskets. In the event of an ongoing emergency, swaps can be halted by governance until the situation is resolved. Additionally, swap fees accumulate toward a surplus which functions like an insurance fund controlled by chain governance. In the unlikely event that an asset does become depegged within its basket, governance can mobilize these surplus funds toward the asset\u2019s peg restoration."})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},5162:(s,e,a)=>{a.d(e,{Z:()=>l});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var t=a(5893);function l(s){let{children:e,hidden:a,className:l}=s;return(0,t.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,l),hidden:a,children:e})}},4866:(s,e,a)=>{a.d(e,{Z:()=>b});var n=a(7294),i=a(6905),t=a(2466),l=a(6550),m=a(469),r=a(1980),c=a(7392),h=a(12);function d(s){return n.Children.toArray(s).filter((s=>"\n"!==s)).map((s=>{if(!s||(0,n.isValidElement)(s)&&function(s){const{props:e}=s;return!!e&&"object"==typeof e&&"value"in e}(s))return s;throw new Error(`Docusaurus error: Bad child <${"string"==typeof s.type?s.type:s.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function o(s){const{values:e,children:a}=s;return(0,n.useMemo)((()=>{const s=e??function(s){return d(s).map((s=>{let{props:{value:e,label:a,attributes:n,default:i}}=s;return{value:e,label:a,attributes:n,default:i}}))}(a);return function(s){const e=(0,c.l)(s,((s,e)=>s.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((s=>s.value)).join(", ")}" found in . Every value needs to be unique.`)}(s),s}),[e,a])}function x(s){let{value:e,tabValues:a}=s;return a.some((s=>s.value===e))}function p(s){let{queryString:e=!1,groupId:a}=s;const i=(0,l.k6)(),t=function(s){let{queryString:e=!1,groupId:a}=s;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,r._X)(t),(0,n.useCallback)((s=>{if(!t)return;const e=new URLSearchParams(i.location.search);e.set(t,s),i.replace({...i.location,search:e.toString()})}),[t,i])]}function j(s){const{defaultValue:e,queryString:a=!1,groupId:i}=s,t=o(s),[l,r]=(0,n.useState)((()=>function(s){let{defaultValue:e,tabValues:a}=s;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((s=>s.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((s=>s.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:t}))),[c,d]=p({queryString:a,groupId:i}),[j,g]=function(s){let{groupId:e}=s;const a=function(s){return s?`docusaurus.tab.${s}`:null}(e),[i,t]=(0,h.Nk)(a);return[i,(0,n.useCallback)((s=>{a&&t.set(s)}),[a,t])]}({groupId:i}),u=(()=>{const s=c??j;return x({value:s,tabValues:t})?s:null})();(0,m.Z)((()=>{u&&r(u)}),[u]);return{selectedValue:l,selectValue:(0,n.useCallback)((s=>{if(!x({value:s,tabValues:t}))throw new Error(`Can't select invalid tab value=${s}`);r(s),d(s),g(s)}),[d,g,t]),tabValues:t}}var g=a(2389);const u={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var N=a(5893);function f(s){let{className:e,block:a,selectedValue:n,selectValue:l,tabValues:m}=s;const r=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),h=s=>{const e=s.currentTarget,a=r.indexOf(e),i=m[a].value;i!==n&&(c(e),l(i))},d=s=>{let e=null;switch(s.key){case"Enter":h(s);break;case"ArrowRight":{const a=r.indexOf(s.currentTarget)+1;e=r[a]??r[0];break}case"ArrowLeft":{const a=r.indexOf(s.currentTarget)-1;e=r[a]??r[r.length-1];break}}e?.focus()};return(0,N.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e),children:m.map((s=>{let{value:e,label:a,attributes:t}=s;return(0,N.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:s=>r.push(s),onKeyDown:d,onClick:h,...t,className:(0,i.Z)("tabs__item",u.tabItem,t?.className,{"tabs__item--active":n===e}),children:a??e},e)}))})}function y(s){let{lazy:e,children:a,selectedValue:i}=s;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const s=t.find((s=>s.props.value===i));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return(0,N.jsx)("div",{className:"margin-top--md",children:t.map(((s,e)=>(0,n.cloneElement)(s,{key:e,hidden:s.props.value!==i})))})}function v(s){const e=j(s);return(0,N.jsxs)("div",{className:(0,i.Z)("tabs-container",u.tabList),children:[(0,N.jsx)(f,{...s,...e}),(0,N.jsx)(y,{...s,...e})]})}function b(s){const e=(0,g.Z)();return(0,N.jsx)(v,{...s,children:d(s.children)},String(e))}},1151:(s,e,a)=>{a.d(e,{Z:()=>m,a:()=>l});var n=a(7294);const i={},t=n.createContext(i);function l(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function m(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:l(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/c63d9c91.91daeb1b.js b/assets/js/c63d9c91.91daeb1b.js deleted file mode 100644 index f2384af..0000000 --- a/assets/js/c63d9c91.91daeb1b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3698],{3086:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var n=a(5893),i=a(1151);a(4866),a(5162);const s={title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},r=void 0,o={id:"KIRA\u2019s-Economics/Unified-Liquid-Staking",title:"Unified Liquid Staking",description:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.",source:"@site/tabs/Learn/KIRA\u2019s-Economics/Unified-Liquid-Staking.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/492e443f-5703-4d95-8508-a101405efde3",permalink:"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},sidebar:"defaultSidebar",previous:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},next:{title:"Glossary",permalink:"/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b"}},l={},u=[];function c(e){const t={img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default."}),"\n",(0,n.jsx)(t.p,{children:"Liquid staking has multiple pain points in the current DeFi landscape. Due to competition within the LSD sector, LSD liquidity is fragmented across DeFi. Furthermore, each LSD must be integrated individually for use within DeFi protocols, which introduces coordination overhead, additional attack vectors, and value leaks."}),"\n",(0,n.jsx)(t.p,{children:"KIRA's Token Basketing module solves for the friction associated with liquid staking by aggregating users' receipt tokens by their liquidity denominations, into cohesive fungible assets."}),"\n",(0,n.jsx)(t.p,{children:"The Token Basketing module's AMM is self-rebalancing and offers swaps without price impact."}),"\n",(0,n.jsx)(t.p,{children:"A crucial aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:a(3377).Z+"",width:"794",height:"127"})}),"\n",(0,n.jsx)(t.p,{children:"This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the surplus, while the swap fee is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."}),"\n",(0,n.jsx)(t.p,{children:"Assets within the pool are weighted according to their underlying staked value - these predetermined weights dictate the fixed price ratios at which incoming swaps are filled."}),"\n",(0,n.jsx)(t.p,{children:"Governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens B otherwise there will not be enough tokens in the basket to redeem. For example, if the basket B includes tokens A, B, and C, the governance must ensure that"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:a(7053).Z+"",width:"1019",height:"32"})}),"\n",(0,n.jsx)(t.p,{children:"If the weights are not correctly configured, the governance proposal to update the basket weights will fail."}),"\n",(0,n.jsx)(t.p,{children:"To protect against depegging scenarios, each token has a configurable maximum limit within its basket. In the event that an incoming swap would disbalance the composition of a particular basket, dynamic fees are adjusted to return it to equilibrium, incentivizing swaps rebalancing the basket over swaps that do not."}),"\n",(0,n.jsx)(t.p,{children:"As token baskets are built into the base layer, this same weighting system adjusts automatically for changes in underlying staked value. Staking rewards and slashing penalties are automatically accounted for, without dependence on any third-party oracle."}),"\n",(0,n.jsx)(t.p,{children:"Should intervention be required from onchain governance, multiple failsafe mechanisms exist. Validators can vote to include or exclude tokens from baskets. In the event of an ongoing emergency, swaps can be halted by governance until the situation is resolved. Additionally, swap fees accumulate toward a surplus which functions like an insurance fund controlled by chain governance. In the unlikely event that an asset does become depegged within its basket, governance can mobilize these surplus funds toward the asset\u2019s peg restoration."})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var s=a(5893);function r(e){let{children:t,hidden:a,className:r}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,r),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),s=a(2466),r=a(6550),o=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,r.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(i.location.search);t.set(s,e),i.replace({...i.location,search:t.toString()})}),[s,i])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,s=h(e),[r,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[u,d]=f({queryString:a,groupId:i}),[m,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,s]=(0,c.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:i}),b=(()=>{const e=u??m;return p({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:r,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,s]),tabValues:s}}var g=a(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=a(5893);function v(e){let{className:t,block:a,selectedValue:n,selectValue:r,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),i=o[a].value;i!==n&&(u(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:o.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,i.Z)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,i.Z)("tabs-container",b.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function x(e){const t=(0,g.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},7053:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/1122915707-5d5933932e7843c11e61078f5eca0bcf.png"},3377:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/265237334-6aa20cf34a4508ce6283c95952055ad4.png"},1151:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>r});var n=a(7294);const i={},s=n.createContext(i);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c75c9226.63972cee.js b/assets/js/c75c9226.63972cee.js deleted file mode 100644 index 3b2a620..0000000 --- a/assets/js/c75c9226.63972cee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4639],{6511:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var r=t(5893),s=t(1151),i=t(4866),a=t(5162);const c={title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing",title:"Fee processing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},sidebar:"defaultSidebar",previous:{title:"Upgrade Module",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},next:{title:"Fee processing",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84"}},l={},u=[{value:"Concept",id:"a64d114cc8344c4894aa2a47f4cd729c",level:2},{value:"Bounded fee range",id:"e2acfd45404a4165b09003c079c4c2d2",level:3},{value:"Parameters",id:"fd6b338759ce4efc92746dd86f6ddb8c",level:2},{value:"Cli syntax & examples",id:"724094a9815c4ad3ade4bbe55757b84b",level:2},{value:"Transactions",id:"94b4014034de4cf2b6a908adec732def",level:2},{value:"Updating execution fees with sudo permission",id:"7f04fc7ef9574a42822d4a1ff95796b0",level:4},{value:"Queries",id:"111168574d0749cf9e568b9864bbf5cb",level:2},{value:"Query execution fees",id:"826587771d4d41ee8cb94b8f55770fe0",level:4},{value:"Governance",id:"4a1056edcb7643c1bfc80fa905a8fee1",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"a64d114cc8344c4894aa2a47f4cd729c",children:"Concept"}),"\n",(0,r.jsx)(n.p,{children:'Traditional Layer 1 blockchain networks like Ethereum use a complex, dynamic fee market determined by opcode prices and the computational "gas" consumed during transaction execution. In such a system, calculating the exact transaction cost can be cumbersome and time-consuming. Additionally, these opcode prices are deeply embedded within the protocol, typically requiring a network upgrade or hard fork for changes.'}),"\n",(0,r.jsxs)(n.p,{children:['KIRA\'s approach replaces the conventional "gas" system with a governance-driven structure. Here, transaction fees are predefined for each type of transaction and uniformly denominated in ',(0,r.jsx)(n.code,{children:"ukex"}),", simplifying and stabilizing the fee calculation. Additionally, the governance is tasked with setting failure fees for each transaction type and determining a specific timeout period for transactions. Complementing this streamlined fee structure, KIRA's ",(0,r.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," allows fees to be paid in other whitelisted tokens at a ",(0,r.jsx)(n.code,{children:"fee_rate"})," defined by the governance. This mechanism ensures a clear and efficient conversion between ",(0,r.jsx)(n.code,{children:"ukex"})," and other tokens, enhancing the network's flexibility and user accessibility."]}),"\n",(0,r.jsx)(n.h3,{id:"e2acfd45404a4165b09003c079c4c2d2",children:"Bounded fee range"}),"\n",(0,r.jsxs)(n.p,{children:["While KIRA does have a fee market, it operates within a bounded range set by the ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," and ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," parameters. This approach serves two purposes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Spam Prevention"}),": The ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," sets a lower boundary, acting as a deterrent against spam transactions, thus maintaining the network's integrity by preventing it from being overloaded with low-value or malicious transactions."]}),"\n",(0,r.jsxs)(n.li,{children:["User Protection: The ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," acts as an upper limit, safeguarding users from inadvertently incurring excessive fees. This is particularly important in preventing significant fund losses that might occur due to mistakenly high fee inputs during transaction submission."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fd6b338759ce4efc92746dd86f6ddb8c",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"transaction_type"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"submit-proposal"})}),(0,r.jsxs)(n.td,{children:["The specific transaction type the following parameters apply to. All existing types can be found ",(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go#L9",children:(0,r.jsx)(n.strong,{children:"here"})}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"execution_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"100"})}),(0,r.jsx)(n.td,{children:"The required fee for users to successfully execute this particular transaction type."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"failure_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"50"})}),(0,r.jsx)(n.td,{children:"The fee users must pay in case the transaction execution is unsuccessful."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"timeout"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"300"})}),(0,r.jsx)(n.td,{children:"The time duration (in seconds) after which the transaction execution will be considered as failed if not completed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"default_parameters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"42"})}),(0,r.jsx)(n.td,{children:"The default input values that the corresponding transaction function will utilize before execution."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"724094a9815c4ad3ade4bbe55757b84b",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsxs)(a.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"94b4014034de4cf2b6a908adec732def",children:"Transactions"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"set-execution-fee"})}),(0,r.jsx)(n.th,{children:"Update execution fee parameters for different transaction types."})]})})}),(0,r.jsx)(n.h4,{id:"7f04fc7ef9574a42822d4a1ff95796b0",children:"Updating execution fees with sudo permission"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"set-execution-fee"})," CLI command allows accounts with sudo permission 7 to modify execution fee parameters for different transaction types."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TYPE"}),": The type of transaction for which the fees are being updated."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"$"})}),(0,r.jsx)(n.code,{children:"EXECUTION_FEE"}),": The fee for successful execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$FAILURE_FEE"}),": The fee for failed execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TIMEOUT"}),": The timeout duration for the transaction."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov set-execution-fee \\\n--from=$SIGNER $FLAGS_TX \\\n--transaction_type=$TX_TYPE \\\n--execution_fee=$EXECUTION_FEE \\\n--failure_fee=$FAILURE_FEE \\\n--timeout=$TX_TIMEOUT\n"})})]}),(0,r.jsxs)(a.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"111168574d0749cf9e568b9864bbf5cb",children:"Queries"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"execution-fee"})}),(0,r.jsx)(n.th,{children:"Retrieve execution fee parameters for a specified transaction type."})]})})}),(0,r.jsx)(n.h4,{id:"826587771d4d41ee8cb94b8f55770fe0",children:"Query execution fees"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"execution-fee"})," CLI command is used to retrieve the execution fee parameters for a specified transaction type."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TRANSACTION_TYPE"}),": The type of transaction for which to query the execution fees."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid query customgov execution-fee $TRANSACTION_TYPE $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(a.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"4a1056edcb7643c1bfc80fa905a8fee1",children:"Governance"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/issues/626",children:"https://github.com/KiraCore/sekai/issues/626"})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>a});t(7294);var r=t(6905);const s={tabItem:"tabItem_Ymn6"};var i=t(5893);function a(e){let{children:n,hidden:t,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,a),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(7294),s=t(6905),i=t(2466),a=t(6550),c=t(469),o=t(1980),d=t(7392),l=t(12);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:t}=e;const s=(0,a.k6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function p(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=h(e),[a,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[d,u]=x({queryString:t,groupId:s}),[p,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,l.Nk)(t);return[s,(0,r.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),m=(()=>{const e=d??p;return f({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),b(e)}),[u,b,i]),tabValues:i}}var b=t(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(5893);function g(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),l=e=>{const n=e.currentTarget,t=o.indexOf(n),s=c[t].value;s!==r&&(d(n),a(s))},u=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:c.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:u,onClick:l,...i,className:(0,s.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=p(e);return(0,j.jsxs)("div",{className:(0,s.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function T(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var r=t(7294);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c75c9226.fa7c1224.js b/assets/js/c75c9226.fa7c1224.js new file mode 100644 index 0000000..6343ffb --- /dev/null +++ b/assets/js/c75c9226.fa7c1224.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4639],{6511:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var r=t(5893),s=t(1151),i=t(4866),a=t(5162);const c={title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},o=void 0,d={id:"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing",title:"Fee processing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467",permalink:"/docs.kira.network/docs/184c11ed-4849-4ec5-acd0-f795b7abf467",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Fee processing",sidebar_position:2,slug:"/184c11ed-4849-4ec5-acd0-f795b7abf467"},sidebar:"defaultSidebar",previous:{title:"Upgrade Module",permalink:"/docs.kira.network/docs/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},next:{title:"Fee processing",permalink:"/docs.kira.network/docs/d820877a-9fe7-424f-8866-8e822bf9ba84"}},l={},u=[{value:"Concept",id:"a64d114cc8344c4894aa2a47f4cd729c",level:2},{value:"Bounded Fee Range",id:"e2acfd45404a4165b09003c079c4c2d2",level:3},{value:"Parameters",id:"fd6b338759ce4efc92746dd86f6ddb8c",level:2},{value:"Cli Syntax & Examples",id:"724094a9815c4ad3ade4bbe55757b84b",level:2},{value:"Transactions",id:"94b4014034de4cf2b6a908adec732def",level:2},{value:"Updating Execution Fees With Sudo Permission",id:"7f04fc7ef9574a42822d4a1ff95796b0",level:4},{value:"Queries",id:"111168574d0749cf9e568b9864bbf5cb",level:2},{value:"Query Execution Fees",id:"826587771d4d41ee8cb94b8f55770fe0",level:4},{value:"Governance",id:"4a1056edcb7643c1bfc80fa905a8fee1",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"a64d114cc8344c4894aa2a47f4cd729c",children:"Concept"}),"\n",(0,r.jsx)(n.p,{children:'Traditional Layer 1 blockchain networks like Ethereum use a complex, dynamic fee market determined by opcode prices and the computational "gas" consumed during transaction execution. In such a system, calculating the exact transaction cost can be cumbersome and time-consuming. Additionally, these opcode prices are deeply embedded within the protocol, typically requiring a network upgrade or hard fork for changes.'}),"\n",(0,r.jsxs)(n.p,{children:['KIRA\'s approach replaces the conventional "gas" system with a governance-driven structure. Here, transaction fees are predefined for each type of transaction and uniformly denominated in ',(0,r.jsx)(n.code,{children:"ukex"}),", simplifying and stabilizing the fee calculation. Additionally, the governance is tasked with setting failure fees for each transaction type and determining a specific timeout period for transactions. Complementing this streamlined fee structure, KIRA's ",(0,r.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," allows fees to be paid in other whitelisted tokens at a ",(0,r.jsx)(n.code,{children:"fee_rate"})," defined by the governance. This mechanism ensures a clear and efficient conversion between ",(0,r.jsx)(n.code,{children:"ukex"})," and other tokens, enhancing the network's flexibility and user accessibility."]}),"\n",(0,r.jsx)(n.h3,{id:"e2acfd45404a4165b09003c079c4c2d2",children:"Bounded Fee Range"}),"\n",(0,r.jsxs)(n.p,{children:["While KIRA does have a fee market, it operates within a bounded range set by the ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," and ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," parameters. This approach serves two purposes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Spam Prevention"}),": The ",(0,r.jsx)(n.code,{children:"min_tx_fee"})," sets a lower boundary, acting as a deterrent against spam transactions, thus maintaining the network's integrity by preventing it from being overloaded with low-value or malicious transactions."]}),"\n",(0,r.jsxs)(n.li,{children:["User Protection: The ",(0,r.jsx)(n.code,{children:"max_tx_fee"})," acts as an upper limit, safeguarding users from inadvertently incurring excessive fees. This is particularly important in preventing significant fund losses that might occur due to mistakenly high fee inputs during transaction submission."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fd6b338759ce4efc92746dd86f6ddb8c",children:"Parameters"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"NAME"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"TYPE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"EXAMPLE"})}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"transaction_type"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"submit-proposal"})}),(0,r.jsxs)(n.td,{children:["The specific transaction type the following parameters apply to. All existing types can be found ",(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go#L9",children:(0,r.jsx)(n.strong,{children:"here"})}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"execution_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"100"})}),(0,r.jsx)(n.td,{children:"The required fee for users to successfully execute this particular transaction type."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"failure_fee"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"50"})}),(0,r.jsx)(n.td,{children:"The fee users must pay in case the transaction execution is unsuccessful."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"timeout"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"300"})}),(0,r.jsx)(n.td,{children:"The time duration (in seconds) after which the transaction execution will be considered as failed if not completed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"default_parameters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"uint64"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"42"})}),(0,r.jsx)(n.td,{children:"The default input values that the corresponding transaction function will utilize before execution."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"724094a9815c4ad3ade4bbe55757b84b",children:"Cli Syntax & Examples"}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(n.em,{children:"documentation for more details."})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$SIGNER"})})," ",(0,r.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(n.em,{children:(0,r.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(n.em,{children:"and"})," ",(0,r.jsxs)(n.em,{children:[(0,r.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(n.em,{children:"section"})]})}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsxs)(a.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(n.h2,{id:"94b4014034de4cf2b6a908adec732def",children:"Transactions"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"set-execution-fee"})}),(0,r.jsx)(n.th,{children:"Update execution fee parameters for different transaction types."})]})})}),(0,r.jsx)(n.h4,{id:"7f04fc7ef9574a42822d4a1ff95796b0",children:"Updating Execution Fees With Sudo Permission"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"set-execution-fee"})," CLI command allows accounts with sudo permission 7 to modify execution fee parameters for different transaction types."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Flags"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TYPE"}),": The type of transaction for which the fees are being updated."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"$"})}),(0,r.jsx)(n.code,{children:"EXECUTION_FEE"}),": The fee for successful execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$FAILURE_FEE"}),": The fee for failed execution of the transaction."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TX_TIMEOUT"}),": The timeout duration for the transaction."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov set-execution-fee \\\n--from=$SIGNER $FLAGS_TX \\\n--transaction_type=$TX_TYPE \\\n--execution_fee=$EXECUTION_FEE \\\n--failure_fee=$FAILURE_FEE \\\n--timeout=$TX_TIMEOUT\n"})})]}),(0,r.jsxs)(a.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(n.h2,{id:"111168574d0749cf9e568b9864bbf5cb",children:"Queries"}),(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:(0,r.jsx)(n.code,{children:"execution-fee"})}),(0,r.jsx)(n.th,{children:"Retrieve execution fee parameters for a specified transaction type."})]})})}),(0,r.jsx)(n.h4,{id:"826587771d4d41ee8cb94b8f55770fe0",children:"Query Execution Fees"}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"execution-fee"})," CLI command is used to retrieve the execution fee parameters for a specified transaction type."]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Args"})}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"$TRANSACTION_TYPE"}),": The type of transaction for which to query the execution fees."]}),"\n"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"sekaid query customgov execution-fee $TRANSACTION_TYPE $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(a.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(n.h2,{id:"4a1056edcb7643c1bfc80fa905a8fee1",children:"Governance"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/KiraCore/sekai/issues/626",children:"https://github.com/KiraCore/sekai/issues/626"})})]})]})]})}function f(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},5162:(e,n,t)=>{t.d(n,{Z:()=>a});t(7294);var r=t(6905);const s={tabItem:"tabItem_Ymn6"};var i=t(5893);function a(e){let{children:n,hidden:t,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,a),hidden:t,children:n})}},4866:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(7294),s=t(6905),i=t(2466),a=t(6550),c=t(469),o=t(1980),d=t(7392),l=t(12);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:t}=e;const s=(0,a.k6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o._X)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function p(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=h(e),[a,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[d,u]=x({queryString:t,groupId:s}),[p,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,l.Nk)(t);return[s,(0,r.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),m=(()=>{const e=d??p;return f({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),b(e)}),[u,b,i]),tabValues:i}}var b=t(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(5893);function g(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),l=e=>{const n=e.currentTarget,t=o.indexOf(n),s=c[t].value;s!==r&&(d(n),a(s))},u=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},n),children:c.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:u,onClick:l,...i,className:(0,s.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=p(e);return(0,j.jsxs)("div",{className:(0,s.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(g,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function T(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var r=t(7294);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7ef4c20.12b6723c.js b/assets/js/c7ef4c20.12b6723c.js deleted file mode 100644 index d6cff46..0000000 --- a/assets/js/c7ef4c20.12b6723c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7346],{6067:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},s=void 0,l={id:"Stack/MIRO--Frontend/index",title:"MIRO | Frontend",description:"Miro",source:"@site/tabs/Docs/Stack/MIRO--Frontend/index.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",permalink:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a"},next:{title:"Installation",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"}},u={},i=[{value:"Miro",id:"72526372563b49a6a4f7341623bac78f",level:2}];function c(e){const t={a:"a",h2:"h2",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"72526372563b49a6a4f7341623bac78f",children:"Miro"}),"\n",(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) - is a KIRA network frontend application and web wallet that allows users to interact with the KIRA blockchain through the decentralized API, INTERX. It provides an easy-to-use interface for managing KIRA accounts and assets, making it accessible to a wide range of users. MIRO web application is static and fully self-contained. This means that once the page is loaded into your browser all actions you take occur locally on your computer. There is no need for any hosting servers or access to the internet beyond the IP of any local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/miro",children:(0,a.jsx)(t.strong,{children:"MIRO | Source code"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),u=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=h({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=l[n].value;r!==a&&(i(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7ef4c20.ad355896.js b/assets/js/c7ef4c20.ad355896.js new file mode 100644 index 0000000..9c8c52e --- /dev/null +++ b/assets/js/c7ef4c20.ad355896.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7346],{6067:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},s=void 0,l={id:"Stack/MIRO--Frontend/index",title:"MIRO | Frontend",description:"Miro",source:"@site/tabs/Docs/Stack/MIRO--Frontend/index.mdx",sourceDirName:"Stack/MIRO--Frontend",slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",permalink:"/docs.kira.network/docs/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"MIRO | Frontend",sidebar_position:2,slug:"/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9"},sidebar:"defaultSidebar",previous:{title:"Command Line Interface",permalink:"/docs.kira.network/docs/39242b54-c86a-4406-82f9-49cad4ed7c5a"},next:{title:"Installation",permalink:"/docs.kira.network/docs/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"}},u={},i=[{value:"Miro",id:"72526372563b49a6a4f7341623bac78f",level:2}];function c(e){const t={a:"a",h2:"h2",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"72526372563b49a6a4f7341623bac78f",children:"Miro"}),"\n",(0,a.jsx)(t.p,{children:"MIRO \u770b (\u898b\u308b) - is a KIRA network frontend application and web wallet that allows users to interact with the KIRA blockchain through the decentralized API, INTERX. It provides an easy-to-use interface for managing KIRA accounts and assets, making it accessible to a wide range of users. MIRO web application is static and fully self-contained. This means that once the page is loaded into your browser all actions you take occur locally on your computer. There is no need for any hosting servers or access to the internet beyond the IP of any local or public INTERX node."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/miro",children:(0,a.jsx)(t.strong,{children:"MIRO | Source code"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),u=n(1980),i=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[i,d]=h({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=i??p;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function I(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=l[n].value;r!==a&&(i(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(I,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c87f2965.065b39e6.js b/assets/js/c87f2965.065b39e6.js new file mode 100644 index 0000000..a88f751 --- /dev/null +++ b/assets/js/c87f2965.065b39e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9711],{6632:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var a=n(5893),s=n(1151);n(4866),n(5162);const i={title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},o=void 0,r={id:"What-is-KIRA/SEKAI/Consensus",title:"Consensus",description:"Tendermint",source:"@site/tabs/learn/What-is-KIRA/SEKAI/Consensus.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e"},next:{title:"Governance",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"}},l={},c=[{value:"Tendermint",id:"f82263dd7b3a455bb49cf5292b3f30df",level:4},{value:"Governance-curated Validator Set",id:"1e2b19cfb65f434ba3c2d2b848c9f549",level:3},{value:"Multi-bonded Proof of Stake",id:"38c624fbdc324bd093974d2abb46c689",level:3}];function u(e){const t={a:"a",admonition:"admonition",h3:"h3",h4:"h4",p:"p",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h4,{id:"f82263dd7b3a455bb49cf5292b3f30df",children:"Tendermint"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI is a \u201cserver application\u201d deriving from Tendermint a consistent PoS\xa0",(0,a.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Byzantine_fault_tolerance",children:"BFT"}),"\xa0(Proof of Stake Byzantine Fault Tolerant) consensus algorithm, meaning that it can tolerate up to 1/3 faulty nodes. It provides instant finality which minimizes the likelihood of forks at the consensus layer, making it suitable for high-speed applications."]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For more information regarding Tendermint, visit the following link. ",(0,a.jsx)(t.a,{href:"https://docs.tendermint.com/v0.34/",children:"https://docs.tendermint.com/v0.34/"})]})}),"\n",(0,a.jsx)(t.h3,{id:"1e2b19cfb65f434ba3c2d2b848c9f549",children:"Governance-curated Validator Set"}),"\n",(0,a.jsx)(t.p,{children:"KIRA has customized Tendermint to establish a strong and simple governance-curated system for managing its validator set. Through this mechanism, network governance exercises direct control over validator inclusion and removal. Only candidates meeting specific criteria\u2014such as proof of individuality, community engagement, and adherence to the network's Code of Conduct\u2014are qualified to participate in consensus and governance roles. Unlike permissionless models with a fixed number of committee members, SEKAI's validator set composition is dynamically adjustable, enabling the eviction of malicious nodes or the regulation of block speed to maintain network integrity and performance."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI's validator set expands through the actions of its active members, governed by a principle of inclusivity with no upper limit on the number of validators. This ensures that the network can scale dynamically while adjusting block production speeds to accommodate validators worldwide, regardless of their geographical locations or the quality of their hardware and networking capabilities. Candidates seeking to join must have their KIRA addresses officially recognized as 'validators,' a distinction awarded through governance proposals that are submitted and voted on exclusively by existing validators. These proposals evaluate the candidate\u2019s commitment to and compliance with the network's standards. This process guarantees that the growth of the validator set is not only self-sustained but also strictly adheres to SEKAI\u2019s ethos, ensuring optimal security and performance across its expanding infrastructure."}),"\n",(0,a.jsx)(t.p,{children:"By prioritizing adherence to community values over wealth status, KIRA aims to be the first inclusive PoS network that combines human alignment alongside assets at stake to secure the consensus. By subsidizing governance members and validator nodes through the Universal Basic Income (UBI), KIRA makes it possible to guarantee the sustainability of hardware operations and their continuous alignment with the long-term network goals without depending on exponentially inflating the $KEX token supply and wealth redistribution only to the hands of a small set of privileged nodes and stakeholders."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive overview of SEKAI's governance mechanism, including its structure, roles, and permissions, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.h3,{id:"38c624fbdc324bd093974d2abb46c689",children:"Multi-bonded Proof of Stake"}),"\n",(0,a.jsx)(t.p,{children:"Proof-of-stake is a Sybil resistance mechanism that complements blockchain consensus protocols. In a proof-of-stake system, consensus nodes are required to stake the chain's native asset as slashable collateral. PoS bolsters the security of the chain by aligning the consensus nodes' economic interests with those of the network. Since not all validators can afford a large number of assets at stake, \u201cdelegated staking\u201d is often used to increase the \u201ctrust\u201d in the network validator set by allowing anyone to put the tokens at the risk of slashing in the hands of validators they trust."}),"\n",(0,a.jsx)(t.p,{children:"KIRA iterates upon this mechanism with its Multi-Bonded Proof-of-Stake. Any assets whitelisted by governance, including those not issued on SEKAI, may be staked to consensus nodes, in addition to the native asset. There are no limitations on the types of assets that can be staked, such as NFTs, RWA, LP tokens, and stablecoins. However, SEKAI maintains the relevancy of its native asset by ensuring a minimum allocation of 50% of block and fee rewards, a figure that governance can adjust."}),"\n",(0,a.jsx)(t.p,{children:"In SEKAI, block production operates on an equal round-robin mechanism. This is distinct from conventional PoS systems, where the chance to produce a block is proportional to stake size; thus, SEKAI effectively treats all nodes as if they had the same stake amount. This approach extends to on-chain governance, which operates on a per-capita basis as well, ensuring equitable influence on network decisions among all participants."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Unlike traditional PoS systems, block production in KIRA is separate from onchain governance. For more details on governance, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.p,{children:"To form a secure, scalable foundation for complex economic activity, the base layer should natively support the liquidity of all staked assets. Multi-asset staking is necessary to scale both security and liquidity available within the network in an increasingly multichain world. By allowing chain governance to whitelist any asset that it recognizes to hold fundamental value, KIRA attracts liquidity from all spheres of crypto to assume a productive role in its network, thereby presenting a strong value proposition to retain and grow on-chain liquidity through natively supported Liquid Staking Derivatives (LSD). This unlocks the potential for frictionless integration of multichain LSDs and restaking-powered DeFi while decreasing the systematic risk of any single external (non-native) LSD protocol failure."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.a,{href:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",children:"Rewards and Incentives Structure"})," page discusses economic incentives for consensus nodes and their delegators."]})})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),s=n(6905),i=n(2466),o=n(6550),r=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const s=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(s.location.search);t.set(i,e),s.replace({...s.location,search:t.toString()})}),[i,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,i=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=m({queryString:n,groupId:s}),[p,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,i]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:s}),v=(()=>{const e=c??p;return f({value:e,tabValues:i})?e:null})();(0,r.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,i]),tabValues:i}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==a&&(c(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,s.Z)("tabs__item",v.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:s}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var a=n(7294);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca182306.66cdac50.js b/assets/js/ca182306.66cdac50.js deleted file mode 100644 index 5f18cd5..0000000 --- a/assets/js/ca182306.66cdac50.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9426],{4761:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=a(5893),n=a(1151);a(4866),a(5162);const o={title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},s=void 0,i={id:"Stack/SEKAI--Backend/Modules/Layer-2/index",title:"Layer 2",description:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Layer-2/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Layer-2",slug:"/8aad2626-40b5-42d6-9504-0c1287216a73",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Layer 2",sidebar_position:3,slug:"/8aad2626-40b5-42d6-9504-0c1287216a73"},sidebar:"defaultSidebar",previous:{title:"Poor Network Conditions",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},next:{title:"Distributor",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"KIRA's Layer 2, termed Pessimistic Rolldowns, optimizes computational efficiency and transaction bundling. Our unique Virtual Finality Gadget expedites the verification of computation results, fostering a versatile platform that caters to both 'code is law' and judgment-based applications. This is more than a platform\u2014it's a launchpad for developers to define their own rules and easily iterate on diverse applications."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/layer2",children:(0,r.jsx)(t.code,{children:"x/layer2"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var r=a(6905);const n={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var r=a(7294),n=a(6905),o=a(2466),s=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=b({queryString:a,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),v=(()=>{const e=u??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:r,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),n=i[a].value;n!==r&&(u(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:a??t},t)}))})}function k(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var r=a(7294);const n={},o=r.createContext(n);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca20e08e.76701221.js b/assets/js/ca20e08e.be72b2e5.js similarity index 93% rename from assets/js/ca20e08e.76701221.js rename to assets/js/ca20e08e.be72b2e5.js index fd49295..44730d9 100644 --- a/assets/js/ca20e08e.76701221.js +++ b/assets/js/ca20e08e.be72b2e5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9248],{1856:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-7",sidebar_position:1,slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},c=void 0,l={id:"Testnet-History/testnet-7",title:"testnet-7",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-7.mdx",sourceDirName:"Testnet-History",slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"testnet-7",sidebar_position:1,slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},sidebar:"defaultSidebar",previous:{title:"testnet-9",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},next:{title:"testnet-6",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce"}},o={},i=[{value:"Description",id:"cebaf10a069841e7a6dd1bf65fa24f1d",level:2},{value:"Post mortem",id:"8cd391ca1d564e02a2cd79b230576b77",level:2},{value:"Files",id:"ee7aba16f82344f89696db4ddb92a2c5",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"cebaf10a069841e7a6dd1bf65fa24f1d",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-7"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"0x3c7d72740fbd6f840e9757feaa81a3575cabbdb0a213c1e2c1e30913b8771274"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"2500"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"138403"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"8cd391ca1d564e02a2cd79b230576b77",children:"Post mortem"}),"\n",(0,n.jsx)(t.p,{children:"Depreciated due to planned hard fork at 4:30 PM 2021-11-06"}),"\n",(0,n.jsx)(t.h2,{id:"ee7aba16f82344f89696db4ddb92a2c5",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/17bed8fb-535a-4ca0-9857-5f84c5ded601/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152701Z&X-Amz-Expires=3600&X-Amz-Signature=6563b95747c549da5a101a778d2844cdef621c465d07462e5bc3aeb126f57d1a&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/6a471bbe-3e59-4937-93c9-9b9d8e7f4ed8/valopers-start.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152701Z&X-Amz-Expires=3600&X-Amz-Signature=4adf5c37e95b79865c386e270fcc4c1697414a8aa9029a6176a3ea2e2ff6924f&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-start.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/9b9298f5-cbf4-4bec-899c-3eaec5278535/valopers-end.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152701Z&X-Amz-Expires=3600&X-Amz-Signature=735512b053f5e98eaec3103c8e28ac9e43f3bafb1b42a8eec5a0561f1ba397de&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-end.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),l=a(469),o=a(1980),i=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=f(e),[c,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=i??m;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var A=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=l[a].value;r!==n&&(i(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,A.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:l.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,A.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,A.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,A.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,A.jsx)(x,{...e,...t}),(0,A.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,A.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9248],{1856:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-7",sidebar_position:1,slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},c=void 0,l={id:"Testnet-History/testnet-7",title:"testnet-7",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-7.mdx",sourceDirName:"Testnet-History",slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"testnet-7",sidebar_position:1,slug:"/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},sidebar:"defaultSidebar",previous:{title:"testnet-9",permalink:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f"},next:{title:"testnet-6",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce"}},o={},i=[{value:"Description",id:"cebaf10a069841e7a6dd1bf65fa24f1d",level:2},{value:"Post Mortem",id:"8cd391ca1d564e02a2cd79b230576b77",level:2},{value:"Files",id:"ee7aba16f82344f89696db4ddb92a2c5",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"cebaf10a069841e7a6dd1bf65fa24f1d",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-7"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"0x3c7d72740fbd6f840e9757feaa81a3575cabbdb0a213c1e2c1e30913b8771274"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"2500"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"138403"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"8cd391ca1d564e02a2cd79b230576b77",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"Depreciated due to planned hard fork at 4:30 PM 2021-11-06"}),"\n",(0,n.jsx)(t.h2,{id:"ee7aba16f82344f89696db4ddb92a2c5",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/17bed8fb-535a-4ca0-9857-5f84c5ded601/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=21d5dc999134a369ca5eb110a7ab9f47f502341ac5e09de141b12c780c099d88&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/6a471bbe-3e59-4937-93c9-9b9d8e7f4ed8/valopers-start.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=b611ab5e821f81b3da0a7a52cf6ac815035731ff9b2a3dba02c1bde3a8ec2463&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-start.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/9b9298f5-cbf4-4bec-899c-3eaec5278535/valopers-end.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=512eb2115cd683166a35c7d54fb21d58f7b9a6c6dcd5ce01fa88730825540ffd&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-end.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),l=a(469),o=a(1980),i=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=f(e),[c,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=i??m;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var A=a(5893);function x(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=l[a].value;r!==n&&(i(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,A.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:l.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,A.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,A.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,A.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,A.jsx)(x,{...e,...t}),(0,A.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,A.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca83c2d4.6c389782.js b/assets/js/ca83c2d4.6c389782.js new file mode 100644 index 0000000..720e4af --- /dev/null +++ b/assets/js/ca83c2d4.6c389782.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9570],{5989:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},l=void 0,o={id:"Stack/INTERX--Middleware/System-Requirements",title:"System Requirements",description:"To run the interxd application the following system requirements must be met:",source:"@site/tabs/Docs/Stack/INTERX--Middleware/System-Requirements.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",permalink:"/docs.kira.network/docs/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},sidebar:"defaultSidebar",previous:{title:"INTERX | Middleware",permalink:"/docs.kira.network/docs/be25ed12-b476-4a07-8966-9bc4062bd746"},next:{title:"Endpoints",permalink:"/docs.kira.network/docs/27ca73f9-ea33-4ca3-994a-cba651a2c896"}},i={},c=[{value:"Hardware",id:"409839eed65943ba928a73c6843e3082",level:2},{value:"Networking",id:"37b99c5f80ab438dbeb94966ed21b251",level:2},{value:"Software",id:"d7ff0322b24a4d31851b072779d27c2f",level:2}];function u(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run the ",(0,r.jsx)(t.code,{children:"interxd"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"409839eed65943ba928a73c6843e3082",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"1 vCPU"})," core (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"4 GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to cache (",(0,r.jsx)(t.code,{children:"256 GB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32 GB+"})," of the ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"37b99c5f80ab438dbeb94966ed21b251",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS (DDNS)"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n",(0,r.jsxs)(t.li,{children:["Exposed port ",(0,r.jsx)(t.code,{children:"11000"})]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"d7ff0322b24a4d31851b072779d27c2f",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n",(0,r.jsx)(t.li,{children:"Pre-installed latest release of docker"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),o=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=b(e),[l,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,d]=f({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=o[n].value;a!==r&&(c(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(w,{...e,...t})]})}function k(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca83c2d4.bd4d9eaa.js b/assets/js/ca83c2d4.bd4d9eaa.js deleted file mode 100644 index 498e1e7..0000000 --- a/assets/js/ca83c2d4.bd4d9eaa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9570],{5989:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},l=void 0,i={id:"Stack/INTERX--Middleware/System-Requirements",title:"System Requirements",description:"To run the interxd application the following system requirements must be met:",source:"@site/tabs/Docs/Stack/INTERX--Middleware/System-Requirements.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",permalink:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/c65ccc87-599b-4ae3-9e7d-dfb95129fb77"},sidebar:"defaultSidebar",previous:{title:"INTERX | Middleware",permalink:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746"},next:{title:"Endpoints",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896"}},o={},c=[{value:"Hardware",id:"409839eed65943ba928a73c6843e3082",level:2},{value:"Networking",id:"37b99c5f80ab438dbeb94966ed21b251",level:2},{value:"Software",id:"d7ff0322b24a4d31851b072779d27c2f",level:2}];function u(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run the ",(0,r.jsx)(t.code,{children:"interxd"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"409839eed65943ba928a73c6843e3082",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"1 vCPU"})," core (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"4 GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to cache (",(0,r.jsx)(t.code,{children:"256 GB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32 GB+"})," of the ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"37b99c5f80ab438dbeb94966ed21b251",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS (DDNS)"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n",(0,r.jsxs)(t.li,{children:["Exposed port ",(0,r.jsx)(t.code,{children:"11000"})]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"d7ff0322b24a4d31851b072779d27c2f",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n",(0,r.jsx)(t.li,{children:"Pre-installed latest release of docker"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),i=n(469),o=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,o._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=b(e),[l,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,d]=f({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&o(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=o.indexOf(t),a=i[n].value;a!==r&&(c(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;t=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;t=o[n]??o[o.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(w,{...e,...t})]})}function k(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca9744ca.263bae96.js b/assets/js/ca9744ca.2fd48b6e.js similarity index 97% rename from assets/js/ca9744ca.263bae96.js rename to assets/js/ca9744ca.2fd48b6e.js index e81260e..24d6fc3 100644 --- a/assets/js/ca9744ca.263bae96.js +++ b/assets/js/ca9744ca.2fd48b6e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9824],{2438:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=r(5893),t=r(1151);r(4866),r(5162);const i={title:"Key Management",sidebar_position:5,slug:"/775c220a-d41a-481c-9de9-febc1d08a17d"},o=void 0,s={id:"Key-Management",title:"Key Management",description:"If it ever happened to you that you forgot to save your validator signing key and/or wanted to recover your node together with its original Node Id but the CLI does not support that? fear not. In this document, we provide a reliable secret derivation method that will allow you to always recover all your secrets using just a single mnemonic and stay compatible with the KIRA Manager (KM) tool.",source:"@site/tabs/Testnet/Key-Management.mdx",sourceDirName:".",slug:"/775c220a-d41a-481c-9de9-febc1d08a17d",permalink:"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Key Management",sidebar_position:5,slug:"/775c220a-d41a-481c-9de9-febc1d08a17d"},sidebar:"defaultSidebar",previous:{title:"Evangelist",permalink:"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20"},next:{title:"WSL2 Support",permalink:"/docs.kira.network/testnet/fc224b7a-3406-46db-ad7a-5c179d06703c"}},l={},d=[{value:"Key types",id:"9ec6a525a6204eb1a75f22b7d000f052",level:2},{value:"Mnemonic derivation",id:"8f8624aa1ae34cb5a4c84b9f55fbcb68",level:2},{value:"Signing & node key derivation",id:"c2e623903b9d4b329dc8060d1e24a4df",level:2},{value:"Public address derivation",id:"e1756f56cea54395b43a445b1a189159",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"If it ever happened to you that you forgot to save your validator signing key and/or wanted to recover your node together with its original Node Id but the CLI does not support that? fear not. In this document, we provide a reliable secret derivation method that will allow you to always recover all your secrets using just a single mnemonic and stay compatible with the KIRA Manager (KM) tool."}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.em,{children:"Key management with the testnet tool KIRA Manager (KM) should NOT be considered safe nor used on the mainnet as all mnemonics remain unencrypted on your device and can easily be compromised due to human fault or any malicious process that is already running on your device. Despite the significant vulnerability present in the KM we want to allow everyone to accustom themselves with the KIRA stack seamlessly before designing and building their own infrastructure. If you choose to run KM on the mainnet you are doing so at your own responsibility and in such case we highly encourage self-hosting in your own home environment using open-source hardware such as Raspberry Pi."})})}),"\n",(0,a.jsx)(n.h2,{id:"9ec6a525a6204eb1a75f22b7d000f052",children:"Key types"}),"\n",(0,a.jsx)(n.p,{children:"On the testnet, you will find yourself in possession of at least 4 types of cryptographic secrets:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Validator Address Key"})," - In order to participate as a new testnet validator, you must generate and safeguard the initial secret key, which is used to derive your public KIRA address.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"secp256k1"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Validator Signing Key"})," - When your node is started for the first time ",(0,a.jsx)(n.code,{children:"sekai"})," automatically generates a so-called validator signing key. When you claim a validator seat the public key derived from this secret becomes associated with your validator. This key is used to sign blocks that your validator node will be proposing or agreeing on with other nodes in the consensus.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"ed25519"})]}),"\n",(0,a.jsxs)(n.li,{children:["location: ",(0,a.jsx)(n.code,{children:"$SEKAID_HOME/config/priv_validator_key.json"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Node Key"})," - When your ",(0,a.jsx)(n.code,{children:"sekai"})," node communicates with other nodes via P2P it authenticates using a node key and a corresponding node id derived from this secret.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"ed25519"})]}),"\n",(0,a.jsxs)(n.li,{children:["location: ",(0,a.jsx)(n.code,{children:"$SEKAID_HOME/config/node_key.json"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"INTERX Signing Key"})," - This key is used by the interx nodes to prove that messages sent to the client originate from the trusted node operator without the need for HTTPS, its native form is a mnemonic supplied in the configuration file.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"secp256k1"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"8f8624aa1ae34cb5a4c84b9f55fbcb68",children:"Mnemonic derivation"}),"\n",(0,a.jsxs)(n.p,{children:["For the sake of convenience, each type of KIRA node deployed through KM derives a specific set of mnemonics from a ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," in a deterministic manner, utilizing our proprietary seed words generation tool known as bip39gen. This tool is readily available in the ",(0,a.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"tools repository on GitHub"}),", with pre-compiled binaries for ",(0,a.jsx)(n.code,{children:"Linux"}),", ",(0,a.jsx)(n.code,{children:"Mac"}),", and ",(0,a.jsx)(n.code,{children:"Windows"})," available on the release page. Rather than requiring installation, these binaries can simply be downloaded and executed on any operating system. To ensure the authenticity of the file, we strongly suggest verifying the ",(0,a.jsx)(n.code,{children:"sha256"})," hash and/or ",(0,a.jsx)(n.code,{children:"cosign"})," signature that is provided alongside the official release."]}),"\n",(0,a.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"The prerequisite to install bip39gen is Bash Utils (BU) tool, please refer to"})," ",(0,a.jsx)(n.a,{href:"/085fa60c-91e1-448a-a11d-44b5221332e0",children:(0,a.jsx)(n.em,{children:"BU Setup page"})})," ",(0,a.jsx)(n.em,{children:"before proceeding."})]}),"\n",(0,a.jsx)(n.p,{children:":::"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Secure"})," ",(0,a.jsx)(n.strong,{children:(0,a.jsx)(n.code,{children:"bip39gen"})})," ",(0,a.jsx)(n.strong,{children:"Setup"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Download and install bip39gen\nTOOLS_VERSION="v0.3.42" && TOOL_NAME="bip39gen" && cd /tmp && \\\n safeWget ./${TOOL_NAME}.deb "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${TOOL_NAME}-$(getPlatform)-$(getArch).deb" \\\n "QmeqFDLGfwoWgCy2ZEFXerVC5XW8c5xgRyhK5bLArBr2ue" && rm -rfv ./$TOOL_NAME && dpkg-deb -x ./${TOOL_NAME}.deb ./$TOOL_NAME && \\\n cp -fv ./$TOOL_NAME/bin/$TOOL_NAME /usr/local/bin/$TOOL_NAME && chmod +x "/usr/local/bin/$TOOL_NAME" && \\\n rm -rfv ./$TOOL_NAME ./${TOOL_NAME}.deb\n\n# Check bip39gen version\nbip39gen version\n'})}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," is the only secret you will ever need to remember. All other secrets are derived from it such as your whitelisted validator KIRA address, validator signing key, node keys, faucet address, interx signing key, and so on. Our derivation method simply takes a ",(0,a.jsx)(n.code,{children:"sha256"})," hash of your ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," string combined with a human-readable suffix and supplies the ",(0,a.jsx)(n.code,{children:"sha256"})," to the ",(0,a.jsx)(n.code,{children:"bip39gen"})," tool as raw entropy. Please see the table below to determine how to recreate your desired mnemonic entropy:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Validator controller, original KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator addr"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Validator signing key mnemonic:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator val"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Validator node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Sentry node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; sentry node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Seed node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; seed node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["INTERX message signing key & default faucet KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; signer addr"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Default test KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; test addr"'})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"WARNING!!! Before the hash function is applied all strings MUST be lowercase and all white spaces MUST be removed, in bash this can be ensured by using"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"tr '[:upper:]' '[:lower:]' | tr -d '[:space:]'"})})," ",(0,a.jsx)(n.em,{children:"command."})]}),"\n",(0,a.jsx)(n.p,{children:":::"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example of INTERX faucet mnemonic & message signing key recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Your validator address mnemonic \nMASTER_MNEMONIC=\"eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result\"\n\n# Entropy derived from the validator address mnemonic \nENTROPY_HEX=$(echo -n \"$MASTER_MNEMONIC ; signer addr\" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | sha256sum | awk '{ print $1 }' | xargs)\n\n# Default INTERX mnemonic derivation\nbip39gen mnemonic --length=24 --raw-entropy=\"0x${ENTROPY_HEX}\" --verbose=false --hex=true\n# > dry dilemma fat polar surround monkey tragic record cement mechanic picture receive theory yard jar entry frost already tool fabric belt afraid inhale wasp\n"})}),"\n",(0,a.jsx)(n.h2,{id:"c2e623903b9d4b329dc8060d1e24a4df",children:"Signing & node key derivation"}),"\n",(0,a.jsxs)(n.p,{children:["Validator signing keys and node ID keys as opposed to mnemonics corresponding to your public KIRA addresses have a binary format and must be generated from mnemonics that are ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," derived using a dedicated tool ",(0,a.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"validator-key-gen available in the tools repository on GitHub"}),". The ",(0,a.jsx)(n.code,{children:"validator-key-gen"})," can generate a validator signing key if ",(0,a.jsx)(n.code,{children:"--valkey="})," flag is provided, node key if ",(0,a.jsx)(n.code,{children:"--nodekey="})," is provided, and calculate node ID if ",(0,a.jsx)(n.code,{children:"--keyid="})," flag is set."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Secure"})," ",(0,a.jsx)(n.strong,{children:(0,a.jsx)(n.code,{children:"validator-key-gen"})})," ",(0,a.jsx)(n.strong,{children:"Setup"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Download and install validator-key-gen\nTOOLS_VERSION="v0.3.42" && TOOL_NAME="validator-key-gen" && cd /tmp && \\\n safeWget ./${TOOL_NAME}.deb "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${TOOL_NAME}-$(getPlatform)-$(getArch).deb" \\\n "QmeqFDLGfwoWgCy2ZEFXerVC5XW8c5xgRyhK5bLArBr2ue" && rm -rfv ./$TOOL_NAME && dpkg-deb -x ./${TOOL_NAME}.deb ./$TOOL_NAME && \\\n cp -fv ./$TOOL_NAME/bin/$TOOL_NAME /usr/local/bin/$TOOL_NAME && chmod +x "/usr/local/bin/$TOOL_NAME" && \\\n rm -rfv ./$TOOL_NAME ./${TOOL_NAME}.deb\n\n# Check validator-key-gen version\nvalidator-key-gen --version\n'})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Validator Signing Key Recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your example master mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "${MASTER_MNEMONIC} ; validator val" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the validator signing key mnemonic\nVALIDATOR_VAL_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > grain patch soccer child duty excite road soup quality cherry close record corn analyst ready hundred quote uphold oxygen eagle drive album practice brain\n\n# Generating validator signing key\nvalidator-key-gen --mnemonic="$VALIDATOR_VAL_MNEMONIC" --valkey="/tmp/priv_validator_key.json"\n\n# Preview example signing key\ncat "/tmp/priv_validator_key.json" \n# Signing key file example >\n{\n "address": "22E9E935ED027D3A7B3B2B6C8344F9E97C56995F",\n "pub_key": {\n "type": "tendermint/PubKeyEd25519",\n "value": "xNca/lGP3wFjlylTInAW8pEuIVwcab9gjrhpuE+k0Jk="\n },\n "priv_key": {\n "type": "tendermint/PrivKeyEd25519",\n "value": "mv7s3XNOcYAkymyfAt0ODTGdH3pXOyfEZV5QTyG1pXnE1xr+UY/fAWOXKVMicBbykS4hXBxpv2COuGm4T6TQmQ=="\n }\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Sentry Node Key Recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your validator address mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "$MASTER_MNEMONIC ; sentry node" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the validator signing key mnemonic\nSENTRY_NODE_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > test vibrant interest grape digital moment deposit trophy major priority foam assault quote deer basket awake blanket feature outer dress receive polar oxygen search\n\n# Generate sentry node key\nvalidator-key-gen --mnemonic="$SENTRY_NODE_MNEMONIC" --nodekey="/tmp/node_key.json"\n\n# Preview example node key\ncat "/tmp/node_key.json" \n# Node key file example >\n{\n "priv_key": {\n "type": "tendermint/PrivKeyEd25519",\n "value": "fmuBCSfOls4anYGHl8bAwPsJ3buTaejIX4um5ZgFH9tUEoET7LwoAHxh2/xkv/a37oqPouHCEeV2f4+VvCEESA=="\n }\n}\n'})}),"\n",(0,a.jsx)(n.h2,{id:"e1756f56cea54395b43a445b1a189159",children:"Public address derivation"}),"\n",(0,a.jsxs)(n.p,{children:["If you want to verify that your master mnemonic or a mnemonic derived from the master mnemonic will correspond to the correct public KIRA address or Node Id, you can do so utilizing a ",(0,a.jsx)(n.code,{children:"validator-key-gen"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example KIRA Address Derivation"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Your example master mnemonic \nMASTER_MNEMONIC=\"eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result\"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n \"${MASTER_MNEMONIC} ; validator addr\" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | sha256sum | awk '{ print $1 }' | xargs)\n\n# Derivation of the validator address mnemonic\nVALIDATOR_ADDR_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy=\"0x${ENTROPY_HEX}\" --verbose=false --hex=true)\n# > moment autumn couple digital century before consider left cargo quick execute canoe author chronic hurt blast quantum blind slim throw prefer range differ squirrel\n\n# Validator KIRA address public key\nvalidator-key-gen --mnemonic=\"$VALIDATOR_ADDR_MNEMONIC\" --accadr=true --prefix=kira --path=\"44'/118'/0'/0/0\"\n# > kira1yrhm3aap6wpq2dtysquy5tau8aqpenfzjcuuqp\n"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Node Id Derivation"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your example master mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "${MASTER_MNEMONIC} ; seed node" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the seed node mnemonic\nSEED_NODE_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > moment autumn couple digital century before consider left cargo quick execute canoe author chronic hurt blast quantum blind slim throw prefer range differ squirrel\n\n# Generate sentry node key id\nvalidator-key-gen --mnemonic="$SEED_NODE_MNEMONIC" --keyid="/tmp/node_key_id.txt"\n\n# Preview example node key\ncat "/tmp/node_key_id.txt" \n# > d8fd8fb9b63bbbdde8493a18ad7b5d276a299151\n'})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>o});r(7294);var a=r(6905);const t={tabItem:"tabItem_Ymn6"};var i=r(5893);function o(e){let{children:n,hidden:r,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,o),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>E});var a=r(7294),t=r(6905),i=r(2466),o=r(6550),s=r(469),l=r(1980),d=r(7392),c=r(12);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:a,default:t}}=e;return{value:n,label:r,attributes:a,default:t}}))}(r);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const t=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function g(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,i=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[d,u]=m({queryString:r,groupId:t}),[g,y]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Nk)(r);return[t,(0,a.useCallback)((e=>{r&&i.set(e)}),[r,i])]}({groupId:t}),f=(()=>{const e=d??g;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),y(e)}),[u,y,i]),tabValues:i}}var y=r(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(5893);function x(e){let{className:n,block:r,selectedValue:a,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),c=e=>{const n=e.currentTarget,r=l.indexOf(n),t=s[r].value;t!==a&&(d(n),o(t))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":r},n),children:s.map((e=>{let{value:n,label:r,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:c,...i,className:(0,t.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":a===n}),children:r??n},n)}))})}function v(e){let{lazy:n,children:r,selectedValue:t}=e;const i=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function j(e){const n=g(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,b.jsx)(x,{...e,...n}),(0,b.jsx)(v,{...e,...n})]})}function E(e){const n=(0,y.Z)();return(0,b.jsx)(j,{...e,children:u(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>o});var a=r(7294);const t={},i=a.createContext(t);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9824],{2438:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=r(5893),t=r(1151);r(4866),r(5162);const i={title:"Key Management",sidebar_position:5,slug:"/775c220a-d41a-481c-9de9-febc1d08a17d"},o=void 0,s={id:"Key-Management",title:"Key Management",description:"If it ever happened to you that you forgot to save your validator signing key and/or wanted to recover your node together with its original Node Id but the CLI does not support that? fear not. In this document, we provide a reliable secret derivation method that will allow you to always recover all your secrets using just a single mnemonic and stay compatible with the KIRA Manager (KM) tool.",source:"@site/tabs/Testnet/Key-Management.mdx",sourceDirName:".",slug:"/775c220a-d41a-481c-9de9-febc1d08a17d",permalink:"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Key Management",sidebar_position:5,slug:"/775c220a-d41a-481c-9de9-febc1d08a17d"},sidebar:"defaultSidebar",previous:{title:"Evangelist",permalink:"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20"},next:{title:"WSL2 Support",permalink:"/docs.kira.network/testnet/fc224b7a-3406-46db-ad7a-5c179d06703c"}},l={},d=[{value:"Key Types",id:"9ec6a525a6204eb1a75f22b7d000f052",level:2},{value:"Mnemonic Derivation",id:"8f8624aa1ae34cb5a4c84b9f55fbcb68",level:2},{value:"Signing & Node Key Derivation",id:"c2e623903b9d4b329dc8060d1e24a4df",level:2},{value:"Public Address Derivation",id:"e1756f56cea54395b43a445b1a189159",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"If it ever happened to you that you forgot to save your validator signing key and/or wanted to recover your node together with its original Node Id but the CLI does not support that? fear not. In this document, we provide a reliable secret derivation method that will allow you to always recover all your secrets using just a single mnemonic and stay compatible with the KIRA Manager (KM) tool."}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.em,{children:"Key management with the testnet tool KIRA Manager (KM) should NOT be considered safe nor used on the mainnet as all mnemonics remain unencrypted on your device and can easily be compromised due to human fault or any malicious process that is already running on your device. Despite the significant vulnerability present in the KM we want to allow everyone to accustom themselves with the KIRA stack seamlessly before designing and building their own infrastructure. If you choose to run KM on the mainnet you are doing so at your own responsibility and in such case we highly encourage self-hosting in your own home environment using open-source hardware such as Raspberry Pi."})})}),"\n",(0,a.jsx)(n.h2,{id:"9ec6a525a6204eb1a75f22b7d000f052",children:"Key Types"}),"\n",(0,a.jsx)(n.p,{children:"On the testnet, you will find yourself in possession of at least 4 types of cryptographic secrets:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Validator Address Key"})," - In order to participate as a new testnet validator, you must generate and safeguard the initial secret key, which is used to derive your public KIRA address.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"secp256k1"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Validator Signing Key"})," - When your node is started for the first time ",(0,a.jsx)(n.code,{children:"sekai"})," automatically generates a so-called validator signing key. When you claim a validator seat the public key derived from this secret becomes associated with your validator. This key is used to sign blocks that your validator node will be proposing or agreeing on with other nodes in the consensus.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"ed25519"})]}),"\n",(0,a.jsxs)(n.li,{children:["location: ",(0,a.jsx)(n.code,{children:"$SEKAID_HOME/config/priv_validator_key.json"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Node Key"})," - When your ",(0,a.jsx)(n.code,{children:"sekai"})," node communicates with other nodes via P2P it authenticates using a node key and a corresponding node id derived from this secret.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"ed25519"})]}),"\n",(0,a.jsxs)(n.li,{children:["location: ",(0,a.jsx)(n.code,{children:"$SEKAID_HOME/config/node_key.json"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"INTERX Signing Key"})," - This key is used by the interx nodes to prove that messages sent to the client originate from the trusted node operator without the need for HTTPS, its native form is a mnemonic supplied in the configuration file.","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["type: ",(0,a.jsx)(n.code,{children:"secp256k1"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"8f8624aa1ae34cb5a4c84b9f55fbcb68",children:"Mnemonic Derivation"}),"\n",(0,a.jsxs)(n.p,{children:["For the sake of convenience, each type of KIRA node deployed through KM derives a specific set of mnemonics from a ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," in a deterministic manner, utilizing our proprietary seed words generation tool known as bip39gen. This tool is readily available in the ",(0,a.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"tools repository on GitHub"}),", with pre-compiled binaries for ",(0,a.jsx)(n.code,{children:"Linux"}),", ",(0,a.jsx)(n.code,{children:"Mac"}),", and ",(0,a.jsx)(n.code,{children:"Windows"})," available on the release page. Rather than requiring installation, these binaries can simply be downloaded and executed on any operating system. To ensure the authenticity of the file, we strongly suggest verifying the ",(0,a.jsx)(n.code,{children:"sha256"})," hash and/or ",(0,a.jsx)(n.code,{children:"cosign"})," signature that is provided alongside the official release."]}),"\n",(0,a.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"The prerequisite to install bip39gen is Bash Utils (BU) tool, please refer to"})," ",(0,a.jsx)(n.a,{href:"/085fa60c-91e1-448a-a11d-44b5221332e0",children:(0,a.jsx)(n.em,{children:"BU Setup page"})})," ",(0,a.jsx)(n.em,{children:"before proceeding."})]}),"\n",(0,a.jsx)(n.p,{children:":::"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Secure"})," ",(0,a.jsx)(n.strong,{children:(0,a.jsx)(n.code,{children:"bip39gen"})})," ",(0,a.jsx)(n.strong,{children:"Setup"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# assume root permissions\nsudo -s\n\n# Download and install bip39gen\nTOOLS_VERSION="v0.3.42" && TOOL_NAME="bip39gen" && cd /tmp && \\\n safeWget ./${TOOL_NAME}.deb "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${TOOL_NAME}-$(getPlatform)-$(getArch).deb" \\\n "QmeqFDLGfwoWgCy2ZEFXerVC5XW8c5xgRyhK5bLArBr2ue" && rm -rfv ./$TOOL_NAME && dpkg-deb -x ./${TOOL_NAME}.deb ./$TOOL_NAME && \\\n cp -fv ./$TOOL_NAME/bin/$TOOL_NAME /usr/local/bin/$TOOL_NAME && chmod +x "/usr/local/bin/$TOOL_NAME" && \\\n rm -rfv ./$TOOL_NAME ./${TOOL_NAME}.deb\n\n# Check bip39gen version\nbip39gen version\n'})}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," is the only secret you will ever need to remember. All other secrets are derived from it such as your whitelisted validator KIRA address, validator signing key, node keys, faucet address, interx signing key, and so on. Our derivation method simply takes a ",(0,a.jsx)(n.code,{children:"sha256"})," hash of your ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," string combined with a human-readable suffix and supplies the ",(0,a.jsx)(n.code,{children:"sha256"})," to the ",(0,a.jsx)(n.code,{children:"bip39gen"})," tool as raw entropy. Please see the table below to determine how to recreate your desired mnemonic entropy:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Validator controller, original KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator addr"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Validator signing key mnemonic:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator val"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Validator node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; validator node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Sentry node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; sentry node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Seed node key:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; seed node"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["INTERX message signing key & default faucet KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; signer addr"'})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["Default test KIRA address:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.code,{children:'echo -n "$MASTER_MNEMONIC ; test addr"'})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:":::\ud83d\udccc"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"WARNING!!! Before the hash function is applied all strings MUST be lowercase and all white spaces MUST be removed, in bash this can be ensured by using"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"tr '[:upper:]' '[:lower:]' | tr -d '[:space:]'"})})," ",(0,a.jsx)(n.em,{children:"command."})]}),"\n",(0,a.jsx)(n.p,{children:":::"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example of INTERX faucet mnemonic & message signing key recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Your validator address mnemonic \nMASTER_MNEMONIC=\"eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result\"\n\n# Entropy derived from the validator address mnemonic \nENTROPY_HEX=$(echo -n \"$MASTER_MNEMONIC ; signer addr\" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | sha256sum | awk '{ print $1 }' | xargs)\n\n# Default INTERX mnemonic derivation\nbip39gen mnemonic --length=24 --raw-entropy=\"0x${ENTROPY_HEX}\" --verbose=false --hex=true\n# > dry dilemma fat polar surround monkey tragic record cement mechanic picture receive theory yard jar entry frost already tool fabric belt afraid inhale wasp\n"})}),"\n",(0,a.jsx)(n.h2,{id:"c2e623903b9d4b329dc8060d1e24a4df",children:"Signing & Node Key Derivation"}),"\n",(0,a.jsxs)(n.p,{children:["Validator signing keys and node ID keys as opposed to mnemonics corresponding to your public KIRA addresses have a binary format and must be generated from mnemonics that are ",(0,a.jsx)(n.code,{children:"MASTER_MNEMONIC"})," derived using a dedicated tool ",(0,a.jsx)(n.a,{href:"https://github.com/KiraCore/tools/releases",children:"validator-key-gen available in the tools repository on GitHub"}),". The ",(0,a.jsx)(n.code,{children:"validator-key-gen"})," can generate a validator signing key if ",(0,a.jsx)(n.code,{children:"--valkey="})," flag is provided, node key if ",(0,a.jsx)(n.code,{children:"--nodekey="})," is provided, and calculate node ID if ",(0,a.jsx)(n.code,{children:"--keyid="})," flag is set."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Secure"})," ",(0,a.jsx)(n.strong,{children:(0,a.jsx)(n.code,{children:"validator-key-gen"})})," ",(0,a.jsx)(n.strong,{children:"Setup"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Download and install validator-key-gen\nTOOLS_VERSION="v0.3.42" && TOOL_NAME="validator-key-gen" && cd /tmp && \\\n safeWget ./${TOOL_NAME}.deb "https://github.com/KiraCore/tools/releases/download/$TOOLS_VERSION/${TOOL_NAME}-$(getPlatform)-$(getArch).deb" \\\n "QmeqFDLGfwoWgCy2ZEFXerVC5XW8c5xgRyhK5bLArBr2ue" && rm -rfv ./$TOOL_NAME && dpkg-deb -x ./${TOOL_NAME}.deb ./$TOOL_NAME && \\\n cp -fv ./$TOOL_NAME/bin/$TOOL_NAME /usr/local/bin/$TOOL_NAME && chmod +x "/usr/local/bin/$TOOL_NAME" && \\\n rm -rfv ./$TOOL_NAME ./${TOOL_NAME}.deb\n\n# Check validator-key-gen version\nvalidator-key-gen --version\n'})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Validator Signing Key Recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your example master mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "${MASTER_MNEMONIC} ; validator val" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the validator signing key mnemonic\nVALIDATOR_VAL_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > grain patch soccer child duty excite road soup quality cherry close record corn analyst ready hundred quote uphold oxygen eagle drive album practice brain\n\n# Generating validator signing key\nvalidator-key-gen --mnemonic="$VALIDATOR_VAL_MNEMONIC" --valkey="/tmp/priv_validator_key.json"\n\n# Preview example signing key\ncat "/tmp/priv_validator_key.json" \n# Signing key file example >\n{\n "address": "22E9E935ED027D3A7B3B2B6C8344F9E97C56995F",\n "pub_key": {\n "type": "tendermint/PubKeyEd25519",\n "value": "xNca/lGP3wFjlylTInAW8pEuIVwcab9gjrhpuE+k0Jk="\n },\n "priv_key": {\n "type": "tendermint/PrivKeyEd25519",\n "value": "mv7s3XNOcYAkymyfAt0ODTGdH3pXOyfEZV5QTyG1pXnE1xr+UY/fAWOXKVMicBbykS4hXBxpv2COuGm4T6TQmQ=="\n }\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Sentry Node Key Recovery"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your validator address mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "$MASTER_MNEMONIC ; sentry node" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the validator signing key mnemonic\nSENTRY_NODE_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > test vibrant interest grape digital moment deposit trophy major priority foam assault quote deer basket awake blanket feature outer dress receive polar oxygen search\n\n# Generate sentry node key\nvalidator-key-gen --mnemonic="$SENTRY_NODE_MNEMONIC" --nodekey="/tmp/node_key.json"\n\n# Preview example node key\ncat "/tmp/node_key.json" \n# Node key file example >\n{\n "priv_key": {\n "type": "tendermint/PrivKeyEd25519",\n "value": "fmuBCSfOls4anYGHl8bAwPsJ3buTaejIX4um5ZgFH9tUEoET7LwoAHxh2/xkv/a37oqPouHCEeV2f4+VvCEESA=="\n }\n}\n'})}),"\n",(0,a.jsx)(n.h2,{id:"e1756f56cea54395b43a445b1a189159",children:"Public Address Derivation"}),"\n",(0,a.jsxs)(n.p,{children:["If you want to verify that your master mnemonic or a mnemonic derived from the master mnemonic will correspond to the correct public KIRA address or Node Id, you can do so utilizing a ",(0,a.jsx)(n.code,{children:"validator-key-gen"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example KIRA Address Derivation"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Your example master mnemonic \nMASTER_MNEMONIC=\"eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result\"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n \"${MASTER_MNEMONIC} ; validator addr\" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | sha256sum | awk '{ print $1 }' | xargs)\n\n# Derivation of the validator address mnemonic\nVALIDATOR_ADDR_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy=\"0x${ENTROPY_HEX}\" --verbose=false --hex=true)\n# > moment autumn couple digital century before consider left cargo quick execute canoe author chronic hurt blast quantum blind slim throw prefer range differ squirrel\n\n# Validator KIRA address public key\nvalidator-key-gen --mnemonic=\"$VALIDATOR_ADDR_MNEMONIC\" --accadr=true --prefix=kira --path=\"44'/118'/0'/0/0\"\n# > kira1yrhm3aap6wpq2dtysquy5tau8aqpenfzjcuuqp\n"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Example Node Id Derivation"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Your example master mnemonic \nMASTER_MNEMONIC="eagle gap major artwork napkin hover gate illness ball distance awful mountain salute guard scare edit scorpion praise trust potato cotton crazy unique result"\n\n# Entropy derived from the master mnemonic\nENTROPY_HEX=$(echo -n "${MASTER_MNEMONIC} ; seed node" | tr \'[:upper:]\' \'[:lower:]\' | tr -d \'[:space:]\' | sha256sum | awk \'{ print $1 }\' | xargs)\n\n# Derivation of the seed node mnemonic\nSEED_NODE_MNEMONIC=$(bip39gen mnemonic --length=24 --raw-entropy="0x${ENTROPY_HEX}" --verbose=false --hex=true)\n# > moment autumn couple digital century before consider left cargo quick execute canoe author chronic hurt blast quantum blind slim throw prefer range differ squirrel\n\n# Generate sentry node key id\nvalidator-key-gen --mnemonic="$SEED_NODE_MNEMONIC" --keyid="/tmp/node_key_id.txt"\n\n# Preview example node key\ncat "/tmp/node_key_id.txt" \n# > d8fd8fb9b63bbbdde8493a18ad7b5d276a299151\n'})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>o});r(7294);var a=r(6905);const t={tabItem:"tabItem_Ymn6"};var i=r(5893);function o(e){let{children:n,hidden:r,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(t.tabItem,o),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>E});var a=r(7294),t=r(6905),i=r(2466),o=r(6550),s=r(469),l=r(1980),d=r(7392),c=r(12);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:r,attributes:a,default:t}}=e;return{value:n,label:r,attributes:a,default:t}}))}(r);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const t=(0,o.k6)(),i=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function g(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,i=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[d,u]=m({queryString:r,groupId:t}),[g,y]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Nk)(r);return[t,(0,a.useCallback)((e=>{r&&i.set(e)}),[r,i])]}({groupId:t}),f=(()=>{const e=d??g;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),y(e)}),[u,y,i]),tabValues:i}}var y=r(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=r(5893);function x(e){let{className:n,block:r,selectedValue:a,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),c=e=>{const n=e.currentTarget,r=l.indexOf(n),t=s[r].value;t!==a&&(d(n),o(t))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":r},n),children:s.map((e=>{let{value:n,label:r,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:c,...i,className:(0,t.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":a===n}),children:r??n},n)}))})}function v(e){let{lazy:n,children:r,selectedValue:t}=e;const i=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function j(e){const n=g(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,b.jsx)(x,{...e,...n}),(0,b.jsx)(v,{...e,...n})]})}function E(e){const n=(0,y.Z)();return(0,b.jsx)(j,{...e,children:u(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>o});var a=r(7294);const t={},i=a.createContext(t);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cac4d0ba.b88bb360.js b/assets/js/cac4d0ba.b88bb360.js new file mode 100644 index 0000000..209f927 --- /dev/null +++ b/assets/js/cac4d0ba.b88bb360.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[503],{8644:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var a=n(5893),s=n(1151);n(4866),n(5162);const i={title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},o=void 0,r={id:"What-is-KIRA/SEKAI/Consensus",title:"Consensus",description:"Tendermint",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Consensus.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e"},next:{title:"Governance",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"}},l={},c=[{value:"Tendermint",id:"f82263dd7b3a455bb49cf5292b3f30df",level:4},{value:"Governance-curated Validator Set",id:"1e2b19cfb65f434ba3c2d2b848c9f549",level:3},{value:"Multi-bonded Proof of Stake",id:"38c624fbdc324bd093974d2abb46c689",level:3}];function u(e){const t={a:"a",admonition:"admonition",h3:"h3",h4:"h4",p:"p",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h4,{id:"f82263dd7b3a455bb49cf5292b3f30df",children:"Tendermint"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI is a \u201cserver application\u201d deriving from Tendermint a consistent PoS\xa0",(0,a.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Byzantine_fault_tolerance",children:"BFT"}),"\xa0(Proof of Stake Byzantine Fault Tolerant) consensus algorithm, meaning that it can tolerate up to 1/3 faulty nodes. It provides instant finality which minimizes the likelihood of forks at the consensus layer, making it suitable for high-speed applications."]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For more information regarding Tendermint, visit the following link. ",(0,a.jsx)(t.a,{href:"https://docs.tendermint.com/v0.34/",children:"https://docs.tendermint.com/v0.34/"})]})}),"\n",(0,a.jsx)(t.h3,{id:"1e2b19cfb65f434ba3c2d2b848c9f549",children:"Governance-curated Validator Set"}),"\n",(0,a.jsx)(t.p,{children:"KIRA has customized Tendermint to establish a strong and simple governance-curated system for managing its validator set. Through this mechanism, network governance exercises direct control over validator inclusion and removal. Only candidates meeting specific criteria\u2014such as proof of individuality, community engagement, and adherence to the network's Code of Conduct\u2014are qualified to participate in consensus and governance roles. Unlike permissionless models with a fixed number of committee members, SEKAI's validator set composition is dynamically adjustable, enabling the eviction of malicious nodes or the regulation of block speed to maintain network integrity and performance."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI's validator set expands through the actions of its active members, governed by a principle of inclusivity with no upper limit on the number of validators. This ensures that the network can scale dynamically while adjusting block production speeds to accommodate validators worldwide, regardless of their geographical locations or the quality of their hardware and networking capabilities. Candidates seeking to join must have their KIRA addresses officially recognized as 'validators,' a distinction awarded through governance proposals that are submitted and voted on exclusively by existing validators. These proposals evaluate the candidate\u2019s commitment to and compliance with the network's standards. This process guarantees that the growth of the validator set is not only self-sustained but also strictly adheres to SEKAI\u2019s ethos, ensuring optimal security and performance across its expanding infrastructure."}),"\n",(0,a.jsx)(t.p,{children:"By prioritizing adherence to community values over wealth status, KIRA aims to be the first inclusive PoS network that combines human alignment alongside assets at stake to secure the consensus. By subsidizing governance members and validator nodes through the Universal Basic Income (UBI), KIRA makes it possible to guarantee the sustainability of hardware operations and their continuous alignment with the long-term network goals without depending on exponentially inflating the $KEX token supply and wealth redistribution only to the hands of a small set of privileged nodes and stakeholders."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive overview of SEKAI's governance mechanism, including its structure, roles, and permissions, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.h3,{id:"38c624fbdc324bd093974d2abb46c689",children:"Multi-bonded Proof of Stake"}),"\n",(0,a.jsx)(t.p,{children:"Proof-of-stake is a Sybil resistance mechanism that complements blockchain consensus protocols. In a proof-of-stake system, consensus nodes are required to stake the chain's native asset as slashable collateral. PoS bolsters the security of the chain by aligning the consensus nodes' economic interests with those of the network. Since not all validators can afford a large number of assets at stake, \u201cdelegated staking\u201d is often used to increase the \u201ctrust\u201d in the network validator set by allowing anyone to put the tokens at the risk of slashing in the hands of validators they trust."}),"\n",(0,a.jsx)(t.p,{children:"KIRA iterates upon this mechanism with its Multi-Bonded Proof-of-Stake. Any assets whitelisted by governance, including those not issued on SEKAI, may be staked to consensus nodes, in addition to the native asset. There are no limitations on the types of assets that can be staked, such as NFTs, RWA, LP tokens, and stablecoins. However, SEKAI maintains the relevancy of its native asset by ensuring a minimum allocation of 50% of block and fee rewards, a figure that governance can adjust."}),"\n",(0,a.jsx)(t.p,{children:"In SEKAI, block production operates on an equal round-robin mechanism. This is distinct from conventional PoS systems, where the chance to produce a block is proportional to stake size; thus, SEKAI effectively treats all nodes as if they had the same stake amount. This approach extends to on-chain governance, which operates on a per-capita basis as well, ensuring equitable influence on network decisions among all participants."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Unlike traditional PoS systems, block production in KIRA is separate from onchain governance. For more details on governance, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.p,{children:"To form a secure, scalable foundation for complex economic activity, the base layer should natively support the liquidity of all staked assets. Multi-asset staking is necessary to scale both security and liquidity available within the network in an increasingly multichain world. By allowing chain governance to whitelist any asset that it recognizes to hold fundamental value, KIRA attracts liquidity from all spheres of crypto to assume a productive role in its network, thereby presenting a strong value proposition to retain and grow on-chain liquidity through natively supported Liquid Staking Derivatives (LSD). This unlocks the potential for frictionless integration of multichain LSDs and restaking-powered DeFi while decreasing the systematic risk of any single external (non-native) LSD protocol failure."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.a,{href:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",children:"Rewards and Incentives Structure"})," page discusses economic incentives for consensus nodes and their delegators."]})})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),s=n(6905),i=n(2466),o=n(6550),r=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const s=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(s.location.search);t.set(i,e),s.replace({...s.location,search:t.toString()})}),[i,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,i=h(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=m({queryString:n,groupId:s}),[p,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,i]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:s}),v=(()=>{const e=c??p;return f({value:e,tabValues:i})?e:null})();(0,r.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,i]),tabValues:i}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==a&&(c(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,s.Z)("tabs__item",v.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:s}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var a=n(7294);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cac4d0ba.deb8d9f4.js b/assets/js/cac4d0ba.deb8d9f4.js deleted file mode 100644 index d6a7602..0000000 --- a/assets/js/cac4d0ba.deb8d9f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[503],{8644:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var a=n(5893),s=n(1151);n(4866),n(5162);const o={title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},i=void 0,r={id:"What-is-KIRA/SEKAI/Consensus",title:"Consensus",description:"Tendermint",source:"@site/tabs/Learn/What-is-KIRA/SEKAI/Consensus.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418",permalink:"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Consensus",sidebar_position:1,slug:"/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e"},next:{title:"Governance",permalink:"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"}},l={},c=[{value:"Tendermint",id:"f82263dd7b3a455bb49cf5292b3f30df",level:4},{value:"Governance-curated validator set",id:"1e2b19cfb65f434ba3c2d2b848c9f549",level:3},{value:"Multi-bonded proof of stake",id:"38c624fbdc324bd093974d2abb46c689",level:3}];function u(e){const t={a:"a",admonition:"admonition",h3:"h3",h4:"h4",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h4,{id:"f82263dd7b3a455bb49cf5292b3f30df",children:"Tendermint"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI is a \u201cserver application\u201d deriving from Tendermint a consistent PoS\xa0",(0,a.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Byzantine_fault_tolerance",children:"BFT"}),"\xa0(Proof of Stake Byzantine Fault Tolerant) consensus algorithm, meaning that it can tolerate up to 1/3 faulty nodes. It provides instant finality [link glossary] which minimizes the likelihood of forks [link glossary] at the consensus layer, making it suitable for high-speed applications."]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For more information regarding Tendermint, visit the following link. ",(0,a.jsx)(t.a,{href:"https://docs.tendermint.com/v0.34/",children:"https://docs.tendermint.com/v0.34/"})]})}),"\n",(0,a.jsx)(t.h3,{id:"1e2b19cfb65f434ba3c2d2b848c9f549",children:"Governance-curated validator set"}),"\n",(0,a.jsx)(t.p,{children:"KIRA has customized Tendermint to establish a strong and simple governance-curated system for managing its validator set. Through this mechanism, network governance exercises direct control over validator inclusion and removal. Only candidates meeting specific criteria\u2014such as proof of individuality, community engagement, and adherence to the network's Code of Conduct\u2014are qualified to participate in consensus and governance roles. Unlike permissionless models with a fixed number of committee members, SEKAI's validator set composition is dynamically adjustable, enabling the eviction of malicious nodes or the regulation of block speed to maintain network integrity and performance."}),"\n",(0,a.jsx)(t.p,{children:"SEKAI's validator set expands through the actions of its active members, governed by a principle of inclusivity with no upper limit on the number of validators. This ensures that the network can scale dynamically while adjusting block production speeds to accommodate validators worldwide, regardless of their geographical locations or the quality of their hardware and networking capabilities. Candidates seeking to join must have their KIRA addresses officially recognized as 'validators,' a distinction awarded through governance proposals that are submitted and voted on exclusively by existing validators. These proposals evaluate the candidate\u2019s commitment to and compliance with the network's standards. This process guarantees that the growth of the validator set is not only self-sustained but also strictly adheres to SEKAI\u2019s ethos, ensuring optimal security and performance across its expanding infrastructure."}),"\n",(0,a.jsx)(t.p,{children:"By prioritizing adherence to community values over wealth status, KIRA aims to be the first inclusive PoS network that combines human alignment alongside assets at stake to secure the consensus. By subsidizing governance members and validator nodes through the Universal Basic Income (UBI), KIRA makes it possible to guarantee the sustainability of hardware operations and their continuous alignment with the long-term network goals without depending on exponentially inflating the $KEX token supply and wealth redistribution only to the hands of a small set of privileged nodes and stakeholders."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["For a comprehensive overview of SEKAI's governance mechanism, including its structure, roles, and permissions, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.h3,{id:"38c624fbdc324bd093974d2abb46c689",children:"Multi-bonded proof of stake"}),"\n",(0,a.jsx)(t.p,{children:"Proof-of-stake is a Sybil resistance mechanism that complements blockchain consensus protocols. In a proof-of-stake system, consensus nodes are required to stake the chain's native asset as slashable collateral. PoS bolsters the security of the chain by aligning the consensus nodes' economic interests with those of the network. Since not all validators can afford a large number of assets at stake, \u201cdelegated staking\u201d is often used to increase the \u201ctrust\u201d in the network validator set by allowing anyone to put the tokens at the risk of slashing in the hands of validators they trust."}),"\n",(0,a.jsx)(t.p,{children:"KIRA iterates upon this mechanism with its Multi-Bonded Proof-of-Stake. Any assets whitelisted by governance, including those not issued on SEKAI, may be staked to consensus nodes, in addition to the native asset. There are no limitations on the types of assets that can be staked, such as NFTs, RWA, LP tokens, and stablecoins. However, SEKAI maintains the relevancy of its native asset by ensuring a minimum allocation of 50% of block and fee rewards, a figure that governance can adjust."}),"\n",(0,a.jsx)(t.p,{children:"In SEKAI, block production operates on an equal round-robin mechanism. This is distinct from conventional PoS systems, where the chance to produce a block is proportional to stake size; thus, SEKAI effectively treats all nodes as if they had the same stake amount. This approach extends to on-chain governance, which operates on a per-capita basis as well, ensuring equitable influence on network decisions among all participants."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Unlike traditional PoS systems, block production in KIRA is separate from onchain governance. For more details on governance, visit the ",(0,a.jsx)(t.a,{href:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",children:"Governance"})," page."]})}),"\n",(0,a.jsx)(t.p,{children:"To form a secure, scalable foundation for complex economic activity, the base layer should natively support the liquidity of all staked assets. Multi-asset staking is necessary to scale both security and liquidity available within the network in an increasingly multichain world. By allowing chain governance to whitelist any asset that it recognizes to hold fundamental value, KIRA attracts liquidity from all spheres of crypto to assume a productive role in its network, thereby presenting a strong value proposition to retain and grow on-chain liquidity through natively supported Liquid Staking Derivatives (LSD). This unlocks the potential for frictionless integration of multichain LSDs and restaking-powered DeFi while decreasing the systematic risk of any single external (non-native) LSD protocol failure."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," discusses economic incentives for consensus nodes and their delegators."]})})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const s={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(7294),s=n(6905),o=n(2466),i=n(6550),r=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:s}}=e;return{value:t,label:n,attributes:a,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(s.location.search);t.set(o,e),s.replace({...s.location,search:t.toString()})}),[o,s])]}function p(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,o=h(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=m({queryString:n,groupId:s}),[p,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,o]=(0,u.Nk)(n);return[s,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:s}),v=(()=>{const e=c??p;return f({value:e,tabValues:o})?e:null})();(0,r.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==a&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,s.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:s}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===s));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function w(e){const t=p(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var a=n(7294);const s={},o=a.createContext(s);function i(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ce4193d2.58153bf7.js b/assets/js/ce4193d2.58153bf7.js deleted file mode 100644 index 701f76b..0000000 --- a/assets/js/ce4193d2.58153bf7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2919],{1472:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},i=void 0,s={id:"Stack/SEKAI--Backend/Modules/Distributor/index",title:"Distributor",description:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae",permalink:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},sidebar:"defaultSidebar",previous:{title:"Layer 2",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73"},next:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba"}},l={},u=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/distributor",children:(0,a.jsx)(t.code,{children:"x/distributor"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),o=r(2466),i=r(6550),s=r(469),l=r(1980),u=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:r,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(u(t),i(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>i});var a=r(7294);const n={},o=a.createContext(n);function i(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ce4193d2.ae7629b7.js b/assets/js/ce4193d2.ae7629b7.js new file mode 100644 index 0000000..93cd776 --- /dev/null +++ b/assets/js/ce4193d2.ae7629b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2919],{1472:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},i=void 0,s={id:"Stack/SEKAI--Backend/Modules/Distributor/index",title:"Distributor",description:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Distributor",slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae",permalink:"/docs.kira.network/docs/ba4d5a3e-3caa-431e-940e-87187fbc3bae",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Distributor",sidebar_position:4,slug:"/ba4d5a3e-3caa-431e-940e-87187fbc3bae"},sidebar:"defaultSidebar",previous:{title:"Layer 2",permalink:"/docs.kira.network/docs/8aad2626-40b5-42d6-9504-0c1287216a73"},next:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/docs/85d4757d-f36d-4a39-b7ab-62866c1689ba"}},l={},u=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A reward framework aiming to promote a collaborative method for block generation, deftly balancing decentralization with incentivization while considering potential MEV leakage. This model emphasizes token diversity, allocating distinct rewards to each qualified staking token, enticing a broad spectrum of users across different networks."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/distributor",children:(0,a.jsx)(t.code,{children:"x/distributor"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var a=r(7294),n=r(6905),o=r(2466),i=r(6550),s=r(469),l=r(1980),u=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const n=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:r,groupId:n}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=u??m;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:a,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),n=s[r].value;n!==a&&(u(t),i(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>i});var a=r(7294);const n={},o=a.createContext(n);function i(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d0c50a7c.1fa19fa8.js b/assets/js/d0c50a7c.1fa19fa8.js deleted file mode 100644 index a72cf4c..0000000 --- a/assets/js/d0c50a7c.1fa19fa8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8125],{2233:(e,d,n)=>{n.r(d),n.d(d,{assets:()=>h,contentTitle:()=>l,default:()=>j,frontMatter:()=>c,metadata:()=>o,toc:()=>a});var s=n(5893),r=n(1151),t=n(4866),i=n(5162);const c={title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},l=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Network-Properties",title:"Network Properties",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Network-Properties.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/b9b95792-b936-4603-8a46-15566f24e3c0",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Network Properties",sidebar_position:6,slug:"/b9b95792-b936-4603-8a46-15566f24e3c0"},sidebar:"defaultSidebar",previous:{title:"Polls",permalink:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243"},next:{title:"Identity Registrar",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92"}},h={},a=[{value:"Concept",id:"ebfaaf65269241b9a32a9bfeea35b3c8",level:2},{value:"Parameters",id:"6b3d949219294d29982ae09b9f70a8ba",level:2},{value:"Cli syntax & examples",id:"dd165dbb682e4cb9b41ccbecbe8874da",level:2},{value:"Transactions",id:"c7b1bcd0db474f468e03cbbcfdb65094",level:2},{value:"Queries",id:"d0f3dff516504a20955bde702560a0c6",level:2},{value:"Query network properties",id:"21971178f4ac42c0be7dcc5885715064",level:4},{value:"Governance",id:"21a4bf9b246540458e513ba56c82c5d5",level:2},{value:"Set a network property",id:"28134ca7a8f74dc7919c699ec7927cf3",level:4}];function x(e){const d={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.h2,{id:"ebfaaf65269241b9a32a9bfeea35b3c8",children:"Concept"}),"\n",(0,s.jsx)(d.p,{children:"KIRA Network utilizes a unique set of on-chain variables known as Network Properties to help control and regulate various behaviors and characteristics of the SEKAI application on a network-wide basis. These parameters serve as the operational gears of the system, allowing for the adjustment of pivotal features such as KEX inflation rate, the minimum transaction fee for any on-chain message to ensure global transaction spam protection, or even the required minimum percentage of governance members necessary to vote on a proposal, making it valid. Such versatility is particularly beneficial, considering the ever-evolving needs of the community and the potential alterations in the network's operational dynamics. Any changes to these network properties require consensus from the network's governance, ensuring that any alterations align with the wishes of the majority of network participants."}),"\n",(0,s.jsx)(d.h2,{id:"6b3d949219294d29982ae09b9f70a8ba",children:"Parameters"}),"\n",(0,s.jsxs)(d.p,{children:["All network properties and their respective default values (which can also be found ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),")"]}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"#"}),(0,s.jsx)(d.th,{children:"NAME"}),(0,s.jsx)(d.th,{children:"TYPE"}),(0,s.jsx)(d.th,{children:"GENESIS"}),(0,s.jsx)(d.th,{children:"BOUNDS (min - max)"}),(0,s.jsx)(d.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"1"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that must be sent in order to submit any on-chain message. Global transaction spam protection measure."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"2"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_tx_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum transaction fee in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be sent along any transaction type. Prevents potential loss of funds while specifying wrong transaction fee amount by the user."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"3"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"vote_quorum"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"33"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Required, minimum percentage of governance members with permission to vote on a given proposal to make said proposal valid. If minimum quorum is not reached then passing said proposal is not possible."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"4"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum time in seconds that proposals must be active and default time for all proposals to remain pending. Duration time of individual proposal can be modified by governance as explained ",(0,s.jsx)(d.a,{href:"/25d26925-50ce-4a4f-836b-fc8486ef8b05",children:"here"}),"."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"5"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"proposal_enactment_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum time in seconds for the proposals to take effect after they passed"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"6"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_end_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of blocks during which the proposals MUST remain active. This is used to prevent edge cases where ",(0,s.jsx)(d.code,{children:"minimum_proposal_end_time"})," is set to value shorter than a single block time, thus making it impossible to vote in time."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"7"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_proposal_enactment_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum number of blocks that must pass after proposal passed for the proposal to take effect."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"8"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_foreign_fee_payments"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allow transaction fee payments with tokens other than KEX"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"9"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"When it's certain that validator is offline and failed to participate in a block production, decrease its global rank by the specified value."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"10"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["How many consecutive blocks must the validator miss for the network to change validator status to ",(0,s.jsx)(d.code,{children:"inactive"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"11"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"mischance_confidence"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"110"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"How many consecutive blocks must the validator miss for the network to be certain that the node is offline and not participating in the block signing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"12"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["By what percentage should the validator global rank decrease when the said validator node status changes to ",(0,s.jsx)(d.code,{children:"inactive"})," due to not participating in signing new blocks."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"13"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_validators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["When ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur, sets the maximum value in ",(0,s.jsx)(d.code,{children:"ukex"})," that can be transferred between accounts."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"14"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"poor_network_max_bank_send"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum number of consensus nodes that must be active for the network to be considered healthy. If number of validators falls below this value then ",(0,s.jsx)(d.a,{href:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",children:"poor network conditions"})," occur."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"15"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unjail_max_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"600"})}),(0,s.jsxs)(d.td,{children:["< ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Maximum amount of time in seconds which a jailed node has to request to be unjailed before becoming permanently jailed (tombstoned)."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"16"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_whitelist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"false"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enables whitelist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"17"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"enable_token_blacklist"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"bool"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"true"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Enable blacklist of tokens transferable on the network"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"18"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_identity_approval_tip"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Minimum tip in ",(0,s.jsx)(d.code,{children:"ukex"})," amount that must be sent along ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})," record verification request"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"19"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unique_identity_keys"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"string"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"moniker,username"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Key values that must remain unique in the ",(0,s.jsx)(d.a,{href:"/d482180d-165a-4c09-8c32-167f061ceb92",children:"Untitled"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"20"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ubi_hardcap"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"6000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum amount of additional KEX that can be created per year by the UBI module"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"21"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validators_fee_share"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.50"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"Percentage cut a block proposer takes from the block\u2019s transaction fees rewards."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"22"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_rate"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.18"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"0.5"})]}),(0,s.jsx)(d.td,{children:"KEX inflation percentage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"23"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inflation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"31557600"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"2629800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})]}),(0,s.jsxs)(d.td,{children:["Period of time in seconds over which current KEX supply is inflated by ",(0,s.jsx)(d.code,{children:"inflation_rate"})]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"24"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"unstaking_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2629800"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"604800"})," - ",(0,s.jsx)(d.code,{children:"31557600"})," or ",(0,s.jsx)(d.code,{children:"slashing_period"})]}),(0,s.jsx)(d.td,{children:"Undelegation cooling period (in seconds)"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"25"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_delegators"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["Maximum number of delegators allowed per staking pool above which ",(0,s.jsx)(d.code,{children:"min_delegation_pushout"})," can be triggered."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"26"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_delegation_pushout"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsxs)(d.td,{children:["The minimum stake multiplier amount a user need to provide to push out the weakest delegator of a staking pool who reach its ",(0,s.jsx)(d.code,{children:"max_delegators"})," capacity"]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"27"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"slashing_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"3600"})}),(0,s.jsxs)(d.td,{children:["> ",(0,s.jsx)(d.code,{children:"unstaking_period"})]}),(0,s.jsx)(d.td,{children:"The time window in seconds in which a collusion of double-signing event must occur in order for a slashing proposal to be automatically rised"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"28"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_jailed_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.25"})}),(0,s.jsxs)(d.td,{children:["< one third of ",(0,s.jsx)(d.code,{children:"active"})," nodes"]}),(0,s.jsxs)(d.td,{children:["The percentage threshold of consensus nodes that must double-sign within the time window ",(0,s.jsx)(d.code,{children:"slashing_period"})," in order for a slashing proposal to be automatically rised."]})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"29"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_slashing_percentage"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.01"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"0"})," - ",(0,s.jsx)(d.code,{children:"1"})]}),(0,s.jsx)(d.td,{children:"Maximum percentage of slashing that can be applied by governance to a jailed consensus node."})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"30"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_custody_reward"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"200"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"31"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_buffer_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"8192"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"32"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_custody_tx_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"33"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"abstention_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of rank decrease when absent"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"34"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_abstention"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"2"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Max abstention count for councilor"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"35"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Minimum bond amount for the collective to be activated"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"36"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_bonding_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"86400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Allowed time to reach min_collective_bond"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"37"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_collective_outputs"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Limitation on the maximum number of spending pools configuration per collective"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"38"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_collective_claim_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"14400"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"39"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"validator_recovery_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"300000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Amount of KEX to spend for issuing validator recovery token"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"40"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_annual_inflation"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.35"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum % of KEX by which supply can increase over the period of 1 year"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"41"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_title_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum title size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"42"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_description_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1024"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum description size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"43"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum option size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"44"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_poll_option_count"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum possible choices in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"45"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_reference_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"512"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum reference size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"46"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_proposal_checksum_size"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"128"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Maximum checksum size in the proposal"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"47"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"min_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"48"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"max_dapp_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10000000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"49"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_threshold"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"50"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_liquidation_period"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"51"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_bond_duration"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"604800"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"52"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_verifier_bond"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Percentage of LP token supply to be put to be the verifier of the DApp"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"53"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_auto_denounce_time"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"60"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"In seconds, time the DApp leader is allowed to send execute-dapp-tx"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"54"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_mischance_rank_decrease_amount"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"55"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_max_mischance"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"56"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_inactive_rank_decrease_percent"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"10"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"57"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dapp_pool_slippage_default"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"float"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"0.1"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Default"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"58"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_ft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"59"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"minting_nft_fee"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"100_000_000_000_000"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"-"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:"60"}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"autocompound_interval_num_blocks"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uint64"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"17280"})}),(0,s.jsx)(d.td,{}),(0,s.jsx)(d.td,{children:"Block interval for auto-compounding of rewards"})]})]})]}),"\n",(0,s.jsx)(d.h2,{id:"dd165dbb682e4cb9b41ccbecbe8874da",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(d.admonition,{type:"note",children:(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(d.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(d.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(d.em,{children:"documentation for more details."})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$SIGNER"})})," ",(0,s.jsx)(d.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(d.em,{children:(0,s.jsx)(d.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(d.em,{children:"and"})," ",(0,s.jsxs)(d.em,{children:[(0,s.jsx)(d.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(d.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(d.h2,{id:"c7b1bcd0db474f468e03cbbcfdb65094",children:"Transactions"}),(0,s.jsx)(d.p,{children:"There is no transactions apart from the governance ones for this su-module."})]}),(0,s.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(d.h2,{id:"d0f3dff516504a20955bde702560a0c6",children:"Queries"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"network-properties"})}),(0,s.jsx)(d.th,{children:"list all network properties and corresponding value"})]})})}),(0,s.jsx)(d.h4,{id:"21971178f4ac42c0be7dcc5885715064",children:"Query network properties"}),(0,s.jsxs)(d.p,{children:["List all network properties and corresponding values using the ",(0,s.jsx)(d.code,{children:"network-properties"})," command."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid query customgov network-properties $FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(d.h2,{id:"21a4bf9b246540458e513ba56c82c5d5",children:"Governance"}),(0,s.jsx)(d.table,{children:(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:(0,s.jsx)(d.code,{children:"set-network-property"})}),(0,s.jsx)(d.th,{children:"Set a network property\u2019s value"})]})})}),(0,s.jsx)(d.h4,{id:"28134ca7a8f74dc7919c699ec7927cf3",children:"Set a network property"}),(0,s.jsxs)(d.p,{children:["Create a proposal to set a value on a network property using the ",(0,s.jsx)(d.code,{children:"set-network-property"})," command followed by the network property ",(0,s.jsx)(d.code,{children:"$PROPERTY"})," and its respective value ",(0,s.jsx)(d.code,{children:"$VALUE"}),"."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Args"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$PROPERTY"}),": The network property to be updated. All properties are available ",(0,s.jsx)(d.a,{href:"https://github.com/KiraCore/sekai/blob/master/proto/kira/gov/network_properties.proto",children:"here"}),"."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$VALUE"}),": The value to be set for the network property."]}),(0,s.jsx)(d.p,{children:(0,s.jsx)(d.strong,{children:"Flags"})}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$TITLE"}),": The title of the proposal."]}),(0,s.jsxs)(d.p,{children:[(0,s.jsx)(d.code,{children:"$DESCRIPTION"}),": The description of the proposal, it can be a URL, some text, etc."]}),(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-bash",children:"sekaid tx customgov proposal set-network-property \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$PROPERTY $VALUE\n"})})]})]})]})}function j(e={}){const{wrapper:d}={...(0,r.a)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}},5162:(e,d,n)=>{n.d(d,{Z:()=>i});n(7294);var s=n(6905);const r={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:d,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,i),hidden:n,children:d})}},4866:(e,d,n)=>{n.d(d,{Z:()=>k});var s=n(7294),r=n(6905),t=n(2466),i=n(6550),c=n(469),l=n(1980),o=n(7392),h=n(12);function a(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:d}=e;return!!d&&"object"==typeof d&&"value"in d}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:d,children:n}=e;return(0,s.useMemo)((()=>{const e=d??function(e){return a(e).map((e=>{let{props:{value:d,label:n,attributes:s,default:r}}=e;return{value:d,label:n,attributes:s,default:r}}))}(n);return function(e){const d=(0,o.l)(e,((e,d)=>e.value===d.value));if(d.length>0)throw new Error(`Docusaurus error: Duplicate values "${d.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[d,n])}function j(e){let{value:d,tabValues:n}=e;return n.some((e=>e.value===d))}function u(e){let{queryString:d=!1,groupId:n}=e;const r=(0,i.k6)(),t=function(e){let{queryString:d=!1,groupId:n}=e;if("string"==typeof d)return d;if(!1===d)return null;if(!0===d&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:d,groupId:n});return[(0,l._X)(t),(0,s.useCallback)((e=>{if(!t)return;const d=new URLSearchParams(r.location.search);d.set(t,e),r.replace({...r.location,search:d.toString()})}),[t,r])]}function p(e){const{defaultValue:d,queryString:n=!1,groupId:r}=e,t=x(e),[i,l]=(0,s.useState)((()=>function(e){let{defaultValue:d,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(d){if(!j({value:d,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${d}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return d}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:d,tabValues:t}))),[o,a]=u({queryString:n,groupId:r}),[p,m]=function(e){let{groupId:d}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(d),[r,t]=(0,h.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:r}),b=(()=>{const e=o??p;return j({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!j({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),m(e)}),[a,m,t]),tabValues:t}}var m=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(5893);function _(e){let{className:d,block:n,selectedValue:s,selectValue:i,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),h=e=>{const d=e.currentTarget,n=l.indexOf(d),r=c[n].value;r!==s&&(o(d),i(r))},a=e=>{let d=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;d=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;d=l[n]??l[l.length-1];break}}d?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},d),children:c.map((e=>{let{value:d,label:n,attributes:t}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:s===d?0:-1,"aria-selected":s===d,ref:e=>l.push(e),onKeyDown:a,onClick:h,...t,className:(0,r.Z)("tabs__item",b.tabItem,t?.className,{"tabs__item--active":s===d}),children:n??d},d)}))})}function v(e){let{lazy:d,children:n,selectedValue:r}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(d){const e=t.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:t.map(((e,d)=>(0,s.cloneElement)(e,{key:d,hidden:e.props.value!==r})))})}function g(e){const d=p(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",b.tabList),children:[(0,f.jsx)(_,{...e,...d}),(0,f.jsx)(v,{...e,...d})]})}function k(e){const d=(0,m.Z)();return(0,f.jsx)(g,{...e,children:a(e.children)},String(d))}},1151:(e,d,n)=>{n.d(d,{Z:()=>c,a:()=>i});var s=n(7294);const r={},t=s.createContext(r);function i(e){const d=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d1ac71f9.8c94507a.js b/assets/js/d1ac71f9.8c94507a.js new file mode 100644 index 0000000..b0e4011 --- /dev/null +++ b/assets/js/d1ac71f9.8c94507a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1179],{1982:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},i=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/index",title:"Slashing",description:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/4672bb94-ed2b-4e45-9d33-af999825c193",permalink:"/docs.kira.network/docs/4672bb94-ed2b-4e45-9d33-af999825c193",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},sidebar:"defaultSidebar",previous:{title:"Delegators",permalink:"/docs.kira.network/docs/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},next:{title:"Jailing & slashing",permalink:"/docs.kira.network/docs/d6fee8b3-1948-493e-bbdd-796bcc996c2b"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/slashing",children:(0,a.jsx)(t.code,{children:"x/slashing"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[u,d]=p({queryString:n,groupId:r}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),m=(()=>{const e=u??h;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,s]),tabValues:s}}var g=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(u(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",m.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,v.jsx)(k,{...e,...t}),(0,v.jsx)(y,{...e,...t})]})}function w(e){const t=(0,g.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d1ac71f9.9e7428d7.js b/assets/js/d1ac71f9.9e7428d7.js deleted file mode 100644 index d87b532..0000000 --- a/assets/js/d1ac71f9.9e7428d7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1179],{1982:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},i=void 0,o={id:"Stack/SEKAI--Backend/Modules/Slashing/index",title:"Slashing",description:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/4672bb94-ed2b-4e45-9d33-af999825c193",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Slashing",sidebar_position:1,slug:"/4672bb94-ed2b-4e45-9d33-af999825c193"},sidebar:"defaultSidebar",previous:{title:"Delegators",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},next:{title:"Jailing & slashing",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b"}},l={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"A distinctive slashing system prioritizes safeguarding against unintentional faults, with no automatic penalties for double-signing. An adaptive ranking system encourages high participation levels across a diverse, globally distributed node network, adjusting to a range of varying conditions."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/slashing",children:(0,a.jsx)(t.code,{children:"x/slashing"})})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),i=n(6550),o=n(469),l=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=b(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[u,d]=p({queryString:n,groupId:r}),[h,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),m=(()=>{const e=u??h;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),g(e)}),[d,g,s]),tabValues:s}}var g=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function k(e){let{className:t,block:n,selectedValue:a,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),r=o[n].value;r!==a&&(u(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",m.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function x(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,v.jsx)(k,{...e,...t}),(0,v.jsx)(y,{...e,...t})]})}function w(e){const t=(0,g.Z)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var a=n(7294);const r={},s=a.createContext(r);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d1dee7b5.f968c62c.js b/assets/js/d1dee7b5.f968c62c.js deleted file mode 100644 index 820c914..0000000 --- a/assets/js/d1dee7b5.f968c62c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[588],{7686:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Governance/index",title:"Governance",description:"x/gov",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",permalink:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f"},next:{title:"Proposals & governance structure",permalink:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05"}},l={},i=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/gov/",children:(0,n.jsx)(t.code,{children:"x/gov"})})}),"\n",(0,n.jsx)(t.p,{children:"A flexible and adaptable governance structure that allows for a diverse range of participants, a.k.a Councilors, to contribute to KIRA decision-making processes. Unique features include a multi-layered approach to roles and permissions and an Identity Registrar allowing users to verify their own or others' profile claims on-chain, fostering Sybil resistance within the network."})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??h;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d378fb37.26663f14.js b/assets/js/d378fb37.26663f14.js deleted file mode 100644 index 7bb81d7..0000000 --- a/assets/js/d378fb37.26663f14.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3203],{4722:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>x,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var r=n(5893),a=n(1151),t=n(4866),i=n(5162);const l={title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},o=void 0,c={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar",title:"Token Aliases Registrar",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49",permalink:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Token Aliases Registrar",sidebar_position:3,slug:"/e163e1d7-f16e-4c0d-945c-db2efc13ea49"},sidebar:"defaultSidebar",previous:{title:"Token Rates Registrar",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24"},next:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5"}},d={},h=[{value:"Concept",id:"84215f46b44147a1ba6665006b16c6cb",level:2},{value:"Parameters",id:"f93deb668b36407dbebb40eb08c034ad",level:2},{value:"Cli syntax & examples",id:"0c07ea2abed84b64a7d3e8dffb42147e",level:2},{value:"Transactions",id:"7e749ea08fa54f69ae420982dd493a8c",level:2},{value:"Upsert token alias with sudo permission",id:"f79ed1469a804d07a5917982c1a7aef3",level:4},{value:"Queries",id:"283adf4202e046ff93eb8328b8f8676b",level:2},{value:"List all existing aliases",id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",level:4},{value:"Query a token alias using its symbol",id:"edaf0cb0e0e24dcc8f69459f4b986ef1",level:4},{value:"Query a token alias using its denom",id:"3122601581b042d1953a39257f5ba64b",level:4},{value:"Governance",id:"a7b028b5f5b143079a28c52580f96808",level:2},{value:"Proposal to upsert token alias",id:"c4185c208f2c4b7dacb8eafcaf71b79b",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"84215f46b44147a1ba6665006b16c6cb",children:"Concept"}),"\n",(0,r.jsx)(s.p,{children:"The Token Aliases enables the creation of friendly on-chain metadata for various cryptocurrencies on the KIRA network. The network governance is responsible for associating metadata with tokens, ensuring the integrity of this information for use in frontend applications. This makes it easier to identify and track different cryptocurrencies on the network."}),"\n",(0,r.jsx)(s.h2,{id:"f93deb668b36407dbebb40eb08c034ad",children:"Parameters"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["Removal of a token from the token aliases registry will automatically disable it by setting its ",(0,r.jsx)(s.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," properties ",(0,r.jsx)(s.code,{children:"stake_token"})," and ",(0,r.jsx)(s.code,{children:"fee_token"})," properties to ",(0,r.jsx)(s.code,{children:"false"}),"."]})}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"NAME"})}),(0,r.jsx)(s.th,{children:(0,r.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"symbol"})}),(0,r.jsxs)(s.td,{children:['The currency code or otherwise short abbreviation of a "single" token in its default denomination. For example: ',(0,r.jsx)(s.code,{children:"KEX"}),", ",(0,r.jsx)(s.code,{children:"ETH"}),", ",(0,r.jsx)(s.code,{children:"BTC"}),", ",(0,r.jsx)(s.code,{children:"DOT"}),", ",(0,r.jsx)(s.code,{children:"ATOM"})," ...."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"name"})}),(0,r.jsxs)(s.td,{children:["Full, explicit name of the currency, for example: ",(0,r.jsx)(s.code,{children:"Bitcoin"}),", ",(0,r.jsx)(s.code,{children:"Ethereum"}),"..."]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"icon"})}),(0,r.jsxs)(s.td,{children:["URL to\xa0",(0,r.jsx)(s.strong,{children:".SVG"}),"\xa0image (256kB max) representing currency or network logo"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"decimals"})}),(0,r.jsx)(s.td,{children:"Number of currency decimals in the base of 10. For example value 3 would imply that the smallest unit of currency in it's default denomination would be 0.001"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"denoms"})}),(0,r.jsxs)(s.td,{children:["Array of possible denomination names of the token, such as ",(0,r.jsx)(s.code,{children:"satoshi"}),", ",(0,r.jsx)(s.code,{children:"cent"})," ..."]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"0c07ea2abed84b64a7d3e8dffb42147e",children:"Cli syntax & examples"}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,r.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,r.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,r.jsx)(s.em,{children:"documentation for more details."})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$SIGNER"})})," ",(0,r.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,r.jsx)(s.em,{children:(0,r.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,r.jsx)(s.em,{children:"and"})," ",(0,r.jsxs)(s.em,{children:[(0,r.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,r.jsx)(s.em,{children:"section"})]})}),"\n",(0,r.jsxs)(t.Z,{children:[(0,r.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,r.jsx)(s.h2,{id:"7e749ea08fa54f69ae420982dd493a8c",children:"Transactions"}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or modify token aliases with sudo permission."})]})})}),(0,r.jsx)(s.h4,{id:"f79ed1469a804d07a5917982c1a7aef3",children:"Upsert token alias with sudo permission"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"upsert-alias"})," CLI command allows accounts with sudo permission to create or modify token aliases without a proposal."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--symbol=$SYM --name=$NAME --icon=$ICON --decimals=$DEC --denoms=$DENOM\n"})})]}),(0,r.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,r.jsx)(s.h2,{id:"283adf4202e046ff93eb8328b8f8676b",children:"Queries"}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"all-aliases"})}),(0,r.jsx)(s.th,{children:"List all existing token aliases."})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"alias"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its symbol."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"aliases-by-denom"})}),(0,r.jsx)(s.td,{children:"Query a token alias using its denomination."})]})]})]}),(0,r.jsx)(s.h4,{id:"a7e8ae75c4eb4e8fb52f9d344f6b95c7",children:"List all existing aliases"}),(0,r.jsxs)(s.p,{children:["Use the ",(0,r.jsx)(s.code,{children:"all-aliases"})," command to retrieve all token aliases."]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens all-aliases $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"edaf0cb0e0e24dcc8f69459f4b986ef1",children:"Query a token alias using its symbol"}),(0,r.jsxs)(s.p,{children:["To query a token alias using its symbol, use the ",(0,r.jsx)(s.code,{children:"alias"})," command."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens alias $SYM $FLAGS_QR | jq\n"})}),(0,r.jsx)(s.h4,{id:"3122601581b042d1953a39257f5ba64b",children:"Query a token alias using its denom"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"aliases-by-denom"})," command allows querying a token alias using its denomination."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Args"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denomination of the token whose alias is to be queried."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid query tokens aliases-by-denom $DENOM $FLAGS_QR | jq\n"})})]}),(0,r.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,r.jsx)(s.h2,{id:"a7b028b5f5b143079a28c52580f96808",children:"Governance"}),(0,r.jsxs)(s.p,{children:["In order to create a proposal to add or modify aliases, an account must possess permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," or ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," . Similarly, for voting on any alias proposals, an account must have permission ",(0,r.jsx)(s.strong,{children:"[Problem Internal Link]"})," ."]}),(0,r.jsx)(s.table,{children:(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})}),(0,r.jsx)(s.th,{children:"Create or update a token alias through a proposal process."})]})})}),(0,r.jsx)(s.h4,{id:"c4185c208f2c4b7dacb8eafcaf71b79b",children:"Proposal to upsert token alias"}),(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"proposal-upsert-alias"})," CLI command is used to create or update a token alias through a proposal process."]}),(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Flags"})}),(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$SYM"}),": The symbol of the token (e.g., ",(0,r.jsx)(s.code,{children:"BTC"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$NAME"}),": The name of the token alias (e.g., ",(0,r.jsx)(s.code,{children:"Bitcoin"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$ICON"}),": The icon URL of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DEC"}),": The number of decimals of the token."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"$DENOM"}),": The denom values of the token (e.g., ",(0,r.jsx)(s.code,{children:"satoshi"}),")."]}),"\n"]}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"sekaid tx tokens proposal-upsert-alias \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--symbol=$SYM --name=$NAME --icon=$ICON \\\n--decimals=$DEC --denoms=$DENOM\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,i),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>y});var r=n(7294),a=n(6905),t=n(2466),i=n(6550),l=n(469),o=n(1980),c=n(7392),d=n(12);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:a}}=e;return{value:s,label:n,attributes:r,default:a}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function b(e){let{queryString:s=!1,groupId:n}=e;const a=(0,i.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(a.location.search);s.set(t,e),a.replace({...a.location,search:s.toString()})}),[t,a])]}function f(e){const{defaultValue:s,queryString:n=!1,groupId:a}=e,t=u(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[c,h]=b({queryString:n,groupId:a}),[f,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[a,t]=(0,d.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:a}),m=(()=>{const e=c??f;return x({value:e,tabValues:t})?e:null})();(0,l.Z)((()=>{m&&o(m)}),[m]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),j(e)}),[h,j,t]),tabValues:t}}var j=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=n(5893);function k(e){let{className:s,block:n,selectedValue:r,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const s=e.currentTarget,n=o.indexOf(s),a=l[n].value;a!==r&&(c(s),i(a))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},s),children:l.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>o.push(e),onKeyDown:h,onClick:d,...t,className:(0,a.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function g(e){let{lazy:s,children:n,selectedValue:a}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function v(e){const s=f(e);return(0,p.jsxs)("div",{className:(0,a.Z)("tabs-container",m.tabList),children:[(0,p.jsx)(k,{...e,...s}),(0,p.jsx)(g,{...e,...s})]})}function y(e){const s=(0,j.Z)();return(0,p.jsx)(v,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>i});var r=n(7294);const a={},t=r.createContext(a);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d3ceadd4.9f9d3593.js b/assets/js/d3ceadd4.9f9d3593.js new file mode 100644 index 0000000..6632d3e --- /dev/null +++ b/assets/js/d3ceadd4.9f9d3593.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6617],{1183:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},s=void 0,l={id:"Stack/TORII--Bridge",title:"TORII | Bridge",description:"Torii",source:"@site/tabs/Docs/Stack/TORII--Bridge.mdx",sourceDirName:"Stack",slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9",permalink:"/docs.kira.network/docs/d5d8036d-f978-4053-b7e8-57d9244c09e9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/docs/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},next:{title:"Community",permalink:"/docs.kira.network/docs/6196d806-d61d-4013-b317-d9f2f8f4008f"}},u={},i=[{value:"Torii",id:"396dda4a15df42768188046bcf26c324",level:2}];function c(e){const t={em:"em",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"396dda4a15df42768188046bcf26c324",children:"Torii"}),"\n",(0,n.jsx)(t.p,{children:"Torii (\u9ce5\u5c45) - is a KIRA Network bridge application. It enables users to perform cross-chain transfers between the KIRA blockchain and Ethereum, as well as other compatible networks, using Threshold Signature Schemes."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Documentation coming soon\u2026"})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=l[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function I(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d3ceadd4.c3787ba9.js b/assets/js/d3ceadd4.c3787ba9.js deleted file mode 100644 index 24b676a..0000000 --- a/assets/js/d3ceadd4.c3787ba9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6617],{1183:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},s=void 0,l={id:"Stack/TORII--Bridge",title:"TORII | Bridge",description:"Torii",source:"@site/tabs/Docs/Stack/TORII--Bridge.mdx",sourceDirName:"Stack",slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9",permalink:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"TORII | Bridge",sidebar_position:3,slug:"/d5d8036d-f978-4053-b7e8-57d9244c09e9"},sidebar:"defaultSidebar",previous:{title:"Installation",permalink:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051"},next:{title:"Community",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f"}},u={},i=[{value:"Torii",id:"396dda4a15df42768188046bcf26c324",level:2}];function c(e){const t={em:"em",h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"396dda4a15df42768188046bcf26c324",children:"Torii"}),"\n",(0,n.jsx)(t.p,{children:"Torii (\u9ce5\u5c45) - is a KIRA Network bridge application. It enables users to perform cross-chain transfers between the KIRA blockchain and Ethereum, as well as other compatible networks, using Threshold Signature Schemes."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Documentation coming soon\u2026"})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),l=r(469),u=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function b(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=f(e),[s,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&u(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:l}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=l[r].value;a!==n&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:l.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function I(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d4607a0f.0033e88e.js b/assets/js/d4607a0f.0033e88e.js deleted file mode 100644 index 9683bcf..0000000 --- a/assets/js/d4607a0f.0033e88e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7064],{657:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},o=void 0,u={id:"Stack/SEKAI--Backend/Modules/Fee-processing/index",title:"Fee processing",description:"x/feeprocessing",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:13,frontMatter:{title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"},next:{title:"Evidence",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/feeprocessing",children:(0,n.jsx)(t.code,{children:"x/feeprocessing"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),s=r(2466),o=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:r}=e;const a=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=f(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=b({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:o,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>o});var n=r(7294);const a={},s=n.createContext(a);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d4607a0f.cca37b1c.js b/assets/js/d4607a0f.cca37b1c.js new file mode 100644 index 0000000..d4b4c90 --- /dev/null +++ b/assets/js/d4607a0f.cca37b1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7064],{657:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},o=void 0,u={id:"Stack/SEKAI--Backend/Modules/Fee-processing/index",title:"Fee processing",description:"x/feeprocessing",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Fee-processing",slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84",permalink:"/docs.kira.network/docs/d820877a-9fe7-424f-8866-8e822bf9ba84",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:13,frontMatter:{title:"Fee processing",sidebar_position:13,slug:"/d820877a-9fe7-424f-8866-8e822bf9ba84"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/docs/184c11ed-4849-4ec5-acd0-f795b7abf467"},next:{title:"Evidence",permalink:"/docs.kira.network/docs/6a318dbd-2d44-4f1f-9729-5e608286289f"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/feeprocessing",children:(0,n.jsx)(t.code,{children:"x/feeprocessing"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>o});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,o),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(7294),a=r(6905),s=r(2466),o=r(6550),u=r(469),l=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:r}=e;const a=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=f(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[i,d]=b({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),v=(()=>{const e=i??h;return p({value:e,tabValues:s})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:o,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>o});var n=r(7294);const a={},s=n.createContext(a);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d8fd502b.382e0397.js b/assets/js/d8fd502b.382e0397.js new file mode 100644 index 0000000..79bdf96 --- /dev/null +++ b/assets/js/d8fd502b.382e0397.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5961],{6358:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>c});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Recovery/index",title:"Recovery",description:"x/recovery",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Recovery/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Recovery",slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce",permalink:"/docs.kira.network/docs/0b33153c-9b3e-410f-abd7-2877ccb870ce",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},sidebar:"defaultSidebar",previous:{title:"Token Basketing Module",permalink:"/docs.kira.network/docs/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},next:{title:"Upgrade",permalink:"/docs.kira.network/docs/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/recovery",children:(0,n.jsx)(t.code,{children:"x/recovery"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),o=r(2466),s=r(6550),u=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=r(5893);function g(e){let{className:t,block:r,selectedValue:n,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),a=u[r].value;a!==n&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,k.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var n=r(7294);const a={},o=n.createContext(a);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d8fd502b.784c3170.js b/assets/js/d8fd502b.784c3170.js deleted file mode 100644 index f14e2b4..0000000 --- a/assets/js/d8fd502b.784c3170.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5961],{6358:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Recovery/index",title:"Recovery",description:"x/recovery",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Recovery/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Recovery",slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce",permalink:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{title:"Recovery",sidebar_position:11,slug:"/0b33153c-9b3e-410f-abd7-2877ccb870ce"},sidebar:"defaultSidebar",previous:{title:"Token Basketing Module",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"},next:{title:"Upgrade",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"}},l={},c=[];function i(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/recovery",children:(0,n.jsx)(t.code,{children:"x/recovery"})})}),"\n",(0,n.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>u});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function u(e){let{children:t,hidden:r,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,u),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),o=r(2466),u=r(6550),s=r(469),l=r(1980),c=r(7392),i=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[u,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:r,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=r(5893);function g(e){let{className:t,block:r,selectedValue:n,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,r=l.indexOf(t),a=s[r].value;a!==n&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(y,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,k.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>u});var n=r(7294);const a={},o=n.createContext(a);function u(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dab0f481.08440927.js b/assets/js/dab0f481.08440927.js deleted file mode 100644 index 80a00ff..0000000 --- a/assets/js/dab0f481.08440927.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1519],{2538:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>l});var a=r(5893),n=r(1151);r(4866),r(5162);const o={title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Custody/index",title:"Custody",description:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Custody/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Custody",slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00",permalink:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Custody",sidebar_position:5,slug:"/0e1ccab2-5425-473e-be93-5b4a87de5d00"},sidebar:"defaultSidebar",previous:{title:"Fees and staking rewards distribution",permalink:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba"},next:{title:"Spending Pool",permalink:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf"}},i={},l=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Securing digital assets is no longer a luxury, but a necessity. To answer this need, our Custody Module offers a collaborative custody model, secret-protected transfers, and controlled withdrawals via whitelisting. This approach provides users with enhanced protection, tailored to their specific needs"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/custody",children:(0,a.jsx)(t.code,{children:"x/custody"})})})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>s});r(7294);var a=r(6905);const n={tabItem:"tabItem_Ymn6"};var o=r(5893);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(n.tabItem,s),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var a=r(7294),n=r(6905),o=r(2466),s=r(6550),u=r(469),i=r(1980),l=r(7392),c=r(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:r,groupId:n}),[h,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),v=(()=>{const e=l??h;return p({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function y(e){let{className:t,block:r,selectedValue:a,selectValue:s,tabValues:u}=e;const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=i.indexOf(t),n=u[r].value;n!==a&&(l(t),s(n))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;t=i[r]??i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;t=i[r]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,n.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function k(e){let{lazy:t,children:r,selectedValue:n}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function w(e){const t=h(e);return(0,g.jsxs)("div",{className:(0,n.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(k,{...e,...t})]})}function x(e){const t=(0,m.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>s});var a=r(7294);const n={},o=a.createContext(n);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dc0c660c.f08e7a0e.js b/assets/js/dc0c660c.f08e7a0e.js deleted file mode 100644 index a102b1a..0000000 --- a/assets/js/dc0c660c.f08e7a0e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9541],{5971:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=r(5893),s=r(1151),d=r(4866),i=r(5162);const a={title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module",title:"Upgrade Module",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Upgrade",slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",permalink:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Upgrade Module",sidebar_position:2,slug:"/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478"},sidebar:"defaultSidebar",previous:{title:"Upgrade",permalink:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722"},next:{title:"Fee processing",permalink:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467"}},o={},h=[{value:"Concept",id:"6ba6105bbb57434085533c9c0e0497e0",level:3},{value:"Parameters",id:"3e04b070eb15440fb32be7705a85fbdc",level:3},{value:"Upgrade configuration examples",id:"26a1fdae5da44a1087d2e19c99f98566",level:4},{value:"Upgrade plan example",id:"0cff5a2dae1b4f039c904237df25449e",level:4},{value:"Upgrade process",id:"8576cd2745b74f64bd2df866b9ebc5cf",level:3},{value:"Manual hard fork",id:"e101effdd1aa446eac7633d2a4475c77",level:4},{value:"Cli syntax & examples",id:"e33d542c95414e01b67b21abf61aa961",level:2},{value:"Transactions",id:"d5522dd8578142d582074acef31f2b66",level:2},{value:"Queries",id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",level:2},{value:"Display the current plan",id:"75bbe2df40cf4062b80245ade1980630",level:4},{value:"Display the next plan",id:"d84065dd1cd5451f84968808880db451",level:4},{value:"Governance",id:"a2174efb55d24eb48f3b046437db2148",level:2},{value:"Set network upgrade plan proposal",id:"776b14b4fa314e0ca4387826d49a9346",level:4},{value:"Cancel network upgrade plan proposal",id:"6afe9d8499b640ad960d44e4e210bebd",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"6ba6105bbb57434085533c9c0e0497e0",children:"Concept"}),"\n",(0,t.jsx)(n.p,{children:'The Upgrade Module plays a crucial role in ensuring seamless transitions between different versions of the KIRA Network while preserving the current chain state. KIRA\'s governance is responsible for managing the upgrade process with permissions to propose and vote on the "Upgrade Plan". The Upgrade Plan is a set of JSON-formatted instructions hosted on-chain that details how and when validators should proceed with the upgrade. Additionally, the Upgrade Module offers a unique feature that informs new network participants about the necessary software resources to join the network, thereby ensuring the process of acquiring essential references and checksums is entirely trustless.'}),"\n",(0,t.jsx)(n.p,{children:"Upgrades can occur as either Hard Forks or Soft Forks. Hard Forks are executed when the new blockchain application is incompatible with the current chain state storage, requiring launching from a new genesis with a new chain ID to prevent double signing. On the other hand, Soft Forks are executed when no impact on the chain-state is expected, allowing the network to continue with the same chain ID without exporting and generating a new genesis file."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),"\n",(0,t.jsx)(n.h3,{id:"3e04b070eb15440fb32be7705a85fbdc",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Parameter"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Type"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Example"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Description"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118"})}),(0,t.jsx)(n.td,{children:"Name of the plan"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max_enrolment_duration"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"90"})}),(0,t.jsx)(n.td,{children:"Expected duration of upgrade in seconds"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"new_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-9"})}),(0,t.jsx)(n.td,{children:"Identifier of the new chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"old_chain_id"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"testnet-8"})}),(0,t.jsx)(n.td,{children:"Identifier of the current chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposalID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"668"})}),(0,t.jsx)(n.td,{children:"ID of the update proposal. It is set automatically."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"reboot_required"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsx)(n.td,{children:"Defines if nodes require OS reboot"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"resources"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"array"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:'{"version": "testnet-9","url":https://github.com/KiraCore/kira","id": "kira"},'})}),(0,t.jsxs)(n.td,{children:["A list of resources to be used in the pipeline, such as images or external dependencies. Includes: ",(0,t.jsx)(n.code,{children:"url"}),", ",(0,t.jsx)(n.code,{children:"checksum"}),", ",(0,t.jsx)(n.code,{children:"version"}),", ",(0,t.jsx)(n.code,{children:"id"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rollback_checksum"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade-118-roll"})}),(0,t.jsx)(n.td,{children:"Checksum to use when rolling back the chain"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"skip_handler"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if ",(0,t.jsx)(n.code,{children:"sekaid"})," on-chain handlers of the upgrade process should be skipped. If ",(0,t.jsx)(n.code,{children:"true"}),", ",(0,t.jsx)(n.code,{children:"sekaid"})," version changes will be omitted and the network will continue running. If ",(0,t.jsx)(n.code,{children:"false"}),", the network will halt at the ",(0,t.jsx)(n.code,{children:"upgrade_time"})," and remain stopped until ",(0,t.jsx)(n.code,{children:"sekaid"})," binary is upgraded"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"instate_upgrade"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["Defines if database state should be deleted or persisted. If set to ",(0,t.jsx)(n.code,{children:"true"})," then a Hard Fork will be executed and the ",(0,t.jsx)(n.code,{children:"new_chain_id"})," and ",(0,t.jsx)(n.code,{children:"old_chain_id"})," must be different. If set to ",(0,t.jsx)(n.code,{children:"false"})," , a Soft Fork will be executed and the database does not have to be erased."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"upgrade_time"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"integer"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1641573000"})}),(0,t.jsx)(n.td,{children:"Unix timestamp of the exact time the update should be executed"})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"26a1fdae5da44a1087d2e19c99f98566",children:"Upgrade configuration examples"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Hard Fork with no change made in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries such as INTERX or infrastructure manager, and wiping old database state (e.g. to save disk space)","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"true"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Hard Fork with changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade network in the case where old database state is incompatible with new release","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - ",(0,t.jsx)(n.code,{children:"false"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be different then ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Soft Fork without changes in ",(0,t.jsx)(n.code,{children:"sekaid"})," binary - used to upgrade other binaries, but preserve old database state","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"instate_upgrade"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"skip_handler"})," - TBD"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"new_chain_id"})," - MUST be the same as ",(0,t.jsx)(n.code,{children:"old_chain_id"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"0cff5a2dae1b4f039c904237df25449e",children:"Upgrade plan example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n\t"plan": {\n\t\t"max_enrolment_duration": "90",\n\t\t"name": "upgrade-118",\n\t\t"new_chain_id": "testnet-9",\n\t\t"old_chain_id": "testnet-8",\n\t\t"proposalID": "668",\n\t\t"reboot_required": true,\n\t\t"resources": [\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/kira",\n\t\t\t"id": "kira"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "sekai"\n\t\t\t},\n\t\t\t{\n\t\t\t"checkout": "testnet-9",\n\t\t\t"git": "https://github.com/KiraCore/sekai",\n\t\t\t"id": "interx"\n\t\t\t}\n\t\t],\n\t\t"rollback_checksum": "upgrade-118-roll",\n\t\t"skip_handler": true,\n\t\t"upgrade_time": "1641573000"\n\t\t}\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"8576cd2745b74f64bd2df866b9ebc5cf",children:"Upgrade process"}),"\n",(0,t.jsx)(n.p,{children:"The KIRA network can be upgraded through an off-chain mechanism executed by the daemon service of the KIRA Manager (KM). However, it is not mandatory to use KM to upgrade the network, and node operators can set up their own dedicated CD/CI pipeline tools, such as Jenkins or Teamcity."}),"\n",(0,t.jsx)(n.p,{children:"To keep up-to-date with upcoming upgrades, operators can obtain information from two INTERX endpoints:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/current_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/current_plan"})})}),": The \u201ccurrent\u201d plan contains information and resources regarding the current release."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://testnet-rpc.kira.network/api/kira/upgrade/next_plan",children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"/:11000/api/kira/upgrade/next_plan"})})}),": The \u201cnext\u201d plan contains information and resources regarding the upcoming release. Nodes can also obtain resource references, such as GitHub links and branches, specified in the \u201ccurrent\u201d plan endpoint of a trusted node while joining the network for the very first time."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"e101effdd1aa446eac7633d2a4475c77",children:"Manual hard fork"}),"\n",(0,t.jsxs)(n.p,{children:["If a new genesis file is required for a hard fork, and KM is not used, node operators must create it by first exporting genesis at the block height where the network stopped (node daemon should be shut down), and then passing it through a dedicated ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. It should be noted that the ",(0,t.jsx)(n.code,{children:"sekaid"})," application must be upgraded prior to executing the ",(0,t.jsx)(n.code,{children:"new-genesis-from-exported"})," command. Otherwise, it might not be able to interpret and convert the old genesis to the new."]}),"\n",(0,t.jsx)(n.p,{children:"Node operators can execute the following steps to manually hard fork the network:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'SEKAI="/home/go/src/github.com/kiracore/sekai"\nEXPORTED_GENESIS="/tmp/exported-genesis.json"\nNEW_GENESIS="/tmp/new-genesis.json"\n\n# Cleanup old files\nrm -fv $EXPORTED_GENESIS $NEW_GENESIS\n\n# Ensure sekaid process is killed gracefully\npkill -15 sekaid || echoWarn "WARNING: Failed to kill sekaid, process might already be dead"\n\n# Export current genesis\nsekaid export --home=$SEKAID_HOME > $EXPORTED_GENESIS\n\n# Update repository\ncd $SEKAI\ngit fetch --all\ngit checkout $BRANCH_TO_CHECKOUT\nmake install\n\n# Convert exported genesis to a new compatible version\nsekaid new-genesis-from-exported $EXPORTED_GENESIS $NEW_GENESIS\n\n'})}),"\n",(0,t.jsx)(n.h2,{id:"e33d542c95414e01b67b21abf61aa961",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(n.em,{children:"documentation for more details."})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$SIGNER"})})," ",(0,t.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(n.em,{children:(0,t.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(n.em,{children:"and"})," ",(0,t.jsxs)(n.em,{children:[(0,t.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(n.em,{children:"section"})]})}),"\n",(0,t.jsxs)(d.Z,{children:[(0,t.jsxs)(i.Z,{value:"transactions",label:"Transactions",children:[(0,t.jsx)(n.h2,{id:"d5522dd8578142d582074acef31f2b66",children:"Transactions"}),(0,t.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,t.jsxs)(i.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(n.h2,{id:"4e0e5ff7b7394ac5ba2ce2b33bd0550c",children:"Queries"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"current-plan"})}),(0,t.jsx)(n.th,{children:"Query the current network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"next-plan"})}),(0,t.jsx)(n.td,{children:"Query the next network upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"75bbe2df40cf4062b80245ade1980630",children:"Display the current plan"}),(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.code,{children:"current-plan"})," command to retrieve the current network upgrade plan."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade current-plan $FLAGS_QR | jq\n"})}),(0,t.jsx)(n.h4,{id:"d84065dd1cd5451f84968808880db451",children:"Display the next plan"}),(0,t.jsxs)(n.p,{children:["To query the next network upgrade plan, use the ",(0,t.jsx)(n.code,{children:"next-plan"})," command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid query upgrade next-plan $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(i.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(n.h2,{id:"a2174efb55d24eb48f3b046437db2148",children:"Governance"}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:(0,t.jsx)(n.code,{children:"proposal-set-plan"})}),(0,t.jsx)(n.th,{children:"Create a proposal to set a network upgrade plan."})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"proposal-cancel-plan"})}),(0,t.jsx)(n.td,{children:"Create a proposal to cancel an existing upgrade plan."})]})})]}),(0,t.jsx)(n.h4,{id:"776b14b4fa314e0ca4387826d49a9346",children:"Set network upgrade plan proposal"}),(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If a consensus node casts a negative vote on an upgrade proposal that is later approved, it will automatically be ",(0,t.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,t.jsx)(n.code,{children:"paused"})})," at the beginning of the upgrade."]})}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-set-plan"}),", is used to create a proposal to set an upgrade plan for the network. If voted, the upgrade plan is saved and will be overwritten by any subsequent proposals voted before the ",(0,t.jsx)(n.code,{children:"$MIN_UPGRADE_TIME"}),". The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$UPGRADEMEMO"}),": Upgrade proposal memo."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": Upgrade name."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$INSTATEUPGRADE"}),": Boolean indicating instate upgrade (true for hard fork with new genesis file/soft fork)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$SKIPHANDLER"}),": Boolean indicating if handler should be skipped (true if change in sekaid version)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$OLDCHAINID"}),": Old chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NEWCHAINID"}),": New chain id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MINUPGRADETIME"}),": Unix timestamp of the exact time the update should be executed."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$RESOURCES"}),": List of resources to be used in the pipeline."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$ROLLBACKMEMO"}),": Checksum to use when rolling back the chain."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$MAXENROLLMENTDURATION"}),": Expected duration of upgrade in seconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$REBOOTREQUIRED"}),": Node reboot requirement (true if required)."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-set-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME --resources=$RESOURCES \\\n--min-upgrade-time=$MIN_UPGRADE_TIME \\\n--old-chain-id=$OLD_CHAIN_ID \\\n--new-chain-id=$NEW_CHAIN_ID \\\n--rollback-memo=$ROLLBACK_MEMO \\\n--max-enrollment-duration=$MAX_ENROLLMENT_DURATION \\\n--upgrade-memo=$UPGRADE_MEMO \\\n--instate-upgrade=$INSTATE_UPGRADE \\\n--reboot-required=$REBOOT_REQUIRED \\\n--skip-handler=$SKIP_HANDLER\n"})}),(0,t.jsx)(n.h4,{id:"6afe9d8499b640ad960d44e4e210bebd",children:"Cancel network upgrade plan proposal"}),(0,t.jsxs)(n.p,{children:["The CLI command, ",(0,t.jsx)(n.code,{children:"proposal-cancel-plan"}),", is used to create a proposal to cancel an existing upgrade plan for the network. This proposal is not necessary if the goal is the replace an upgrade plan as the ",(0,t.jsx)(n.code,{children:"proposal-set-plan"})," command overwrite any existing upgrade plan. The command accepts the following flags:"]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Flags"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$TITLE"}),": The title of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$DESCRIPTION"}),": The description of the proposal."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"$NAME"}),": The name of the upgrade plan to be cancelled."]}),"\n"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"sekaid tx customgov proposal-cancel-plan \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--name=$NAME\n"})})]})]}),"\n",(0,t.jsx)(n.hr,{})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,n,r)=>{r.d(n,{Z:()=>i});r(7294);var t=r(6905);const s={tabItem:"tabItem_Ymn6"};var d=r(5893);function i(e){let{children:n,hidden:r,className:i}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:r,children:n})}},4866:(e,n,r)=>{r.d(n,{Z:()=>w});var t=r(7294),s=r(6905),d=r(2466),i=r(6550),a=r(469),l=r(1980),c=r(7392),o=r(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:r}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:r,attributes:t,default:s}}=e;return{value:n,label:r,attributes:t,default:s}}))}(r);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:r}=e;const s=(0,i.k6)(),d=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,l._X)(d),(0,t.useCallback)((e=>{if(!d)return;const n=new URLSearchParams(s.location.search);n.set(d,e),s.replace({...s.location,search:n.toString()})}),[d,s])]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:s}=e,d=u(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=r.find((e=>e.default))??r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:d}))),[c,h]=x({queryString:r,groupId:s}),[j,f]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,d]=(0,o.Nk)(r);return[s,(0,t.useCallback)((e=>{r&&d.set(e)}),[r,d])]}({groupId:s}),b=(()=>{const e=c??j;return p({value:e,tabValues:d})?e:null})();(0,a.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),f(e)}),[h,f,d]),tabValues:d}}var f=r(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function m(e){let{className:n,block:r,selectedValue:t,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,d.o5)(),o=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),i(s))},h=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;n=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;n=l[r]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":r},n),children:a.map((e=>{let{value:n,label:r,attributes:d}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:h,onClick:o,...d,className:(0,s.Z)("tabs__item",b.tabItem,d?.className,{"tabs__item--active":t===n}),children:r??n},n)}))})}function k(e){let{lazy:n,children:r,selectedValue:s}=e;const d=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=d.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:d.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,s.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(m,{...e,...n}),(0,g.jsx)(k,{...e,...n})]})}function w(e){const n=(0,f.Z)();return(0,g.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var t=r(7294);const s={},d=t.createContext(s);function i(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dc96c512.0b7d9779.js b/assets/js/dc96c512.0b7d9779.js new file mode 100644 index 0000000..3d8692f --- /dev/null +++ b/assets/js/dc96c512.0b7d9779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1529],{6390:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Auth/index",title:"Auth",description:"cosmos.sdk/x/auth",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115",permalink:"/docs.kira.network/docs/cb04c86c-93bc-47bd-8a40-510e60bd7115",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:17,frontMatter:{title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},sidebar:"defaultSidebar",previous:{title:"Bank",permalink:"/docs.kira.network/docs/04e8b755-d259-40f9-b66c-ddf5223c66fa"},next:{title:"Transaction validation & processing",permalink:"/docs.kira.network/docs/f7f02009-1f78-426b-8915-f503cdda9671"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/auth"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dc96c512.dbf9bd60.js b/assets/js/dc96c512.dbf9bd60.js deleted file mode 100644 index 431f3f3..0000000 --- a/assets/js/dc96c512.dbf9bd60.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[1529],{6390:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},u=void 0,s={id:"Stack/SEKAI--Backend/Modules/Auth/index",title:"Auth",description:"cosmos.sdk/x/auth",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Auth",slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115",permalink:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:17,frontMatter:{title:"Auth",sidebar_position:17,slug:"/cb04c86c-93bc-47bd-8a40-510e60bd7115"},sidebar:"defaultSidebar",previous:{title:"Bank",permalink:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa"},next:{title:"Transaction validation & processing",permalink:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671"}},l={},c=[];function i(e){const t={code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsx)(t.p,{children:(0,r.jsx)(t.code,{children:"cosmos.sdk/x/auth"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>u});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function u(e){let{children:t,hidden:n,className:u}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,u),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),u=n(6550),s=n(469),l=n(1980),c=n(7392),i=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,u.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=b(e),[u,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,i.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??h;return f({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:u,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:u,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),i=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==r&&(c(t),u(a))},d=e=>{let t=null;switch(e.key){case"Enter":i(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:i,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(x,{...e,...t})]})}function y(e){const t=(0,m.Z)();return(0,k.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>u});var r=n(7294);const a={},o=r.createContext(a);function u(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:u(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd153907.2a000b7b.js b/assets/js/dd153907.2a000b7b.js deleted file mode 100644 index bb7e6e4..0000000 --- a/assets/js/dd153907.2a000b7b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5573],{1253:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),o=n(5162);const a={title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},d=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions",title:"Poor Network Conditions",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},sidebar:"defaultSidebar",previous:{title:"Data Registry",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},next:{title:"Layer 2",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73"}},c={},h=[{value:"Concept",id:"e1a58e9de5854012944a7cf97ad0fab4",level:2},{value:"Ensuring network & users safety",id:"b3ef892b6bbc41808a8d360e4608dfda",level:3},{value:"Restricted transaction types",id:"95043ba1a6d445d2aeba125aad215bba",level:3},{value:"Parameters",id:"f76721f5b3a845d483bd30cafdb0a488",level:2},{value:"Cli syntax & examples",id:"55563826bad845afa3dfea091debbfb2",level:2},{value:"Transactions",id:"8c33550d55ec4863abaa5a6b2030a061",level:2},{value:"Queries",id:"81e1f96b40384b0fa0f8294e1765e57d",level:2},{value:"Query allowed messages",id:"5fbfe6c6f9c34359ba2c5c89dd565820",level:4},{value:"Governance",id:"b0d04288f92840e5913b44d432e62d5a",level:2},{value:"Update poor network messages list",id:"45e91f5f88a84e02bb77a00af6bf8ebb",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"e1a58e9de5854012944a7cf97ad0fab4",children:"Concept"}),"\n",(0,t.jsxs)(s.p,{children:["The robustness of the KIRA network is maintained by a set of active consensus nodes who ensure the smooth operation and security of the system. However, external factors or unforeseen events can sometimes hinder their ability to maintain the integrity of the network. Such a scenario where the number of active consensus nodes drops below the defined ",(0,t.jsx)(s.code,{children:"min_validators"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})}),' is termed as "Poor Network Conditions".']}),"\n",(0,t.jsx)(s.p,{children:"This condition could be attributed to various potential causes:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Malicious DOS/DDOS attacks targeting consensus nodes not utilizing sentry nodes."}),"\n",(0,t.jsx)(s.li,{children:"Coordinated interference from multiple ISPs used by consensus nodes."}),"\n",(0,t.jsx)(s.li,{children:"Anomalies in DNS servers or incorrect address routing."}),"\n",(0,t.jsx)(s.li,{children:"Failed network upgrades leading to unexpected behaviors."}),"\n",(0,t.jsx)(s.li,{children:'Global political events affecting internet connectivity, like the "Great Firewall 2.0".'}),"\n",(0,t.jsx)(s.li,{children:"Among other unforeseen circumstances..."}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In response to these challenges, this module activates specific protocols and safeguards designed to protect the network and its users. These measures include limiting certain transactions and adjusting network properties to ensure asset safety and network stability until normal conditions are restored."}),"\n",(0,t.jsx)(s.h3,{id:"b3ef892b6bbc41808a8d360e4608dfda",children:"Ensuring network & users safety"}),"\n",(0,t.jsxs)(s.p,{children:["The primary objective during poor network conditions is to safeguard user assets until the network regains its strength. The ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})})," is instrumental in this context. It dictates the upper limit for asset transfers during compromised network states. By equating this value with the ",(0,t.jsx)(s.code,{children:"max_tx_fee"}),", the network can prevent potential asset misappropriation by malicious entities."]}),"\n",(0,t.jsxs)(s.p,{children:["Furthermore, custodians can monitor the ",(0,t.jsx)(s.code,{children:"min_validators"})," and ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," to decide whether to accept transfers from a network or a fork, especially if the consensus nodes count dips below the safety threshold. Essentially, these measures deter malicious consensus nodes from gaining undue advantages, such as attempting to sideline honest consensus nodes for their own gain."]}),"\n",(0,t.jsx)(s.h3,{id:"95043ba1a6d445d2aeba125aad215bba",children:"Restricted transaction types"}),"\n",(0,t.jsxs)(s.p,{children:["In light of such situations, the network can determine which ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:(0,t.jsx)(s.strong,{children:"Transaction Message Types"})})," are permissible. This proactive approach halts any unexpected network activities until a sufficient number of nodes is available for secure chain operation."]}),"\n",(0,t.jsx)(s.p,{children:"The default set of allowed messages during poor network conditions are:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"MESSAGE TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal"})}),(0,t.jsx)(s.td,{children:"Submit a new governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSetNetworkProperties"})}),(0,t.jsx)(s.td,{children:"Update network-level properties/settings"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeVoteProposal"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimCouncilor"})}),(0,t.jsx)(s.td,{children:"Request to claim a councilor role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistPermissions"})}),(0,t.jsx)(s.td,{children:"Grant certain permissions to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistPermissions"})}),(0,t.jsx)(s.td,{children:"Revoke certain permissions from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCreateRole"})}),(0,t.jsx)(s.td,{children:"Create a new network role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeAssignRole"})}),(0,t.jsx)(s.td,{children:"Assign an existing role to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnassignRole"})}),(0,t.jsx)(s.td,{children:"Remove a role from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Grant specific permissions to a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Revoke specific permissions from a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove granted permissions from a role's whitelist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove permissions from a role's blacklist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimValidator"})}),(0,t.jsx)(s.td,{children:"Request to claim validator seat"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeActivate"})}),(0,t.jsx)(s.td,{children:"Activate the consensus node that was previously inactivated for downtime"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypePause"})}),(0,t.jsx)(s.td,{children:"Temporarily pause the consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnpause"})}),(0,t.jsx)(s.td,{children:"Resume a previously paused consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRegisterIdentityRecords"})}),(0,t.jsx)(s.td,{children:"Register new identity records"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeEditIdentityRecord"})}),(0,t.jsx)(s.td,{children:"Modify an existing identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRequestIdentityRecordsVerify"})}),(0,t.jsx)(s.td,{children:"Request verification for an identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeHandleIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Handle incoming verification requests"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCancelIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Cancel a previously made verification request"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"f76721f5b3a845d483bd30cafdb0a488",children:"Parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poor_network_messages"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal,MsgTypeSetNetworkProperties,\u2026"})}),(0,t.jsx)(s.td,{children:"A list defining the type of messages allowed during poor network conditions."})]})})]}),"\n",(0,t.jsx)(s.h2,{id:"55563826bad845afa3dfea091debbfb2",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(o.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(s.h2,{id:"8c33550d55ec4863abaa5a6b2030a061",children:"Transactions"}),(0,t.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,t.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"81e1f96b40384b0fa0f8294e1765e57d",children:"Queries"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poor-network-messages"})}),(0,t.jsx)(s.th,{children:"Retrieve a list of allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"5fbfe6c6f9c34359ba2c5c89dd565820",children:"Query allowed messages"}),(0,t.jsxs)(s.p,{children:["Retrieve a list of allowed transaction message types during poor network conditions using the ",(0,t.jsx)(s.code,{children:"poor-network-messages"})," command."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov poor-network-messages $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"b0d04288f92840e5913b44d432e62d5a",children:"Governance"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"set-poor-network-msgs"})}),(0,t.jsx)(s.th,{children:"Create a proposal for updating allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"45e91f5f88a84e02bb77a00af6bf8ebb",children:"Update poor network messages list"}),(0,t.jsxs)(s.p,{children:["The CLI command, ",(0,t.jsx)(s.code,{children:"set-poor-network-msgs"}),", is utilized to create a proposal for updating the allowed transaction message types during poor network conditions. The command accepts the following arguments and flags:"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$MESSAGES"}),": A list of transaction message types that should be allowed during poor network conditions. List of existing messages is vailable ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:"here"}),"."]}),"\n"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),': The title of the proposal, defaulting to "Update poor network messages".']}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, defaulting to \"Allowing submission of '[$MESSAGES]' during poor network conditions\"."]}),"\n"]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-poor-network-msgs \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$MESSAGES\n"})})]})]})]})}function p(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>w});var t=n(7294),r=n(6905),i=n(2466),o=n(6550),a=n(469),d=n(1980),l=n(7392),c=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,l.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function p(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const r=(0,o.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=u(e),[o,d]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!p({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[l,h]=x({queryString:n,groupId:r}),[j,f]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,c.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),m=(()=>{const e=l??j;return p({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:o,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,i]),tabValues:i}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:o,tabValues:a}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const s=e.currentTarget,n=d.indexOf(s),r=a[n].value;r!==t&&(l(s),o(r))},h=e=>{let s=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>d.push(e),onKeyDown:h,onClick:c,...i,className:(0,r.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=j(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function w(e){const s=(0,f.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var t=n(7294);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd153907.dad5057a.js b/assets/js/dd153907.dad5057a.js new file mode 100644 index 0000000..96b732d --- /dev/null +++ b/assets/js/dd153907.dad5057a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5573],{1253:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>x,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),o=n(5162);const a={title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},d=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions",title:"Poor Network Conditions",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",permalink:"/docs.kira.network/docs/65e3e6fe-040a-4716-b13b-9e27def6ff9d",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},sidebar:"defaultSidebar",previous:{title:"Data Registry",permalink:"/docs.kira.network/docs/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},next:{title:"Layer 2",permalink:"/docs.kira.network/docs/8aad2626-40b5-42d6-9504-0c1287216a73"}},c={},h=[{value:"Concept",id:"e1a58e9de5854012944a7cf97ad0fab4",level:2},{value:"Ensuring Network & Users Safety",id:"b3ef892b6bbc41808a8d360e4608dfda",level:3},{value:"Restricted Transaction Types",id:"95043ba1a6d445d2aeba125aad215bba",level:3},{value:"Parameters",id:"f76721f5b3a845d483bd30cafdb0a488",level:2},{value:"Cli Syntax & Examples",id:"55563826bad845afa3dfea091debbfb2",level:2},{value:"Transactions",id:"8c33550d55ec4863abaa5a6b2030a061",level:2},{value:"Queries",id:"81e1f96b40384b0fa0f8294e1765e57d",level:2},{value:"Query Allowed Messages",id:"5fbfe6c6f9c34359ba2c5c89dd565820",level:4},{value:"Governance",id:"b0d04288f92840e5913b44d432e62d5a",level:2},{value:"Update Poor Network Messages List",id:"45e91f5f88a84e02bb77a00af6bf8ebb",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"e1a58e9de5854012944a7cf97ad0fab4",children:"Concept"}),"\n",(0,t.jsxs)(s.p,{children:["The robustness of the KIRA network is maintained by a set of active consensus nodes who ensure the smooth operation and security of the system. However, external factors or unforeseen events can sometimes hinder their ability to maintain the integrity of the network. Such a scenario where the number of active consensus nodes drops below the defined ",(0,t.jsx)(s.code,{children:"min_validators"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})}),' is termed as "Poor Network Conditions".']}),"\n",(0,t.jsx)(s.p,{children:"This condition could be attributed to various potential causes:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Malicious DOS/DDOS attacks targeting consensus nodes not utilizing sentry nodes."}),"\n",(0,t.jsx)(s.li,{children:"Coordinated interference from multiple ISPs used by consensus nodes."}),"\n",(0,t.jsx)(s.li,{children:"Anomalies in DNS servers or incorrect address routing."}),"\n",(0,t.jsx)(s.li,{children:"Failed network upgrades leading to unexpected behaviors."}),"\n",(0,t.jsx)(s.li,{children:'Global political events affecting internet connectivity, like the "Great Firewall 2.0".'}),"\n",(0,t.jsx)(s.li,{children:"Among other unforeseen circumstances..."}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In response to these challenges, this module activates specific protocols and safeguards designed to protect the network and its users. These measures include limiting certain transactions and adjusting network properties to ensure asset safety and network stability until normal conditions are restored."}),"\n",(0,t.jsx)(s.h3,{id:"b3ef892b6bbc41808a8d360e4608dfda",children:"Ensuring Network & Users Safety"}),"\n",(0,t.jsxs)(s.p,{children:["The primary objective during poor network conditions is to safeguard user assets until the network regains its strength. The ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})})," is instrumental in this context. It dictates the upper limit for asset transfers during compromised network states. By equating this value with the ",(0,t.jsx)(s.code,{children:"max_tx_fee"}),", the network can prevent potential asset misappropriation by malicious entities."]}),"\n",(0,t.jsxs)(s.p,{children:["Furthermore, custodians can monitor the ",(0,t.jsx)(s.code,{children:"min_validators"})," and ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," to decide whether to accept transfers from a network or a fork, especially if the consensus nodes count dips below the safety threshold. Essentially, these measures deter malicious consensus nodes from gaining undue advantages, such as attempting to sideline honest consensus nodes for their own gain."]}),"\n",(0,t.jsx)(s.h3,{id:"95043ba1a6d445d2aeba125aad215bba",children:"Restricted Transaction Types"}),"\n",(0,t.jsxs)(s.p,{children:["In light of such situations, the network can determine which ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:(0,t.jsx)(s.strong,{children:"Transaction Message Types"})})," are permissible. This proactive approach halts any unexpected network activities until a sufficient number of nodes is available for secure chain operation."]}),"\n",(0,t.jsx)(s.p,{children:"The default set of allowed messages during poor network conditions are:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"MESSAGE TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal"})}),(0,t.jsx)(s.td,{children:"Submit a new governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSetNetworkProperties"})}),(0,t.jsx)(s.td,{children:"Update network-level properties/settings"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeVoteProposal"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimCouncilor"})}),(0,t.jsx)(s.td,{children:"Request to claim a councilor role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistPermissions"})}),(0,t.jsx)(s.td,{children:"Grant certain permissions to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistPermissions"})}),(0,t.jsx)(s.td,{children:"Revoke certain permissions from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCreateRole"})}),(0,t.jsx)(s.td,{children:"Create a new network role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeAssignRole"})}),(0,t.jsx)(s.td,{children:"Assign an existing role to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnassignRole"})}),(0,t.jsx)(s.td,{children:"Remove a role from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Grant specific permissions to a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Revoke specific permissions from a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove granted permissions from a role's whitelist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove permissions from a role's blacklist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimValidator"})}),(0,t.jsx)(s.td,{children:"Request to claim validator seat"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeActivate"})}),(0,t.jsx)(s.td,{children:"Activate the consensus node that was previously inactivated for downtime"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypePause"})}),(0,t.jsx)(s.td,{children:"Temporarily pause the consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnpause"})}),(0,t.jsx)(s.td,{children:"Resume a previously paused consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRegisterIdentityRecords"})}),(0,t.jsx)(s.td,{children:"Register new identity records"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeEditIdentityRecord"})}),(0,t.jsx)(s.td,{children:"Modify an existing identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRequestIdentityRecordsVerify"})}),(0,t.jsx)(s.td,{children:"Request verification for an identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeHandleIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Handle incoming verification requests"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCancelIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Cancel a previously made verification request"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"f76721f5b3a845d483bd30cafdb0a488",children:"Parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poor_network_messages"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal,MsgTypeSetNetworkProperties,\u2026"})}),(0,t.jsx)(s.td,{children:"A list defining the type of messages allowed during poor network conditions."})]})})]}),"\n",(0,t.jsx)(s.h2,{id:"55563826bad845afa3dfea091debbfb2",children:"Cli Syntax & Examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(o.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(s.h2,{id:"8c33550d55ec4863abaa5a6b2030a061",children:"Transactions"}),(0,t.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,t.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"81e1f96b40384b0fa0f8294e1765e57d",children:"Queries"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poor-network-messages"})}),(0,t.jsx)(s.th,{children:"Retrieve a list of allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"5fbfe6c6f9c34359ba2c5c89dd565820",children:"Query Allowed Messages"}),(0,t.jsxs)(s.p,{children:["Retrieve a list of allowed transaction message types during poor network conditions using the ",(0,t.jsx)(s.code,{children:"poor-network-messages"})," command."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov poor-network-messages $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"b0d04288f92840e5913b44d432e62d5a",children:"Governance"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"set-poor-network-msgs"})}),(0,t.jsx)(s.th,{children:"Create a proposal for updating allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"45e91f5f88a84e02bb77a00af6bf8ebb",children:"Update Poor Network Messages List"}),(0,t.jsxs)(s.p,{children:["The CLI command, ",(0,t.jsx)(s.code,{children:"set-poor-network-msgs"}),", is utilized to create a proposal for updating the allowed transaction message types during poor network conditions. The command accepts the following arguments and flags:"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$MESSAGES"}),": A list of transaction message types that should be allowed during poor network conditions. List of existing messages is vailable ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:"here"}),"."]}),"\n"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),': The title of the proposal, defaulting to "Update poor network messages".']}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, defaulting to \"Allowing submission of '[$MESSAGES]' during poor network conditions\"."]}),"\n"]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-poor-network-msgs \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$MESSAGES\n"})})]})]})]})}function x(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>w});var t=n(7294),r=n(6905),i=n(2466),o=n(6550),a=n(469),d=n(1980),l=n(7392),c=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,l.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function p(e){let{queryString:s=!1,groupId:n}=e;const r=(0,o.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=u(e),[o,d]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[l,h]=p({queryString:n,groupId:r}),[j,f]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,c.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),m=(()=>{const e=l??j;return x({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:o,selectValue:(0,t.useCallback)((e=>{if(!x({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,i]),tabValues:i}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:o,tabValues:a}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const s=e.currentTarget,n=d.indexOf(s),r=a[n].value;r!==t&&(l(s),o(r))},h=e=>{let s=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>d.push(e),onKeyDown:h,onClick:c,...i,className:(0,r.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=j(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function w(e){const s=(0,f.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var t=n(7294);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd5e184a.a0dc33be.js b/assets/js/dd5e184a.a0dc33be.js deleted file mode 100644 index 0b1f164..0000000 --- a/assets/js/dd5e184a.a0dc33be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7459],{1055:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>h});var a=s(5893),i=s(1151),t=s(4866),o=s(5162);const r={title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},l=void 0,d={id:"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing",title:"Jailing & slashing",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},sidebar:"defaultSidebar",previous:{title:"Slashing",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"},next:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f"}},c={},h=[{value:"Concept",id:"565f4e1ee9194bec9514949c8445c429",level:2},{value:"Automatic jailing & threshold slashing",id:"e8ce22a553f74f06b7645d8999be4ff4",level:3},{value:"Slashing and governance dispute procedures",id:"252c47c531a94f06a58b55b94777f86f",level:3},{value:"Jailing & unjailing",id:"02d326b0daf940608fa5f61c6935e19c",level:4},{value:"Slashing",id:"76d940b87b0848bf821f753a5877002f",level:4},{value:"Governance proposals hierarchy",id:"f9febb32be5f41198c8b7756fe14513c",level:4},{value:"Slashing amount",id:"0bad15385fb24eff9cb0bc2c5e02bf5a",level:4},{value:"Slashing mechanism",id:"579d6eefbae4479b92e5b3b202268667",level:3},{value:"Parameters",id:"2ffbd79dca3b479899e3816d988c93c3",level:2},{value:"Cli syntax & examples",id:"bce7d7f9bfc64f43851880529d77ac27",level:2},{value:"Transactions",id:"299caee03182495498646474b6a41509",level:2},{value:"Queries",id:"98c6f1eb65ff43e2a0d8a4698088b6ee",level:2},{value:"Slashing proposals",id:"109f939f975f4eff99f7f7cf3ae1c324",level:4},{value:"Slashed pools",id:"3fb8ee10273c49ae94108f23eae5b200",level:4},{value:"Slashing parameters",id:"857c8142f32b47e380fff730ccab213b",level:4},{value:"Validator signing information",id:"ce70267e68794ed18a221bed3952444e",level:4},{value:"Governance",id:"08e02bdedc884132a7b9aec6b77fe999",level:2},{value:"Creating an unjailing request proposal",id:"a37842ba091c4bb993f308d64a839b47",level:4},{value:"Creating a slashing proposal",id:"29215838099c4a21b617e91538c858af",level:4},{value:"Submitting a slashing proposal refutation",id:"ea31a4280969443da49d5987e1da50f8",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"565f4e1ee9194bec9514949c8445c429",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:"Building on the broader concepts explored in our guide, KIRA\u2019s governance-permissioned validator set, a standout feature of its consensus system, addresses the inherent challenges in permissionless environments where any participant can become a validator and removal is nearly impossible. In Kira's framework, malicious validators can be permanently removed by their peers, a process made feasible because voting power isn\u2019t based on the size of one's stake. This ensures that coin ownership doesn't lead to disproportionate influence. Consequently, Kira specifically targets instances of double-signing for potential slashing. By mitigating the risk of severe penalties for minor or unintentional errors, Kira's model aims to foster a strong, diverse validator community, enhancing network decentralization and resilience. This approach not only challenges the traditional necessity for harsh slashing in maintaining network integrity but also seeks a harmonious balance between security and inclusivity. Aligned with Byzantine principles, Kira embraces the inevitability of human error and system failures, showcasing a more adaptable and empathetic approach to network governance."}),"\n",(0,a.jsx)(n.h3,{id:"e8ce22a553f74f06b7645d8999be4ff4",children:"Automatic jailing & threshold slashing"}),"\n",(0,a.jsxs)(n.p,{children:["In KIRA, double-signing is the only penalized fault for consensus nodes. Consensus nodes going offline will not be punished and/or slashed as explained in the ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"Consensus nodes ranks & statuses"}),'. Double-signing occurs when a consensus node proposes or participates in the production of two different blocks at the same block height, creating or attempting to create a fork in the blockchain. A fork is when there are two or more valid chain histories that could be followed, and it\'s not immediately clear which one should be considered the "correct" chain, a.k.a canonical chain. Forks can disrupt network observers, such as light nodes, who do not have the resources to fully validate transactions and therefore rely on a single chain for their own operations. If a light node is unable to determine which fork is the canonical chain, it may be vulnerable to attacks where the same funds are spent multiple times, once on each fork.']}),"\n",(0,a.jsx)(n.p,{children:"However, double-signing does not necessarily mean that a consensus node is acting maliciously and in this case slashing doesn\u2019t actually add any security to the network. There can be various reasons for unintentional misbehavior, such as:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Launching the node before it is fully synced"}),"\n",(0,a.jsx)(n.li,{children:"Application or hardware faults"}),"\n",(0,a.jsx)(n.li,{children:"Misconfiguration"}),"\n",(0,a.jsx)(n.li,{children:"Accidentally deploying two nodes with the same key"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For this reason, KIRA does not automatically punish nodes for double-signing. Instead, they are ",(0,a.jsx)(n.strong,{children:"automatically jailed"})," and their fate is decided by governance later on, which may choose to unjail them, permanently remove them from the consensus node set, and/or slash them in cases of coordinated attacks. This protects delegators' staked funds and minimizes the risk of accidental loss, which is important when staking valuable assets such as Bitcoin, digital fiat, or commodities. This is possible because the consensus node set is governance-permissioned and voting power is not based on the stake backing them. This means that malicious consensus nodes can be permanently removed by other consensus nodes without being able to influence governance decisions."]}),"\n",(0,a.jsxs)(n.p,{children:["To detect coordinated attacks, KIRA utilizes the concept of ",(0,a.jsx)(n.strong,{children:"threshold slashing"}),". An automatic slashing proposal only occurs if a certain number of consensus nodes double-sign within a specific time frame, with the threshold being less than 1/3 of all consensus nodes. The threshold slashing parameters, ",(0,a.jsx)(n.code,{children:"slashing_period"})," (3600 seconds by default) and ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," (25 by default, i.e 25% of all active consensus nodes), are ",(0,a.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," that can be adjusted by governance."]}),"\n",(0,a.jsx)(n.h3,{id:"252c47c531a94f06a58b55b94777f86f",children:"Slashing and governance dispute procedures"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"Slashing a staking pool is a permanent operation. Once a pool has been slashed, it is no longer possible to add deposits to it, and there is no way to return it to its original state."})}),"\n",(0,a.jsx)(n.p,{children:"In KIRA, slashing is governed, meaning that the decision to slash and the amount to be slashed is determined by the governance and evaluated on a case-by-case basis to prevent cases where software bugs could result in the loss of delegator assets. KIRA's governance-permissioned nature reduces the difficulty and risk of running a node, making it accessible to anyone, even those with little experience, rather than requiring expensive cloud provider setups."}),"\n",(0,a.jsx)(n.h4,{id:"02d326b0daf940608fa5f61c6935e19c",children:"Jailing & unjailing"}),"\n",(0,a.jsxs)(n.p,{children:["If a consensus node is caught double-signing, it will be automatically jailed by the network and its status will be changed to ",(0,a.jsx)(n.code,{children:"jailed"}),". This does not necessarily mean that the node will be slashed, as double-signing is not automatically considered malicious. While a node is ",(0,a.jsx)(n.code,{children:"jailed"}),", it (or any governance member with proposal creation permission 20) can request to be unjailed through a governance proposal using ",(0,a.jsx)(n.code,{children:"sekaid tx customstaking proposal unjail-validator"}),". This request must be made within a certain time frame, defined by the ",(0,a.jsx)(n.code,{children:"unjail_max_time"})," network property (600 seconds by default). If the request is not made or accepted within this time frame, the node will become permanently jailed. The process of unjailing a node is a judgment proposal, meaning that all governance members voting permissions 21 and consensus nodes with ",(0,a.jsx)(n.code,{children:"active"})," status, can vote on whether or not the node should be unjailed."]}),"\n",(0,a.jsxs)(n.p,{children:["While it is ",(0,a.jsx)(n.code,{children:"jailed"}),", a node cannot propose blocks, doesn\u2019t accumulate rewards, cannot receive any new delegations and cannot vote on any proposals. Meanwhile other nodes can wait to see if there is evidence of double-signing collusion with other potential malicious nodes or other suspicious activity during that time window."]}),"\n",(0,a.jsx)(n.h4,{id:"76d940b87b0848bf821f753a5877002f",children:"Slashing"}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing decision is being considered, all governance members with proposal creation permission 57 can rise a slashing proposal using ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," to slash and permanently remove the node from the active consensus node set. However, if ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached, a slashing proposal for each incriminated consensus node is automatically rised by the network."]}),"\n",(0,a.jsxs)(n.p,{children:['While a slashing proposal is ongoing, the consensus node under investigation can submit counter-evidence, or "refutation," using the ',(0,a.jsx)(n.code,{children:"refute-slashing-proposal"})," method by providing an URL or CID to an IPFS resource. Once the counter-evidence is submitted, it cannot be updated again. If a governance proposal results in a slashing event, the consensus node can no longer be unjailed and its staking pool is slashed and becomes inoperative. Users can only undelegate their existing stake in this case."]}),"\n",(0,a.jsx)(n.p,{children:"A slashing proposal can have one of the following outcome:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the slashing proposal ends without reaching the required quorum, the consensus node is not slashed and can request to be unjailed by rising an unjailing proposal."}),"\n",(0,a.jsxs)(n.li,{children:["If it ends by reaching the required quorum :","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the governance decided not to slash, the node is not slashed and can request to be unjailed."}),"\n",(0,a.jsx)(n.li,{children:"If the governance decided to slash, the node is slashed by the percentage determined in the proposal and cannot be unjailed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h4,{id:"f9febb32be5f41198c8b7756fe14513c",children:"Governance proposals hierarchy"}),"\n",(0,a.jsx)(n.p,{children:"Slashing proposals take precedence over unjailing proposals. If a slashing proposal is raised for a given consensus node, any active unjailing proposals related to this node are cancelled, and no new unjailing proposals can be raised until the slashing proposal is finalized. This hierarchical relationship ensures that no unjailing action can be finalized before a slashing action, which prevents malicious consensus nodes from starting to produce blocks and receive new delegations before a potential slashing event. This helps to prevent difficult-to-handle situations where malicious nodes are able to gain an advantage before being punished for their actions or having to slash new, innocent delegators."}),"\n",(0,a.jsx)(n.h4,{id:"0bad15385fb24eff9cb0bc2c5e02bf5a",children:"Slashing amount"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["Jailed nodes being slashed as well as any of the others colluders listed in the proposal cannot vote on any proposal as their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),"."]})}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing proposal is rised, all governance members with voting permission 58 and consensus nodes with the active ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"status"}),", can vote by providing a slashing percentage as an input. This input is limited by the maximum slashing percentage ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"}),", which is a configurable parameter in the network properties. This percentage can range from 0% to 100%, with a default value of 0.5%. This limit is meant to provide delegators to have a quantifiable manner of measuring their potential risks when staking. The exact percentage of slashing for a given proposal is determined by taking the median of all votes inputs. For the slashing to occur, more than 50% of all governance members participating in the proposal process must vote with a non-zero slash."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Examples:"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.1"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0.5, 1, 0.5, 0.25, 0.25, 0.25, 0.75, 0.01, 0, 0.25"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.25"})," but the final slashing ",(0,a.jsx)(n.code,{children:"10%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.5"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0.01, 0.01, 0.03, 0.03, 1, 0.04, 0.05, 0.07, 0.08, 1, 0.1"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.35"})," and the final slashing is ",(0,a.jsx)(n.code,{children:"3.5%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.25"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.01, 0, 0, 1"}),", then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0"})," and no slashing takes place."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Slashing proposal structure"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n\t"offender": "kiraXXX...XXX", // validator address that commited a fault\n\t"staking_pool_id": ,\n "misbehaviour_time": , // time at which misbehaviour occured\n "misbehaviour_type": "double-signing", //string type of evidence (in the future there can be different types)\n "jailed_percentage": , // percentage of validators that was jailed (colluded)\n "colluders": [ // list of validator who colluded with a misbehaving validator\n\t\t"kiraXXX...XXX",\n\t\t"kiraXXX...XXX",\n\t\t...,\n\t\t"kiraXXX...XXX"\n\t],\n "refutation": "" // validator supplied counter-evidence proving that his behaviour was not intentionally malicious,\n "votes": [\n { "voter": "kiraXXX...XXX", "slash": },\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0.5 },\n\t\t...\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0 }\n\t]\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"579d6eefbae4479b92e5b3b202268667",children:"Slashing mechanism"}),"\n",(0,a.jsxs)(n.p,{children:["If a governance proposal results in a slashing event, the decided percentage will be taken off all staked tokens within the staking pool. The derivative tokens representing each one of these staked tokens will also lose their 1-to-1 peg. For example, if consensus node V1 is being slashed by 5%, then unstaking 2 of any tokens XYZ would only return 1.9 XYZ, similar to the concept of impermanent loss in automated market maker systems like Uniswap. KIRA's slashing mechanism uses a ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Floor_and_ceiling_functions",children:"ceiling function"})," to avoid transferring 0 amounts and to accommodate singular units and non-fungible tokens. A specific mechanism for non-fungible tokens will be implemented in a future update. The slashed tokens, including KIRA's native token KEX, are transferred to a governance-controlled community spending pool where a decision can be made regarding their final fate, such as giving them away to the community or refunding them in the case of unfair slashing. The information about the slashing, including the percentage and the result of the governance proposal, is recorded in the staking pool and can be ",(0,a.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"queried"})," for reference."]}),"\n",(0,a.jsx)(n.h2,{id:"2ffbd79dca3b479899e3816d988c93c3",children:"Parameters"}),"\n",(0,a.jsx)(n.h2,{id:"bce7d7f9bfc64f43851880529d77ac27",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"299caee03182495498646474b6a41509",children:"Transactions"}),(0,a.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,a.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"98c6f1eb65ff43e2a0d8a4698088b6ee",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"slash-proposals"})}),(0,a.jsx)(n.th,{children:"Query slash proposals."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"slashed-staking-pools"})}),(0,a.jsx)(n.td,{children:"Query slashed staking pools."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"params"})}),(0,a.jsx)(n.td,{children:"Query the current slashing parameters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-info"})}),(0,a.jsx)(n.td,{children:"Query a validator's signing information."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-infos"})}),(0,a.jsx)(n.td,{children:"Query signing information of all validators."})]})]})]}),(0,a.jsx)(n.h4,{id:"109f939f975f4eff99f7f7cf3ae1c324",children:"Slashing proposals"}),(0,a.jsx)(n.p,{children:"Query all active proposals for slashing."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slash-proposals $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"3fb8ee10273c49ae94108f23eae5b200",children:"Slashed pools"}),(0,a.jsx)(n.p,{children:"Query pools that have been subjected to slashing penalties."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slashed-staking-pools $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"857c8142f32b47e380fff730ccab213b",children:"Slashing parameters"}),(0,a.jsx)(n.p,{children:"Query the current parameters of the slashing module."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing params $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"ce70267e68794ed18a221bed3952444e",children:"Validator signing information"}),(0,a.jsx)(n.p,{children:"Query the signing information for a specific validator."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDRESS"}),": Validator\u2019s address"]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-info $ADDRESS $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query the signing information for all validators."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-infos $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"08e02bdedc884132a7b9aec6b77fe999",children:"Governance"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"proposal unjail-validator"})}),(0,a.jsx)(n.th,{children:"Create a proposal to unjail a consensus node."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"proposal-slash-validator"})}),(0,a.jsx)(n.td,{children:"Create a proposal to slash a validator."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})}),(0,a.jsx)(n.td,{children:"Refute a slash validator proposal."})]})]})]}),(0,a.jsx)(n.h4,{id:"a37842ba091c4bb993f308d64a839b47",children:"Creating an unjailing request proposal"}),(0,a.jsx)(n.p,{children:"Submit a proposal for unjailing a jailed consensus node. Requires permission 20. Jailed nodes cannot vote on their own unjailing proposals."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the jailed node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource explaining the case."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid tx customstaking proposal unjail-validator \\\n--from=$SIGNER $FLAGS_TX \\\n$OFFENDER $REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"29215838099c4a21b617e91538c858af",children:"Creating a slashing proposal"}),(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," CLI allows any users with permission 57 to create a proposal to slash a consensus node. The ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," is left blank and is meant to be updated by the consensus node subject to the proposal later on. The ",(0,a.jsx)(n.code,{children:"\u2014colluders"})," flags is usually left blank and is meant for the network to provide the list of colluders when ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached and automatic mass-proposal event is triggered."]}),(0,a.jsxs)(n.p,{children:["To vote on the proposal, an account must have permission 58. However, consensus nodes that have been jailed cannot vote on the proposal because their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),". Voters must provide a percentage via ",(0,a.jsx)(n.code,{children:"--jail-percentage"})," (decimal value between 0 and 1) by which they believe the staking pool of the consensus node should be slashed."]}),(0,a.jsx)(n.p,{children:"Flags"}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the offending node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STAKINGPOOLID"}),": ID of the staking pool associated with the node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTIME"}),": Timestamp of the misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTYPE"}),": Type of misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$JAILPERCENTAGE"}),": Penalty percentage."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COLLUDERS"}),": Addresses of any colluders."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing proposal-slash-validator \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--offender=$OFFENDER --staking-pool-id=$STAKINGPOOLID \\\n--misbehaviour-time=$MISBEHAVIOURTIME--misbehaviour-type=$MISBEHAVIOURTYPE \\\n--jail-percentage=$JAILPERCENTAGE --colluders=$COLLUDERS --refutation=$REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"ea31a4280969443da49d5987e1da50f8",children:"Submitting a slashing proposal refutation"}),(0,a.jsxs)(n.p,{children:["Only consensus nodes whose staking pool is being subject to a slashing proposal have the ability to submit a refutation using ",(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})," by providing a URL or CID to an IPFS resource (string of up to 2048 characters) explaining the circumstances under which the fault occurred. Once submitted, the proposal\u2019s ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," flag is updated and cannot be modified anymore."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to an IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"sekaid tx customslashing refute-slash-validator-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--refutation=$REFUTATION\n"})})]})]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>o});s(7294);var a=s(6905);const i={tabItem:"tabItem_Ymn6"};var t=s(5893);function o(e){let{children:n,hidden:s,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,o),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>w});var a=s(7294),i=s(6905),t=s(2466),o=s(6550),r=s(469),l=s(1980),d=s(7392),c=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:i}}=e;return{value:n,label:s,attributes:a,default:i}}))}(s);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const i=(0,o.k6)(),t=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,l._X)(t),(0,a.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,t=u(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:t}))),[d,h]=f({queryString:s,groupId:i}),[g,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,c.Nk)(s);return[i,(0,a.useCallback)((e=>{s&&t.set(e)}),[s,t])]}({groupId:i}),m=(()=>{const e=d??g;return p({value:e,tabValues:t})?e:null})();(0,r.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),b(e)}),[h,b,t]),tabValues:t}}var b=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function x(e){let{className:n,block:s,selectedValue:a,selectValue:o,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,t.o5)(),c=e=>{const n=e.currentTarget,s=l.indexOf(n),i=r[s].value;i!==a&&(d(n),o(i))},h=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:r.map((e=>{let{value:n,label:s,attributes:t}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:h,onClick:c,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:i}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function y(e){const n=g(e);return(0,j.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(x,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function w(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var a=s(7294);const i={},t=a.createContext(i);function o(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/de179965.129d575a.js b/assets/js/de179965.129d575a.js deleted file mode 100644 index 8f5a03d..0000000 --- a/assets/js/de179965.129d575a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4261],{3721:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},s=void 0,u={id:"Stack/SEKAI--Backend/Modules/Evidence/index",title:"Evidence",description:"x/evidence",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Evidence/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Evidence",slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f",permalink:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:14,frontMatter:{title:"Evidence",sidebar_position:14,slug:"/6a318dbd-2d44-4f1f-9729-5e608286289f"},sidebar:"defaultSidebar",previous:{title:"Fee processing",permalink:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84"},next:{title:"Evidence module",permalink:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438"}},l={},i=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/evidence",children:(0,r.jsx)(t.code,{children:"x/evidence"})})}),"\n",(0,r.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),u=n(469),l=n(1980),i=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=i??m;return b({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:u}=e;const l=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),a=u[n].value;a!==r&&(i(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:u.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function y(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>u,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e131ac00.625d7807.js b/assets/js/e131ac00.625d7807.js deleted file mode 100644 index 01628a1..0000000 --- a/assets/js/e131ac00.625d7807.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8234],{1956:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>d,metadata:()=>l,toc:()=>h});var s=a(5893),t=a(1151),i=a(4866),r=a(5162);const d={title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Multistaking/Delegators",title:"Delegators",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Delegators.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},next:{title:"Slashing",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"}},c={},h=[{value:"Concept",id:"5c4703c095ef4be7a1ba267af6071f66",level:2},{value:"Native liquid staking",id:"fdb23dc5af87468898b340eda95f2ede",level:3},{value:"Staking pools & consensus nodes status",id:"c898af44293e44ef96a6c6cae5ed1186",level:3},{value:"Delegating and associated parameters",id:"c3d993328dfe4b9e85b1f93f390796af",level:3},{value:"Registration mechanism for offshore staking pool delegators",id:"08bfc2b8fbcf411bae24ca442fa49e6a",level:3},{value:"Managing staking rewards",id:"df8d14384a764c199e8d69de637577af",level:3},{value:"Claiming rewards",id:"7e84cbf07ad941c8b29dad7f14b4884f",level:4},{value:"Enabling auto-compounding",id:"8095488798c1432baa345bae81d3dd4e",level:4},{value:"Undelegating & cooling period",id:"55d34613a10e460bb772b415455b2038",level:4},{value:"Delegators push out",id:"0a9ed94ceee64117a44cf6658c22a213",level:4},{value:"Cli syntax & examples",id:"bf9bed7d9d334bfd9d3d2af659f3437b",level:2},{value:"Transactions",id:"82a71b23509544a2a7ed389e996d72b3",level:2},{value:"Delegating",id:"9f9b21196a384f8984764f64df053d49",level:4},{value:"Undelegating",id:"5a5b0ec50c254a57804362266ba59c01",level:4},{value:"Set compounding mode",id:"4a865e4b207d4b01b5d42a932989412f",level:4},{value:"Claim rewards/pool\u2019s derivatives",id:"a20c73c980d645b697ce49666e11ffee",level:4},{value:"Claim undelegation",id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",level:4},{value:"Claiming matured undelegations",id:"1c2c1213febd4a98b8c3d3e4edda0f39",level:4},{value:"Delegator registration",id:"7e12db69b62845f19f519ccf675e7eb2",level:4},{value:"Queries",id:"ba7958814c1e4cec8d89051b5bce8d0d",level:2},{value:"Staking pool delegators",id:"d4c36c977d1242f4b0955e6ff9c5b439",level:4},{value:"All staking pool information",id:"2570ce21001f4c8591815b04d233f18f",level:4},{value:"All pending undelegations",id:"78231b53b6694172857f1c9ed8917be0",level:4},{value:"Compounding information",id:"8310aaae479a4f4e807e83e7a7db5e91",level:4},{value:"Outstanding rewards",id:"ded77962e7e84ed398e024bfb5744e30",level:4},{value:"Governance",id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"5c4703c095ef4be7a1ba267af6071f66",children:"Concept"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators are KIRA token holders who want to participate in network security by delegating assets as collateral to one or more consensus nodes' staking pools in exchange for a share of their revenue. Because delegators share revenue and responsibility with their chosen consensus nodes, they should carefully consider which nodes to delegate to and monitor their stakes regularly. Consensus nodes can also be delegators, but they ",(0,s.jsx)("u",{children:"are not required to"}),". Staked assets are directly affected by the conduct of the elected nodes, so it is important for delegators to exercise diligence and diversification in their choices."]}),"\n",(0,s.jsx)(n.h3,{id:"fdb23dc5af87468898b340eda95f2ede",children:"Native liquid staking"}),"\n",(0,s.jsxs)(n.p,{children:["Consensus nodes on the Kira Network have staking pools that are designed equivalently to regular AMM liquidity pools like Uniswap, in order to achieve native liquid staking. When a certain number of tokens ",(0,s.jsx)(n.code,{children:""})," are deposited in the staking pool of a consensus node ",(0,s.jsx)(n.code,{children:"V"}),", an equal number of derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," are issued in return (similar to AMM LP tokens). These derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," can be freely moved and traded on and off-chain, while the underlying ",(0,s.jsx)(n.code,{children:""})," tokens remain staked. If V1 is slashed for double signing, the staked ",(0,s.jsx)(n.code,{children:""})," tokens can either be moved to the treasury, a governance ",(0,s.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"spending pool"})," or destroyed, while the derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," representing them would lose their 1-to-1 peg (similar to impermanent loss in AMM)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["E.g.: If 50% of ",(0,s.jsx)(n.code,{children:"XYZ"})," tokens staked with block proposer ",(0,s.jsx)(n.code,{children:"V1"})," get slashed, unstaking 2 ",(0,s.jsx)(n.code,{children:"V1/XYZ"})," from ",(0,s.jsx)(n.code,{children:"V1"}),"'s pool would only return 1 ",(0,s.jsx)(n.code,{children:"XYZ"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"c898af44293e44ef96a6c6cae5ed1186",children:"Staking pools & consensus nodes status"}),"\n",(0,s.jsxs)(n.p,{children:["In KIRA's network, each consensus node operates its own staking pool where delegators can stake their assets. The staking pool has a unique ID and is linked to the consensus node's address. The consensus node has control over the staking pool's status and can enable or disable it, as well as set the commission rate on block rewards. In addition, a consensus node can be ",(0,s.jsx)(n.code,{children:"active"}),", ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," depending on its performance, behavior or choice. While it is important to understand that the status of the staking pool is independent of the status of the consensus node, if a consensus node's status is ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," , and/or if its staking pool is ",(0,s.jsx)(n.code,{children:"disabled"}),", delegators are not able to delegate any additional tokens to that node\u2019s staking pool. They will only be able to undelegate their existing stake."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding consensus nodes status and ranking system please refer to the"})," ",(0,s.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,s.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,s.jsx)(n.em,{children:"module.\nFor more information regarding consensus nodes staking pool status please refer to the"})," ",(0,s.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,s.jsx)(n.em,{children:"Consensus nodes & staking pools"})})," ",(0,s.jsx)(n.em,{children:"section."})]}),"\n",(0,s.jsx)(n.h3,{id:"c3d993328dfe4b9e85b1f93f390796af",children:"Delegating and associated parameters"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA allows users to delegate and pay ",(0,s.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"})," with any token that has been whitelisted by governance. To ensure proper network functionality and security, specific management rules and limitations are defined and curated for each foreign token, such as exchange rates and staking pool rewards allowance. These rules are monitored by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," module, which sets bounds on the staking mechanism through the use of three parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_cap"})," : Sets the maximum share (%) of staking reward a given whitelisted staking token will be entitled per staking pool to prevent a malicious user from diluting the pool with any particular token in order to claim all the rewards. Setting specific shares also simplifies reward distribution by sidestepping the need to track how much eligible staking tokens are worth in terms of USD or KEX."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_min"}),": Sets the minimum delegation and undelegation amount per transaction for a particular token. This is designed to prevent dust spam attacks, where an attacker might attempt to disrupt block production by continuously staking or withdrawing trivial amounts of tokens with numerous accounts. Importantly, this parameter also ensures that a user cannot undelegate an amount that would leave behind a residual stake less than this minimum. Such a residual would be locked and become non-withdrawable. Detailed considerations related to dust-spam can be found in the ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"})," section."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"fee_rate"})," : Sets the conversation rate for foreign tokens in terms of KEX to use them as execution fees. ",(0,s.jsx)(n.code,{children:"fee_rate"})," is also used to determine if the ",(0,s.jsx)(n.code,{children:"stake_min"})," value is respected in case of delegation or if ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," is reached when a staking pool reaches its ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"maximum delegators capacity"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding delegators staking rewards distribution please refer to"}),(0,s.jsxs)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:[" ",(0,s.jsx)(n.em,{children:"this section"})]})," ",(0,s.jsx)(n.em,{children:"of the"})," ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,s.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,s.jsx)(n.em,{children:"module."})]}),"\n",(0,s.jsx)(n.h3,{id:"08bfc2b8fbcf411bae24ca442fa49e6a",children:"Registration mechanism for offshore staking pool delegators"}),"\n",(0,s.jsxs)(n.p,{children:["As explained earlier, owning some staking pool's derivatives ",(0,s.jsx)(n.code,{children:"V/"})," is equivalent to having some token ",(0,s.jsx)(n.code,{children:""})," staked with consensus node ",(0,s.jsx)(n.code,{children:"V"}),". However, because the Cosmos SDK does not provide a hook on token transfers (yet?) and derivatives can be traded freely inside or outside the KIRA network, it is impossible to track staking pool delegators' shares in real time. To solve this problem, KIRA has implemented a registration mechanism where \"offshore\" delegators, such as users or smart contracts that acquired KIRA's native staking derivative tokens on the open market, can register those derivatives to the corresponding staking pool to earn the corresponding rewards. Additionally, each staking pool performs a balance check on its current delegators whenever it receives rewards (whenever the consensus nodes produces a block) and will automatically deregister any registered delegators that do not hold more than the minimum ",(0,s.jsx)(n.code,{children:"stake_min"})," of derivative tokens."]}),"\n",(0,s.jsx)(n.h3,{id:"df8d14384a764c199e8d69de637577af",children:"Managing staking rewards"}),"\n",(0,s.jsx)(n.h4,{id:"7e84cbf07ad941c8b29dad7f14b4884f",children:"Claiming rewards"}),"\n",(0,s.jsx)(n.p,{children:"With auto-compounding activated, rewards are automatically reinvested, increasing the delegator's stake. However, the staking derivatives, representing these newly compounded rewards, aren't instantly transferred to the delegator's address to reduce overhead. They accumulate in the staking pool and must be claimed manually. Conversely, if a delegator decides not to use auto-compounding, they will have to manually claim all the rewards they accrue. Hence, in both scenarios, the delegator must manually intervene to include their rewards or rewards\u2019 derivatives into their active balance."}),"\n",(0,s.jsx)(n.h4,{id:"8095488798c1432baa345bae81d3dd4e",children:"Enabling auto-compounding"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators have the flexibility to decide how they manage rewards earned from staking. They can opt for automatic reinvestment through the auto-compounding feature or claim them manually. This decision can be made for any token eligible for staking, as determined by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," . When enabled, rewards are automatically added to the delegator's stake. However, the corresponding staking derivatives are not sent to the delegator's address, as this would be too much of an overhead for the module to handle. Instead, they are simply accumulated in the staking pool and become claimable in the same way as standard rewards. In other words, when a user disables auto compounding, it will have to claim ",(0,s.jsx)("u",{children:"its rewards"})," manually; when it is enabled, it will have to claim ",(0,s.jsx)("u",{children:"its newly issued staking derivatives"})," manually. Each delegator has their unique auto-compounding schedule, distributing the computational demands and preventing the network from being overwhelmed by simultaneous compounding events. Configurations for this feature are maintained per user. Delegators can enable this feature for all tokens or for particular ones."]}),"\n",(0,s.jsxs)(n.p,{children:["Auto-compounding operates based on a consistent interval set across the network by the ",(0,s.jsx)(n.code,{children:"autocompound_interval_num_blocks"})," ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". The exact block at which a user's rewards get compounded depends on when they activate this feature. For example, with a network interval set at 10,000 blocks, a delegator enabling auto-compounding at block ",(0,s.jsx)(n.code,{children:"3"})," will see their rewards compounded at blocks ",(0,s.jsx)(n.code,{children:"10003"}),", ",(0,s.jsx)(n.code,{children:"20003"})," and so on. This property is set to ",(0,s.jsx)(n.code,{children:"17280"})," blocks at genesis."]}),"\n",(0,s.jsx)(n.h4,{id:"55d34613a10e460bb772b415455b2038",children:"Undelegating & cooling period"}),"\n",(0,s.jsxs)(n.p,{children:["A delegator can undelegate their stake at anytime to get back its original tokens. Any undelegation will trigger a fixed cooling period during which the stake remain locked and do not yield any reward. Once the cooling period expires, staked tokens ",(0,s.jsx)(n.code,{children:""})," can be claimed by providing the respective pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"})," which are then burned. The cooling period is the same for all staking tokens and defined by the governance through the following ",(0,s.jsx)(n.code,{children:"unstaking_period"})," network property (1 month by default)."]}),"\n",(0,s.jsx)(n.h4,{id:"0a9ed94ceee64117a44cf6658c22a213",children:"Delegators push out"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA has a feature that protects against dust spam attacks by limiting the maximum number of delegators for each individual staking pool with a network property called ",(0,s.jsx)(n.code,{children:"max_delegators"})," (which is set to 100 by default). If this maximum number of delegators is reached, new delegators will need to provide a higher stake than the smallest delegator in the pool in order to push them out. To prevent large stakeholders from easily pushing out smaller delegators from good consensus nodes, the minimum required stake to push out a delegator is set by the ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," property (which is a multiplier of the smallest stake value, 10 by default). This ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," can be adjusted by KIRA's governance and increased as the network grows. When a delegator is pushed out, they automatically receive any outstanding rewards they are owed."]}),"\n",(0,s.jsx)(n.h2,{id:"bf9bed7d9d334bfd9d3d2af659f3437b",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(n.em,{children:"documentation for more details."})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$SIGNER"})})," ",(0,s.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(n.em,{children:"and"})," ",(0,s.jsxs)(n.em,{children:[(0,s.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(n.em,{children:"section"})]})}),"\n",(0,s.jsxs)(i.Z,{children:[(0,s.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(n.h2,{id:"82a71b23509544a2a7ed389e996d72b3",children:"Transactions"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"delegate"})}),(0,s.jsx)(n.th,{children:"Delegate to a pool."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"undelegate"})}),(0,s.jsx)(n.td,{children:"Start undelegation from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-rewards"})}),(0,s.jsx)(n.td,{children:"Claim rewards from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-undelegation"})}),(0,s.jsx)(n.td,{children:"Claim matured undelegation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-matured-undelegations"})}),(0,s.jsx)(n.td,{children:"Claim all matured undelegations in a single transaction."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"set-compound-info"})}),(0,s.jsx)(n.td,{children:"Set auto compounding mode."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"register-delegator"})}),(0,s.jsx)(n.td,{children:"Register as a pool delegator when acquiring pool derivatives externally."})]})]})]}),(0,s.jsx)(n.h4,{id:"9f9b21196a384f8984764f64df053d49",children:"Delegating"}),(0,s.jsxs)(n.p,{children:["Delegate tokens to a specific staking pool. This action locks the specified amount of ",(0,s.jsx)(n.code,{children:""})," tokens to a staking pool using the consensus node\u2019s address. It returns the corresponding pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"}),". The delegation amount cannot be lower than ",(0,s.jsx)(n.code,{children:"stake_min"}),". Delegation is only possible to an active consensus node."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to delegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking delegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"5a5b0ec50c254a57804362266ba59c01",children:"Undelegating"}),(0,s.jsxs)(n.p,{children:["Undelegating burns the corresponding ",(0,s.jsx)(n.code,{children:"V/"})," derivatives and initiates the claim of any outstanding rewards/compounds. The undelegated ",(0,s.jsx)(n.code,{children:""})," tokens are assigned an undelegation ID and become claimable after the ",(0,s.jsx)(n.code,{children:"unstaking_period"}),". The undelegation amount must meet the ",(0,s.jsx)(n.code,{children:"stake_min"})," requirements."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to undelegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking undelegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"4a865e4b207d4b01b5d42a932989412f",children:"Set compounding mode"}),(0,s.jsx)(n.p,{children:"Delegators can activate or deactivate auto compounding for their staked tokens. This can be set for all tokens or specific denominations."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ALL"}),": Set compound mode on all tokens (true/false)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DENOM"}),": Set compound mode on a specific token denomination (e.g., ukex)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking set-compound-info \\\n--from=$SIGNER $FLAGS_TX \\\n$ALL $DENOM\n"})}),(0,s.jsx)(n.h4,{id:"a20c73c980d645b697ce49666e11ffee",children:"Claim rewards/pool\u2019s derivatives"}),(0,s.jsx)(n.p,{children:"Delegators can claim all outstanding rewards (or pool\u2019s derivatives if auto-compounding is active)."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-rewards \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",children:"Claim undelegation"}),(0,s.jsxs)(n.p,{children:["Undelegations can be claimed using corresponding ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"delegation ID"})," and at the end of their respective ",(0,s.jsx)(n.code,{children:"unstaking_period"}),"."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ID"}),": Undelegation ID."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-undelegation \\\n--from=$SIGNER $FLAGS_TX \\\n$ID\n"})}),(0,s.jsx)(n.h4,{id:"1c2c1213febd4a98b8c3d3e4edda0f39",children:"Claiming matured undelegations"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"claim-matured-undelegations"}),", allows users to submit a transaction to claim all matured undelegations in one action. It's a convenient way to handle multiple matured undelegations without specifying each ID individually."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-matured-undelegations \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"7e12db69b62845f19f519ccf675e7eb2",children:"Delegator registration"}),(0,s.jsxs)(n.p,{children:["Users or smart contracts that have acquired KIRA\u2019s native staking derivative tokens can register as delegators to the respective staking pools. Registration is subject to the minimum staking amount requirement ",(0,s.jsx)(n.code,{children:"stake_min"}),"."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking register-delegator \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,s.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(n.h2,{id:"ba7958814c1e4cec8d89051b5bce8d0d",children:"Queries"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"undelegations"})}),(0,s.jsx)(n.th,{children:"Query all the undelegation records."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"staking-pool-delegators"})}),(0,s.jsx)(n.td,{children:"Query staking pool delegators."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"compound-info"})}),(0,s.jsx)(n.td,{children:"Query compound information of a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"outstanding-rewards"})}),(0,s.jsx)(n.td,{children:"Query outstanding rewards for a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pools"})}),(0,s.jsx)(n.td,{children:"Query all existing staking pools and their parameters and metrics."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"query-delegations"})}),(0,s.jsx)(n.td,{children:"Query delegations and rewards by delegator address and specific pool id or validator's address."})]})]})]}),(0,s.jsx)(n.h4,{id:"d4c36c977d1242f4b0955e6ff9c5b439",children:"Staking pool delegators"}),(0,s.jsx)(n.p,{children:"Retrieve delegators associated with a specific staking pool."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Address of the staking pool node."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking staking-pool-delegators $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"2570ce21001f4c8591815b04d233f18f",children:"All staking pool information"}),(0,s.jsx)(n.p,{children:"Query metrics and parameters of staking pools."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"78231b53b6694172857f1c9ed8917be0",children:"All pending undelegations"}),(0,s.jsxs)(n.p,{children:["Retrieve information about pending undelegations using the ",(0,s.jsx)(n.code,{children:"undelegations"})," query. This query allows for filtering based on the delegator's address and the validator's address."]}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If both ",(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"})," and ",(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"})," are left as empty strings, the query will return all existing undelegations. To specify an empty string as an argument in the command line, use ",(0,s.jsx)(n.code,{children:'""'}),"."]})}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address (optional)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Validator's address (optional)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"sekaid query multistaking undelegations $DELEGATOR_ADDRESS $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"8310aaae479a4f4e807e83e7a7db5e91",children:"Compounding information"}),(0,s.jsx)(n.p,{children:"Retrieve a delegator's compounding information."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking compound-info $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"ded77962e7e84ed398e024bfb5744e30",children:"Outstanding rewards"}),(0,s.jsx)(n.p,{children:"Query a delegator's outstanding rewards."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking outstanding-rewards $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(n.h2,{id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",children:"Governance"}),(0,s.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function g(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const t={tabItem:"tabItem_Ymn6"};var i=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.Z)(t.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>w});var s=a(7294),t=a(6905),i=a(2466),r=a(6550),d=a(469),o=a(1980),l=a(7392),c=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:t}}=e;return{value:n,label:a,attributes:s,default:t}}))}(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function g(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:a}=e;const t=(0,r.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(i),(0,s.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function f(e){const{defaultValue:n,queryString:a=!1,groupId:t}=e,i=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!g({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i}))),[l,h]=m({queryString:a,groupId:t}),[f,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Nk)(a);return[t,(0,s.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:t}),x=(()=>{const e=l??f;return g({value:e,tabValues:i})?e:null})();(0,d.Z)((()=>{x&&o(x)}),[x]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),p(e)}),[h,p,i]),tabValues:i}}var p=a(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=a(5893);function j(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:d}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const n=e.currentTarget,a=o.indexOf(n),t=d[a].value;t!==s&&(l(n),r(t))},h=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":a},n),children:d.map((e=>{let{value:n,label:a,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:c,...i,className:(0,t.Z)("tabs__item",x.tabItem,i?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function k(e){let{lazy:n,children:a,selectedValue:t}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function v(e){const n=f(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",x.tabList),children:[(0,b.jsx)(j,{...e,...n}),(0,b.jsx)(k,{...e,...n})]})}function w(e){const n=(0,p.Z)();return(0,b.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>d,a:()=>r});var s=a(7294);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e131ac00.a1ec4679.js b/assets/js/e131ac00.a1ec4679.js new file mode 100644 index 0000000..1ac4347 --- /dev/null +++ b/assets/js/e131ac00.a1ec4679.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8234],{1956:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>d,metadata:()=>l,toc:()=>h});var s=a(5893),t=a(1151),i=a(4866),r=a(5162);const d={title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Multistaking/Delegators",title:"Delegators",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Delegators.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",permalink:"/docs.kira.network/docs/94e4d0a6-8e45-469c-89a5-8ec65ca16381",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/docs/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},next:{title:"Slashing",permalink:"/docs.kira.network/docs/4672bb94-ed2b-4e45-9d33-af999825c193"}},c={},h=[{value:"Concept",id:"5c4703c095ef4be7a1ba267af6071f66",level:2},{value:"Native Liquid Staking",id:"fdb23dc5af87468898b340eda95f2ede",level:3},{value:"Staking Pools & Consensus Nodes Status",id:"c898af44293e44ef96a6c6cae5ed1186",level:3},{value:"Delegating and Associated Parameters",id:"c3d993328dfe4b9e85b1f93f390796af",level:3},{value:"Registration Mechanism for Offshore Staking Pool Delegators",id:"08bfc2b8fbcf411bae24ca442fa49e6a",level:3},{value:"Managing Staking Rewards",id:"df8d14384a764c199e8d69de637577af",level:3},{value:"Claiming Rewards",id:"7e84cbf07ad941c8b29dad7f14b4884f",level:4},{value:"Enabling Auto-compounding",id:"8095488798c1432baa345bae81d3dd4e",level:4},{value:"Undelegating & Cooling Period",id:"55d34613a10e460bb772b415455b2038",level:4},{value:"Delegators Push Out",id:"0a9ed94ceee64117a44cf6658c22a213",level:4},{value:"Cli Syntax & Examples",id:"bf9bed7d9d334bfd9d3d2af659f3437b",level:2},{value:"Transactions",id:"82a71b23509544a2a7ed389e996d72b3",level:2},{value:"Delegating",id:"9f9b21196a384f8984764f64df053d49",level:4},{value:"Undelegating",id:"5a5b0ec50c254a57804362266ba59c01",level:4},{value:"Set Compounding Mode",id:"4a865e4b207d4b01b5d42a932989412f",level:4},{value:"Claim Rewards/pool\u2019s Derivatives",id:"a20c73c980d645b697ce49666e11ffee",level:4},{value:"Claim Undelegation",id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",level:4},{value:"Claiming Matured Undelegations",id:"1c2c1213febd4a98b8c3d3e4edda0f39",level:4},{value:"Delegator Registration",id:"7e12db69b62845f19f519ccf675e7eb2",level:4},{value:"Queries",id:"ba7958814c1e4cec8d89051b5bce8d0d",level:2},{value:"Staking Pool Delegators",id:"d4c36c977d1242f4b0955e6ff9c5b439",level:4},{value:"All Staking Pool Information",id:"2570ce21001f4c8591815b04d233f18f",level:4},{value:"All Pending Undelegations",id:"78231b53b6694172857f1c9ed8917be0",level:4},{value:"Compounding Information",id:"8310aaae479a4f4e807e83e7a7db5e91",level:4},{value:"Outstanding Rewards",id:"ded77962e7e84ed398e024bfb5744e30",level:4},{value:"Governance",id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"5c4703c095ef4be7a1ba267af6071f66",children:"Concept"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators are KIRA token holders who want to participate in network security by delegating assets as collateral to one or more consensus nodes' staking pools in exchange for a share of their revenue. Because delegators share revenue and responsibility with their chosen consensus nodes, they should carefully consider which nodes to delegate to and monitor their stakes regularly. Consensus nodes can also be delegators, but they ",(0,s.jsx)("u",{children:"are not required to"}),". Staked assets are directly affected by the conduct of the elected nodes, so it is important for delegators to exercise diligence and diversification in their choices."]}),"\n",(0,s.jsx)(n.h3,{id:"fdb23dc5af87468898b340eda95f2ede",children:"Native Liquid Staking"}),"\n",(0,s.jsxs)(n.p,{children:["Consensus nodes on the Kira Network have staking pools that are designed equivalently to regular AMM liquidity pools like Uniswap, in order to achieve native liquid staking. When a certain number of tokens ",(0,s.jsx)(n.code,{children:""})," are deposited in the staking pool of a consensus node ",(0,s.jsx)(n.code,{children:"V"}),", an equal number of derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," are issued in return (similar to AMM LP tokens). These derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," can be freely moved and traded on and off-chain, while the underlying ",(0,s.jsx)(n.code,{children:""})," tokens remain staked. If V1 is slashed for double signing, the staked ",(0,s.jsx)(n.code,{children:""})," tokens can either be moved to the treasury, a governance ",(0,s.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"spending pool"})," or destroyed, while the derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," representing them would lose their 1-to-1 peg (similar to impermanent loss in AMM)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["E.g.: If 50% of ",(0,s.jsx)(n.code,{children:"XYZ"})," tokens staked with block proposer ",(0,s.jsx)(n.code,{children:"V1"})," get slashed, unstaking 2 ",(0,s.jsx)(n.code,{children:"V1/XYZ"})," from ",(0,s.jsx)(n.code,{children:"V1"}),"'s pool would only return 1 ",(0,s.jsx)(n.code,{children:"XYZ"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"c898af44293e44ef96a6c6cae5ed1186",children:"Staking Pools & Consensus Nodes Status"}),"\n",(0,s.jsxs)(n.p,{children:["In KIRA's network, each consensus node operates its own staking pool where delegators can stake their assets. The staking pool has a unique ID and is linked to the consensus node's address. The consensus node has control over the staking pool's status and can enable or disable it, as well as set the commission rate on block rewards. In addition, a consensus node can be ",(0,s.jsx)(n.code,{children:"active"}),", ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," depending on its performance, behavior or choice. While it is important to understand that the status of the staking pool is independent of the status of the consensus node, if a consensus node's status is ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," , and/or if its staking pool is ",(0,s.jsx)(n.code,{children:"disabled"}),", delegators are not able to delegate any additional tokens to that node\u2019s staking pool. They will only be able to undelegate their existing stake."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding consensus nodes status and ranking system please refer to the"})," ",(0,s.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,s.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,s.jsx)(n.em,{children:"module.\nFor more information regarding consensus nodes staking pool status please refer to the"})," ",(0,s.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,s.jsx)(n.em,{children:"Consensus nodes & staking pools"})})," ",(0,s.jsx)(n.em,{children:"section."})]}),"\n",(0,s.jsx)(n.h3,{id:"c3d993328dfe4b9e85b1f93f390796af",children:"Delegating and Associated Parameters"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA allows users to delegate and pay ",(0,s.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"})," with any token that has been whitelisted by governance. To ensure proper network functionality and security, specific management rules and limitations are defined and curated for each foreign token, such as exchange rates and staking pool rewards allowance. These rules are monitored by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," module, which sets bounds on the staking mechanism through the use of three parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_cap"})," : Sets the maximum share (%) of staking reward a given whitelisted staking token will be entitled per staking pool to prevent a malicious user from diluting the pool with any particular token in order to claim all the rewards. Setting specific shares also simplifies reward distribution by sidestepping the need to track how much eligible staking tokens are worth in terms of USD or KEX."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_min"}),": Sets the minimum delegation and undelegation amount per transaction for a particular token. This is designed to prevent dust spam attacks, where an attacker might attempt to disrupt block production by continuously staking or withdrawing trivial amounts of tokens with numerous accounts. Importantly, this parameter also ensures that a user cannot undelegate an amount that would leave behind a residual stake less than this minimum. Such a residual would be locked and become non-withdrawable. Detailed considerations related to dust-spam can be found in the ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"})," section."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"fee_rate"})," : Sets the conversation rate for foreign tokens in terms of KEX to use them as execution fees. ",(0,s.jsx)(n.code,{children:"fee_rate"})," is also used to determine if the ",(0,s.jsx)(n.code,{children:"stake_min"})," value is respected in case of delegation or if ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," is reached when a staking pool reaches its ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"maximum delegators capacity"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding delegators staking rewards distribution please refer to"}),(0,s.jsxs)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:[" ",(0,s.jsx)(n.em,{children:"this section"})]})," ",(0,s.jsx)(n.em,{children:"of the"})," ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,s.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,s.jsx)(n.em,{children:"module."})]}),"\n",(0,s.jsx)(n.h3,{id:"08bfc2b8fbcf411bae24ca442fa49e6a",children:"Registration Mechanism for Offshore Staking Pool Delegators"}),"\n",(0,s.jsxs)(n.p,{children:["As explained earlier, owning some staking pool's derivatives ",(0,s.jsx)(n.code,{children:"V/"})," is equivalent to having some token ",(0,s.jsx)(n.code,{children:""})," staked with consensus node ",(0,s.jsx)(n.code,{children:"V"}),". However, because the Cosmos SDK does not provide a hook on token transfers (yet?) and derivatives can be traded freely inside or outside the KIRA network, it is impossible to track staking pool delegators' shares in real time. To solve this problem, KIRA has implemented a registration mechanism where \"offshore\" delegators, such as users or smart contracts that acquired KIRA's native staking derivative tokens on the open market, can register those derivatives to the corresponding staking pool to earn the corresponding rewards. Additionally, each staking pool performs a balance check on its current delegators whenever it receives rewards (whenever the consensus nodes produces a block) and will automatically deregister any registered delegators that do not hold more than the minimum ",(0,s.jsx)(n.code,{children:"stake_min"})," of derivative tokens."]}),"\n",(0,s.jsx)(n.h3,{id:"df8d14384a764c199e8d69de637577af",children:"Managing Staking Rewards"}),"\n",(0,s.jsx)(n.h4,{id:"7e84cbf07ad941c8b29dad7f14b4884f",children:"Claiming Rewards"}),"\n",(0,s.jsx)(n.p,{children:"With auto-compounding activated, rewards are automatically reinvested, increasing the delegator's stake. However, the staking derivatives, representing these newly compounded rewards, aren't instantly transferred to the delegator's address to reduce overhead. They accumulate in the staking pool and must be claimed manually. Conversely, if a delegator decides not to use auto-compounding, they will have to manually claim all the rewards they accrue. Hence, in both scenarios, the delegator must manually intervene to include their rewards or rewards\u2019 derivatives into their active balance."}),"\n",(0,s.jsx)(n.h4,{id:"8095488798c1432baa345bae81d3dd4e",children:"Enabling Auto-compounding"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators have the flexibility to decide how they manage rewards earned from staking. They can opt for automatic reinvestment through the auto-compounding feature or claim them manually. This decision can be made for any token eligible for staking, as determined by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," . When enabled, rewards are automatically added to the delegator's stake. However, the corresponding staking derivatives are not sent to the delegator's address, as this would be too much of an overhead for the module to handle. Instead, they are simply accumulated in the staking pool and become claimable in the same way as standard rewards. In other words, when a user disables auto compounding, it will have to claim ",(0,s.jsx)("u",{children:"its rewards"})," manually; when it is enabled, it will have to claim ",(0,s.jsx)("u",{children:"its newly issued staking derivatives"})," manually. Each delegator has their unique auto-compounding schedule, distributing the computational demands and preventing the network from being overwhelmed by simultaneous compounding events. Configurations for this feature are maintained per user. Delegators can enable this feature for all tokens or for particular ones."]}),"\n",(0,s.jsxs)(n.p,{children:["Auto-compounding operates based on a consistent interval set across the network by the ",(0,s.jsx)(n.code,{children:"autocompound_interval_num_blocks"})," ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". The exact block at which a user's rewards get compounded depends on when they activate this feature. For example, with a network interval set at 10,000 blocks, a delegator enabling auto-compounding at block ",(0,s.jsx)(n.code,{children:"3"})," will see their rewards compounded at blocks ",(0,s.jsx)(n.code,{children:"10003"}),", ",(0,s.jsx)(n.code,{children:"20003"})," and so on. This property is set to ",(0,s.jsx)(n.code,{children:"17280"})," blocks at genesis."]}),"\n",(0,s.jsx)(n.h4,{id:"55d34613a10e460bb772b415455b2038",children:"Undelegating & Cooling Period"}),"\n",(0,s.jsxs)(n.p,{children:["A delegator can undelegate their stake at anytime to get back its original tokens. Any undelegation will trigger a fixed cooling period during which the stake remain locked and do not yield any reward. Once the cooling period expires, staked tokens ",(0,s.jsx)(n.code,{children:""})," can be claimed by providing the respective pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"})," which are then burned. The cooling period is the same for all staking tokens and defined by the governance through the following ",(0,s.jsx)(n.code,{children:"unstaking_period"})," network property (1 month by default)."]}),"\n",(0,s.jsx)(n.h4,{id:"0a9ed94ceee64117a44cf6658c22a213",children:"Delegators Push Out"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA has a feature that protects against dust spam attacks by limiting the maximum number of delegators for each individual staking pool with a network property called ",(0,s.jsx)(n.code,{children:"max_delegators"})," (which is set to 100 by default). If this maximum number of delegators is reached, new delegators will need to provide a higher stake than the smallest delegator in the pool in order to push them out. To prevent large stakeholders from easily pushing out smaller delegators from good consensus nodes, the minimum required stake to push out a delegator is set by the ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," property (which is a multiplier of the smallest stake value, 10 by default). This ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," can be adjusted by KIRA's governance and increased as the network grows. When a delegator is pushed out, they automatically receive any outstanding rewards they are owed."]}),"\n",(0,s.jsx)(n.h2,{id:"bf9bed7d9d334bfd9d3d2af659f3437b",children:"Cli Syntax & Examples"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(n.em,{children:"documentation for more details."})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$SIGNER"})})," ",(0,s.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(n.em,{children:"and"})," ",(0,s.jsxs)(n.em,{children:[(0,s.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(n.em,{children:"section"})]})}),"\n",(0,s.jsxs)(i.Z,{children:[(0,s.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(n.h2,{id:"82a71b23509544a2a7ed389e996d72b3",children:"Transactions"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"delegate"})}),(0,s.jsx)(n.th,{children:"Delegate to a pool."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"undelegate"})}),(0,s.jsx)(n.td,{children:"Start undelegation from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-rewards"})}),(0,s.jsx)(n.td,{children:"Claim rewards from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-undelegation"})}),(0,s.jsx)(n.td,{children:"Claim matured undelegation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-matured-undelegations"})}),(0,s.jsx)(n.td,{children:"Claim all matured undelegations in a single transaction."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"set-compound-info"})}),(0,s.jsx)(n.td,{children:"Set auto compounding mode."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"register-delegator"})}),(0,s.jsx)(n.td,{children:"Register as a pool delegator when acquiring pool derivatives externally."})]})]})]}),(0,s.jsx)(n.h4,{id:"9f9b21196a384f8984764f64df053d49",children:"Delegating"}),(0,s.jsxs)(n.p,{children:["Delegate tokens to a specific staking pool. This action locks the specified amount of ",(0,s.jsx)(n.code,{children:""})," tokens to a staking pool using the consensus node\u2019s address. It returns the corresponding pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"}),". The delegation amount cannot be lower than ",(0,s.jsx)(n.code,{children:"stake_min"}),". Delegation is only possible to an active consensus node."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to delegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking delegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"5a5b0ec50c254a57804362266ba59c01",children:"Undelegating"}),(0,s.jsxs)(n.p,{children:["Undelegating burns the corresponding ",(0,s.jsx)(n.code,{children:"V/"})," derivatives and initiates the claim of any outstanding rewards/compounds. The undelegated ",(0,s.jsx)(n.code,{children:""})," tokens are assigned an undelegation ID and become claimable after the ",(0,s.jsx)(n.code,{children:"unstaking_period"}),". The undelegation amount must meet the ",(0,s.jsx)(n.code,{children:"stake_min"})," requirements."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to undelegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking undelegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"4a865e4b207d4b01b5d42a932989412f",children:"Set Compounding Mode"}),(0,s.jsx)(n.p,{children:"Delegators can activate or deactivate auto compounding for their staked tokens. This can be set for all tokens or specific denominations."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ALL"}),": Set compound mode on all tokens (true/false)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DENOM"}),": Set compound mode on a specific token denomination (e.g., ukex)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking set-compound-info \\\n--from=$SIGNER $FLAGS_TX \\\n$ALL $DENOM\n"})}),(0,s.jsx)(n.h4,{id:"a20c73c980d645b697ce49666e11ffee",children:"Claim Rewards/pool\u2019s Derivatives"}),(0,s.jsx)(n.p,{children:"Delegators can claim all outstanding rewards (or pool\u2019s derivatives if auto-compounding is active)."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-rewards \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",children:"Claim Undelegation"}),(0,s.jsxs)(n.p,{children:["Undelegations can be claimed using corresponding ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"delegation ID"})," and at the end of their respective ",(0,s.jsx)(n.code,{children:"unstaking_period"}),"."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ID"}),": Undelegation ID."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-undelegation \\\n--from=$SIGNER $FLAGS_TX \\\n$ID\n"})}),(0,s.jsx)(n.h4,{id:"1c2c1213febd4a98b8c3d3e4edda0f39",children:"Claiming Matured Undelegations"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"claim-matured-undelegations"}),", allows users to submit a transaction to claim all matured undelegations in one action. It's a convenient way to handle multiple matured undelegations without specifying each ID individually."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-matured-undelegations \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"7e12db69b62845f19f519ccf675e7eb2",children:"Delegator Registration"}),(0,s.jsxs)(n.p,{children:["Users or smart contracts that have acquired KIRA\u2019s native staking derivative tokens can register as delegators to the respective staking pools. Registration is subject to the minimum staking amount requirement ",(0,s.jsx)(n.code,{children:"stake_min"}),"."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking register-delegator \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,s.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(n.h2,{id:"ba7958814c1e4cec8d89051b5bce8d0d",children:"Queries"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"undelegations"})}),(0,s.jsx)(n.th,{children:"Query all the undelegation records."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"staking-pool-delegators"})}),(0,s.jsx)(n.td,{children:"Query staking pool delegators."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"compound-info"})}),(0,s.jsx)(n.td,{children:"Query compound information of a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"outstanding-rewards"})}),(0,s.jsx)(n.td,{children:"Query outstanding rewards for a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pools"})}),(0,s.jsx)(n.td,{children:"Query all existing staking pools and their parameters and metrics."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"query-delegations"})}),(0,s.jsx)(n.td,{children:"Query delegations and rewards by delegator address and specific pool id or validator's address."})]})]})]}),(0,s.jsx)(n.h4,{id:"d4c36c977d1242f4b0955e6ff9c5b439",children:"Staking Pool Delegators"}),(0,s.jsx)(n.p,{children:"Retrieve delegators associated with a specific staking pool."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Address of the staking pool node."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking staking-pool-delegators $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"2570ce21001f4c8591815b04d233f18f",children:"All Staking Pool Information"}),(0,s.jsx)(n.p,{children:"Query metrics and parameters of staking pools."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"78231b53b6694172857f1c9ed8917be0",children:"All Pending Undelegations"}),(0,s.jsxs)(n.p,{children:["Retrieve information about pending undelegations using the ",(0,s.jsx)(n.code,{children:"undelegations"})," query. This query allows for filtering based on the delegator's address and the validator's address."]}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If both ",(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"})," and ",(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"})," are left as empty strings, the query will return all existing undelegations. To specify an empty string as an argument in the command line, use ",(0,s.jsx)(n.code,{children:'""'}),"."]})}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address (optional)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Validator's address (optional)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"sekaid query multistaking undelegations $DELEGATOR_ADDRESS $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"8310aaae479a4f4e807e83e7a7db5e91",children:"Compounding Information"}),(0,s.jsx)(n.p,{children:"Retrieve a delegator's compounding information."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking compound-info $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"ded77962e7e84ed398e024bfb5744e30",children:"Outstanding Rewards"}),(0,s.jsx)(n.p,{children:"Query a delegator's outstanding rewards."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking outstanding-rewards $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(n.h2,{id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",children:"Governance"}),(0,s.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function g(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const t={tabItem:"tabItem_Ymn6"};var i=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.Z)(t.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>w});var s=a(7294),t=a(6905),i=a(2466),r=a(6550),d=a(469),o=a(1980),l=a(7392),c=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:t}}=e;return{value:n,label:a,attributes:s,default:t}}))}(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function g(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:a}=e;const t=(0,r.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(i),(0,s.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function f(e){const{defaultValue:n,queryString:a=!1,groupId:t}=e,i=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!g({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i}))),[l,h]=m({queryString:a,groupId:t}),[f,x]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Nk)(a);return[t,(0,s.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:t}),p=(()=>{const e=l??f;return g({value:e,tabValues:i})?e:null})();(0,d.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),x(e)}),[h,x,i]),tabValues:i}}var x=a(2389);const p={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=a(5893);function j(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:d}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const n=e.currentTarget,a=o.indexOf(n),t=d[a].value;t!==s&&(l(n),r(t))},h=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":a},n),children:d.map((e=>{let{value:n,label:a,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:c,...i,className:(0,t.Z)("tabs__item",p.tabItem,i?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function k(e){let{lazy:n,children:a,selectedValue:t}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function v(e){const n=f(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",p.tabList),children:[(0,b.jsx)(j,{...e,...n}),(0,b.jsx)(k,{...e,...n})]})}function w(e){const n=(0,x.Z)();return(0,b.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>d,a:()=>r});var s=a(7294);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1a757b4.e2680830.js b/assets/js/e1a757b4.e2680830.js new file mode 100644 index 0000000..e0c0926 --- /dev/null +++ b/assets/js/e1a757b4.e2680830.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4884],{2853:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>t,metadata:()=>m,toc:()=>c});var n=a(5893),i=a(1151);a(4866),a(5162);const t={title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},l=void 0,m={id:"KIRA\u2019s-Economics/Unified-Liquid-Staking",title:"Unified Liquid Staking",description:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.",source:"@site/tabs/learn/KIRA\u2019s-Economics/Unified-Liquid-Staking.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/492e443f-5703-4d95-8508-a101405efde3",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Unified Liquid Staking",sidebar_position:4,slug:"/492e443f-5703-4d95-8508-a101405efde3"},sidebar:"defaultSidebar",previous:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"},next:{title:"Glossary",permalink:"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b"}},r={},c=[];function h(s){const e={annotation:"annotation",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",munderover:"munderover",p:"p",semantics:"semantics",span:"span",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default."}),"\n",(0,n.jsx)(e.p,{children:"Liquid staking has multiple pain points in the current DeFi landscape. Due to competition within the LSD sector, LSD liquidity is fragmented across DeFi. Furthermore, each LSD must be integrated individually for use within DeFi protocols, which introduces coordination overhead, additional attack vectors, and value leaks."}),"\n",(0,n.jsx)(e.p,{children:"KIRA's Token Basketing module solves for the friction associated with liquid staking by aggregating users' receipt tokens by their liquidity denominations, into cohesive fungible assets."}),"\n",(0,n.jsx)(e.p,{children:"The Token Basketing module's AMM is self-rebalancing and offers swaps without price impact."}),"\n",(0,n.jsx)(e.p,{children:"A important aspect of the swap mechanism is that the sum of products of individual token amounts and their weights remain constant before and after the swap. This is expressed mathematically as:"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"\u230a"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.munderover,{children:[(0,n.jsx)(e.mo,{children:"\u2211"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"0"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"L"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mo,{children:"\u22c5"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"k"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"["}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]}),(0,n.jsx)(e.mo,{fence:"true",children:"\u230b"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\left \\lfloor{ \\sum_{i=0}^{tokens.Length - 1}tokens[i].weight \\cdot tokens[i].amount}\\right \\rfloor = constant"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.1609em",verticalAlign:"-1.2777em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"\u230a"})}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mop op-limits",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.8832em"},children:[(0,n.jsxs)(e.span,{style:{top:"-1.8723em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"="}),(0,n.jsx)(e.span,{className:"mord mtight",children:"0"})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{children:(0,n.jsx)(e.span,{className:"mop op-symbol large-op",children:"\u2211"})})]}),(0,n.jsxs)(e.span,{style:{top:"-4.3471em",marginLeft:"0em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3.05em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"L"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mbin mtight",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.2777em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mclose",children:"]"}),(0,n.jsx)(e.span,{className:"mord",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03148em"},children:"k"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mopen",children:"["}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mclose",children:"]"}),(0,n.jsx)(e.span,{className:"mord",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"\u230b"})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6151em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"co"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"an"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"This means that the cumulative value of the tokens in the basket remain unchanged (or slightly larger due to rounding errors). Any additional tokens due to the applied slippage is accounted for in the surplus, while the swap fee is be paid to the network as a fee reward. This ensures that the value of the basket remains constant, providing stability to the system."}),"\n",(0,n.jsx)(e.p,{children:"Assets within the pool are weighted according to their underlying staked value - these predetermined weights dictate the fixed price ratios at which incoming swaps are filled."}),"\n",(0,n.jsx)(e.p,{children:"Governance must ensure that the weights of each token in the basket are properly configured to maintain the value of the issued basket tokens. Should the governance decide to re-configure one or many of the weight properties of the basket (for example due to peg changes), it is important to ensure that the sum of the products of the weight and amount of each token in the basket must be greater than or equal to the amount of issued basket tokens B otherwise there will not be enough tokens in the basket to redeem. For example, if the basket B includes tokens A, B, and C, the governance must ensure that"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"g"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"t"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsx)(e.mo,{children:"\u2265"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"B"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"I"}),(0,n.jsx)(e.mi,{children:"D"}),(0,n.jsx)(e.mo,{children:">"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mo,{children:"<"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mo,{children:">"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\left(A_{amount} \\times A_{weight}\\right) + \\left(B_{amount} \\times B_{weight}\\right) + \\left(C_{amount} \\times C_{weight}\\right) \\geq B_{\\_.total\\_amount\\_issued}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2806em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0715em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"g"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"\u2265"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0503em",verticalAlign:"-0.367em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05017em"},children:"B"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.07847em"},children:"I"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.02778em"},children:"D"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:"<"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"m"}),(0,n.jsx)(e.span,{className:"mrel mtight",children:">"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"."}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"am"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"t"}),(0,n.jsx)(e.span,{className:"mord mtight",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"ss"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.367em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"If the weights are not correctly configured, the governance proposal to update the basket weights will fail."}),"\n",(0,n.jsx)(e.p,{children:"To protect against depegging scenarios, each token has a configurable maximum limit within its basket. In the event that an incoming swap would disbalance the composition of a particular basket, dynamic fees are adjusted to return it to equilibrium, incentivizing swaps rebalancing the basket over swaps that do not."}),"\n",(0,n.jsx)(e.p,{children:"As token baskets are built into the base layer, this same weighting system adjusts automatically for changes in underlying staked value. Staking rewards and slashing penalties are automatically accounted for, without dependence on any third-party oracle."}),"\n",(0,n.jsx)(e.p,{children:"Should intervention be required from onchain governance, multiple failsafe mechanisms exist. Validators can vote to include or exclude tokens from baskets. In the event of an ongoing emergency, swaps can be halted by governance until the situation is resolved. Additionally, swap fees accumulate toward a surplus which functions like an insurance fund controlled by chain governance. In the unlikely event that an asset does become depegged within its basket, governance can mobilize these surplus funds toward the asset\u2019s peg restoration."})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},5162:(s,e,a)=>{a.d(e,{Z:()=>l});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var t=a(5893);function l(s){let{children:e,hidden:a,className:l}=s;return(0,t.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,l),hidden:a,children:e})}},4866:(s,e,a)=>{a.d(e,{Z:()=>b});var n=a(7294),i=a(6905),t=a(2466),l=a(6550),m=a(469),r=a(1980),c=a(7392),h=a(12);function d(s){return n.Children.toArray(s).filter((s=>"\n"!==s)).map((s=>{if(!s||(0,n.isValidElement)(s)&&function(s){const{props:e}=s;return!!e&&"object"==typeof e&&"value"in e}(s))return s;throw new Error(`Docusaurus error: Bad child <${"string"==typeof s.type?s.type:s.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function o(s){const{values:e,children:a}=s;return(0,n.useMemo)((()=>{const s=e??function(s){return d(s).map((s=>{let{props:{value:e,label:a,attributes:n,default:i}}=s;return{value:e,label:a,attributes:n,default:i}}))}(a);return function(s){const e=(0,c.l)(s,((s,e)=>s.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((s=>s.value)).join(", ")}" found in . Every value needs to be unique.`)}(s),s}),[e,a])}function x(s){let{value:e,tabValues:a}=s;return a.some((s=>s.value===e))}function p(s){let{queryString:e=!1,groupId:a}=s;const i=(0,l.k6)(),t=function(s){let{queryString:e=!1,groupId:a}=s;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,r._X)(t),(0,n.useCallback)((s=>{if(!t)return;const e=new URLSearchParams(i.location.search);e.set(t,s),i.replace({...i.location,search:e.toString()})}),[t,i])]}function j(s){const{defaultValue:e,queryString:a=!1,groupId:i}=s,t=o(s),[l,r]=(0,n.useState)((()=>function(s){let{defaultValue:e,tabValues:a}=s;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((s=>s.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((s=>s.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:t}))),[c,d]=p({queryString:a,groupId:i}),[j,g]=function(s){let{groupId:e}=s;const a=function(s){return s?`docusaurus.tab.${s}`:null}(e),[i,t]=(0,h.Nk)(a);return[i,(0,n.useCallback)((s=>{a&&t.set(s)}),[a,t])]}({groupId:i}),u=(()=>{const s=c??j;return x({value:s,tabValues:t})?s:null})();(0,m.Z)((()=>{u&&r(u)}),[u]);return{selectedValue:l,selectValue:(0,n.useCallback)((s=>{if(!x({value:s,tabValues:t}))throw new Error(`Can't select invalid tab value=${s}`);r(s),d(s),g(s)}),[d,g,t]),tabValues:t}}var g=a(2389);const u={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var N=a(5893);function f(s){let{className:e,block:a,selectedValue:n,selectValue:l,tabValues:m}=s;const r=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),h=s=>{const e=s.currentTarget,a=r.indexOf(e),i=m[a].value;i!==n&&(c(e),l(i))},d=s=>{let e=null;switch(s.key){case"Enter":h(s);break;case"ArrowRight":{const a=r.indexOf(s.currentTarget)+1;e=r[a]??r[0];break}case"ArrowLeft":{const a=r.indexOf(s.currentTarget)-1;e=r[a]??r[r.length-1];break}}e?.focus()};return(0,N.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e),children:m.map((s=>{let{value:e,label:a,attributes:t}=s;return(0,N.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:s=>r.push(s),onKeyDown:d,onClick:h,...t,className:(0,i.Z)("tabs__item",u.tabItem,t?.className,{"tabs__item--active":n===e}),children:a??e},e)}))})}function y(s){let{lazy:e,children:a,selectedValue:i}=s;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const s=t.find((s=>s.props.value===i));return s?(0,n.cloneElement)(s,{className:"margin-top--md"}):null}return(0,N.jsx)("div",{className:"margin-top--md",children:t.map(((s,e)=>(0,n.cloneElement)(s,{key:e,hidden:s.props.value!==i})))})}function v(s){const e=j(s);return(0,N.jsxs)("div",{className:(0,i.Z)("tabs-container",u.tabList),children:[(0,N.jsx)(f,{...s,...e}),(0,N.jsx)(y,{...s,...e})]})}function b(s){const e=(0,g.Z)();return(0,N.jsx)(v,{...s,children:d(s.children)},String(e))}},1151:(s,e,a)=>{a.d(e,{Z:()=>m,a:()=>l});var n=a(7294);const i={},t=n.createContext(i);function l(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function m(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:l(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/e3fe73b4.ffb20b89.js b/assets/js/e3fe73b4.ffb20b89.js deleted file mode 100644 index 413d67d..0000000 --- a/assets/js/e3fe73b4.ffb20b89.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8990],{8241:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var t=n(5893),r=n(1151),i=n(4866),o=n(5162);const a={title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},d=void 0,l={id:"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions",title:"Poor Network Conditions",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d",permalink:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Poor Network Conditions",sidebar_position:9,slug:"/65e3e6fe-040a-4716-b13b-9e27def6ff9d"},sidebar:"defaultSidebar",previous:{title:"Data Registry",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"},next:{title:"Layer 2",permalink:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73"}},c={},h=[{value:"Concept",id:"e1a58e9de5854012944a7cf97ad0fab4",level:2},{value:"Ensuring network & users safety",id:"b3ef892b6bbc41808a8d360e4608dfda",level:3},{value:"Restricted transaction types",id:"95043ba1a6d445d2aeba125aad215bba",level:3},{value:"Parameters",id:"f76721f5b3a845d483bd30cafdb0a488",level:2},{value:"Cli syntax & examples",id:"55563826bad845afa3dfea091debbfb2",level:2},{value:"Transactions",id:"8c33550d55ec4863abaa5a6b2030a061",level:2},{value:"Queries",id:"81e1f96b40384b0fa0f8294e1765e57d",level:2},{value:"Query allowed messages",id:"5fbfe6c6f9c34359ba2c5c89dd565820",level:4},{value:"Governance",id:"b0d04288f92840e5913b44d432e62d5a",level:2},{value:"Update poor network messages list",id:"45e91f5f88a84e02bb77a00af6bf8ebb",level:4}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"e1a58e9de5854012944a7cf97ad0fab4",children:"Concept"}),"\n",(0,t.jsxs)(s.p,{children:["The robustness of the KIRA network is maintained by a set of active consensus nodes who ensure the smooth operation and security of the system. However, external factors or unforeseen events can sometimes hinder their ability to maintain the integrity of the network. Such a scenario where the number of active consensus nodes drops below the defined ",(0,t.jsx)(s.code,{children:"min_validators"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})}),' is termed as "Poor Network Conditions".']}),"\n",(0,t.jsx)(s.p,{children:"This condition could be attributed to various potential causes:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Malicious DOS/DDOS attacks targeting consensus nodes not utilizing sentry nodes."}),"\n",(0,t.jsx)(s.li,{children:"Coordinated interference from multiple ISPs used by consensus nodes."}),"\n",(0,t.jsx)(s.li,{children:"Anomalies in DNS servers or incorrect address routing."}),"\n",(0,t.jsx)(s.li,{children:"Failed network upgrades leading to unexpected behaviors."}),"\n",(0,t.jsx)(s.li,{children:'Global political events affecting internet connectivity, like the "Great Firewall 2.0".'}),"\n",(0,t.jsx)(s.li,{children:"Among other unforeseen circumstances..."}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"In response to these challenges, this module activates specific protocols and safeguards designed to protect the network and its users. These measures include limiting certain transactions and adjusting network properties to ensure asset safety and network stability until normal conditions are restored."}),"\n",(0,t.jsx)(s.h3,{id:"b3ef892b6bbc41808a8d360e4608dfda",children:"Ensuring network & users safety"}),"\n",(0,t.jsxs)(s.p,{children:["The primary objective during poor network conditions is to safeguard user assets until the network regains its strength. The ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," ",(0,t.jsx)(s.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:(0,t.jsx)(s.strong,{children:"network property"})})," is instrumental in this context. It dictates the upper limit for asset transfers during compromised network states. By equating this value with the ",(0,t.jsx)(s.code,{children:"max_tx_fee"}),", the network can prevent potential asset misappropriation by malicious entities."]}),"\n",(0,t.jsxs)(s.p,{children:["Furthermore, custodians can monitor the ",(0,t.jsx)(s.code,{children:"min_validators"})," and ",(0,t.jsx)(s.code,{children:"poor_network_max_bank_send"})," to decide whether to accept transfers from a network or a fork, especially if the consensus nodes count dips below the safety threshold. Essentially, these measures deter malicious consensus nodes from gaining undue advantages, such as attempting to sideline honest consensus nodes for their own gain."]}),"\n",(0,t.jsx)(s.h3,{id:"95043ba1a6d445d2aeba125aad215bba",children:"Restricted transaction types"}),"\n",(0,t.jsxs)(s.p,{children:["In light of such situations, the network can determine which ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:(0,t.jsx)(s.strong,{children:"Transaction Message Types"})})," are permissible. This proactive approach halts any unexpected network activities until a sufficient number of nodes is available for secure chain operation."]}),"\n",(0,t.jsx)(s.p,{children:"The default set of allowed messages during poor network conditions are:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"MESSAGE TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal"})}),(0,t.jsx)(s.td,{children:"Submit a new governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSetNetworkProperties"})}),(0,t.jsx)(s.td,{children:"Update network-level properties/settings"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeVoteProposal"})}),(0,t.jsx)(s.td,{children:"Cast a vote on an existing governance proposal"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimCouncilor"})}),(0,t.jsx)(s.td,{children:"Request to claim a councilor role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistPermissions"})}),(0,t.jsx)(s.td,{children:"Grant certain permissions to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistPermissions"})}),(0,t.jsx)(s.td,{children:"Revoke certain permissions from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCreateRole"})}),(0,t.jsx)(s.td,{children:"Create a new network role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeAssignRole"})}),(0,t.jsx)(s.td,{children:"Assign an existing role to an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnassignRole"})}),(0,t.jsx)(s.td,{children:"Remove a role from an entity"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Grant specific permissions to a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Revoke specific permissions from a role"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveWhitelistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove granted permissions from a role's whitelist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRemoveBlacklistRolePermission"})}),(0,t.jsx)(s.td,{children:"Remove permissions from a role's blacklist"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeClaimValidator"})}),(0,t.jsx)(s.td,{children:"Request to claim validator seat"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeActivate"})}),(0,t.jsx)(s.td,{children:"Activate the consensus node that was previously inactivated for downtime"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypePause"})}),(0,t.jsx)(s.td,{children:"Temporarily pause the consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeUnpause"})}),(0,t.jsx)(s.td,{children:"Resume a previously paused consensus node"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRegisterIdentityRecords"})}),(0,t.jsx)(s.td,{children:"Register new identity records"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeEditIdentityRecord"})}),(0,t.jsx)(s.td,{children:"Modify an existing identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeRequestIdentityRecordsVerify"})}),(0,t.jsx)(s.td,{children:"Request verification for an identity record"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeHandleIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Handle incoming verification requests"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeCancelIdentityRecordsVerifyRequest"})}),(0,t.jsx)(s.td,{children:"Cancel a previously made verification request"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"f76721f5b3a845d483bd30cafdb0a488",children:"Parameters"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"NAME"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"TYPE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"EXAMPLE"})}),(0,t.jsx)(s.th,{children:(0,t.jsx)(s.strong,{children:"DESCRIPTION"})})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"poor_network_messages"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"[]string"})}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.code,{children:"MsgTypeSubmitProposal,MsgTypeSetNetworkProperties,\u2026"})}),(0,t.jsx)(s.td,{children:"A list defining the type of messages allowed during poor network conditions."})]})})]}),"\n",(0,t.jsx)(s.h2,{id:"55563826bad845afa3dfea091debbfb2",children:"Cli syntax & examples"}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,t.jsx)(s.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,t.jsx)(s.em,{children:"Roles & Permissions"})})," ",(0,t.jsx)(s.em,{children:"documentation for more details."})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$SIGNER"})})," ",(0,t.jsx)(s.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,t.jsx)(s.em,{children:(0,t.jsx)(s.code,{children:"$FLAGS_TX"})})," ",(0,t.jsx)(s.em,{children:"and"})," ",(0,t.jsxs)(s.em,{children:[(0,t.jsx)(s.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,t.jsx)(s.em,{children:"section"})]})}),"\n",(0,t.jsxs)(i.Z,{children:[(0,t.jsxs)(o.Z,{value:"transactions ",label:"Transactions ",children:[(0,t.jsx)(s.h2,{id:"8c33550d55ec4863abaa5a6b2030a061",children:"Transactions"}),(0,t.jsx)(s.p,{children:"There is no transactions other than the governance proposals for this sub-module"})]}),(0,t.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,t.jsx)(s.h2,{id:"81e1f96b40384b0fa0f8294e1765e57d",children:"Queries"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"poor-network-messages"})}),(0,t.jsx)(s.th,{children:"Retrieve a list of allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"5fbfe6c6f9c34359ba2c5c89dd565820",children:"Query allowed messages"}),(0,t.jsxs)(s.p,{children:["Retrieve a list of allowed transaction message types during poor network conditions using the ",(0,t.jsx)(s.code,{children:"poor-network-messages"})," command."]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid query customgov poor-network-messages $FLAGS_QR | jq\n"})})]}),(0,t.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,t.jsx)(s.h2,{id:"b0d04288f92840e5913b44d432e62d5a",children:"Governance"}),(0,t.jsx)(s.table,{children:(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:(0,t.jsx)(s.code,{children:"set-poor-network-msgs"})}),(0,t.jsx)(s.th,{children:"Create a proposal for updating allowed transaction message types during poor network conditions."})]})})}),(0,t.jsx)(s.h4,{id:"45e91f5f88a84e02bb77a00af6bf8ebb",children:"Update poor network messages list"}),(0,t.jsxs)(s.p,{children:["The CLI command, ",(0,t.jsx)(s.code,{children:"set-poor-network-msgs"}),", is utilized to create a proposal for updating the allowed transaction message types during poor network conditions. The command accepts the following arguments and flags:"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Args"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$MESSAGES"}),": A list of transaction message types that should be allowed during poor network conditions. List of existing messages is vailable ",(0,t.jsx)(s.a,{href:"https://github.com/KiraCore/sekai/blob/master/types/Msg.go",children:"here"}),"."]}),"\n"]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Flags"})}),(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$TITLE"}),': The title of the proposal, defaulting to "Update poor network messages".']}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"$DESCRIPTION"}),": The description of the proposal, defaulting to \"Allowing submission of '[$MESSAGES]' during poor network conditions\"."]}),"\n"]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"sekaid tx customgov proposal set-poor-network-msgs \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n$MESSAGES\n"})})]})]})]})}function p(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},5162:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var t=n(6905);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,o),hidden:n,children:s})}},4866:(e,s,n)=>{n.d(s,{Z:()=>w});var t=n(7294),r=n(6905),i=n(2466),o=n(6550),a=n(469),d=n(1980),l=n(7392),c=n(12);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,l.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[s,n])}function p(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const r=(0,o.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=u(e),[o,d]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(s){if(!p({value:s,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[l,h]=x({queryString:n,groupId:r}),[j,f]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,c.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),m=(()=>{const e=l??j;return p({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{m&&d(m)}),[m]);return{selectedValue:o,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,i]),tabValues:i}}var f=n(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:o,tabValues:a}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const s=e.currentTarget,n=d.indexOf(s),r=a[n].value;r!==t&&(l(s),o(r))},h=e=>{let s=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>d.push(e),onKeyDown:h,onClick:c,...i,className:(0,r.Z)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function v(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function y(e){const s=j(e);return(0,b.jsxs)("div",{className:(0,r.Z)("tabs-container",m.tabList),children:[(0,b.jsx)(g,{...e,...s}),(0,b.jsx)(v,{...e,...s})]})}function w(e){const s=(0,f.Z)();return(0,b.jsx)(y,{...e,children:h(e.children)},String(s))}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>o});var t=n(7294);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e4f4b9fb.2dc02ef4.js b/assets/js/e4f4b9fb.2dc02ef4.js new file mode 100644 index 0000000..2f88943 --- /dev/null +++ b/assets/js/e4f4b9fb.2dc02ef4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9193],{3211:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var o=n(5893),s=n(1151);n(4866),n(5162);const a={title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},i=void 0,r={id:"Glossary",title:"Glossary",description:"- RollApp: Decentralized application",source:"@site/tabs/Learn/Glossary.mdx",sourceDirName:".",slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b",permalink:"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},sidebar:"defaultSidebar",previous:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3"}},l={},c=[];function u(e){const t={li:"li",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"RollApp:"})," Decentralized application"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"SEKAI:"})," SEKAI is KIRA Network's base layer (L1) blockchain application sometimes referred to as \u201cbackend\u201d. The role of SEKAI is to be a source of shared security as well as a governance and settlement layer for all KIRA RollApps (L2). KIRA Blockchain preserves information such as user account balances, governance permissions, and RollApp state roots as well as other essential data for coordinating both L1 and L2 operations."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. The reason behind multi-staking implementation in KIRA is to increase the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"INTERX:"})," INTERX, which stands for Interchain NginX, is a decentralized middleware making it simple and intuitive to interact with KIRA network. INTERX has a supporting role for both frontends as dAPI gateway as well as for the L2 applications abstracting the complexity of blockchains and serving as a Content Availability Layer and P2P node discovery tool. In the context of RollApps INTERX is used as both DA and Sequencer so that developers can focus fully on business logic and not infrastructure. One of the important features of INTERX is acting as a light client replacement and removes the dependency on centralized SSL certificate authorities through a combination of digital signatures and fraud proofs."]}),"\n",(0,o.jsx)(t.li,{children:"RYOKAI: The next generation of the KIRA Manager (KM 2.0) supporting the orchestration of the KIRA L2 applications."}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"VFG (Virtual Finality Gadget)"}),": The Virtual Finality Gadget (VFG) is a programmable finality enabling decentralized applications to share the security of the base layer and define their own consensus rules. The VFG is a protocol that enables KIRA to support any type of RollApp (Pessimistic, Optimistic, General Purpose, Recursive Blockchain). At the core of VFG lies the idea of splitting the application into dedicated execution and verification parts. Depending on which network participants run which part (execution or verification logic) any modern consensus type can be virtualized."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Monolithic Blockchain:"})," In a monolithic blockchain, consensus nodes handle all network functions. These include processing transactions for all RollApps, verifying transaction correctness, managing data storage, and achieving consensus among nodes. This model integrates all core tasks into a single blockchain system."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Modular Blockchain:"})," A modular blockchain is a system where various functions of the blockchain stack are separated into independent networks and then interconnected. This approach is similar to the concept of microservices in traditional web architectures, where different components like notifications, storage, monitoring, and payment are split into distinct services and integrated via APIs. In a modular blockchain, components such as the execution layer (i.e. sequencers), data availability layer, and settlement layer are distinct yet linked through specific protocols."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Hypermodularity:"})," Hypermodularity refers to a system where all essential modular components are readily accessible to the nodes that require them, without the need to retrieve them from complex, dependent networks. This architecture aims to reduce unnecessary overhead, complexity, and dependency risk. An example here might be network layer awareness of the node location allowing DA microservice to be positioned right next to the Sequencer on the physical layer or other location relevant to a particular application and user-boosting efficiency."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Rollup/Rolldown:"}),' These terms describe different methods of finalizing the state transitions of Layer 2, particularly user balances or overall database state. In the case of "Rollups," state transitions that are attempted to be settled on the base layer are assumed to be by default correct unless evidence in the form of fraud proof is provided. In the case of "Rolldowns," state transitions that are attempted to be settled require a threshold of verifiers to accept them - for that reason, Rolldowns are sometimes referred to as "Pessimistic Rollups." In general, Rollup might be also referred to as an L2 or an independent network that uses a "pessimistic" or "optimistic" settlement with a larger base layer network (e.g., Ethereum) that it actively observes to gain access to tokens or otherwise communicate with other networks or applications. We might refer to such networks as sidechains, zones, and/or parachains. If such a network serves a very specific purpose, it might be also referred to as an "AppChain," or in other words, an Application Specific Blockchain. As of 2024, AppChains are an extinct concept, but you might come across them in various crypto-related literature and topics. In the case of KIRA, thanks to VFG, we can classify all types of blockchain or blockchain-less applications requiring trustless compute verification as "General Purpose Rollups" and do not have to reason about their inner-workings.']}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Optimistic Layer 2:"})," In the optimistic approach, the computation of the new state of L2 is assumed to be correct by the Executor, until proven incorrect. The finality or computational verification of the rollup's new state is rerun only by one or more nodes that choose to do so. If no node disputes the state within a certain time frame (typically 7 days), it is then considered finalized."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Pessimistic Layer 2:"})," In this approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. The finality or computational verification of the rollup's new state is deterministically re-executed by one or more other nodes. An example of a pessimistic rollup is the use of Zero-Knowledge proofs, where the Executor generates a proof, and then another node verifies this proof. The proof verification logic is deterministic and uniform across all verifiers."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"General Layer 2:"})," In the general approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. Finality is still contingent upon at least one node's re-execution of the state transition, but the verification can employ non-deterministic methods. This approach accommodates a broader spectrum of application frameworks, e.g., applications that operate at CPU clock speeds, also known as blockchain-less applications."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Blockchain-less Application:"})," A blockchain-less application is a type of RollApp that processes user transactions in real-time, without the traditional blockchain mempool. This absence of a visible mempool eliminates the possibility of malicious participants manipulating transaction order, thereby reducing common issues such as front-running and Maximum Extractable Value exploitation. The responsibility for maintaining the integrity of transaction processing and execution order lies with the RollApp Leader, who, in the event of any provable misconduct, can be subject to eviction."]}),"\n",(0,o.jsx)(t.li,{children:"Consensus node (validator): A Consensus node is an active network participant responsible for processing transactions, adding new blocks to SEKAI, and storing SEKAI state by running a \u2018validator\u2019 node. Each node is responsible for creating and managing its unique staking pool where delegators can lock their funds to provide security to the network. Additionally, Consensus nodes may opt in to act as Executors for RollApps."}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Delegator"}),": A Delegator is any network participant who engages in consensus by locking assets as collateral to one or multiple staking pools without necessarily running a \u2018validator\u2019 node. Note that KIRA doesn\u2019t require block proposers to have a minimum self-bonded stake to pledge their honesty. It is the responsibility of delegators to exercise due diligence and diversification when choosing a block proposer staking pool, as the risk of staked assets is directly exposed to the block proposer\u2019s actions. However, contrary to other PoS blockchains, double-signing is the only behavior that results in slashing (downtime is not penalized)."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Session:"})," A RollApp session refers to a designated period during which a RollApp is executed by a single Executor, known as the RollApp Leader. This session encompasses the operational phase of the RollApp: the execution of its code and the subsequent processing of any changes to SEKAI state and/or the RollApp's internal database. The session concludes with the submission of these changes for verification by Fishermen, and consensus by other Executors, in cases where more than one Executor is involved. For changes to be accepted, they must be approved by a supermajority of Executors and receive no rejections from Fishermen."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Verifier:"})," A Verifier is a participant responsible for verifying the correctness of submissions made by the RollApp Leader following the execution phase of a RollApp session. Verifiers are either Fishermen or Executors who are not currently serving as the RollApp Leader."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Executor:"})," An Executor is a consensus node responsible for the validation and approval of the outcomes of a RollApp session. They are responsible for storing the RollApp's internal state and reviewing and voting on the results submitted by the RollApp Leader, including changes to SEKAI state and updates to the RollApp's internal state. Executors who are not serving as the RollApp Leader automatically assume the role of a Verifier. Executors have the freedom to select which RollApp(s) they wish to run, based on system requirements, and/or they can be appointed by the RollApp's controllers."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"RollApp Leader:"})," A RollApp Leader, also referred to as a Sequencer, is a single Executor responsible for executing a RollApp session. They are tasked with computing the outcomes of the RollApp, such as changes in SEKAI state and/or RollApp internal database updates. The RollApp Leader submits these results for verification by Fishermen, and consensus by other Executors in cases where more than one Executor is involved."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Controller(s):"})," This term refer to the person or team responsible for developing and maintaining a RollApp. They are represented by a set of KIRA addresses and have the ability to update the controller set and upgrade the RollApp's binaries and core functionality through new releases. Note that KIRA implements account abstraction, so a RollApp can serve as its own Controller. As the managers of a RollApp, Controllers have the authority to approve or deny Consensus nodes participation as Executors or Verifiers. This gives them control over who can validate and execute transactions for their particular application."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Fishermen:"})," They are a subset of RollApp Verifiers who are tasked with specializing in overseeing and validating state transitions of a RollApp. Like the Executors, they are responsible for storing the RollApp's internal state. However, they are distinct from Executors in that they are not part of SEKAI validator set and therefore cannot become RollApp leaders. Their primary function is to ensure the correctness of state transitions using any chosen proprietary logic, with the authority to halt an application if they detect incorrect transitions."]}),"\n"]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var o=n(6905);const s={tabItem:"tabItem_Ymn6"};var a=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var o=n(7294),s=n(6905),a=n(2466),i=n(6550),r=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:o,default:s}}=e;return{value:t,label:n,attributes:o,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(a),(0,o.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(s.location.search);t.set(a,e),s.replace({...s.location,search:t.toString()})}),[a,s])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,a=h(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const o=n.find((e=>e.default))??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:t,tabValues:a}))),[c,d]=f({queryString:n,groupId:s}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,a]=(0,u.Nk)(n);return[s,(0,o.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:s}),g=(()=>{const e=c??m;return p({value:e,tabValues:a})?e:null})();(0,r.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,a]),tabValues:a}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=n(5893);function v(e){let{className:t,block:n,selectedValue:o,selectValue:i,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==o&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:a}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...a,className:(0,s.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":o===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:s}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===s));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function x(e){const t=m(e);return(0,y.jsxs)("div",{className:(0,s.Z)("tabs-container",g.tabList),children:[(0,y.jsx)(v,{...e,...t}),(0,y.jsx)(w,{...e,...t})]})}function k(e){const t=(0,b.Z)();return(0,y.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(7294);const s={},a=o.createContext(s);function i(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e4f4b9fb.992297a1.js b/assets/js/e4f4b9fb.992297a1.js deleted file mode 100644 index f7f8d71..0000000 --- a/assets/js/e4f4b9fb.992297a1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9193],{3211:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var s=n(5893),o=n(1151);n(4866),n(5162);const a={title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},i=void 0,r={id:"Glossary",title:"Glossary",description:"- dApp: Decentralized application",source:"@site/tabs/Learn/Glossary.mdx",sourceDirName:".",slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b",permalink:"/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},sidebar:"defaultSidebar",previous:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3"}},l={},c=[];function d(e){const t={li:"li",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"dApp"}),": Decentralized application"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"SEKAI:"})," SEKAI is KIRA Network's base layer (L1) blockchain application sometimes referred to as \u201cbackend\u201d. The role of SEKAI is to be a source of shared security as well as a governance and settlement layer for all KIRA RollApps (L2). KIRA Blockchain preserves information such as user account balances, governance permissions, and dApp state roots as well as other essential data for coordinating both L1 and L2 operations."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. The reason behind multi-staking implementation in KIRA is to increase the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"INTERX:"})," INTERX, which stands for Interchain NginX, is a decentralized middleware making it simple and intuitive to interact with KIRA network. INTERX has a supporting role for both frontends as dAPI gateway as well as for the L2 applications abstracting the complexity of blockchains and serving as a Content Availability Layer and P2P node discovery tool. In the context of dApps INTERX is used as both DA and Sequencer so that developers can focus fully on business logic and not infrastructure. One of the important features of INTERX is acting as a light client replacement and removes the dependency on centralized SSL certificate authorities through a combination of digital signatures and fraud proofs."]}),"\n",(0,s.jsx)(t.li,{children:"RYOKAI: The next generation of the KIRA Manager (KM 2.0) supporting the orchestration of the KIRA L2 applications."}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"VFG (Virtual Finality Gadget)"}),": The Virtual Finality Gadget (VFG) is a programmable finality enabling decentralized applications to share the security of the base layer and define their own consensus rules. The VFG is a protocol that enables KIRA to support any type of RollApp (Pessimistic, Optimistic, General Purpose, Recursive Blockchain). At the core of VFG lies the idea of splitting the application into dedicated execution and verification parts. Depending on which network participants run which part (execution or verification logic) any modern consensus type can be virtualized."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Monolithic Blockchain:"})," In a monolithic blockchain, consensus nodes handle all network functions. These include processing transactions for all dApps, verifying transaction correctness, managing data storage, and achieving consensus among nodes. This model integrates all core tasks into a single blockchain system."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Modular Blockchain:"})," A modular blockchain is a system where various functions of the blockchain stack are separated into independent networks and then interconnected. This approach is similar to the concept of microservices in traditional web architectures, where different components like notifications, storage, monitoring, and payment are split into distinct services and integrated via APIs. In a modular blockchain, components such as the execution layer (i.e. sequencers), data availability layer, and settlement layer are distinct yet linked through specific protocols."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Hypermodularity:"})," Hypermodularity refers to a system where all essential modular components are readily accessible to the nodes that require them, without the need to retrieve them from complex, dependent networks. This architecture aims to reduce unnecessary overhead, complexity, and dependency risk. An example here might be network layer awareness of the node location allowing DA microservice to be positioned right next to the Sequencer on the physical layer or other location relevant to a particular application and user-boosting efficiency."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Rollup/Rolldown:"}),' These terms describe different methods of finalizing the state transitions of Layer 2, particularly user balances or overall database state. In the case of "Rollups," state transitions that are attempted to be settled on the base layer are assumed to be by default correct unless evidence in the form of fraud proof is provided. In the case of "Rolldowns," state transitions that are attempted to be settled require a threshold of verifiers to accept them - for that reason, Rolldowns are sometimes referred to as "Pessimistic Rollups." In general, Rollup might be also referred to as an L2 or an independent network that uses a "pessimistic" or "optimistic" settlement with a larger base layer network (e.g., Ethereum) that it actively observes to gain access to tokens or otherwise communicate with other networks or applications. We might refer to such networks as sidechains, zones, and/or parachains. If such a network serves a very specific purpose, it might be also referred to as an "AppChain," or in other words, an Application Specific Blockchain. As of 2024, AppChains are an extinct concept, but you might come across them in various crypto-related literature and topics. In the case of KIRA, thanks to VFG, we can classify all types of blockchain or blockchain-less applications requiring trustless compute verification as "General Purpose Rollups" and do not have to reason about their inner-workings.']}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Optimistic Layer 2:"})," In the optimistic approach, the computation of the new state of L2 is assumed to be correct by the Executor, until proven incorrect. The finality or computational verification of the rollup's new state is rerun only by one or more nodes that choose to do so. If no node disputes the state within a certain time frame (typically 7 days), it is then considered finalized."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Pessimistic Layer 2:"})," In this approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. The finality or computational verification of the rollup's new state is deterministically re-executed by one or more other nodes. An example of a pessimistic rollup is the use of Zero-Knowledge proofs, where the Executor generates a proof, and then another node verifies this proof. The proof verification logic is deterministic and uniform across all verifiers."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"General Layer 2:"})," In the general approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. Finality is still contingent upon at least one node's re-execution of the state transition, but the verification can employ non-deterministic methods. This approach accommodates a broader spectrum of application frameworks, e.g., applications that operate at CPU clock speeds, also known as blockchain-less applications."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Blockchain-less Application:"})," A blockchain-less application is a type of dApp that processes user transactions in real-time, without the traditional blockchain mempool. This absence of a visible mempool eliminates the possibility of malicious participants manipulating transaction order, thereby reducing common issues such as front-running and Maximum Extractable Value exploitation. The responsibility for maintaining the integrity of transaction processing and execution order lies with the dApp Leader, who, in the event of any provable misconduct, can be subject to eviction."]}),"\n",(0,s.jsx)(t.li,{children:"Consensus node (validator): A Consensus node is an active network participant responsible for processing transactions, adding new blocks to SEKAI, and storing SEKAI state by running a \u2018validator\u2019 node. Each node is responsible for creating and managing its unique staking pool where delegators can lock their funds to provide security to the network. Additionally, Consensus nodes may opt in to act as Executors for dApps."}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Delegator"}),": A Delegator is any network participant who engages in consensus by locking assets as collateral to one or multiple staking pools without necessarily running a \u2018validator\u2019 node. Note that KIRA doesn\u2019t require block proposers to have a minimum self-bonded stake to pledge their honesty. It is the responsibility of delegators to exercise due diligence and diversification when choosing a block proposer staking pool, as the risk of staked assets is directly exposed to the block proposer\u2019s actions. However, contrary to other PoS blockchains, double-signing is the only behavior that results in slashing (downtime is not penalized)."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"dApp Session:"})," A dApp Session refers to a designated period during which a dApp is executed by a single Executor, known as the dApp Leader. This session encompasses the operational phase of the dApp: the execution of its code and the subsequent processing of any changes to SEKAI state and/or the dApp's internal database. The session concludes with the submission of these changes for verification by Fishermen, and consensus by other Executors, in cases where more than one Executor is involved. For changes to be accepted, they must be approved by a supermajority of Executors and receive no rejections from Fishermen."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Verifier:"})," A Verifier is a participant responsible for verifying the correctness of submissions made by the dApp Leader following the execution phase of a dApp session. Verifiers are either Fishermen or Executors who are not currently serving as the dApp Leader."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Executor:"})," An Executor is a consensus node responsible for the validation and approval of the outcomes of a dApp session. They are responsible for storing the dApp's internal state and reviewing and voting on the results submitted by the dApp Leader, including changes to SEKAI state and updates to the dApp's internal state. Executors who are not serving as the dApp Leader automatically assume the role of a Verifier. Executors have the freedom to select which dApp(s) they wish to run, based on system requirements, and/or they can be appointed by the dApp's deployer."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"dApp Leader:"})," A dApp Leader, also referred to as a Sequencer, is a single Executor responsible for executing a dApp session. They are tasked with computing the outcomes of the dApp, such as changes in SEKAI state and/or dApp internal database updates. The dApp Leader submits these results for verification by Fishermen, and consensus by other Executors in cases where more than one Executor is involved."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Fishermen:"})," They are a subset of dApp Verifiers who are tasked with specializing in overseeing and validating state transitions of a dApp. Like the Executors, they are responsible for storing the dApp's internal state. However they are distinct from Executors in that they are not part of SEKAI validator set and therefore cannot become dApp leaders. Their primary function is to ensure the correctness of state transitions using any chosen proprietary logic, with the authority to halt an application if they detect incorrect transitions."]}),"\n"]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var s=n(6905);const o={tabItem:"tabItem_Ymn6"};var a=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var s=n(7294),o=n(6905),a=n(2466),i=n(6550),r=n(469),l=n(1980),c=n(7392),d=n(12);function u(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:o}}=e;return{value:t,label:n,attributes:s,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const o=(0,i.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(a),(0,s.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(o.location.search);t.set(a,e),o.replace({...o.location,search:t.toString()})}),[a,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,a=h(e),[i,l]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:a}))),[c,u]=f({queryString:n,groupId:o}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,a]=(0,d.Nk)(n);return[o,(0,s.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:o}),g=(()=>{const e=c??m;return p({value:e,tabValues:a})?e:null})();(0,r.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,a]),tabValues:a}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=n(5893);function v(e){let{className:t,block:n,selectedValue:s,selectValue:i,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),o=r[n].value;o!==s&&(c(t),i(o))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:a}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...a,className:(0,o.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:o}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===o));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function k(e){const t=m(e);return(0,y.jsxs)("div",{className:(0,o.Z)("tabs-container",g.tabList),children:[(0,y.jsx)(v,{...e,...t}),(0,y.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,y.jsx)(k,{...e,children:u(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var s=n(7294);const o={},a=s.createContext(o);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e5f531a9.236d5dde.js b/assets/js/e5f531a9.236d5dde.js new file mode 100644 index 0000000..c29e0b7 --- /dev/null +++ b/assets/js/e5f531a9.236d5dde.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2882],{8595:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(5893),o=n(1151);n(4866),n(5162);const i={title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},r=void 0,s={id:"What-is-KIRA/SEKAI/Governance",title:"Governance",description:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.",source:"@site/tabs/learn/What-is-KIRA/SEKAI/Governance.mdx",sourceDirName:"What-is-KIRA/SEKAI",slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",permalink:"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Governance",sidebar_position:2,slug:"/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa"},sidebar:"defaultSidebar",previous:{title:"Consensus",permalink:"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418"},next:{title:"Middleware - INTERX",permalink:"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851"}},l={},c=[{value:"Roles & Permissions",id:"4a92d1418ae641c7aae19bdb862b6ead",level:3},{value:"Structure",id:"3c994110ecf44f89ab62ecadfe43b8a8",level:3},{value:"Decision-making Framework",id:"97310261cd6643c59e08f59fa9662fe1",level:3}];function u(e){const t={h3:"h3",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter's stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council."}),"\n",(0,a.jsx)(t.h3,{id:"4a92d1418ae641c7aae19bdb862b6ead",children:"Roles & Permissions"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance structure is underpinned by a detailed system of permissions, where specific actions, such as voting and proposing, are tied to unique permissions. These permissions dictate whether an account can execute a specific transaction. This granularity in permissions serves as the building blocks for 'roles,' which bundle permissions into comprehensive profiles that define the capabilities and responsibilities of subsets of council members. Being assigned a role equates to having all the permissions it encompasses. Roles, by their nature, are constructs of governance; the only pre-defined role in KIRA is that of \u201cvalidator\u201d automatically given to Consensus nodes. All other roles are conceptualized and established through governance actions. The creation of new roles is initiated at the network's inception by validators, who use their permissions to propose and approve the establishment of these roles through governance proposals."}),"\n",(0,a.jsx)(t.h3,{id:"3c994110ecf44f89ab62ecadfe43b8a8",children:"Structure"}),"\n",(0,a.jsx)(t.p,{children:"KIRA's governance is inherently flexible and designed to evolve organically within its decentralized framework. Starting with the principle that each Consensus node possesses equal voting power (per capita), they form the cornerstone of governance. They have the autonomy to delegate various governance responsibilities to other verified groups through the definition of roles. This could lead to a dynamic where one group may have certain authority over another, and vice versa, depending on the distribution of responsibilities related to matters such as proposal voting or the management of malicious activities within the network. The governance model's modular design facilitates customized configurations, including multicameral systems for specialized proposal handling and checks and balances to mitigate centralization risks. This adaptability ensures KIRA's governance can evolve to meet diverse network conditions and requirements, underlining the network's capacity for self-directed evolution without centralized oversight."}),"\n",(0,a.jsx)(t.h3,{id:"97310261cd6643c59e08f59fa9662fe1",children:"Decision-making Framework"}),"\n",(0,a.jsx)(t.p,{children:"KIRA governance decisions are voted on-chain to immutably record outcomes on the blockchain itself. However, discussions primarily take place through off-chain coordination amongst Councilors and community members. When a proposal is created, only Councilors can vote if they have the required permission. A proposal passes if over 50% of votes are 'yes', otherwise it is rejected. A minority veto rejection is also possible if over 33.4% of all votes are 'veto\u2019. Proposals require a quorum of 33% to be valid to reflect adequate Councilor participation and representation. If quorum is not reached, the proposal fails. After the voting period ends, there is a defined enactment time before changes take effect, allowing the community to prepare for the outcome. The minimum enactment time is configured by governance and applies to all proposals. Governance can additionally configure different voting periods for individual proposals. This structured on-chain process enables transparent and definitive decision-making."}),"\n",(0,a.jsx)(t.p,{children:"KIRA does not utilize on-chain signaling proposals, which commonly lead to inefficient binary outcomes that fail to capture nuanced perspectives. Instead, it offers on-chain Polls to efficiently gauge sentiment and build consensus on complex issues. Polls allow for multiple customized voting options that cater to the diverse views within the community. This flexibility makes them well-suited for achieving consensus on matters like upgrade timeframes, future protocol changes, and other key issues. The Poll module provides an inclusive signaling mechanism that complements off-chain discussion. Ultimately, Polls enable KIRA's governance to reach timely decisions informed by the authentic and varied opinions of participants."})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const o={tabItem:"tabItem_Ymn6"};var i=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),o=n(6905),i=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,d]=f({queryString:n,groupId:o}),[m,v]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,u.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),b=(()=>{const e=c??m;return p({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),v(e)}),[d,v,i]),tabValues:i}}var v=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),o=s[n].value;o!==a&&(c(t),r(o))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...i,className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:o}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function I(e){const t=(0,v.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const o={},i=a.createContext(o);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e628355e.ed2ae3e9.js b/assets/js/e628355e.ed2ae3e9.js new file mode 100644 index 0000000..d8b8632 --- /dev/null +++ b/assets/js/e628355e.ed2ae3e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[220],{1234:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=a(5893),i=a(1151);a(4866),a(5162);const o={title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},r=void 0,s={id:"What-is-KIRA/Layer-2/Virtual-Finality-Gadget",title:"Virtual Finality Gadget",description:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.",source:"@site/tabs/learn/What-is-KIRA/Layer-2/Virtual-Finality-Gadget.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Virtual Finality Gadget",sidebar_position:1,slug:"/bba461ae-7c67-4b66-8f1b-c51c887f2671"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},next:{title:"Building on KIRA",permalink:"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f"}},c={},l=[{value:"How It Works",id:"ff43eea4d8e2429780e1edad7145a61b",level:3}];function u(e){const t={h3:"h3",img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually."}),"\n",(0,n.jsx)(t.h3,{id:"ff43eea4d8e2429780e1edad7145a61b",children:"How It Works"}),"\n",(0,n.jsx)(t.p,{children:"In KIRA, dApps (L2s) are simply packaged binaries within Docker containers. This ensures security by isolating dApps from the host OS to prevent malware risks and enabling precise management of resources like CPU, GPU, RAM, and disk space per each individual application."}),"\n",(0,n.jsx)(t.p,{children:"Each application is architecturally divided into two distinct components: the execution logic and the verification logic, each encapsulated within its own Docker container. The execution logic container, managed by Executors (who MUST be ACTIVE validators), is responsible for running the application's code such as state machine or zkVM, while the verification logic container, overseen by Fishermen (who are assigned to said role or have a sufficient stake), assesses the integrity of the changes that one of the dApp Executors (the Leader) is proposing to the KIRA base layer."}),"\n",(0,n.jsx)(t.p,{children:"From a high-level perspective, Docker containers are executed and monitored by Consensus nodes within KIRA, facilitated by RYOKAI for operational management and coordination. The containers interact with the network through local INTERX nodes (serving as decentralized APIs or DAPI/DA) and SEKAI nodes (connecting to the KIRA blockchain), ensuring seamless integration and communication within the ecosystem."}),"\n",(0,n.jsx)(t.p,{children:"The role of the execution container is to accept input sequenced by INTERX into one of the ports and execute commands from that input according to the code embedded within the container. Since there might be many executors (Multi-Party Computation) one of them is round-robin elected as leader who can then publish state root - publishing the hash of the new app database state and proposing changes to dApp account balances on the KIRA base layer. The application lifecycle has a form of forever changing states (sessions) from one KIRA base layer block to another proposed by a single leader. The proposed changes must then be approved by the verifiers through a process in which a threshold of approvals must be reached. If even a single Fisherman disagrees with the state transition the app is stopped and KIRA governance steps in to resolve the issues."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(846).Z+"",width:"1161",height:"592"})}),"\n",(0,n.jsx)(t.p,{children:"The VFG does not enforce any specific way of evaluating the shift from one application state to another. Instead, it empowers developers and all who participate in the verification of the application execution process to customize the method in which a binary verification outcome is produced \u2014 either 'yes' or 'no' \u2014 to affirm or challenge the transition's validity. This approach presents a strong contrast to current rollup systems, where the verification process relies on an execution binary or container that must remain identical and public among all Executors of a specific application. In the case of the verification container, although a single shared and public version must be provided by developers, possible bounties for catching issues provide an additional economic incentive for Fishermen to customize the verification container."}),"\n",(0,n.jsx)(t.p,{children:"We have to assume that in the future there will always be better and more efficient ways to trustlessly verify computations. Today that might be something as simple as re-execution or zkVM and using GPUs to generate ZK proofs. Tomorrow, it might be something completely different. The VFG protocol was created so that application developers can long-term support their applications without being locked into a single framework or protocol. Our intention is also to signal that Fishermen should not blindly trust developer teams, especially in an era of ever-present bugs and stegomalware. These can turn even seemingly deterministic code into unpredictable chaos, against which no one has yet proposed a reliable method to protect users."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Visual representation of the example dApp execution process",src:a(2457).Z+"",width:"1634",height:"822"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(6905);const i={tabItem:"tabItem_Ymn6"};var o=a(5893);function r(e){let{children:t,hidden:a,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,r),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>x});var n=a(7294),i=a(6905),o=a(2466),r=a(6550),s=a(469),c=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,c._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,o=h(e),[r,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,d]=f({queryString:a,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:i}),g=(()=>{const e=l??m;return p({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:r,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:r,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const t=e.currentTarget,a=c.indexOf(t),i=s[a].value;i!==n&&(l(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>c.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function w(e){let{lazy:t,children:a,selectedValue:i}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function k(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,i.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function x(e){const t=(0,b.Z)();return(0,v.jsx)(k,{...e,children:d(e.children)},String(t))}},846:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/319785771-75f434ada59642501ced598ca43d2996.png"},2457:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/422487827-6652d0807ee6ec2c6e40bc12547d0739.png"},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(7294);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e688febf.d08a74e7.js b/assets/js/e688febf.99505b10.js similarity index 88% rename from assets/js/e688febf.d08a74e7.js rename to assets/js/e688febf.99505b10.js index b7ea79f..e8ac81a 100644 --- a/assets/js/e688febf.d08a74e7.js +++ b/assets/js/e688febf.99505b10.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[254],{6523:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-3",sidebar_position:6,slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},c=void 0,i={id:"Testnet-History/testnet-3",title:"testnet-3",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-3.mdx",sourceDirName:"Testnet-History",slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"testnet-3",sidebar_position:6,slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},sidebar:"defaultSidebar",previous:{title:"testnet-4",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8"},next:{title:"testnet-2",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"}},o={},l=[{value:"Description",id:"2c64e34d39fd43ef88d042f8491dd39e",level:2},{value:"Post mortem",id:"c3d89834723642d58a26df25ec9bbec5",level:2},{value:"Files",id:"63d06e5f00c44c37aff7bbac2d0526aa",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"2c64e34d39fd43ef88d042f8491dd39e",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-3"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"1837ccd10c21d5e1633751a8c8ce7d7a226ea63a569010a5ff93ad2f02b82d62"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"85b30bd1e9334299ccfdb39e9385c423f7b43959082ef1d68160ade79c2d6b66"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"465099"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"c3d89834723642d58a26df25ec9bbec5",children:"Post mortem"}),"\n",(0,n.jsx)(t.p,{children:"tate machine fault while changing validator set"}),"\n",(0,n.jsx)(t.h2,{id:"63d06e5f00c44c37aff7bbac2d0526aa",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/ecfa3888-23cb-46d0-8c40-ed992ee43ec8/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=b805cf242d31ca2730b54c885bf4a1f3ff3382feb741439394b4815f631c78e9&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/a3d8b42a-4f4f-4044-95fd-3bad858df489/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=2eb21465a258565adb0ac97e8638e7de554a52efed11578416a04ea3d57203f2&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/07026a68-5326-45b9-b8cd-9f5c167ff686/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=c2d866904a52e777f42abe2d2d8f320042cbb4e17b055006543d885e61decfc2&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/bbc40990-c22c-4b04-9628-479668c26d10/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152704Z&X-Amz-Expires=3600&X-Amz-Signature=d225fd83048e3d19cf3add6cb16d6e48e073ab63bce57117ec3fef38073375a4&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),i=a(469),o=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=f(e),[c,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:a,groupId:r}),[h,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??h;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{A&&o(A)}),[A]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function g(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=i[a].value;r!==n&&(l(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[254],{6523:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-3",sidebar_position:6,slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},c=void 0,i={id:"Testnet-History/testnet-3",title:"testnet-3",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-3.mdx",sourceDirName:"Testnet-History",slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae",permalink:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"testnet-3",sidebar_position:6,slug:"/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae"},sidebar:"defaultSidebar",previous:{title:"testnet-4",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8"},next:{title:"testnet-2",permalink:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951"}},o={},l=[{value:"Description",id:"2c64e34d39fd43ef88d042f8491dd39e",level:2},{value:"Post Mortem",id:"c3d89834723642d58a26df25ec9bbec5",level:2},{value:"Files",id:"63d06e5f00c44c37aff7bbac2d0526aa",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"2c64e34d39fd43ef88d042f8491dd39e",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-3"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"1837ccd10c21d5e1633751a8c8ce7d7a226ea63a569010a5ff93ad2f02b82d62"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"85b30bd1e9334299ccfdb39e9385c423f7b43959082ef1d68160ade79c2d6b66"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"465099"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"c3d89834723642d58a26df25ec9bbec5",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"tate machine fault while changing validator set"}),"\n",(0,n.jsx)(t.h2,{id:"63d06e5f00c44c37aff7bbac2d0526aa",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/ecfa3888-23cb-46d0-8c40-ed992ee43ec8/consensus.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=a1d7b95643e6a89aad596c688655ed90730f98b84477b161f2edc74f8005efaa&X-Amz-SignedHeaders=host&x-id=GetObject",children:"consensus.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/a3d8b42a-4f4f-4044-95fd-3bad858df489/error.log.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=5c8b158d20bd4b8335c0c8cc214ce039322250a769548f83671c7f64a509d410&X-Amz-SignedHeaders=host&x-id=GetObject",children:"file"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/07026a68-5326-45b9-b8cd-9f5c167ff686/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=ca0dde8ebb9a42d2706ea6850c613fd1e61ad7546a4bdb39b0f7764604c4cd47&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/bbc40990-c22c-4b04-9628-479668c26d10/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165652Z&X-Amz-Expires=3600&X-Amz-Signature=f49065e49c492c1d2d72888fd3942ed0a729976694b42cdd2df6aa4fcfcf45d3&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),i=a(469),o=a(1980),l=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function b(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=f(e),[c,o]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),A=(()=>{const e=l??m;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{A&&o(A)}),[A]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const A={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(5893);function g(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=i[a].value;r!==n&&(l(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;t=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;t=o[a]??o[o.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>o.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",A.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function x(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",A.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e73882ea.c55d3eb4.js b/assets/js/e73882ea.c55d3eb4.js new file mode 100644 index 0000000..5f93737 --- /dev/null +++ b/assets/js/e73882ea.c55d3eb4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3339],{2584:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var o=n(5893),s=n(1151);n(4866),n(5162);const a={title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},i=void 0,r={id:"Glossary",title:"Glossary",description:"- RollApp: Decentralized application",source:"@site/tabs/learn/Glossary.mdx",sourceDirName:".",slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b",permalink:"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Glossary",sidebar_position:2,slug:"/22c36797-10c8-40e4-9457-d8f1b6b4563b"},sidebar:"defaultSidebar",previous:{title:"Unified Liquid Staking",permalink:"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3"}},l={},c=[];function u(e){const t={li:"li",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"RollApp:"})," Decentralized application"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"SEKAI:"})," SEKAI is KIRA Network's base layer (L1) blockchain application sometimes referred to as \u201cbackend\u201d. The role of SEKAI is to be a source of shared security as well as a governance and settlement layer for all KIRA RollApps (L2). KIRA Blockchain preserves information such as user account balances, governance permissions, and RollApp state roots as well as other essential data for coordinating both L1 and L2 operations."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"MBPoS (Multi-Bonded Proof of Stake)"}),": MBPoS is a staking mechanism in SEKAI aimed at enforcing the network's Sybil resistance. It differentiates from typical Proof-of-Stake models by permitting the use of a diverse range of digital assets as staking collateral. This includes but is not limited to, native assets of the KIRA network, non-native assets originating from other blockchain networks such as BTC and ETH, NFTs, RWAs, LP tokens, and stablecoins, all subject to approval via governance proposals. The reason behind multi-staking implementation in KIRA is to increase the security of the network in the scenario where tokens originating from foreign networks add incentives for consensus participants to misbehave. Additionally, MBPoS natively issues liquid staking derivatives (LSD) for all staked assets boosting economic activity and access to assets for all KIRA L2 applications."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"INTERX:"})," INTERX, which stands for Interchain NginX, is a decentralized middleware making it simple and intuitive to interact with KIRA network. INTERX has a supporting role for both frontends as dAPI gateway as well as for the L2 applications abstracting the complexity of blockchains and serving as a Content Availability Layer and P2P node discovery tool. In the context of RollApps INTERX is used as both DA and Sequencer so that developers can focus fully on business logic and not infrastructure. One of the important features of INTERX is acting as a light client replacement and removes the dependency on centralized SSL certificate authorities through a combination of digital signatures and fraud proofs."]}),"\n",(0,o.jsx)(t.li,{children:"RYOKAI: The next generation of the KIRA Manager (KM 2.0) supporting the orchestration of the KIRA L2 applications."}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"VFG (Virtual Finality Gadget)"}),": The Virtual Finality Gadget (VFG) is a programmable finality enabling decentralized applications to share the security of the base layer and define their own consensus rules. The VFG is a protocol that enables KIRA to support any type of RollApp (Pessimistic, Optimistic, General Purpose, Recursive Blockchain). At the core of VFG lies the idea of splitting the application into dedicated execution and verification parts. Depending on which network participants run which part (execution or verification logic) any modern consensus type can be virtualized."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Monolithic Blockchain:"})," In a monolithic blockchain, consensus nodes handle all network functions. These include processing transactions for all RollApps, verifying transaction correctness, managing data storage, and achieving consensus among nodes. This model integrates all core tasks into a single blockchain system."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Modular Blockchain:"})," A modular blockchain is a system where various functions of the blockchain stack are separated into independent networks and then interconnected. This approach is similar to the concept of microservices in traditional web architectures, where different components like notifications, storage, monitoring, and payment are split into distinct services and integrated via APIs. In a modular blockchain, components such as the execution layer (i.e. sequencers), data availability layer, and settlement layer are distinct yet linked through specific protocols."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Hypermodularity:"})," Hypermodularity refers to a system where all essential modular components are readily accessible to the nodes that require them, without the need to retrieve them from complex, dependent networks. This architecture aims to reduce unnecessary overhead, complexity, and dependency risk. An example here might be network layer awareness of the node location allowing DA microservice to be positioned right next to the Sequencer on the physical layer or other location relevant to a particular application and user-boosting efficiency."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Rollup/Rolldown:"}),' These terms describe different methods of finalizing the state transitions of Layer 2, particularly user balances or overall database state. In the case of "Rollups," state transitions that are attempted to be settled on the base layer are assumed to be by default correct unless evidence in the form of fraud proof is provided. In the case of "Rolldowns," state transitions that are attempted to be settled require a threshold of verifiers to accept them - for that reason, Rolldowns are sometimes referred to as "Pessimistic Rollups." In general, Rollup might be also referred to as an L2 or an independent network that uses a "pessimistic" or "optimistic" settlement with a larger base layer network (e.g., Ethereum) that it actively observes to gain access to tokens or otherwise communicate with other networks or applications. We might refer to such networks as sidechains, zones, and/or parachains. If such a network serves a very specific purpose, it might be also referred to as an "AppChain," or in other words, an Application Specific Blockchain. As of 2024, AppChains are an extinct concept, but you might come across them in various crypto-related literature and topics. In the case of KIRA, thanks to VFG, we can classify all types of blockchain or blockchain-less applications requiring trustless compute verification as "General Purpose Rollups" and do not have to reason about their inner-workings.']}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Optimistic Layer 2:"})," In the optimistic approach, the computation of the new state of L2 is assumed to be correct by the Executor, until proven incorrect. The finality or computational verification of the rollup's new state is rerun only by one or more nodes that choose to do so. If no node disputes the state within a certain time frame (typically 7 days), it is then considered finalized."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Pessimistic Layer 2:"})," In this approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. The finality or computational verification of the rollup's new state is deterministically re-executed by one or more other nodes. An example of a pessimistic rollup is the use of Zero-Knowledge proofs, where the Executor generates a proof, and then another node verifies this proof. The proof verification logic is deterministic and uniform across all verifiers."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"General Layer 2:"})," In the general approach, the computation of the new state of L2 is assumed to be incorrect by the Executor, until proven correct. Finality is still contingent upon at least one node's re-execution of the state transition, but the verification can employ non-deterministic methods. This approach accommodates a broader spectrum of application frameworks, e.g., applications that operate at CPU clock speeds, also known as blockchain-less applications."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Blockchain-less Application:"})," A blockchain-less application is a type of RollApp that processes user transactions in real-time, without the traditional blockchain mempool. This absence of a visible mempool eliminates the possibility of malicious participants manipulating transaction order, thereby reducing common issues such as front-running and Maximum Extractable Value exploitation. The responsibility for maintaining the integrity of transaction processing and execution order lies with the RollApp Leader, who, in the event of any provable misconduct, can be subject to eviction."]}),"\n",(0,o.jsx)(t.li,{children:"Consensus node (validator): A Consensus node is an active network participant responsible for processing transactions, adding new blocks to SEKAI, and storing SEKAI state by running a \u2018validator\u2019 node. Each node is responsible for creating and managing its unique staking pool where delegators can lock their funds to provide security to the network. Additionally, Consensus nodes may opt in to act as Executors for RollApps."}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Delegator"}),": A Delegator is any network participant who engages in consensus by locking assets as collateral to one or multiple staking pools without necessarily running a \u2018validator\u2019 node. Note that KIRA doesn\u2019t require block proposers to have a minimum self-bonded stake to pledge their honesty. It is the responsibility of delegators to exercise due diligence and diversification when choosing a block proposer staking pool, as the risk of staked assets is directly exposed to the block proposer\u2019s actions. However, contrary to other PoS blockchains, double-signing is the only behavior that results in slashing (downtime is not penalized)."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Session:"})," A RollApp session refers to a designated period during which a RollApp is executed by a single Executor, known as the RollApp Leader. This session encompasses the operational phase of the RollApp: the execution of its code and the subsequent processing of any changes to SEKAI state and/or the RollApp's internal database. The session concludes with the submission of these changes for verification by Fishermen, and consensus by other Executors, in cases where more than one Executor is involved. For changes to be accepted, they must be approved by a supermajority of Executors and receive no rejections from Fishermen."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Verifier:"})," A Verifier is a participant responsible for verifying the correctness of submissions made by the RollApp Leader following the execution phase of a RollApp session. Verifiers are either Fishermen or Executors who are not currently serving as the RollApp Leader."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Executor:"})," An Executor is a consensus node responsible for the validation and approval of the outcomes of a RollApp session. They are responsible for storing the RollApp's internal state and reviewing and voting on the results submitted by the RollApp Leader, including changes to SEKAI state and updates to the RollApp's internal state. Executors who are not serving as the RollApp Leader automatically assume the role of a Verifier. Executors have the freedom to select which RollApp(s) they wish to run, based on system requirements, and/or they can be appointed by the RollApp's controllers."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"RollApp Leader:"})," A RollApp Leader, also referred to as a Sequencer, is a single Executor responsible for executing a RollApp session. They are tasked with computing the outcomes of the RollApp, such as changes in SEKAI state and/or RollApp internal database updates. The RollApp Leader submits these results for verification by Fishermen, and consensus by other Executors in cases where more than one Executor is involved."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Controller(s):"})," This term refer to the person or team responsible for developing and maintaining a RollApp. They are represented by a set of KIRA addresses and have the ability to update the controller set and upgrade the RollApp's binaries and core functionality through new releases. Note that KIRA implements account abstraction, so a RollApp can serve as its own Controller. As the managers of a RollApp, Controllers have the authority to approve or deny Consensus nodes participation as Executors or Verifiers. This gives them control over who can validate and execute transactions for their particular application."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Fishermen:"})," They are a subset of RollApp Verifiers who are tasked with specializing in overseeing and validating state transitions of a RollApp. Like the Executors, they are responsible for storing the RollApp's internal state. However, they are distinct from Executors in that they are not part of SEKAI validator set and therefore cannot become RollApp leaders. Their primary function is to ensure the correctness of state transitions using any chosen proprietary logic, with the authority to halt an application if they detect incorrect transitions."]}),"\n"]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>i});n(7294);var o=n(6905);const s={tabItem:"tabItem_Ymn6"};var a=n(5893);function i(e){let{children:t,hidden:n,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,i),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var o=n(7294),s=n(6905),a=n(2466),i=n(6550),r=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:o,default:s}}=e;return{value:t,label:n,attributes:o,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const s=(0,i.k6)(),a=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(a),(0,o.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(s.location.search);t.set(a,e),s.replace({...s.location,search:t.toString()})}),[a,s])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,a=h(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const o=n.find((e=>e.default))??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:t,tabValues:a}))),[c,d]=f({queryString:n,groupId:s}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,a]=(0,u.Nk)(n);return[s,(0,o.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:s}),g=(()=>{const e=c??m;return p({value:e,tabValues:a})?e:null})();(0,r.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,a]),tabValues:a}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=n(5893);function v(e){let{className:t,block:n,selectedValue:o,selectValue:i,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==o&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:a}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...a,className:(0,s.Z)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":o===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:s}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===s));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function x(e){const t=m(e);return(0,y.jsxs)("div",{className:(0,s.Z)("tabs-container",g.tabList),children:[(0,y.jsx)(v,{...e,...t}),(0,y.jsx)(w,{...e,...t})]})}function k(e){const t=(0,b.Z)();return(0,y.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(7294);const s={},a=o.createContext(s);function i(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e989e75b.978c92fb.js b/assets/js/e989e75b.978c92fb.js new file mode 100644 index 0000000..e3ebd55 --- /dev/null +++ b/assets/js/e989e75b.978c92fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2261],{5903:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(5893),i=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},r=void 0,s={id:"What-is-KIRA/Layer-2/Overview",title:"Overview",description:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Overview.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},sidebar:"defaultSidebar",previous:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f"},next:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671"}},l={},c=[{value:"Application Submission",id:"4b45b29d9f7147f69322eab08f6c271c",level:2},{value:"Permissioned Execution, Permissionless Verification",id:"63a067c5526f4b7eb220c71b554da361",level:2},{value:"Sessions",id:"08087f31d2204472be584c32733b9a2f",level:2}];function u(e){const t={a:"a",admonition:"admonition",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified."}),"\n",(0,a.jsx)(t.p,{children:"KIRA by default pessimistically assumes incorrectness of all L2 computations. It only allows for application state settlement if the developer-programmable consensus of nodes verifies the application execution. This is in contrast to optimistic rollup systems which by default assume the correctness of all computations unless fraud proofs are presented which unnecessarily prolong the settlement process even if all network participants agree that the application state transitions are correct."}),"\n",(0,a.jsx)(t.h2,{id:"4b45b29d9f7147f69322eab08f6c271c",children:"Application Submission"}),"\n",(0,a.jsx)(t.p,{children:"Before a dApp can be deployed on the KIRA network, it must go through an on-chain governance proposal process. This prevents spam applications and ineffective code from launching. The proposal is submitted by controllers; this proposal also signals the requirements for running the application. A minimum bond in KEX tokens is required to raise the proposal, ensuring developer commitment. A minimum bond must also be reached before the proposal duration ends for the application to be accepted. The minimum bond can be crowdsourced across collaborators. If it is not reached before the end of the proposal period, the dApp is rejected and bonds are returned. There is also a maximum bond that caps total deposits. Once approved through governance, dApp tokens representing ownership are minted and paired with the bonded KEX in a v2 Uniswap pool."}),"\n",(0,a.jsx)(t.p,{children:"This permissionless, crowdsourced process is similar to Polkadot parachain auctions. However, the bonded KEX crowdsourced through the proposal remain liquid: Upon approval, dApp tokens representing ownership are minted and paired with the bonded KEX in a Uniswap v2-like pool and the LP tokens are distributed to all investors who contributed to crowdsource."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["More information about the crowdsourcing mechanism is described in ",(0,a.jsx)(t.a,{href:"/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",children:"Initial Liquidity Offering "}),"page."]})}),"\n",(0,a.jsx)(t.h2,{id:"63a067c5526f4b7eb220c71b554da361",children:"Permissioned Execution, Permissionless Verification"}),"\n",(0,a.jsx)(t.p,{children:"There are two primary roles for participation in a RollApp execution process - Executors and Verifiers, also referred to as Fishermen."}),"\n",(0,a.jsx)(t.p,{children:"KIRA\u2019s Validators have the option to take on either or both of these roles, they are not compelled and do not need to post a bond to take these roles. This is to ensure they can adapt their hardware to suit the application's needs and avoid running content that may pose legal issues in their operating region. However their participation is subject to approval by controllers (application owners), and they can be evicted from SEKAI validator set if acting maliciously. If a validator becomes an Executor, they will run the execution container and serve as Leader for Sessions, proposing state changes while also automatically taking on the role of Verifier when not actively leading a Session."}),"\n",(0,a.jsx)(t.p,{children:"Any users can permissionlessly become Fishermen, i.e. if they have vested interest in this application. They are not subject to approval by controllers, but must submit a bond in the dApp's liquidity pool tokens. The bond amount is set via governance, defaulting to 0.1% of the pool\u2019s total LP tokens circulating supply. In summary, validators can opt-in to run as Executors or Verifiers, pending approval. Other users can freely become Fishermen verifiers by providing a bond."}),"\n",(0,a.jsx)(t.p,{children:"The key difference between the Executor and Verifier lies in their responsibilities and how each role is held accountable. Only Executors can become Leaders and propose state changes for an application, while Fishermen solely verify its integrity. Executors are held accountable by risking their validation role and income if removed for misconduct. Fishermen are accountable through the verifier bond they post in tokens, which can be slashed for faulty verification."}),"\n",(0,a.jsx)(t.h2,{id:"08087f31d2204472be584c32733b9a2f",children:"Sessions"}),"\n",(0,a.jsx)(t.p,{children:'In KIRA\'s Layer 2, computation occurs in timed periods called Sessions, similar to the "challenge periods" in Ethereum optimistic rollups. However, unlike Ethereum rollups which optimistically assume correct execution, KIRA pessimistically assumes incorrect results, and only settles state if sufficient verifications occur in a given Session.'}),"\n",(0,a.jsx)(t.p,{children:"A session proceeds as follows:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"A single Executor acts as the Session leader and performs computation, proposing a new application state root (the hash of the new app database state) and account balances changes on SEKAI. The leader can only be an active validator and is chosen in equal round-robin fashion among existing application\u2019s Executors."}),"\n",(0,a.jsx)(t.li,{children:"Immediately after the current Executor finishes execution, the next leader optimistically start executing its own session. This mechanism allows for continuous execution without waiting for the prior session's full verification to complete. In rare scenarios where a session was skipped (i.e. Leader timed out) and the following one was not properly executed, both sessions can be discarded, although this is unlikely to occur."}),"\n",(0,a.jsx)(t.li,{children:"Other Executors act as Verifier and collect the leader results and cast their approval on proposed state changes. The end of the session and settlement requires over 2/3 Executor participation and unanimous agreement. In cases where the application has only one Executor, the end of the session relies on the approval of no less than 2/3 of all active Verifiers."}),"\n",(0,a.jsx)(t.li,{children:"Meanwhile multiple verifier nodes (Fishermen) verify integrity of the leader's execution. They can halt settlement if they find incorrect state transitions, but cannot finalize settlement, only Executors can."}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"The number of Verifiers (fishermen) is uncapped and can be much greater than the number of Executors. However, there is only one Leader at any point in time,"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var o=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),i=n(6905),o=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,o=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:i}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=s[n].value;i!==a&&(c(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const i={},o=a.createContext(i);function r(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e989e75b.c865c4d6.js b/assets/js/e989e75b.c865c4d6.js deleted file mode 100644 index f88918f..0000000 --- a/assets/js/e989e75b.c865c4d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[2261],{5903:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(5893),i=n(1151);n(4866),n(5162);const o={title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},r=void 0,s={id:"What-is-KIRA/Layer-2/Overview",title:"Overview",description:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.",source:"@site/tabs/Learn/What-is-KIRA/Layer-2/Overview.mdx",sourceDirName:"What-is-KIRA/Layer-2",slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",permalink:"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"Overview",sidebar_position:0,slug:"/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"},sidebar:"defaultSidebar",previous:{title:"Orchestrator - RYOKAI",permalink:"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f"},next:{title:"Virtual Finality Gadget",permalink:"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671"}},l={},c=[{value:"Application submission",id:"4b45b29d9f7147f69322eab08f6c271c",level:2},{value:"Permissioned execution, permissionless verification",id:"63a067c5526f4b7eb220c71b554da361",level:2},{value:"Sessions",id:"08087f31d2204472be584c32733b9a2f",level:2}];function u(e){const t={admonition:"admonition",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified."}),"\n",(0,a.jsx)(t.p,{children:"KIRA by default pessimistically assumes incorrectness of all L2 computations. It only allows for application state settlement if the developer-programmable consensus of nodes verifies the application execution. This is in contrast to optimistic rollup systems which by default assume the correctness of all computations unless fraud proofs are presented which unnecessarily prolong the settlement process even if all network participants agree that the application state transitions are correct."}),"\n",(0,a.jsx)(t.h2,{id:"4b45b29d9f7147f69322eab08f6c271c",children:"Application submission"}),"\n",(0,a.jsx)(t.p,{children:"Before a dApp can be deployed on the KIRA network, it must go through an on-chain governance proposal process. This prevents spam applications and ineffective code from launching. The proposal is submitted by controllers; this proposal also signals the requirements for running the application. A minimum bond in KEX tokens is required to raise the proposal, ensuring developer commitment. A minimum bond must also be reached before the proposal duration ends for the application to be accepted. The minimum bond can be crowdsourced across collaborators. If it is not reached before the end of the proposal period, the dApp is rejected and bonds are returned. There is also a maximum bond that caps total deposits. Once approved through governance, dApp tokens representing ownership are minted and paired with the bonded KEX in a v2 Uniswap pool."}),"\n",(0,a.jsx)(t.p,{children:"This permissionless, crowdsourced process is similar to Polkadot parachain auctions. However, the bonded KEX crowdsourced through the proposal remain liquid: Upon approval, dApp tokens representing ownership are minted and paired with the bonded KEX in a Uniswap v2-like pool and the LP tokens are distributed to all investors who contributed to crowdsource."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["More information about the crowdsourcing mechanism is described in ",(0,a.jsx)(t.strong,{children:"[Problem Internal Link]"})," page."]})}),"\n",(0,a.jsx)(t.h2,{id:"63a067c5526f4b7eb220c71b554da361",children:"Permissioned execution, permissionless verification"}),"\n",(0,a.jsx)(t.p,{children:"There are two primary roles for participation in a RollApp execution process - Executors and Verifiers, also referred to as Fishermen."}),"\n",(0,a.jsx)(t.p,{children:"KIRA\u2019s Validators have the option to take on either or both of these roles, they are not compelled and do not need to post a bond to take these roles. This is to ensure they can adapt their hardware to suit the application's needs and avoid running content that may pose legal issues in their operating region. However their participation is subject to approval by controllers (application owners), and they can be evicted from SEKAI validator set if acting maliciously. If a validator becomes an Executor, they will run the execution container and serve as Leader for Sessions, proposing state changes while also automatically taking on the role of Verifier when not actively leading a Session."}),"\n",(0,a.jsx)(t.p,{children:"Any users can permissionlessly become Fishermen, i.e. if they have vested interest in this application. They are not subject to approval by controllers, but must submit a bond in the dApp's liquidity pool tokens. The bond amount is set via governance, defaulting to 0.1% of the pool\u2019s total LP tokens circulating supply. In summary, validators can opt-in to run as Executors or Verifiers, pending approval. Other users can freely become Fishermen verifiers by providing a bond."}),"\n",(0,a.jsx)(t.p,{children:"The key difference between the Executor and Verifier lies in their responsibilities and how each role is held accountable. Only Executors can become Leaders and propose state changes for an application, while Fishermen solely verify its integrity. Executors are held accountable by risking their validation role and income if removed for misconduct. Fishermen are accountable through the verifier bond they post in tokens, which can be slashed for faulty verification."}),"\n",(0,a.jsx)(t.h2,{id:"08087f31d2204472be584c32733b9a2f",children:"Sessions"}),"\n",(0,a.jsx)(t.p,{children:'In KIRA\'s Layer 2, computation occurs in timed periods called Sessions, similar to the "challenge periods" in Ethereum optimistic rollups. However, unlike Ethereum rollups which optimistically assume correct execution, KIRA pessimistically assumes incorrect results, and only settles state if sufficient verifications occur in a given Session.'}),"\n",(0,a.jsx)(t.p,{children:"A session proceeds as follows:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"A single Executor acts as the Session leader and performs computation, proposing a new application state root (the hash of the new app database state) and account balances changes on SEKAI. The leader can only be an active validator and is chosen in equal round-robin fashion among existing application\u2019s Executors."}),"\n",(0,a.jsx)(t.li,{children:"Immediately after the current Executor finishes execution, the next leader optimistically start executing its own session. This mechanism allows for continuous execution without waiting for the prior session's full verification to complete. In rare scenarios where a session was skipped (i.e. Leader timed out) and the following one was not properly executed, both sessions can be discarded, although this is unlikely to occur."}),"\n",(0,a.jsx)(t.li,{children:"Other Executors act as Verifier and collect the leader results and cast their approval on proposed state changes. The end of the session and settlement requires over 2/3 Executor participation and unanimous agreement. In cases where the application has only one Executor, the end of the session relies on the approval of no less than 2/3 of all active Verifiers."}),"\n",(0,a.jsx)(t.li,{children:"Meanwhile multiple verifier nodes (Fishermen) verify integrity of the leader's execution. They can halt settlement if they find incorrect state transitions, but cannot finalize settlement, only Executors can."}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsx)(t.p,{children:"The number of Verifiers (fishermen) is uncapped and can be much greater than the number of Executors. However, there is only one Leader at any point in time,"})})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(6905);const i={tabItem:"tabItem_Ymn6"};var o=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,r),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>k});var a=n(7294),i=n(6905),o=n(2466),r=n(6550),s=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:i}}=e;return{value:t,label:n,attributes:a,default:i}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const i=(0,r.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(i.location.search);t.set(o,e),i.replace({...i.location,search:t.toString()})}),[o,i])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:i}=e,o=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[c,d]=f({queryString:n,groupId:i}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,o]=(0,u.Nk)(n);return[i,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:i}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),i=s[n].value;i!==a&&(c(t),r(i))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...o,className:(0,i.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:i}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,i.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function k(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const i={},o=a.createContext(i);function r(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ea7deaf3.703caf51.js b/assets/js/ea7deaf3.133a112b.js similarity index 93% rename from assets/js/ea7deaf3.703caf51.js rename to assets/js/ea7deaf3.133a112b.js index 0526a92..3438cb4 100644 --- a/assets/js/ea7deaf3.703caf51.js +++ b/assets/js/ea7deaf3.133a112b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6981],{8002:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"testnet-8",sidebar_position:4,slug:"/484978b2-367f-444f-8622-677973bbc585"},o=void 0,i={id:"Testnet-History/testnet-8",title:"testnet-8",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-8.mdx",sourceDirName:"Testnet-History",slug:"/484978b2-367f-444f-8622-677973bbc585",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"testnet-8",sidebar_position:4,slug:"/484978b2-367f-444f-8622-677973bbc585"},sidebar:"defaultSidebar",previous:{title:"testnet-5",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},next:{title:"testnet-4",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8"}},l={},c=[{value:"Description",id:"52f7dd2bb88d41229eef5f60c00a89c3",level:2},{value:"Post mortem",id:"309d795a5b314d85a1280a760fc8f6a8",level:2},{value:"Files",id:"9f7eec7c8df242b498300fc4e44d7a02",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"52f7dd2bb88d41229eef5f60c00a89c3",children:"Description"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Chain Identifier: ",(0,a.jsx)(t.code,{children:"testnet-8"})]}),"\n",(0,a.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,a.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,a.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,a.jsx)(t.code,{children:"0x8b688297b8a6f0ce9924eb163a4c254dfe647fe1b0c0d891cff9457869e650b7"})]}),"\n",(0,a.jsxs)(t.li,{children:["Initial Block Height: ",(0,a.jsx)(t.code,{children:"138403"})]}),"\n",(0,a.jsxs)(t.li,{children:["Block Height Reached: ",(0,a.jsx)(t.code,{children:"920527"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"309d795a5b314d85a1280a760fc8f6a8",children:"Post mortem"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Testnet was expected to be depreciated due to planned hard fork at 4:30 PM 2022-01-07."}),"\n",(0,a.jsxs)(t.li,{children:["During generation of the new genesis file, export tool failed to convert ",(0,a.jsx)(t.code,{children:"proposal_end_time"})," into ",(0,a.jsx)(t.code,{children:"minimum_proposal_end_time"})," and ",(0,a.jsx)(t.code,{children:"jail_max_time"})," into ",(0,a.jsx)(t.code,{children:"unjail_max_time"}),", resulting in the ",(0,a.jsx)(t.code,{children:'panic: unknown field "proposal_end_time" & "jail_max_time" in types.NetworkProperties'})," exception and failure to successfully start SEKAI process."]}),"\n",(0,a.jsxs)(t.li,{children:["After manually fixing network properties in genesis, new issue was found were old proposals become incompatible with the new version of the chain resulting in ",(0,a.jsx)(t.code,{children:'panic: can\'t unmarshal Any nested proto *types.SetNetworkPropertyProposal: unknown value "PROPOSAL_END_TIME" for enum kira.gov.NetworkProperty'})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"9f7eec7c8df242b498300fc4e44d7a02",children:"Files"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/cd34a624-3b15-4cb1-83a9-3c4886be4430/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152703Z&X-Amz-Expires=3600&X-Amz-Signature=486a3382d7b88d90febebdad3c21294915dff62ba5d299e0a2b1d1b68c218890&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/e760d76c-a924-4982-8abc-f779e0952dff/valopers-airdrop-snap.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152703Z&X-Amz-Expires=3600&X-Amz-Signature=b7259a1554c8cfbb20178208aceee69ea9cd9a49a28a122aff97f1c57990bc85&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-airdrop-snap.json"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/1b221e68-6ef6-4068-808d-6f56c83b7f9d/votes-upgrade-proposal.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152703Z&X-Amz-Expires=3600&X-Amz-Signature=1b667df9ff8438b546765d251bc6b5696846b8788e7cd8ab43898ffd70b528a2&X-Amz-SignedHeaders=host&x-id=GetObject",children:"votes-upgrade-proposal.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=p({queryString:n,groupId:r}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),x=(()=>{const e=c??h;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{x&&l(x)}),[x]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function j(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(j,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,v.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6981],{8002:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"testnet-8",sidebar_position:4,slug:"/484978b2-367f-444f-8622-677973bbc585"},o=void 0,i={id:"Testnet-History/testnet-8",title:"testnet-8",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-8.mdx",sourceDirName:"Testnet-History",slug:"/484978b2-367f-444f-8622-677973bbc585",permalink:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"testnet-8",sidebar_position:4,slug:"/484978b2-367f-444f-8622-677973bbc585"},sidebar:"defaultSidebar",previous:{title:"testnet-5",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"},next:{title:"testnet-4",permalink:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8"}},l={},c=[{value:"Description",id:"52f7dd2bb88d41229eef5f60c00a89c3",level:2},{value:"Post Mortem",id:"309d795a5b314d85a1280a760fc8f6a8",level:2},{value:"Files",id:"9f7eec7c8df242b498300fc4e44d7a02",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"52f7dd2bb88d41229eef5f60c00a89c3",children:"Description"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Chain Identifier: ",(0,a.jsx)(t.code,{children:"testnet-8"})]}),"\n",(0,a.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,a.jsx)(t.code,{children:"0feca1c125f2291596dd115ff2cf720032a7098030f8aa97c164afa9ca79644e"})]}),"\n",(0,a.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,a.jsx)(t.code,{children:"0x8b688297b8a6f0ce9924eb163a4c254dfe647fe1b0c0d891cff9457869e650b7"})]}),"\n",(0,a.jsxs)(t.li,{children:["Initial Block Height: ",(0,a.jsx)(t.code,{children:"138403"})]}),"\n",(0,a.jsxs)(t.li,{children:["Block Height Reached: ",(0,a.jsx)(t.code,{children:"920527"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"309d795a5b314d85a1280a760fc8f6a8",children:"Post Mortem"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Testnet was expected to be depreciated due to planned hard fork at 4:30 PM 2022-01-07."}),"\n",(0,a.jsxs)(t.li,{children:["During generation of the new genesis file, export tool failed to convert ",(0,a.jsx)(t.code,{children:"proposal_end_time"})," into ",(0,a.jsx)(t.code,{children:"minimum_proposal_end_time"})," and ",(0,a.jsx)(t.code,{children:"jail_max_time"})," into ",(0,a.jsx)(t.code,{children:"unjail_max_time"}),", resulting in the ",(0,a.jsx)(t.code,{children:'panic: unknown field "proposal_end_time" & "jail_max_time" in types.NetworkProperties'})," exception and failure to successfully start SEKAI process."]}),"\n",(0,a.jsxs)(t.li,{children:["After manually fixing network properties in genesis, new issue was found were old proposals become incompatible with the new version of the chain resulting in ",(0,a.jsx)(t.code,{children:'panic: can\'t unmarshal Any nested proto *types.SetNetworkPropertyProposal: unknown value "PROPOSAL_END_TIME" for enum kira.gov.NetworkProperty'})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"9f7eec7c8df242b498300fc4e44d7a02",children:"Files"}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/cd34a624-3b15-4cb1-83a9-3c4886be4430/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165651Z&X-Amz-Expires=3600&X-Amz-Signature=52b22ea441b9210d81a0304ed6763004e7a61527bfc3df9a1313c12629a04551&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/e760d76c-a924-4982-8abc-f779e0952dff/valopers-airdrop-snap.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165651Z&X-Amz-Expires=3600&X-Amz-Signature=235c690ac0bf0358c018ae1ffa67d5ada0a76c1590514a5ce005813dbd6a9d28&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers-airdrop-snap.json"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/1b221e68-6ef6-4068-808d-6f56c83b7f9d/votes-upgrade-proposal.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165651Z&X-Amz-Expires=3600&X-Amz-Signature=ee622f305530ef149c2416a71156ce8fea3c6dc2f9db5b9bd9ab5c1361c82cca&X-Amz-SignedHeaders=host&x-id=GetObject",children:"votes-upgrade-proposal.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),l=n(1980),c=n(7392),u=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[c,d]=p({queryString:n,groupId:r}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),x=(()=>{const e=c??h;return b({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{x&&l(x)}),[x]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=n(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(c(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function j(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function A(e){const t=h(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,v.jsx)(g,{...e,...t}),(0,v.jsx)(j,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,v.jsx)(A,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eb3c1158.fcaf0926.js b/assets/js/eb3c1158.fcaf0926.js deleted file mode 100644 index e09004a..0000000 --- a/assets/js/eb3c1158.fcaf0926.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3762],{2292:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>u,toc:()=>i});var n=r(5893),a=r(1151);r(4866),r(5162);const o={title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},l=void 0,u={id:"Wallet",title:"Wallet",description:"Coming soon\u2026",source:"@site/tabs/docs/Wallet.mdx",sourceDirName:".",slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",permalink:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Wallet",sidebar_position:3,slug:"/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5"},sidebar:"defaultSidebar",previous:{title:"Community",permalink:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f"},next:{title:"Bash-utils",permalink:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc"}},s={},i=[];function c(e){const t={em:"em",p:"p",...(0,a.a)(),...e.components};return(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"Coming soon\u2026"})})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>l});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var o=r(5893);function l(e){let{children:t,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,l),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(7294),a=r(6905),o=r(2466),l=r(6550),u=r(469),s=r(1980),i=r(7392),c=r(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,s._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=b(e),[l,s]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=p({queryString:r,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),v=(()=>{const e=i??m;return f({value:e,tabValues:o})?e:null})();(0,u.Z)((()=>{v&&s(v)}),[v]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=r(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function k(e){let{className:t,block:r,selectedValue:n,selectValue:l,tabValues:u}=e;const s=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.o5)(),c=e=>{const t=e.currentTarget,r=s.indexOf(t),a=u[r].value;a!==n&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=s.indexOf(e.currentTarget)+1;t=s[r]??s[0];break}case"ArrowLeft":{const r=s.indexOf(e.currentTarget)-1;t=s[r]??s[s.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:u.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>s.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function y(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function w(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(y,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,g.jsx)(w,{...e,children:d(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>u,a:()=>l});var n=r(7294);const a={},o=n.createContext(a);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec22ab48.be7d5a46.js b/assets/js/ec22ab48.a2392b31.js similarity index 93% rename from assets/js/ec22ab48.be7d5a46.js rename to assets/js/ec22ab48.a2392b31.js index 8c9cd2d..c8c304e 100644 --- a/assets/js/ec22ab48.be7d5a46.js +++ b/assets/js/ec22ab48.a2392b31.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3655],{9172:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-6",sidebar_position:2,slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce"},c=void 0,i={id:"Testnet-History/testnet-6",title:"testnet-6",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-6.mdx",sourceDirName:"Testnet-History",slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"testnet-6",sidebar_position:2,slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce"},sidebar:"defaultSidebar",previous:{title:"testnet-7",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},next:{title:"testnet-5",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"}},l={},o=[{value:"Description",id:"dc237bc202e94c3fabf914065c7fbd6a",level:2},{value:"Post mortem",id:"d14cabb9454842c8bc3f588d4d1454db",level:2},{value:"Files",id:"6b46449cfff14af987ffaf66baabd7ed",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"dc237bc202e94c3fabf914065c7fbd6a",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-6"})]}),"\n",(0,n.jsxs)(t.li,{children:["Expected Launch Time: ",(0,n.jsx)(t.code,{children:"1635028200"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"199a3454d4e88a152d8ea05dde33ad9cb8e7475eddbdf0488b4ebff5b2c9ac02"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"bf08fe3cd574ec36eabf165fc4be15ee0e06673e145b3e16ed8480f0829d7ea6"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"d14cabb9454842c8bc3f588d4d1454db",children:"Post mortem"}),"\n",(0,n.jsx)(t.p,{children:"Failed to reach 2/3+1 of active validators after hard fork upgrade"}),"\n",(0,n.jsx)(t.h2,{id:"6b46449cfff14af987ffaf66baabd7ed",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/7003a74c-5594-401e-8696-afbe3354648a/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152702Z&X-Amz-Expires=3600&X-Amz-Signature=66c7a7b44dac5115b16d37117eb494fe896d7150fe7d4eebed2f0deddcd711cf&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/75bbb3eb-de14-4b94-9dd6-3c466e60aea8/success-upgrade-evidence.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152702Z&X-Amz-Expires=3600&X-Amz-Signature=b202ebcd547d6d242a8911e850923ca1e4192bd0b76bfb5a16a94534720c7c0e&X-Amz-SignedHeaders=host&x-id=GetObject",children:"success-upgrade-evidence.txt"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/04efbfe4-0839-4e28-a938-8855fdbca2fa/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T152702Z&X-Amz-Expires=3600&X-Amz-Signature=3144927393692a47197dfde1d3077f73597ce514905a5664fc7b5479a8398650&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),i=a(469),l=a(1980),o=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[c,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[o,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=o??m;return f({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=a(5893);function A(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(o(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(A,{...e,...t}),(0,x.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3655],{9172:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var n=a(5893),r=a(1151);a(4866),a(5162);const s={title:"testnet-6",sidebar_position:2,slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce"},c=void 0,i={id:"Testnet-History/testnet-6",title:"testnet-6",description:"Description",source:"@site/tabs/Testnet/Testnet-History/testnet-6.mdx",sourceDirName:"Testnet-History",slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce",permalink:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"testnet-6",sidebar_position:2,slug:"/5b45b575-7a7e-419f-94db-fbf90c944cce"},sidebar:"defaultSidebar",previous:{title:"testnet-7",permalink:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766"},next:{title:"testnet-5",permalink:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99"}},l={},o=[{value:"Description",id:"dc237bc202e94c3fabf914065c7fbd6a",level:2},{value:"Post Mortem",id:"d14cabb9454842c8bc3f588d4d1454db",level:2},{value:"Files",id:"6b46449cfff14af987ffaf66baabd7ed",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"dc237bc202e94c3fabf914065c7fbd6a",children:"Description"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Chain Identifier: ",(0,n.jsx)(t.code,{children:"testnet-6"})]}),"\n",(0,n.jsxs)(t.li,{children:["Expected Launch Time: ",(0,n.jsx)(t.code,{children:"1635028200"})]}),"\n",(0,n.jsxs)(t.li,{children:["KIRA Manager Checksum: ",(0,n.jsx)(t.code,{children:"199a3454d4e88a152d8ea05dde33ad9cb8e7475eddbdf0488b4ebff5b2c9ac02"})]}),"\n",(0,n.jsxs)(t.li,{children:["Genesis File Checksum: ",(0,n.jsx)(t.code,{children:"bf08fe3cd574ec36eabf165fc4be15ee0e06673e145b3e16ed8480f0829d7ea6"})]}),"\n",(0,n.jsxs)(t.li,{children:["Initial Block Height: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n",(0,n.jsxs)(t.li,{children:["Block Height Reached: ",(0,n.jsx)(t.code,{children:"243887"})]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"d14cabb9454842c8bc3f588d4d1454db",children:"Post Mortem"}),"\n",(0,n.jsx)(t.p,{children:"Failed to reach 2/3+1 of active validators after hard fork upgrade"}),"\n",(0,n.jsx)(t.h2,{id:"6b46449cfff14af987ffaf66baabd7ed",children:"Files"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/7003a74c-5594-401e-8696-afbe3354648a/genesis.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=011e9baf69bfae890c378c8f556fa5fbc7a08ab68375f71e8653420e1a656cdb&X-Amz-SignedHeaders=host&x-id=GetObject",children:"genesis.json"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/75bbb3eb-de14-4b94-9dd6-3c466e60aea8/success-upgrade-evidence.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=7ca286b837632f7f0dd7f893061689a343fbd3eaaf14b8238ea591ecd660a4c6&X-Amz-SignedHeaders=host&x-id=GetObject",children:"success-upgrade-evidence.txt"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://prod-files-secure.s3.us-west-2.amazonaws.com/9b5bfc45-bdb5-4b46-80e6-aabe3cae64d0/04efbfe4-0839-4e28-a938-8855fdbca2fa/valopers.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240227%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240227T165649Z&X-Amz-Expires=3600&X-Amz-Signature=79c965b11ce2a35e69dab7557c4011c21b849d3c0f00620c41b7c3f2bb40d0ea&X-Amz-SignedHeaders=host&x-id=GetObject",children:"valopers.json"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>c});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var s=a(5893);function c(e){let{children:t,hidden:a,className:c}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,c),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),s=a(2466),c=a(6550),i=a(469),l=a(1980),o=a(7392),u=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,o.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function f(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,s=b(e),[c,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[o,d]=h({queryString:a,groupId:r}),[m,p]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),v=(()=>{const e=o??m;return f({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:c,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=a(5893);function A(e){let{className:t,block:a,selectedValue:n,selectValue:c,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,s.o5)(),u=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(o(t),c(r))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function g(e){let{lazy:t,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(A,{...e,...t}),(0,x.jsx)(g,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>c});var n=a(7294);const r={},s=n.createContext(r);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecd786be.4f7f611a.js b/assets/js/ecd786be.4f7f611a.js deleted file mode 100644 index 09dd3ff..0000000 --- a/assets/js/ecd786be.4f7f611a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[4268],{8214:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Staking-Collectives/index",title:"Staking Collectives",description:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection.",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Staking-Collectives/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Staking-Collectives",slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",permalink:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Staking Collectives",sidebar_position:7,slug:"/3997e5c8-f744-4e83-9e22-f6845cc6c3ee"},sidebar:"defaultSidebar",previous:{title:"Spending Pools",permalink:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95"},next:{title:"Universal Basic Income",permalink:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e"}},i={},c=[];function u(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Staking Collectives offer a community-centric mechanism to pool staking tokens and redirect their dividends. Through Spending Pools, members can lock tokens, reallocating the staking rewards to other network users. The system offers collective control over status, proposals, and changes, with withdrawal limits in place for enhanced protection."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/collectives",children:(0,r.jsx)(t.code,{children:"x/collectives"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),c=n(7392),u=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[c,d]=p({queryString:n,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),v=(()=>{const e=c??m;return h({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function k(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...o,className:(0,a.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(k,{...e,...t}),(0,g.jsx)(w,{...e,...t})]})}function y(e){const t=(0,b.Z)();return(0,g.jsx)(x,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef63544c.0c6a6131.js b/assets/js/ef63544c.0c6a6131.js deleted file mode 100644 index a5a627b..0000000 --- a/assets/js/ef63544c.0c6a6131.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3629],{6706:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=t(5893),r=t(1151);t(4866),t(5162);const l={title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},s=void 0,i={id:"Stack/INTERX--Middleware/Installation",title:"Installation",description:"Dependencies",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Installation.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/cf419aea-20dc-4421-951b-2579c3026e6b",permalink:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},sidebar:"defaultSidebar",previous:{title:"Endpoints",permalink:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a"}},o={},c=[{value:"Dependencies",id:"907b3fae8582494eaf2438c80ad63660",level:2},{value:"Deb package manager",id:"8af945d2feb64dc49258460f34799b47",level:4},{value:"Docker",id:"d826dd6a316240048c0401d557958ef5",level:4},{value:"Others",id:"e725f60cb46e47149abeb9fcf9ad5211",level:4},{value:"Interx installation",id:"ddebded562ee4a1e95e8aa1bb6dcbd22",level:2}];function u(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h2,{id:"907b3fae8582494eaf2438c80ad63660",children:"Dependencies"}),"\n",(0,n.jsx)(a.h4,{id:"8af945d2feb64dc49258460f34799b47",children:"Deb package manager"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list && apt-get update -y && \\\napt install nfpm\n"})}),"\n",(0,n.jsx)(a.h4,{id:"d826dd6a316240048c0401d557958ef5",children:"Docker"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'apt-get update -y && \\\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \\\nadd-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \\\napt-get update -y && apt-get install docker-ce docker-ce-cli containerd.io -y && \\\ndocker version\n'})}),"\n",(0,n.jsx)(a.h4,{id:"e725f60cb46e47149abeb9fcf9ad5211",children:"Others"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"apt-get install -y curl && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && apt-get update -y && \\\napt-get install -y --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages \\\nfile build-essential hashdeep make tar unzip zip p7zip-full curl iputils-ping nano jq python python3 python3-pip \\\nbash lsof bc dnsutils psmisc netcat coreutils binutils\n"})}),"\n",(0,n.jsx)(a.h2,{id:"ddebded562ee4a1e95e8aa1bb6dcbd22",children:"Interx installation"}),"\n",(0,n.jsx)(a.admonition,{type:"note",children:(0,n.jsxs)(a.p,{children:["INTERX Repo is accessible ",(0,n.jsx)(a.a,{href:"https://github.com/KiraCore/interx",children:"here"}),"."]})}),"\n",(0,n.jsx)(a.p,{children:"Assume root permissions"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"sudo -s\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Set desired INTERX release version and binaries repo as env variables within ",(0,n.jsx)(a.code,{children:"/etc/profile"}),", with ",(0,n.jsx)(a.a,{href:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",children:"Bash-utils"})," or manually. Sourcing ",(0,n.jsx)(a.code,{children:"/etc/profile"})," is necessary."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'setGlobEnv INTERX_VERSION "v0.4.34" && \\\nsetGlobEnv INTERX_REPO "$HOME/interx" && \\\nloadGlobEnvs\n'})}),"\n",(0,n.jsx)(a.p,{children:"Clone repository and install"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'rm -fr $INTERX_REPO && rm -fr $GOBIN/interx && mkdir $INTERX_REPO && cd $INTERX_REPO && \\\ngit clone https://github.com/KiraCore/interx.git -b $INTERX_VERSION $INTERX_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed interx $(interx version)" || echo "FAILED"\n'})})]})}function d(e={}){const{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,a,t)=>{t.d(a,{Z:()=>s});t(7294);var n=t(6905);const r={tabItem:"tabItem_Ymn6"};var l=t(5893);function s(e){let{children:a,hidden:t,className:s}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,s),hidden:t,children:a})}},4866:(e,a,t)=>{t.d(a,{Z:()=>I});var n=t(7294),r=t(6905),l=t(2466),s=t(6550),i=t(469),o=t(1980),c=t(7392),u=t(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:a,children:t}=e;return(0,n.useMemo)((()=>{const e=a??function(e){return d(e).map((e=>{let{props:{value:a,label:t,attributes:n,default:r}}=e;return{value:a,label:t,attributes:n,default:r}}))}(t);return function(e){const a=(0,c.l)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[a,t])}function b(e){let{value:a,tabValues:t}=e;return t.some((e=>e.value===a))}function h(e){let{queryString:a=!1,groupId:t}=e;const r=(0,s.k6)(),l=function(e){let{queryString:a=!1,groupId:t}=e;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:a,groupId:t});return[(0,o._X)(l),(0,n.useCallback)((e=>{if(!l)return;const a=new URLSearchParams(r.location.search);a.set(l,e),r.replace({...r.location,search:a.toString()})}),[l,r])]}function f(e){const{defaultValue:a,queryString:t=!1,groupId:r}=e,l=p(e),[s,o]=(0,n.useState)((()=>function(e){let{defaultValue:a,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!b({value:a,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${a}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return a}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:a,tabValues:l}))),[c,d]=h({queryString:t,groupId:r}),[f,m]=function(e){let{groupId:a}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(a),[r,l]=(0,u.Nk)(t);return[r,(0,n.useCallback)((e=>{t&&l.set(e)}),[t,l])]}({groupId:r}),g=(()=>{const e=c??f;return b({value:e,tabValues:l})?e:null})();(0,i.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),m(e)}),[d,m,l]),tabValues:l}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:a,block:t,selectedValue:n,selectValue:s,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),u=e=>{const a=e.currentTarget,t=o.indexOf(a),r=i[t].value;r!==n&&(c(a),s(r))},d=e=>{let a=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;a=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;a=o[t]??o[o.length-1];break}}a?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},a),children:i.map((e=>{let{value:a,label:t,attributes:l}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===a?0:-1,"aria-selected":n===a,ref:e=>o.push(e),onKeyDown:d,onClick:u,...l,className:(0,r.Z)("tabs__item",g.tabItem,l?.className,{"tabs__item--active":n===a}),children:t??a},a)}))})}function k(e){let{lazy:a,children:t,selectedValue:r}=e;const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(a){const e=l.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:l.map(((e,a)=>(0,n.cloneElement)(e,{key:a,hidden:e.props.value!==r})))})}function y(e){const a=f(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...a}),(0,v.jsx)(k,{...e,...a})]})}function I(e){const a=(0,m.Z)();return(0,v.jsx)(y,{...e,children:d(e.children)},String(a))}},1151:(e,a,t)=>{t.d(a,{Z:()=>i,a:()=>s});var n=t(7294);const r={},l=n.createContext(r);function s(e){const a=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef63544c.8a26c8b6.js b/assets/js/ef63544c.8a26c8b6.js new file mode 100644 index 0000000..6f2fd49 --- /dev/null +++ b/assets/js/ef63544c.8a26c8b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3629],{6706:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var n=t(5893),r=t(1151);t(4866),t(5162);const s={title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},l=void 0,o={id:"Stack/INTERX--Middleware/Installation",title:"Installation",description:"Dependencies",source:"@site/tabs/Docs/Stack/INTERX--Middleware/Installation.mdx",sourceDirName:"Stack/INTERX--Middleware",slug:"/cf419aea-20dc-4421-951b-2579c3026e6b",permalink:"/docs.kira.network/docs/cf419aea-20dc-4421-951b-2579c3026e6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Installation",sidebar_position:4,slug:"/cf419aea-20dc-4421-951b-2579c3026e6b"},sidebar:"defaultSidebar",previous:{title:"Endpoints",permalink:"/docs.kira.network/docs/27ca73f9-ea33-4ca3-994a-cba651a2c896"},next:{title:"Command Line Interface",permalink:"/docs.kira.network/docs/39242b54-c86a-4406-82f9-49cad4ed7c5a"}},i={},c=[{value:"Dependencies",id:"907b3fae8582494eaf2438c80ad63660",level:2},{value:"Deb Package Manager",id:"8af945d2feb64dc49258460f34799b47",level:4},{value:"Docker",id:"d826dd6a316240048c0401d557958ef5",level:4},{value:"Others",id:"e725f60cb46e47149abeb9fcf9ad5211",level:4},{value:"Interx Installation",id:"ddebded562ee4a1e95e8aa1bb6dcbd22",level:2}];function u(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h2,{id:"907b3fae8582494eaf2438c80ad63660",children:"Dependencies"}),"\n",(0,n.jsx)(a.h4,{id:"8af945d2feb64dc49258460f34799b47",children:"Deb Package Manager"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list && apt-get update -y && \\\napt install nfpm\n"})}),"\n",(0,n.jsx)(a.h4,{id:"d826dd6a316240048c0401d557958ef5",children:"Docker"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'apt-get update -y && \\\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \\\nadd-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \\\napt-get update -y && apt-get install docker-ce docker-ce-cli containerd.io -y && \\\ndocker version\n'})}),"\n",(0,n.jsx)(a.h4,{id:"e725f60cb46e47149abeb9fcf9ad5211",children:"Others"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"apt-get install -y curl && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && apt-get update -y && \\\napt-get install -y --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages \\\nfile build-essential hashdeep make tar unzip zip p7zip-full curl iputils-ping nano jq python python3 python3-pip \\\nbash lsof bc dnsutils psmisc netcat coreutils binutils\n"})}),"\n",(0,n.jsx)(a.h2,{id:"ddebded562ee4a1e95e8aa1bb6dcbd22",children:"Interx Installation"}),"\n",(0,n.jsx)(a.admonition,{type:"note",children:(0,n.jsxs)(a.p,{children:["INTERX Repo is accessible ",(0,n.jsx)(a.a,{href:"https://github.com/KiraCore/interx",children:"here"}),"."]})}),"\n",(0,n.jsx)(a.p,{children:"Assume root permissions"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"sudo -s\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Set desired INTERX release version and binaries repo as env variables within ",(0,n.jsx)(a.code,{children:"/etc/profile"}),", with ",(0,n.jsx)(a.a,{href:"/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",children:"Bash-utils"})," or manually. Sourcing ",(0,n.jsx)(a.code,{children:"/etc/profile"})," is necessary."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'setGlobEnv INTERX_VERSION "v0.4.34" && \\\nsetGlobEnv INTERX_REPO "$HOME/interx" && \\\nloadGlobEnvs\n'})}),"\n",(0,n.jsx)(a.p,{children:"Clone repository and install"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:'rm -fr $INTERX_REPO && rm -fr $GOBIN/interx && mkdir $INTERX_REPO && cd $INTERX_REPO && \\\ngit clone https://github.com/KiraCore/interx.git -b $INTERX_VERSION $INTERX_REPO && \\\nchmod -R 777 ./scripts && make install && \\\necho "SUCCESS installed interx $(interx version)" || echo "FAILED"\n'})})]})}function d(e={}){const{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},5162:(e,a,t)=>{t.d(a,{Z:()=>l});t(7294);var n=t(6905);const r={tabItem:"tabItem_Ymn6"};var s=t(5893);function l(e){let{children:a,hidden:t,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,l),hidden:t,children:a})}},4866:(e,a,t)=>{t.d(a,{Z:()=>y});var n=t(7294),r=t(6905),s=t(2466),l=t(6550),o=t(469),i=t(1980),c=t(7392),u=t(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:a,children:t}=e;return(0,n.useMemo)((()=>{const e=a??function(e){return d(e).map((e=>{let{props:{value:a,label:t,attributes:n,default:r}}=e;return{value:a,label:t,attributes:n,default:r}}))}(t);return function(e){const a=(0,c.l)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[a,t])}function b(e){let{value:a,tabValues:t}=e;return t.some((e=>e.value===a))}function h(e){let{queryString:a=!1,groupId:t}=e;const r=(0,l.k6)(),s=function(e){let{queryString:a=!1,groupId:t}=e;if("string"==typeof a)return a;if(!1===a)return null;if(!0===a&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:a,groupId:t});return[(0,i._X)(s),(0,n.useCallback)((e=>{if(!s)return;const a=new URLSearchParams(r.location.search);a.set(s,e),r.replace({...r.location,search:a.toString()})}),[s,r])]}function f(e){const{defaultValue:a,queryString:t=!1,groupId:r}=e,s=p(e),[l,i]=(0,n.useState)((()=>function(e){let{defaultValue:a,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!b({value:a,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${a}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return a}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:a,tabValues:s}))),[c,d]=h({queryString:t,groupId:r}),[f,m]=function(e){let{groupId:a}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(a),[r,s]=(0,u.Nk)(t);return[r,(0,n.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:r}),g=(()=>{const e=c??f;return b({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=t(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(5893);function x(e){let{className:a,block:t,selectedValue:n,selectValue:l,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const a=e.currentTarget,t=i.indexOf(a),r=o[t].value;r!==n&&(c(a),l(r))},d=e=>{let a=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=i.indexOf(e.currentTarget)+1;a=i[t]??i[0];break}case"ArrowLeft":{const t=i.indexOf(e.currentTarget)-1;a=i[t]??i[i.length-1];break}}a?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},a),children:o.map((e=>{let{value:a,label:t,attributes:s}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===a?0:-1,"aria-selected":n===a,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,r.Z)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":n===a}),children:t??a},a)}))})}function k(e){let{lazy:a,children:t,selectedValue:r}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(a){const e=s.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,a)=>(0,n.cloneElement)(e,{key:a,hidden:e.props.value!==r})))})}function I(e){const a=f(e);return(0,v.jsxs)("div",{className:(0,r.Z)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...e,...a}),(0,v.jsx)(k,{...e,...a})]})}function y(e){const a=(0,m.Z)();return(0,v.jsx)(I,{...e,children:d(e.children)},String(a))}},1151:(e,a,t)=>{t.d(a,{Z:()=>o,a:()=>l});var n=t(7294);const r={},s=n.createContext(r);function l(e){const a=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f31f9958.6c154acc.js b/assets/js/f31f9958.6c154acc.js deleted file mode 100644 index c8ebf30..0000000 --- a/assets/js/f31f9958.6c154acc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6002],{5119:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/index",title:"Token Basketing",description:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69",permalink:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},sidebar:"defaultSidebar",previous:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},next:{title:"Token Basketing Module",permalink:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"}},u={},l=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/basket",children:(0,a.jsx)(t.code,{children:"x/basket"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:n,groupId:r}),[b,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),k=(()=>{const e=l??b;return h({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{k&&u(k)}),[k]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",k.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",k.tabList),children:[(0,g.jsx)(v,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f31f9958.933545cb.js b/assets/js/f31f9958.933545cb.js new file mode 100644 index 0000000..7c76652 --- /dev/null +++ b/assets/js/f31f9958.933545cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6002],{5119:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=n(5893),r=n(1151);n(4866),n(5162);const s={title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},o=void 0,i={id:"Stack/SEKAI--Backend/Modules/Token-Basketing/index",title:"Token Basketing",description:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool.",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Token-Basketing",slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69",permalink:"/docs.kira.network/docs/6c6d144f-f315-43f7-8fe7-289d98890a69",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{title:"Token Basketing",sidebar_position:10,slug:"/6c6d144f-f315-43f7-8fe7-289d98890a69"},sidebar:"defaultSidebar",previous:{title:"Governance-regulated Foreign Token Transfers",permalink:"/docs.kira.network/docs/34367cb0-ee71-418f-9dc5-bcc8823b71e5"},next:{title:"Token Basketing Module",permalink:"/docs.kira.network/docs/3aa15c97-02e9-4d62-a84a-cc99b8a90f86"}},u={},l=[];function c(e){const t={a:"a",code:"code",hr:"hr",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Through the functionality of this module users can bundle same-denomination tokens, such as KIRA\u2019s staking derivatives, into a single derivative token, simplifying trades and exchanges within the ecosystem. With the module's fixed weight system, the list of tokens in a basket can change over time, serving not as an exchange but as a risk management tool."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/basket",children:(0,a.jsx)(t.code,{children:"x/basket"})})}),"\n",(0,a.jsx)(t.hr,{})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var s=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,o),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7294),r=n(6905),s=n(2466),o=n(6550),i=n(469),u=n(1980),l=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,l.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const r=(0,o.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,u._X)(s),(0,a.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(r.location.search);t.set(s,e),r.replace({...r.location,search:t.toString()})}),[s,r])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=f(e),[o,u]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:s}))),[l,d]=m({queryString:n,groupId:r}),[b,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,s]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:r}),k=(()=>{const e=l??b;return h({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{k&&u(k)}),[k]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=u.indexOf(t),r=i[n].value;r!==a&&(l(t),o(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.Z)("tabs__item",k.tabItem,s?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function x(e){let{lazy:t,children:n,selectedValue:r}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",k.tabList),children:[(0,g.jsx)(v,{...e,...t}),(0,g.jsx)(x,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,g.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var a=n(7294);const r={},s=a.createContext(r);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f3dd322a.1d4c0f9e.js b/assets/js/f3dd322a.1d4c0f9e.js new file mode 100644 index 0000000..0d3b978 --- /dev/null +++ b/assets/js/f3dd322a.1d4c0f9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[5116],{9883:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=a(5893),r=a(1151);a(4866),a(5162);const o={title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},s=void 0,i={id:"What-is-KIRA/Orchestrator---RYOKAI",title:"Orchestrator - RYOKAI",description:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.",source:"@site/tabs/learn/What-is-KIRA/Orchestrator---RYOKAI.mdx",sourceDirName:"What-is-KIRA",slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f",permalink:"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Orchestrator - RYOKAI",sidebar_position:4,slug:"/2ac3bfb7-478c-4207-a290-051d9fa6124f"},sidebar:"defaultSidebar",previous:{title:"Frontend - MIRO",permalink:"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a"},next:{title:"Overview",permalink:"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5"}},l={},u=[];function c(e){const t={p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration."}),"\n",(0,n.jsx)(t.p,{children:"RYOKAI facilitates the initialization and management of nodes via a built-in terminal, which permits the direct execution of commands on remote hosts. Additionally, it offers cross-platform support, enabling consensus nodes to manage their validator accounts on Android, iOS, and Linux devices. These features provide operators with the flexibility to access and control their infrastructure from any location, at any time. For monitoring, RYOKAI eliminates the need for additional computer systems by incorporating Prometheus exporters and the standard Tendermint endpoint (:26660). These tools collect and relay operational data, providing validators with a detailed understanding of network health and performance without relying on traditional monitoring infrastructure. Additionally, RYOKAI improves network security through firewall configurations, ssh key management, and encrypted communication channels to prevent unauthorized access and vulnerabilities."})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,a)=>{a.d(t,{Z:()=>s});a(7294);var n=a(6905);const r={tabItem:"tabItem_Ymn6"};var o=a(5893);function s(e){let{children:t,hidden:a,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.Z)(r.tabItem,s),hidden:a,children:t})}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7294),r=a(6905),o=a(2466),s=a(6550),i=a(469),l=a(1980),u=a(7392),c=a(12);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function m(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,o=f(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[u,d]=h({queryString:a,groupId:r}),[m,b]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:r}),v=(()=>{const e=u??m;return p({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=a(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=a(5893);function y(e){let{className:t,block:a,selectedValue:n,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),r=i[a].value;r!==n&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t),children:i.map((e=>{let{value:t,label:a,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function I(e){let{lazy:t,children:a,selectedValue:r}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=m(e);return(0,g.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,g.jsx)(y,{...e,...t}),(0,g.jsx)(I,{...e,...t})]})}function w(e){const t=(0,b.Z)();return(0,g.jsx)(k,{...e,children:d(e.children)},String(t))}},1151:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var n=a(7294);const r={},o=n.createContext(r);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5e8ec95.9ed35797.js b/assets/js/f5e8ec95.9ed35797.js new file mode 100644 index 0000000..26dae56 --- /dev/null +++ b/assets/js/f5e8ec95.9ed35797.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7549],{2956:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},l=void 0,o={id:"Stack/SEKAI--Backend/System-Requirements",title:"System Requirements",description:"To run a sekaid application the following system requirements must be met:",source:"@site/tabs/Docs/Stack/SEKAI--Backend/System-Requirements.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d1a56903-4e24-47ce-b39f-f28be9123399",permalink:"/docs.kira.network/docs/d1a56903-4e24-47ce-b39f-f28be9123399",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},sidebar:"defaultSidebar",previous:{title:"SEKAI | Backend",permalink:"/docs.kira.network/docs/27fe8d79-00c0-4e0b-872b-3d72a246c073"},next:{title:"Installation",permalink:"/docs.kira.network/docs/a026f2da-ef09-4092-af96-aad8db6baf66"}},i={},u=[{value:"Hardware",id:"284fec99661c42cd9db8e573d918616d",level:2},{value:"Networking",id:"9f4bf9ad9ea64d348aff30013f9d46b8",level:2},{value:"Software",id:"136a440426ad451399a598ee82b6966b",level:2}];function c(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run a ",(0,r.jsx)(t.code,{children:"sekaid"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"284fec99661c42cd9db8e573d918616d",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"4 vCPU"})," cores (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"8GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to persist blockchain state and snapshots (",(0,r.jsx)(t.code,{children:"1TB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32GB+"})," of ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"9f4bf9ad9ea64d348aff30013f9d46b8",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"136a440426ad451399a598ee82b6966b",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),o=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=f(e),[l,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[u,d]=h({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=u??m;return b({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=o[n].value;a!==r&&(u(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(k,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5e8ec95.f5485cd3.js b/assets/js/f5e8ec95.f5485cd3.js deleted file mode 100644 index f7d91cc..0000000 --- a/assets/js/f5e8ec95.f5485cd3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7549],{2956:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const s={title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},l=void 0,o={id:"Stack/SEKAI--Backend/System-Requirements",title:"System Requirements",description:"To run a sekaid application the following system requirements must be met:",source:"@site/tabs/Docs/Stack/SEKAI--Backend/System-Requirements.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/d1a56903-4e24-47ce-b39f-f28be9123399",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"System Requirements",sidebar_position:2,slug:"/d1a56903-4e24-47ce-b39f-f28be9123399"},sidebar:"defaultSidebar",previous:{title:"SEKAI | Backend",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073"},next:{title:"Installation",permalink:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66"}},i={},u=[{value:"Hardware",id:"284fec99661c42cd9db8e573d918616d",level:2},{value:"Networking",id:"9f4bf9ad9ea64d348aff30013f9d46b8",level:2},{value:"Software",id:"136a440426ad451399a598ee82b6966b",level:2}];function c(e){const t={code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["To run a ",(0,r.jsx)(t.code,{children:"sekaid"})," application the following system requirements must be met:"]}),"\n",(0,r.jsx)(t.h2,{id:"284fec99661c42cd9db8e573d918616d",children:"Hardware"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"4 vCPU"})," cores (ARM64 or x64)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"8GB"})," of RAM"]}),"\n",(0,r.jsxs)(t.li,{children:["Storage space required to persist blockchain state and snapshots (",(0,r.jsx)(t.code,{children:"1TB+"})," recommended)"]}),"\n",(0,r.jsxs)(t.li,{children:["Minimum ",(0,r.jsx)(t.code,{children:"32GB+"})," of ",(0,r.jsx)(t.strong,{children:"free"})," storage space available at all times"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"9f4bf9ad9ea64d348aff30013f9d46b8",children:"Networking"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Stable internet connection with minimum ",(0,r.jsx)(t.code,{children:"64 Mbps"})," Up/Dn speed at all times"]}),"\n",(0,r.jsx)(t.li,{children:"Static IP address or dynamic DNS"}),"\n",(0,r.jsx)(t.li,{children:"Access to router or otherwise your local network configuration"}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"136a440426ad451399a598ee82b6966b",children:"Software"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Ubuntu ",(0,r.jsx)(t.code,{children:"20.04 LTS"})," installed on the ",(0,r.jsx)(t.strong,{children:"host"})," instance or VM"]}),"\n",(0,r.jsx)(t.li,{children:"Secure SSH configuration with RSA key or strong password"}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var s=n(5893);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,l),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var r=n(7294),a=n(6905),s=n(2466),l=n(6550),o=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,s=f(e),[l,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[u,d]=h({queryString:n,groupId:a}),[m,p]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:a}),v=(()=>{const e=u??m;return b({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var p=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:o}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=o[n].value;a!==r&&(u(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:o.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.Z)("tabs__item",v.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,x.jsx)(g,{...e,...t}),(0,x.jsx)(k,{...e,...t})]})}function w(e){const t=(0,p.Z)();return(0,x.jsx)(j,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var r=n(7294);const a={},s=r.createContext(a);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f76ae480.b8dfddac.js b/assets/js/f76ae480.b8dfddac.js deleted file mode 100644 index f8b91bc..0000000 --- a/assets/js/f76ae480.b8dfddac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[199],{1180:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var a=s(5893),i=s(1151),t=s(4866),o=s(5162);const r={title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing",title:"Jailing & slashing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",permalink:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},sidebar:"defaultSidebar",previous:{title:"Slashing",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"},next:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f"}},d={},h=[{value:"Concept",id:"565f4e1ee9194bec9514949c8445c429",level:2},{value:"Automatic jailing & threshold slashing",id:"e8ce22a553f74f06b7645d8999be4ff4",level:3},{value:"Slashing and governance dispute procedures",id:"252c47c531a94f06a58b55b94777f86f",level:3},{value:"Jailing & unjailing",id:"02d326b0daf940608fa5f61c6935e19c",level:4},{value:"Slashing",id:"76d940b87b0848bf821f753a5877002f",level:4},{value:"Governance proposals hierarchy",id:"f9febb32be5f41198c8b7756fe14513c",level:4},{value:"Slashing amount",id:"0bad15385fb24eff9cb0bc2c5e02bf5a",level:4},{value:"Slashing mechanism",id:"579d6eefbae4479b92e5b3b202268667",level:3},{value:"Parameters",id:"2ffbd79dca3b479899e3816d988c93c3",level:2},{value:"Cli syntax & examples",id:"bce7d7f9bfc64f43851880529d77ac27",level:2},{value:"Transactions",id:"299caee03182495498646474b6a41509",level:2},{value:"Queries",id:"98c6f1eb65ff43e2a0d8a4698088b6ee",level:2},{value:"Slashing proposals",id:"109f939f975f4eff99f7f7cf3ae1c324",level:4},{value:"Slashed pools",id:"3fb8ee10273c49ae94108f23eae5b200",level:4},{value:"Slashing parameters",id:"857c8142f32b47e380fff730ccab213b",level:4},{value:"Validator signing information",id:"ce70267e68794ed18a221bed3952444e",level:4},{value:"Governance",id:"08e02bdedc884132a7b9aec6b77fe999",level:2},{value:"Creating an unjailing request proposal",id:"a37842ba091c4bb993f308d64a839b47",level:4},{value:"Creating a slashing proposal",id:"29215838099c4a21b617e91538c858af",level:4},{value:"Submitting a slashing proposal refutation",id:"ea31a4280969443da49d5987e1da50f8",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"565f4e1ee9194bec9514949c8445c429",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:"Building on the broader concepts explored in our guide, KIRA\u2019s governance-permissioned validator set, a standout feature of its consensus system, addresses the inherent challenges in permissionless environments where any participant can become a validator and removal is nearly impossible. In Kira's framework, malicious validators can be permanently removed by their peers, a process made feasible because voting power isn\u2019t based on the size of one's stake. This ensures that coin ownership doesn't lead to disproportionate influence. Consequently, Kira specifically targets instances of double-signing for potential slashing. By mitigating the risk of severe penalties for minor or unintentional errors, Kira's model aims to foster a strong, diverse validator community, enhancing network decentralization and resilience. This approach not only challenges the traditional necessity for harsh slashing in maintaining network integrity but also seeks a harmonious balance between security and inclusivity. Aligned with Byzantine principles, Kira embraces the inevitability of human error and system failures, showcasing a more adaptable and empathetic approach to network governance."}),"\n",(0,a.jsx)(n.h3,{id:"e8ce22a553f74f06b7645d8999be4ff4",children:"Automatic jailing & threshold slashing"}),"\n",(0,a.jsxs)(n.p,{children:["In KIRA, double-signing is the only penalized fault for consensus nodes. Consensus nodes going offline will not be punished and/or slashed as explained in the ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"Consensus nodes ranks & statuses"}),'. Double-signing occurs when a consensus node proposes or participates in the production of two different blocks at the same block height, creating or attempting to create a fork in the blockchain. A fork is when there are two or more valid chain histories that could be followed, and it\'s not immediately clear which one should be considered the "correct" chain, a.k.a canonical chain. Forks can disrupt network observers, such as light nodes, who do not have the resources to fully validate transactions and therefore rely on a single chain for their own operations. If a light node is unable to determine which fork is the canonical chain, it may be vulnerable to attacks where the same funds are spent multiple times, once on each fork.']}),"\n",(0,a.jsx)(n.p,{children:"However, double-signing does not necessarily mean that a consensus node is acting maliciously and in this case slashing doesn\u2019t actually add any security to the network. There can be various reasons for unintentional misbehavior, such as:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Launching the node before it is fully synced"}),"\n",(0,a.jsx)(n.li,{children:"Application or hardware faults"}),"\n",(0,a.jsx)(n.li,{children:"Misconfiguration"}),"\n",(0,a.jsx)(n.li,{children:"Accidentally deploying two nodes with the same key"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For this reason, KIRA does not automatically punish nodes for double-signing. Instead, they are ",(0,a.jsx)(n.strong,{children:"automatically jailed"})," and their fate is decided by governance later on, which may choose to unjail them, permanently remove them from the consensus node set, and/or slash them in cases of coordinated attacks. This protects delegators' staked funds and minimizes the risk of accidental loss, which is important when staking valuable assets such as Bitcoin, digital fiat, or commodities. This is possible because the consensus node set is governance-permissioned and voting power is not based on the stake backing them. This means that malicious consensus nodes can be permanently removed by other consensus nodes without being able to influence governance decisions."]}),"\n",(0,a.jsxs)(n.p,{children:["To detect coordinated attacks, KIRA utilizes the concept of ",(0,a.jsx)(n.strong,{children:"threshold slashing"}),". An automatic slashing proposal only occurs if a certain number of consensus nodes double-sign within a specific time frame, with the threshold being less than 1/3 of all consensus nodes. The threshold slashing parameters, ",(0,a.jsx)(n.code,{children:"slashing_period"})," (3600 seconds by default) and ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," (25 by default, i.e 25% of all active consensus nodes), are ",(0,a.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," that can be adjusted by governance."]}),"\n",(0,a.jsx)(n.h3,{id:"252c47c531a94f06a58b55b94777f86f",children:"Slashing and governance dispute procedures"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"Slashing a staking pool is a permanent operation. Once a pool has been slashed, it is no longer possible to add deposits to it, and there is no way to return it to its original state."})}),"\n",(0,a.jsx)(n.p,{children:"In KIRA, slashing is governed, meaning that the decision to slash and the amount to be slashed is determined by the governance and evaluated on a case-by-case basis to prevent cases where software bugs could result in the loss of delegator assets. KIRA's governance-permissioned nature reduces the difficulty and risk of running a node, making it accessible to anyone, even those with little experience, rather than requiring expensive cloud provider setups."}),"\n",(0,a.jsx)(n.h4,{id:"02d326b0daf940608fa5f61c6935e19c",children:"Jailing & unjailing"}),"\n",(0,a.jsxs)(n.p,{children:["If a consensus node is caught double-signing, it will be automatically jailed by the network and its status will be changed to ",(0,a.jsx)(n.code,{children:"jailed"}),". This does not necessarily mean that the node will be slashed, as double-signing is not automatically considered malicious. While a node is ",(0,a.jsx)(n.code,{children:"jailed"}),", it (or any governance member with proposal creation permission 20) can request to be unjailed through a governance proposal using ",(0,a.jsx)(n.code,{children:"sekaid tx customstaking proposal unjail-validator"}),". This request must be made within a certain time frame, defined by the ",(0,a.jsx)(n.code,{children:"unjail_max_time"})," network property (600 seconds by default). If the request is not made or accepted within this time frame, the node will become permanently jailed. The process of unjailing a node is a judgment proposal, meaning that all governance members voting permissions 21 and consensus nodes with ",(0,a.jsx)(n.code,{children:"active"})," status, can vote on whether or not the node should be unjailed."]}),"\n",(0,a.jsxs)(n.p,{children:["While it is ",(0,a.jsx)(n.code,{children:"jailed"}),", a node cannot propose blocks, doesn\u2019t accumulate rewards, cannot receive any new delegations and cannot vote on any proposals. Meanwhile other nodes can wait to see if there is evidence of double-signing collusion with other potential malicious nodes or other suspicious activity during that time window."]}),"\n",(0,a.jsx)(n.h4,{id:"76d940b87b0848bf821f753a5877002f",children:"Slashing"}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing decision is being considered, all governance members with proposal creation permission 57 can rise a slashing proposal using ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," to slash and permanently remove the node from the active consensus node set. However, if ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached, a slashing proposal for each incriminated consensus node is automatically rised by the network."]}),"\n",(0,a.jsxs)(n.p,{children:['While a slashing proposal is ongoing, the consensus node under investigation can submit counter-evidence, or "refutation," using the ',(0,a.jsx)(n.code,{children:"refute-slashing-proposal"})," method by providing an URL or CID to an IPFS resource. Once the counter-evidence is submitted, it cannot be updated again. If a governance proposal results in a slashing event, the consensus node can no longer be unjailed and its staking pool is slashed and becomes inoperative. Users can only undelegate their existing stake in this case."]}),"\n",(0,a.jsx)(n.p,{children:"A slashing proposal can have one of the following outcome:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the slashing proposal ends without reaching the required quorum, the consensus node is not slashed and can request to be unjailed by rising an unjailing proposal."}),"\n",(0,a.jsxs)(n.li,{children:["If it ends by reaching the required quorum :","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the governance decided not to slash, the node is not slashed and can request to be unjailed."}),"\n",(0,a.jsx)(n.li,{children:"If the governance decided to slash, the node is slashed by the percentage determined in the proposal and cannot be unjailed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h4,{id:"f9febb32be5f41198c8b7756fe14513c",children:"Governance proposals hierarchy"}),"\n",(0,a.jsx)(n.p,{children:"Slashing proposals take precedence over unjailing proposals. If a slashing proposal is raised for a given consensus node, any active unjailing proposals related to this node are cancelled, and no new unjailing proposals can be raised until the slashing proposal is finalized. This hierarchical relationship ensures that no unjailing action can be finalized before a slashing action, which prevents malicious consensus nodes from starting to produce blocks and receive new delegations before a potential slashing event. This helps to prevent difficult-to-handle situations where malicious nodes are able to gain an advantage before being punished for their actions or having to slash new, innocent delegators."}),"\n",(0,a.jsx)(n.h4,{id:"0bad15385fb24eff9cb0bc2c5e02bf5a",children:"Slashing amount"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["Jailed nodes being slashed as well as any of the others colluders listed in the proposal cannot vote on any proposal as their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),"."]})}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing proposal is rised, all governance members with voting permission 58 and consensus nodes with the active ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"status"}),", can vote by providing a slashing percentage as an input. This input is limited by the maximum slashing percentage ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"}),", which is a configurable parameter in the network properties. This percentage can range from 0% to 100%, with a default value of 0.5%. This limit is meant to provide delegators to have a quantifiable manner of measuring their potential risks when staking. The exact percentage of slashing for a given proposal is determined by taking the median of all votes inputs. For the slashing to occur, more than 50% of all governance members participating in the proposal process must vote with a non-zero slash."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Examples:"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.1"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0.5, 1, 0.5, 0.25, 0.25, 0.25, 0.75, 0.01, 0, 0.25"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.25"})," but the final slashing ",(0,a.jsx)(n.code,{children:"10%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.5"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0.01, 0.01, 0.03, 0.03, 1, 0.04, 0.05, 0.07, 0.08, 1, 0.1"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.35"})," and the final slashing is ",(0,a.jsx)(n.code,{children:"3.5%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.25"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.01, 0, 0, 1"}),", then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0"})," and no slashing takes place."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Slashing proposal structure"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n\t"offender": "kiraXXX...XXX", // validator address that commited a fault\n\t"staking_pool_id": ,\n "misbehaviour_time": , // time at which misbehaviour occured\n "misbehaviour_type": "double-signing", //string type of evidence (in the future there can be different types)\n "jailed_percentage": , // percentage of validators that was jailed (colluded)\n "colluders": [ // list of validator who colluded with a misbehaving validator\n\t\t"kiraXXX...XXX",\n\t\t"kiraXXX...XXX",\n\t\t...,\n\t\t"kiraXXX...XXX"\n\t],\n "refutation": "" // validator supplied counter-evidence proving that his behaviour was not intentionally malicious,\n "votes": [\n { "voter": "kiraXXX...XXX", "slash": },\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0.5 },\n\t\t...\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0 }\n\t]\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"579d6eefbae4479b92e5b3b202268667",children:"Slashing mechanism"}),"\n",(0,a.jsxs)(n.p,{children:["If a governance proposal results in a slashing event, the decided percentage will be taken off all staked tokens within the staking pool. The derivative tokens representing each one of these staked tokens will also lose their 1-to-1 peg. For example, if consensus node V1 is being slashed by 5%, then unstaking 2 of any tokens XYZ would only return 1.9 XYZ, similar to the concept of impermanent loss in automated market maker systems like Uniswap. KIRA's slashing mechanism uses a ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Floor_and_ceiling_functions",children:"ceiling function"})," to avoid transferring 0 amounts and to accommodate singular units and non-fungible tokens. A specific mechanism for non-fungible tokens will be implemented in a future update. The slashed tokens, including KIRA's native token KEX, are transferred to a governance-controlled community spending pool where a decision can be made regarding their final fate, such as giving them away to the community or refunding them in the case of unfair slashing. The information about the slashing, including the percentage and the result of the governance proposal, is recorded in the staking pool and can be ",(0,a.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"queried"})," for reference."]}),"\n",(0,a.jsx)(n.h2,{id:"2ffbd79dca3b479899e3816d988c93c3",children:"Parameters"}),"\n",(0,a.jsx)(n.h2,{id:"bce7d7f9bfc64f43851880529d77ac27",children:"Cli syntax & examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"299caee03182495498646474b6a41509",children:"Transactions"}),(0,a.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,a.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"98c6f1eb65ff43e2a0d8a4698088b6ee",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"slash-proposals"})}),(0,a.jsx)(n.th,{children:"Query slash proposals."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"slashed-staking-pools"})}),(0,a.jsx)(n.td,{children:"Query slashed staking pools."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"params"})}),(0,a.jsx)(n.td,{children:"Query the current slashing parameters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-info"})}),(0,a.jsx)(n.td,{children:"Query a validator's signing information."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-infos"})}),(0,a.jsx)(n.td,{children:"Query signing information of all validators."})]})]})]}),(0,a.jsx)(n.h4,{id:"109f939f975f4eff99f7f7cf3ae1c324",children:"Slashing proposals"}),(0,a.jsx)(n.p,{children:"Query all active proposals for slashing."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slash-proposals $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"3fb8ee10273c49ae94108f23eae5b200",children:"Slashed pools"}),(0,a.jsx)(n.p,{children:"Query pools that have been subjected to slashing penalties."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slashed-staking-pools $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"857c8142f32b47e380fff730ccab213b",children:"Slashing parameters"}),(0,a.jsx)(n.p,{children:"Query the current parameters of the slashing module."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing params $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"ce70267e68794ed18a221bed3952444e",children:"Validator signing information"}),(0,a.jsx)(n.p,{children:"Query the signing information for a specific validator."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDRESS"}),": Validator\u2019s address"]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-info $ADDRESS $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query the signing information for all validators."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-infos $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"08e02bdedc884132a7b9aec6b77fe999",children:"Governance"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"proposal unjail-validator"})}),(0,a.jsx)(n.th,{children:"Create a proposal to unjail a consensus node."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"proposal-slash-validator"})}),(0,a.jsx)(n.td,{children:"Create a proposal to slash a validator."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})}),(0,a.jsx)(n.td,{children:"Refute a slash validator proposal."})]})]})]}),(0,a.jsx)(n.h4,{id:"a37842ba091c4bb993f308d64a839b47",children:"Creating an unjailing request proposal"}),(0,a.jsx)(n.p,{children:"Submit a proposal for unjailing a jailed consensus node. Requires permission 20. Jailed nodes cannot vote on their own unjailing proposals."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the jailed node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource explaining the case."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid tx customstaking proposal unjail-validator \\\n--from=$SIGNER $FLAGS_TX \\\n$OFFENDER $REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"29215838099c4a21b617e91538c858af",children:"Creating a slashing proposal"}),(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," CLI allows any users with permission 57 to create a proposal to slash a consensus node. The ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," is left blank and is meant to be updated by the consensus node subject to the proposal later on. The ",(0,a.jsx)(n.code,{children:"\u2014colluders"})," flags is usually left blank and is meant for the network to provide the list of colluders when ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached and automatic mass-proposal event is triggered."]}),(0,a.jsxs)(n.p,{children:["To vote on the proposal, an account must have permission 58. However, consensus nodes that have been jailed cannot vote on the proposal because their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),". Voters must provide a percentage via ",(0,a.jsx)(n.code,{children:"--jail-percentage"})," (decimal value between 0 and 1) by which they believe the staking pool of the consensus node should be slashed."]}),(0,a.jsx)(n.p,{children:"Flags"}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the offending node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STAKINGPOOLID"}),": ID of the staking pool associated with the node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTIME"}),": Timestamp of the misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTYPE"}),": Type of misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$JAILPERCENTAGE"}),": Penalty percentage."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COLLUDERS"}),": Addresses of any colluders."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing proposal-slash-validator \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--offender=$OFFENDER --staking-pool-id=$STAKINGPOOLID \\\n--misbehaviour-time=$MISBEHAVIOURTIME--misbehaviour-type=$MISBEHAVIOURTYPE \\\n--jail-percentage=$JAILPERCENTAGE --colluders=$COLLUDERS --refutation=$REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"ea31a4280969443da49d5987e1da50f8",children:"Submitting a slashing proposal refutation"}),(0,a.jsxs)(n.p,{children:["Only consensus nodes whose staking pool is being subject to a slashing proposal have the ability to submit a refutation using ",(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})," by providing a URL or CID to an IPFS resource (string of up to 2048 characters) explaining the circumstances under which the fault occurred. Once submitted, the proposal\u2019s ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," flag is updated and cannot be modified anymore."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to an IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"sekaid tx customslashing refute-slash-validator-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--refutation=$REFUTATION\n"})})]})]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>o});s(7294);var a=s(6905);const i={tabItem:"tabItem_Ymn6"};var t=s(5893);function o(e){let{children:n,hidden:s,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,o),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>w});var a=s(7294),i=s(6905),t=s(2466),o=s(6550),r=s(469),l=s(1980),c=s(7392),d=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:i}}=e;return{value:n,label:s,attributes:a,default:i}}))}(s);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const i=(0,o.k6)(),t=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,l._X)(t),(0,a.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,t=u(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:t}))),[c,h]=f({queryString:s,groupId:i}),[g,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,d.Nk)(s);return[i,(0,a.useCallback)((e=>{s&&t.set(e)}),[s,t])]}({groupId:i}),m=(()=>{const e=c??g;return p({value:e,tabValues:t})?e:null})();(0,r.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),b(e)}),[h,b,t]),tabValues:t}}var b=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function x(e){let{className:n,block:s,selectedValue:a,selectValue:o,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const n=e.currentTarget,s=l.indexOf(n),i=r[s].value;i!==a&&(c(n),o(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:r.map((e=>{let{value:n,label:s,attributes:t}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:i}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function y(e){const n=g(e);return(0,j.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(x,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function w(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var a=s(7294);const i={},t=a.createContext(i);function o(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f76ae480.c5e1207d.js b/assets/js/f76ae480.c5e1207d.js new file mode 100644 index 0000000..19cf34d --- /dev/null +++ b/assets/js/f76ae480.c5e1207d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[199],{1180:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var a=s(5893),i=s(1151),t=s(4866),o=s(5162);const r={title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},l=void 0,c={id:"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing",title:"Jailing & slashing",description:"Concept",source:"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Slashing",slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",permalink:"/docs.kira.network/docs/d6fee8b3-1948-493e-bbdd-796bcc996c2b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Jailing & slashing",sidebar_position:2,slug:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b"},sidebar:"defaultSidebar",previous:{title:"Slashing",permalink:"/docs.kira.network/docs/4672bb94-ed2b-4e45-9d33-af999825c193"},next:{title:"Consensus nodes ranks & statuses",permalink:"/docs.kira.network/docs/9f763be9-fbd3-452f-8c6e-6e418f34856f"}},d={},h=[{value:"Concept",id:"565f4e1ee9194bec9514949c8445c429",level:2},{value:"Automatic Jailing & Threshold Slashing",id:"e8ce22a553f74f06b7645d8999be4ff4",level:3},{value:"Slashing and Governance Dispute Procedures",id:"252c47c531a94f06a58b55b94777f86f",level:3},{value:"Jailing & Unjailing",id:"02d326b0daf940608fa5f61c6935e19c",level:4},{value:"Slashing",id:"76d940b87b0848bf821f753a5877002f",level:4},{value:"Governance Proposals Hierarchy",id:"f9febb32be5f41198c8b7756fe14513c",level:4},{value:"Slashing Amount",id:"0bad15385fb24eff9cb0bc2c5e02bf5a",level:4},{value:"Slashing Mechanism",id:"579d6eefbae4479b92e5b3b202268667",level:3},{value:"Parameters",id:"2ffbd79dca3b479899e3816d988c93c3",level:2},{value:"Cli Syntax & Examples",id:"bce7d7f9bfc64f43851880529d77ac27",level:2},{value:"Transactions",id:"299caee03182495498646474b6a41509",level:2},{value:"Queries",id:"98c6f1eb65ff43e2a0d8a4698088b6ee",level:2},{value:"Slashing Proposals",id:"109f939f975f4eff99f7f7cf3ae1c324",level:4},{value:"Slashed Pools",id:"3fb8ee10273c49ae94108f23eae5b200",level:4},{value:"Slashing Parameters",id:"857c8142f32b47e380fff730ccab213b",level:4},{value:"Validator Signing Information",id:"ce70267e68794ed18a221bed3952444e",level:4},{value:"Governance",id:"08e02bdedc884132a7b9aec6b77fe999",level:2},{value:"Creating an Unjailing Request Proposal",id:"a37842ba091c4bb993f308d64a839b47",level:4},{value:"Creating a Slashing Proposal",id:"29215838099c4a21b617e91538c858af",level:4},{value:"Submitting a Slashing Proposal Refutation",id:"ea31a4280969443da49d5987e1da50f8",level:4}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"565f4e1ee9194bec9514949c8445c429",children:"Concept"}),"\n",(0,a.jsx)(n.p,{children:"Building on the broader concepts explored in our guide, KIRA\u2019s governance-permissioned validator set, a standout feature of its consensus system, addresses the inherent challenges in permissionless environments where any participant can become a validator and removal is nearly impossible. In Kira's framework, malicious validators can be permanently removed by their peers, a process made feasible because voting power isn\u2019t based on the size of one's stake. This ensures that coin ownership doesn't lead to disproportionate influence. Consequently, Kira specifically targets instances of double-signing for potential slashing. By mitigating the risk of severe penalties for minor or unintentional errors, Kira's model aims to foster a strong, diverse validator community, enhancing network decentralization and resilience. This approach not only challenges the traditional necessity for harsh slashing in maintaining network integrity but also seeks a harmonious balance between security and inclusivity. Aligned with Byzantine principles, Kira embraces the inevitability of human error and system failures, showcasing a more adaptable and empathetic approach to network governance."}),"\n",(0,a.jsx)(n.h3,{id:"e8ce22a553f74f06b7645d8999be4ff4",children:"Automatic Jailing & Threshold Slashing"}),"\n",(0,a.jsxs)(n.p,{children:["In KIRA, double-signing is the only penalized fault for consensus nodes. Consensus nodes going offline will not be punished and/or slashed as explained in the ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"Consensus nodes ranks & statuses"}),'. Double-signing occurs when a consensus node proposes or participates in the production of two different blocks at the same block height, creating or attempting to create a fork in the blockchain. A fork is when there are two or more valid chain histories that could be followed, and it\'s not immediately clear which one should be considered the "correct" chain, a.k.a canonical chain. Forks can disrupt network observers, such as light nodes, who do not have the resources to fully validate transactions and therefore rely on a single chain for their own operations. If a light node is unable to determine which fork is the canonical chain, it may be vulnerable to attacks where the same funds are spent multiple times, once on each fork.']}),"\n",(0,a.jsx)(n.p,{children:"However, double-signing does not necessarily mean that a consensus node is acting maliciously and in this case slashing doesn\u2019t actually add any security to the network. There can be various reasons for unintentional misbehavior, such as:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Launching the node before it is fully synced"}),"\n",(0,a.jsx)(n.li,{children:"Application or hardware faults"}),"\n",(0,a.jsx)(n.li,{children:"Misconfiguration"}),"\n",(0,a.jsx)(n.li,{children:"Accidentally deploying two nodes with the same key"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For this reason, KIRA does not automatically punish nodes for double-signing. Instead, they are ",(0,a.jsx)(n.strong,{children:"automatically jailed"})," and their fate is decided by governance later on, which may choose to unjail them, permanently remove them from the consensus node set, and/or slash them in cases of coordinated attacks. This protects delegators' staked funds and minimizes the risk of accidental loss, which is important when staking valuable assets such as Bitcoin, digital fiat, or commodities. This is possible because the consensus node set is governance-permissioned and voting power is not based on the stake backing them. This means that malicious consensus nodes can be permanently removed by other consensus nodes without being able to influence governance decisions."]}),"\n",(0,a.jsxs)(n.p,{children:["To detect coordinated attacks, KIRA utilizes the concept of ",(0,a.jsx)(n.strong,{children:"threshold slashing"}),". An automatic slashing proposal only occurs if a certain number of consensus nodes double-sign within a specific time frame, with the threshold being less than 1/3 of all consensus nodes. The threshold slashing parameters, ",(0,a.jsx)(n.code,{children:"slashing_period"})," (3600 seconds by default) and ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," (25 by default, i.e 25% of all active consensus nodes), are ",(0,a.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network properties"})," that can be adjusted by governance."]}),"\n",(0,a.jsx)(n.h3,{id:"252c47c531a94f06a58b55b94777f86f",children:"Slashing and Governance Dispute Procedures"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"Slashing a staking pool is a permanent operation. Once a pool has been slashed, it is no longer possible to add deposits to it, and there is no way to return it to its original state."})}),"\n",(0,a.jsx)(n.p,{children:"In KIRA, slashing is governed, meaning that the decision to slash and the amount to be slashed is determined by the governance and evaluated on a case-by-case basis to prevent cases where software bugs could result in the loss of delegator assets. KIRA's governance-permissioned nature reduces the difficulty and risk of running a node, making it accessible to anyone, even those with little experience, rather than requiring expensive cloud provider setups."}),"\n",(0,a.jsx)(n.h4,{id:"02d326b0daf940608fa5f61c6935e19c",children:"Jailing & Unjailing"}),"\n",(0,a.jsxs)(n.p,{children:["If a consensus node is caught double-signing, it will be automatically jailed by the network and its status will be changed to ",(0,a.jsx)(n.code,{children:"jailed"}),". This does not necessarily mean that the node will be slashed, as double-signing is not automatically considered malicious. While a node is ",(0,a.jsx)(n.code,{children:"jailed"}),", it (or any governance member with proposal creation permission 20) can request to be unjailed through a governance proposal using ",(0,a.jsx)(n.code,{children:"sekaid tx customstaking proposal unjail-validator"}),". This request must be made within a certain time frame, defined by the ",(0,a.jsx)(n.code,{children:"unjail_max_time"})," network property (600 seconds by default). If the request is not made or accepted within this time frame, the node will become permanently jailed. The process of unjailing a node is a judgment proposal, meaning that all governance members voting permissions 21 and consensus nodes with ",(0,a.jsx)(n.code,{children:"active"})," status, can vote on whether or not the node should be unjailed."]}),"\n",(0,a.jsxs)(n.p,{children:["While it is ",(0,a.jsx)(n.code,{children:"jailed"}),", a node cannot propose blocks, doesn\u2019t accumulate rewards, cannot receive any new delegations and cannot vote on any proposals. Meanwhile other nodes can wait to see if there is evidence of double-signing collusion with other potential malicious nodes or other suspicious activity during that time window."]}),"\n",(0,a.jsx)(n.h4,{id:"76d940b87b0848bf821f753a5877002f",children:"Slashing"}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing decision is being considered, all governance members with proposal creation permission 57 can rise a slashing proposal using ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," to slash and permanently remove the node from the active consensus node set. However, if ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached, a slashing proposal for each incriminated consensus node is automatically rised by the network."]}),"\n",(0,a.jsxs)(n.p,{children:['While a slashing proposal is ongoing, the consensus node under investigation can submit counter-evidence, or "refutation," using the ',(0,a.jsx)(n.code,{children:"refute-slashing-proposal"})," method by providing an URL or CID to an IPFS resource. Once the counter-evidence is submitted, it cannot be updated again. If a governance proposal results in a slashing event, the consensus node can no longer be unjailed and its staking pool is slashed and becomes inoperative. Users can only undelegate their existing stake in this case."]}),"\n",(0,a.jsx)(n.p,{children:"A slashing proposal can have one of the following outcome:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the slashing proposal ends without reaching the required quorum, the consensus node is not slashed and can request to be unjailed by rising an unjailing proposal."}),"\n",(0,a.jsxs)(n.li,{children:["If it ends by reaching the required quorum :","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"If the governance decided not to slash, the node is not slashed and can request to be unjailed."}),"\n",(0,a.jsx)(n.li,{children:"If the governance decided to slash, the node is slashed by the percentage determined in the proposal and cannot be unjailed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h4,{id:"f9febb32be5f41198c8b7756fe14513c",children:"Governance Proposals Hierarchy"}),"\n",(0,a.jsx)(n.p,{children:"Slashing proposals take precedence over unjailing proposals. If a slashing proposal is raised for a given consensus node, any active unjailing proposals related to this node are cancelled, and no new unjailing proposals can be raised until the slashing proposal is finalized. This hierarchical relationship ensures that no unjailing action can be finalized before a slashing action, which prevents malicious consensus nodes from starting to produce blocks and receive new delegations before a potential slashing event. This helps to prevent difficult-to-handle situations where malicious nodes are able to gain an advantage before being punished for their actions or having to slash new, innocent delegators."}),"\n",(0,a.jsx)(n.h4,{id:"0bad15385fb24eff9cb0bc2c5e02bf5a",children:"Slashing Amount"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["Jailed nodes being slashed as well as any of the others colluders listed in the proposal cannot vote on any proposal as their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),"."]})}),"\n",(0,a.jsxs)(n.p,{children:["If a slashing proposal is rised, all governance members with voting permission 58 and consensus nodes with the active ",(0,a.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:"status"}),", can vote by providing a slashing percentage as an input. This input is limited by the maximum slashing percentage ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"}),", which is a configurable parameter in the network properties. This percentage can range from 0% to 100%, with a default value of 0.5%. This limit is meant to provide delegators to have a quantifiable manner of measuring their potential risks when staking. The exact percentage of slashing for a given proposal is determined by taking the median of all votes inputs. For the slashing to occur, more than 50% of all governance members participating in the proposal process must vote with a non-zero slash."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Examples:"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.1"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0.5, 1, 0.5, 0.25, 0.25, 0.25, 0.75, 0.01, 0, 0.25"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.25"})," but the final slashing ",(0,a.jsx)(n.code,{children:"10%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.5"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0.01, 0.01, 0.03, 0.03, 1, 0.04, 0.05, 0.07, 0.08, 1, 0.1"})," then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0.35"})," and the final slashing is ",(0,a.jsx)(n.code,{children:"3.5%"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["If the ",(0,a.jsx)(n.code,{children:"max_slashing_percentage"})," is set to ",(0,a.jsx)(n.code,{children:"0.25"})," and the slashing votes are: ",(0,a.jsx)(n.code,{children:"0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.01, 0, 0, 1"}),", then the ",(0,a.jsx)(n.a,{href:"https://www.calculator.net/mean-median-mode-range-calculator.html",children:"median "}),"is ",(0,a.jsx)(n.code,{children:"0"})," and no slashing takes place."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Slashing proposal structure"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n\t"offender": "kiraXXX...XXX", // validator address that commited a fault\n\t"staking_pool_id": ,\n "misbehaviour_time": , // time at which misbehaviour occured\n "misbehaviour_type": "double-signing", //string type of evidence (in the future there can be different types)\n "jailed_percentage": , // percentage of validators that was jailed (colluded)\n "colluders": [ // list of validator who colluded with a misbehaving validator\n\t\t"kiraXXX...XXX",\n\t\t"kiraXXX...XXX",\n\t\t...,\n\t\t"kiraXXX...XXX"\n\t],\n "refutation": "" // validator supplied counter-evidence proving that his behaviour was not intentionally malicious,\n "votes": [\n { "voter": "kiraXXX...XXX", "slash": },\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0.5 },\n\t\t...\n\t\t{ "voter": "kiraXXX...XXX", "slash": 0 }\n\t]\n}\n'})}),"\n",(0,a.jsx)(n.h3,{id:"579d6eefbae4479b92e5b3b202268667",children:"Slashing Mechanism"}),"\n",(0,a.jsxs)(n.p,{children:["If a governance proposal results in a slashing event, the decided percentage will be taken off all staked tokens within the staking pool. The derivative tokens representing each one of these staked tokens will also lose their 1-to-1 peg. For example, if consensus node V1 is being slashed by 5%, then unstaking 2 of any tokens XYZ would only return 1.9 XYZ, similar to the concept of impermanent loss in automated market maker systems like Uniswap. KIRA's slashing mechanism uses a ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Floor_and_ceiling_functions",children:"ceiling function"})," to avoid transferring 0 amounts and to accommodate singular units and non-fungible tokens. A specific mechanism for non-fungible tokens will be implemented in a future update. The slashed tokens, including KIRA's native token KEX, are transferred to a governance-controlled community spending pool where a decision can be made regarding their final fate, such as giving them away to the community or refunding them in the case of unfair slashing. The information about the slashing, including the percentage and the result of the governance proposal, is recorded in the staking pool and can be ",(0,a.jsx)(n.a,{href:"/d6fee8b3-1948-493e-bbdd-796bcc996c2b",children:"queried"})," for reference."]}),"\n",(0,a.jsx)(n.h2,{id:"2ffbd79dca3b479899e3816d988c93c3",children:"Parameters"}),"\n",(0,a.jsx)(n.h2,{id:"bce7d7f9bfc64f43851880529d77ac27",children:"Cli Syntax & Examples"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,a.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,a.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,a.jsx)(n.em,{children:"documentation for more details."})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$SIGNER"})})," ",(0,a.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,a.jsx)(n.em,{children:(0,a.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,a.jsx)(n.em,{children:"and"})," ",(0,a.jsxs)(n.em,{children:[(0,a.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,a.jsx)(n.em,{children:"section"})]})}),"\n",(0,a.jsxs)(t.Z,{children:[(0,a.jsxs)(o.Z,{value:"transactions",label:"Transactions",children:[(0,a.jsx)(n.h2,{id:"299caee03182495498646474b6a41509",children:"Transactions"}),(0,a.jsx)(n.p,{children:"There is no transactions other than the governance proposals for this sub-module."})]}),(0,a.jsxs)(o.Z,{value:"queries",label:"Queries",children:[(0,a.jsx)(n.h2,{id:"98c6f1eb65ff43e2a0d8a4698088b6ee",children:"Queries"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"slash-proposals"})}),(0,a.jsx)(n.th,{children:"Query slash proposals."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"slashed-staking-pools"})}),(0,a.jsx)(n.td,{children:"Query slashed staking pools."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"params"})}),(0,a.jsx)(n.td,{children:"Query the current slashing parameters."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-info"})}),(0,a.jsx)(n.td,{children:"Query a validator's signing information."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"signing-infos"})}),(0,a.jsx)(n.td,{children:"Query signing information of all validators."})]})]})]}),(0,a.jsx)(n.h4,{id:"109f939f975f4eff99f7f7cf3ae1c324",children:"Slashing Proposals"}),(0,a.jsx)(n.p,{children:"Query all active proposals for slashing."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slash-proposals $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"3fb8ee10273c49ae94108f23eae5b200",children:"Slashed Pools"}),(0,a.jsx)(n.p,{children:"Query pools that have been subjected to slashing penalties."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing slashed-staking-pools $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"857c8142f32b47e380fff730ccab213b",children:"Slashing Parameters"}),(0,a.jsx)(n.p,{children:"Query the current parameters of the slashing module."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing params $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.h4,{id:"ce70267e68794ed18a221bed3952444e",children:"Validator Signing Information"}),(0,a.jsx)(n.p,{children:"Query the signing information for a specific validator."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$ADDRESS"}),": Validator\u2019s address"]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-info $ADDRESS $FLAGS_QR | jq\n"})}),(0,a.jsx)(n.p,{children:"Query the signing information for all validators."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid query customslashing signing-infos $FLAGS_QR | jq\n"})})]}),(0,a.jsxs)(o.Z,{value:"governance",label:"Governance",children:[(0,a.jsx)(n.h2,{id:"08e02bdedc884132a7b9aec6b77fe999",children:"Governance"}),(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:(0,a.jsx)(n.code,{children:"proposal unjail-validator"})}),(0,a.jsx)(n.th,{children:"Create a proposal to unjail a consensus node."})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"proposal-slash-validator"})}),(0,a.jsx)(n.td,{children:"Create a proposal to slash a validator."})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})}),(0,a.jsx)(n.td,{children:"Refute a slash validator proposal."})]})]})]}),(0,a.jsx)(n.h4,{id:"a37842ba091c4bb993f308d64a839b47",children:"Creating an Unjailing Request Proposal"}),(0,a.jsx)(n.p,{children:"Submit a proposal for unjailing a jailed consensus node. Requires permission 20. Jailed nodes cannot vote on their own unjailing proposals."}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Args"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the jailed node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource explaining the case."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"bashCopy code\nsekaid tx customstaking proposal unjail-validator \\\n--from=$SIGNER $FLAGS_TX \\\n$OFFENDER $REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"29215838099c4a21b617e91538c858af",children:"Creating a Slashing Proposal"}),(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"proposal-slash-validator"})," CLI allows any users with permission 57 to create a proposal to slash a consensus node. The ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," is left blank and is meant to be updated by the consensus node subject to the proposal later on. The ",(0,a.jsx)(n.code,{children:"\u2014colluders"})," flags is usually left blank and is meant for the network to provide the list of colluders when ",(0,a.jsx)(n.code,{children:"max_jailed_percentage"})," is reached and automatic mass-proposal event is triggered."]}),(0,a.jsxs)(n.p,{children:["To vote on the proposal, an account must have permission 58. However, consensus nodes that have been jailed cannot vote on the proposal because their status is ",(0,a.jsx)(n.code,{children:"jailed"})," and not ",(0,a.jsx)(n.code,{children:"active"}),". Voters must provide a percentage via ",(0,a.jsx)(n.code,{children:"--jail-percentage"})," (decimal value between 0 and 1) by which they believe the staking pool of the consensus node should be slashed."]}),(0,a.jsx)(n.p,{children:"Flags"}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$TITLE"}),": Title of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$DESCRIPTION"}),": Description of the proposal."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$OFFENDER"}),": Address of the offending node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$STAKINGPOOLID"}),": ID of the staking pool associated with the node."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTIME"}),": Timestamp of the misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$MISBEHAVIOURTYPE"}),": Type of misconduct."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$JAILPERCENTAGE"}),": Penalty percentage."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$COLLUDERS"}),": Addresses of any colluders."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sekaid tx customslashing proposal-slash-validator \\\n--from=$SIGNER $FLAGS_TX \\\n--title=$TITLE --description=$DESCRIPTION \\\n--offender=$OFFENDER --staking-pool-id=$STAKINGPOOLID \\\n--misbehaviour-time=$MISBEHAVIOURTIME--misbehaviour-type=$MISBEHAVIOURTYPE \\\n--jail-percentage=$JAILPERCENTAGE --colluders=$COLLUDERS --refutation=$REFUTATION\n"})}),(0,a.jsx)(n.h4,{id:"ea31a4280969443da49d5987e1da50f8",children:"Submitting a Slashing Proposal Refutation"}),(0,a.jsxs)(n.p,{children:["Only consensus nodes whose staking pool is being subject to a slashing proposal have the ability to submit a refutation using ",(0,a.jsx)(n.code,{children:"refute-slash-validator-proposal"})," by providing a URL or CID to an IPFS resource (string of up to 2048 characters) explaining the circumstances under which the fault occurred. Once submitted, the proposal\u2019s ",(0,a.jsx)(n.code,{children:"\u2014refutation"})," flag is updated and cannot be modified anymore."]}),(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Flags"})}),(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"$REFUTATION"}),": URL or CID to an IPFS resource for refutation."]}),"\n"]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-shell",children:"sekaid tx customslashing refute-slash-validator-proposal \\\n--from=$SIGNER $FLAGS_TX \\\n--refutation=$REFUTATION\n"})})]})]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>o});s(7294);var a=s(6905);const i={tabItem:"tabItem_Ymn6"};var t=s(5893);function o(e){let{children:n,hidden:s,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,a.Z)(i.tabItem,o),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>w});var a=s(7294),i=s(6905),t=s(2466),o=s(6550),r=s(469),l=s(1980),c=s(7392),d=s(12);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:i}}=e;return{value:n,label:s,attributes:a,default:i}}))}(s);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const i=(0,o.k6)(),t=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,l._X)(t),(0,a.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(i.location.search);n.set(t,e),i.replace({...i.location,search:n.toString()})}),[t,i])]}function g(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,t=u(e),[o,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:t}))),[c,h]=f({queryString:s,groupId:i}),[g,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,t]=(0,d.Nk)(s);return[i,(0,a.useCallback)((e=>{s&&t.set(e)}),[s,t])]}({groupId:i}),m=(()=>{const e=c??g;return p({value:e,tabValues:t})?e:null})();(0,r.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:o,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),b(e)}),[h,b,t]),tabValues:t}}var b=s(2389);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(5893);function x(e){let{className:n,block:s,selectedValue:a,selectValue:o,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.o5)(),d=e=>{const n=e.currentTarget,s=l.indexOf(n),i=r[s].value;i!==a&&(c(n),o(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":s},n),children:r.map((e=>{let{value:n,label:s,attributes:t}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...t,className:(0,i.Z)("tabs__item",m.tabItem,t?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:i}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function y(e){const n=g(e);return(0,j.jsxs)("div",{className:(0,i.Z)("tabs-container",m.tabList),children:[(0,j.jsx)(x,{...e,...n}),(0,j.jsx)(v,{...e,...n})]})}function w(e){const n=(0,b.Z)();return(0,j.jsx)(y,{...e,children:h(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var a=s(7294);const i={},t=a.createContext(i);function o(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f9d3cec8.2384fe2c.js b/assets/js/f9d3cec8.2384fe2c.js deleted file mode 100644 index 1f6fcbd..0000000 --- a/assets/js/f9d3cec8.2384fe2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3347],{7610:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(5893),r=n(1151);n(4866),n(5162);const o={title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},s=void 0,l={id:"Stack/SEKAI--Backend/index",title:"SEKAI | Backend",description:"Sekai",source:"@site/tabs/docs/Stack/SEKAI--Backend/index.mdx",sourceDirName:"Stack/SEKAI--Backend",slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073",permalink:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"SEKAI | Backend",sidebar_position:0,slug:"/27fe8d79-00c0-4e0b-872b-3d72a246c073"},sidebar:"defaultSidebar",previous:{title:"Overview",permalink:"/docs.kira.network/"},next:{title:"System Requirements",permalink:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399"}},i={},u=[{value:"Sekai",id:"9d6b533d3a7d49f28a9b3f19b0b700c5",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"9d6b533d3a7d49f28a9b3f19b0b700c5",children:"Sekai"}),"\n",(0,a.jsxs)(t.p,{children:["SEKAI \u4e16\u754c (\u305b\u304b\u3044) - is KIRA\u2019s blockchain application responsible for all on-chain logic such as processing transactions and state transitions. SEKAI is executed by specialized node operators called consensus nodes a.k.a \u201cValidators\u201d who individually propose new blocks and together agree on the correctness of each new block in accordance with the SEKAI codebase. In short, all logic relevant to the block propagation and networking is handled by ",(0,a.jsx)(t.a,{href:"https://tendermint.com/",children:"Tendermint"})," while all application logic is handled by SEKAI (",(0,a.jsx)(t.code,{children:"sekaid"}),")."]})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(6905);const r={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>I});var a=n(7294),r=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function f(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const r=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=b(e),[s,i]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:r}),[h,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,c.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),v=(()=>{const e=u??h;return f({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{v&&i(v)}),[v]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=n(2389);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function g(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),r=l[n].value;r!==a&&(u(t),s(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.Z)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function y(e){const t=h(e);return(0,k.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,k.jsx)(g,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function I(e){const t=(0,m.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(7294);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f9e3313d.ef65a8a2.js b/assets/js/f9e3313d.ef65a8a2.js deleted file mode 100644 index 5fa3a45..0000000 --- a/assets/js/f9e3313d.ef65a8a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[7475],{8855:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>f,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var s=i(5893),n=i(1151),t=i(4866),d=i(5162);const c={title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},a=void 0,o={id:"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar",title:"Identity Registrar",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Governance",slug:"/d482180d-165a-4c09-8c32-167f061ceb92",permalink:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Identity Registrar",sidebar_position:7,slug:"/d482180d-165a-4c09-8c32-167f061ceb92"},sidebar:"defaultSidebar",previous:{title:"Network Properties",permalink:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0"},next:{title:"Data Registry",permalink:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c"}},l={},h=[{value:"Concept",id:"9c97a6c6054d453c8245d2973adc7759",level:2},{value:"Record verification process",id:"5c2105975b574720828df7a8b4e61ce6",level:3},{value:"Unique identity keys",id:"7cc44d12adbc452199448907f6756306",level:3},{value:"Consensus node records examples",id:"2c29fae12274406b915c3f6df714c39a",level:4},{value:"Users records examples",id:"cef2ddb6fb744ca5a8f7312f2246bc20",level:4},{value:"Parameters",id:"026f178a01804399a7ebb999934c01ad",level:2},{value:"Cli syntax & examples",id:"f1fb0aad90ad4d53978864b33ac263c9",level:2},{value:"Transactions",id:"335766cd9511406e99cbaeea5b6428cc",level:2},{value:"Adding & editing records",id:"62956e6786bf4d3a96b5cd70654c92a9",level:4},{value:"Deleting records",id:"af09186bc0ce40109ee7c1ac05b80266",level:4},{value:"Requesting record verification",id:"bb0d96fae6004b9e8492e36357643c77",level:4},{value:"Verifying or rejecting records verification requests",id:"9da55fa53fea4987bed3cbc06d80d56d",level:4},{value:"Queries",id:"d13c14d8a80f46f4a2ad26e3cbe8b859",level:2},{value:"Query identity record by id",id:"6776be81baeb48ba8b1e36ff2925d5ff",level:4},{value:"Query identity records by address",id:"865325fc4b494eec95bcd7d9a9743a6f",level:4},{value:"Query specific record id of a specific account",id:"6c3f59a1538f4b6c82b64b5789c3b2a8",level:4},{value:"Query specific record key of a specific account",id:"56dc6e36f358439c9a4cebcebea4995e",level:4},{value:"Query all pending requests of a specific record id",id:"a14eba53930948d0ab0aff5289e8084f",level:4},{value:"Query all pending record requests as requester",id:"2b3f53912b494d66a3c351452df7d8d8",level:4},{value:"Query all pending record requests as verifier/approver",id:"89c15277298943eea39981e1bbe61449",level:4},{value:"Governance",id:"f1324a890dd64b178343e16d2b8e8127",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h2,{id:"9c97a6c6054d453c8245d2973adc7759",children:"Concept"}),"\n",(0,s.jsx)(r.p,{children:'The Identity Registrar (IR) is a central component of the KIRA network, designed to bolster the integrity and authenticity of user accounts. It addresses the critical challenge of "Sybil attacks", where a single entity poses as multiple users. Through the IR, KIRA emphasizes the significance of genuine, unique user representation, ensuring a more democratic and fair governance structure.'}),"\n",(0,s.jsxs)(r.p,{children:["At its core, the IR provides a mechanism for users to authenticate assertions about themselves, such as ownership of a website or an online handle. Unlike traditional centralized verification systems, the IR operates on mutual verification principles within the community. Users within the KIRA network can endorse the validity of claims made by others by giving their attestation, fostering an environment of collective trust. The framework of the IR is akin to a digital dictionary, allowing users to define key-value pairs relevant to their identity. For instance, associating a key ",(0,s.jsx)(r.code,{children:"website"})," with the value ",(0,s.jsx)(r.code,{children:"example.com"})," serves as proof of ownership of said website. Importantly, any alteration to these authenticated records necessitates re-verification, preserving the integrity of claims."]}),"\n",(0,s.jsx)(r.p,{children:"The essence of IR transcends mere claim verification. Addressing concerns of true sovereignty, IR refines the concept of social attestations. Instead of uniformly weighing attestations, the focus pivots to the trustworthiness of the attestor from an individual or application's perspective. This subjectivity highlights that in the vast sea of approvals, the ones deemed trustworthy to the user or a specific application are the ones that truly matter. It recognizes that while multiple individuals may appear non-sovereign from a network's viewpoint, in reality, their distinct identities hold weight. The IR thus fosters a nuanced, relative view of identity that adapts across applications and purposes, emphasizing the notion that when it comes to digital identity, objective truths are often overshadowed by the diverse perspectives they cater to."}),"\n",(0,s.jsx)(r.h3,{id:"5c2105975b574720828df7a8b4e61ce6",children:"Record verification process"}),"\n",(0,s.jsx)(r.p,{children:"The process of verifying an identity record involves a few steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"An user creates an on-chain transaction that includes the desired key and value for the identity record."}),"\n",(0,s.jsx)(r.li,{children:"It then requests verification from a publicly trusted KIRA account for the key-value pair, and include a tip as payment for the service provided."}),"\n",(0,s.jsx)(r.li,{children:"If the verification is successful, the record will remain verified unless any changes are made to the verified key."}),"\n",(0,s.jsx)(r.li,{children:"If any changes are made to the key after the verification process, the record will no longer be considered verified."}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["It is important to note that verification requests must include a tip, which cannot be less than the ",(0,s.jsx)(r.code,{children:"min_identity_approval_tip"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," (default: 2x the transaction cost of the approval/rejection transaction). This tip is meant to incentivize other accounts to verify identity records, or at least provide them with a refund of the transaction cost. Tips are paid regardless of whether the records are rejected or approved, ensuring that approvers are honest and trusted, rather than motivated solely by financial gain. The network governance can also choose to distrust any account at any time through a proposal process, marking them as potentially malicious and referencing the evidence."]}),"\n",(0,s.jsx)(r.h3,{id:"7cc44d12adbc452199448907f6756306",children:"Unique identity keys"}),"\n",(0,s.jsxs)(r.p,{children:["KIRA offers a range of dedicated identity keys designed to make interactions with the network more user-friendly. These keys store various user-related information that can be interpreted by wallets, explorers, visualizers, and other front-end applications. Notably, KIRA allows for the creation of ",(0,s.jsx)(r.strong,{children:"any"})," custom key within the Identity Registrar, but it reserves certain key names like ",(0,s.jsx)(r.code,{children:"username"})," and ",(0,s.jsx)(r.code,{children:"moniker"})," by default. These reserved keys have special significance, affecting the visibility of nodes or accounts across different applications. What's more, the governance of the KIRA network can enforce these key-value pairs to remain globally unique, provided they do not already exist, which is managed by modifying the ",(0,s.jsx)(r.code,{children:"unique_identity_keys"})," ",(0,s.jsx)(r.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". As a result, users can send assets not just to a KIRA address, but also by simply providing a unique username or moniker. Once these unique keys are created, they cannot be deleted, ensuring a more streamlined and user-friendly experience."]}),"\n",(0,s.jsx)(r.h4,{id:"2c29fae12274406b915c3f6df714c39a",children:"Consensus node records examples"}),"\n",(0,s.jsx)(r.p,{children:"Governance can create one or more of the following keys in the Identity Registrar as unique to increase consensus node public recognition and trust"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"moniker"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Identifies validator name as seen on the leaderboard table."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"description"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"A longer description of validator node"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to the validator website"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"logo"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image (256kB max) representing validator entity"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"social"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Any social profiles such as Twitter, Telegram, etc\u2026"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"contact"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Email address, url, or another emergency contact"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"validator_node_id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"Node ID of the validator node. Required to identify the node in the network visualizer."})]})]})]}),"\n",(0,s.jsx)(r.h4,{id:"cef2ddb6fb744ca5a8f7312f2246bc20",children:"Users records examples"}),"\n",(0,s.jsx)(r.p,{children:"Users can create one or several of the following keys in the Identity Registrar in order to make their account easier to identify and recognize by other users."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"NAME"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"TYPE"})}),(0,s.jsx)(r.th,{children:(0,s.jsx)(r.strong,{children:"DESCRIPTION"})})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"username"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsxs)(r.td,{children:["Identifies your name as seen on the network explorer. The value can be used for the purpose of sending transactions similarly to ",(0,s.jsx)(r.a,{href:"https://ens.domains/",children:"ENS domain"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"avatar"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:"URL to\xa0.SVG\xa0image or gif (256kB max)"})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"026f178a01804399a7ebb999934c01ad",children:"Parameters"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"NAME"}),(0,s.jsx)(r.th,{children:"TYPE"}),(0,s.jsx)(r.th,{children:"EXAMPLE"}),(0,s.jsx)(r.th,{children:"DESCRIPTION"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"id"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"uint64"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"153789"})}),(0,s.jsx)(r.td,{children:"A unique identifier for the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"address"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"kira1vgy0v6l593lxghv9v8a98nl87x4y2uvfn0yn7r"})}),(0,s.jsx)(r.td,{children:"The address of the user associated with the Identity Record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"key"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"website"})}),(0,s.jsxs)(r.td,{children:['The key representing the type of identity information, e.g., "website" for website ownership. Can be custom or reserved such as ',(0,s.jsx)(r.code,{children:"username"})," or ",(0,s.jsx)(r.code,{children:"moniker"}),"."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"value"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"example.com"})}),(0,s.jsxs)(r.td,{children:["The value associated with the key, serving as proof of ownership or association, e.g., a website URL for a ",(0,s.jsx)(r.code,{children:"website"})," key."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"date"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"google.protobuf.Timestamp"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"2023-09-28T12:34:56Z"})}),(0,s.jsx)(r.td,{children:"The timestamp indicating when the Identity Record was created."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"verifiers"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"[]string"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:'[kira1vgy0v6l59\u2026, kira1gurt0g67y9\u2026"]'})}),(0,s.jsx)(r.td,{children:"A list of addresses of users who have verified the validity of the Identity Record."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"f1fb0aad90ad4d53978864b33ac263c9",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(r.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(r.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(r.em,{children:"documentation for more details."})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$SIGNER"})})," ",(0,s.jsx)(r.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(r.em,{children:(0,s.jsx)(r.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(r.em,{children:"and"})," ",(0,s.jsxs)(r.em,{children:[(0,s.jsx)(r.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(r.em,{children:"section"})]})}),"\n",(0,s.jsxs)(t.Z,{children:[(0,s.jsxs)(d.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(r.h2,{id:"335766cd9511406e99cbaeea5b6428cc",children:"Transactions"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"register-identity-records"})}),(0,s.jsx)(r.th,{children:"Add or edit identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"delete-identity-records"})}),(0,s.jsx)(r.td,{children:"Delete one or several identity records."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"request-identity-record-verify"})}),(0,s.jsx)(r.td,{children:"Request verification for an identity record."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})}),(0,s.jsx)(r.td,{children:"Verify or reject requests for identity record verification."})]})]})]}),(0,s.jsx)(r.h4,{id:"62956e6786bf4d3a96b5cd70654c92a9",children:"Adding & editing records"}),(0,s.jsxs)(r.p,{children:["To add or edit identity records, use the ",(0,s.jsx)(r.code,{children:"register-identity-records"})," CLI command. Provide the desired key-value pairs either in a JSON file by specifying its path with the ",(0,s.jsx)(r.code,{children:"--infos-file"})," flag, or directly in the command as a JSON string using the ",(0,s.jsx)(r.code,{children:"--infos-json"})," flag. Note that certain key names are reserved and may be required to be unique within the Identity Registrar."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSFILE"}),": The path to the file containing information for the identity request."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$INFOSJSON"}),": The JSON string containing information for the identity request."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n[ --infos-file=$INFOSFILE || --infos-json=$INFOSJSON ]\n"})}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# Example\n# from an id.json file with below content : \n# {\n# "key1": "value1",\n# "key2": "value2"\n# }\nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--infos-file="path-to-id.json" \n\n# providing json format manually \nsekaid tx customgov register-identity-records \\\n--from=$SIGNER $FLAGS_TX \\ \n--infos-json="{\\"$KEY1\\":\\"$VAL1\\",\\"$KEY2\\":\\"$VAL2\\"}"\n'})}),(0,s.jsx)(r.h4,{id:"af09186bc0ce40109ee7c1ac05b80266",children:"Deleting records"}),(0,s.jsxs)(r.p,{children:["To delete one or several identity records, use the ",(0,s.jsx)(r.code,{children:"delete-identity-records"})," CLI command and provide the keys to be deleted as a comma-separated list using the ",(0,s.jsx)(r.code,{children:"--keys"})," flag. Note that the keys ",(0,s.jsx)(r.code,{children:"moniker"})," and ",(0,s.jsx)(r.code,{children:"username"})," cannot be deleted."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEYS"}),": Comma-separated list of keys."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov delete-identity-records \\\n--from=$SIGNER $FLAGS_TX \\\n--keys=$KEYS\n"})}),(0,s.jsx)(r.h4,{id:"bb0d96fae6004b9e8492e36357643c77",children:"Requesting record verification"}),(0,s.jsxs)(r.p,{children:["To verify an identity record, use the ",(0,s.jsx)(r.code,{children:"request-identity-record-verify"})," CLI command. Provide the address of the verifier using the ",(0,s.jsx)(r.code,{children:"--verifier"})," flag, and the desired key(s) or record ID(s) using the ",(0,s.jsx)(r.code,{children:"--record-ids"})," flag. Users can also provide a tip using the ",(0,s.jsx)(r.code,{children:"--tip"})," flag to incentivize the verifier to review the request. Note that the tip value must be greater than twice the transaction fee value."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$RECORDIDS"}),": Comma-separated list of identity record ids."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$TIP"}),": The tip to be given to the verifier."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov request-identity-record-verify \\\n--from=$SIGNER $FLAGS_TX \\\n--verifier=$VERIFIER --record-ids=$RECORDIDS --tip=$TIP\n"})}),(0,s.jsx)(r.h4,{id:"9da55fa53fea4987bed3cbc06d80d56d",children:"Verifying or rejecting records verification requests"}),(0,s.jsxs)(r.p,{children:["To verify or reject a request for identity record verification, use the ",(0,s.jsx)(r.code,{children:"handle-identity-records-verify-request"})," CLI command. To approve the request, include the ",(0,s.jsx)(r.code,{children:"--approve"})," flag and set its value to ",(0,s.jsx)(r.code,{children:"true"}),". To reject the request, set the value of ",(0,s.jsx)(r.code,{children:"--approve"})," to ",(0,s.jsx)(r.code,{children:"false"}),". The ID of the request must also be provided. Only the verifier specified in the original request can approve or reject it."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": Id of the key to be approved/rejected."]}),"\n"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Flags"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$APPROVE"}),": The flag to approve or reject the verification request. Defaults to ",(0,s.jsx)(r.code,{children:"true"}),"."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid tx customgov handle-identity-records-verify-request \\\n--from=$SIGNER $FLAGS_TX \\\n$ID --approve=$APPROVE\n"})})]}),(0,s.jsxs)(d.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(r.h2,{id:"d13c14d8a80f46f4a2ad26e3cbe8b859",children:"Queries"}),(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:(0,s.jsx)(r.code,{children:"all-identity-records"})}),(0,s.jsx)(r.th,{children:"Query all identity records."})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record"})}),(0,s.jsx)(r.td,{children:"Query identity record by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-records-by-addr"})}),(0,s.jsx)(r.td,{children:"Query identity records by owner."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-request"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by id."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-requester"})}),(0,s.jsx)(r.td,{children:"Query identity records verify requests by requester."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})}),(0,s.jsx)(r.td,{children:"Query identity record verify request by verifier/approver."})]})]})]}),(0,s.jsx)(r.h4,{id:"6776be81baeb48ba8b1e36ff2925d5ff",children:"Query identity record by id"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific identity record using the ",(0,s.jsx)(r.code,{children:"identity-record"})," subcommand followed by the record\u2019s identifier."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"865325fc4b494eec95bcd7d9a9743a6f",children:"Query identity records by address"}),(0,s.jsxs)(r.p,{children:["Fetch all identity records associated with a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand followed by the account\u2019s address."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The account\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"6c3f59a1538f4b6c82b64b5789c3b2a8",children:"Query specific record id of a specific account"}),(0,s.jsxs)(r.p,{children:["To query a specific record ID of a specific account, utilize the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand in conjunction with ",(0,s.jsx)(r.code,{children:"jq"})," filtering using the specific record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.id==\\\\"$ID\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"56dc6e36f358439c9a4cebcebea4995e",children:"Query specific record key of a specific account"}),(0,s.jsxs)(r.p,{children:["Retrieve a specific record key of a specific account using the ",(0,s.jsx)(r.code,{children:"identity-records-by-addr"})," subcommand and ",(0,s.jsx)(r.code,{children:"jq"})," filtering."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": The address of the account."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$KEY"}),": The key of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'sekaid query customgov identity-records-by-addr $ACCOUNT $FLAGS_QR | jq ".records | .[] | select(.key==\\\\"$KEY\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"a14eba53930948d0ab0aff5289e8084f",children:"Query all pending requests of a specific record id"}),(0,s.jsxs)(r.p,{children:["Fetch all pending requests of a specific record ID using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests"})," subcommand followed by the record ID."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ID"}),": ID of the record."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"sekaid query customgov identity-record-verify-requests-by-requester $ID $FLAGS_QR | jq\n"})}),(0,s.jsx)(r.h4,{id:"2b3f53912b494d66a3c351452df7d8d8",children:"Query all pending record requests as requester"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests of a requester account using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$VERIFIER"})," argument may be provided to filter the results to only display pending requests sent to a specific verifier/approver account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": Account\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": (Optional) The specific verifier\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all pending requests of a requester account\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq\n\n# For all pending requests of a requester account sent to a specific verifier\nsekaid query customgov identity-record-verify-requests-by-requester $ACCOUNT $FLAGS_QR | jq ".verify_records | .[] | select(.verifier==\\\\"$VERIFIER\\\\")"\n'})}),(0,s.jsx)(r.h4,{id:"89c15277298943eea39981e1bbe61449",children:"Query all pending record requests as verifier/approver"}),(0,s.jsxs)(r.p,{children:["Retrieve all pending verification requests for a verifier using the ",(0,s.jsx)(r.code,{children:"identity-record-verify-requests-by-approver"})," subcommand. For a more specific query, an optional ",(0,s.jsx)(r.code,{children:"$ACCOUNT"})," argument may be provided to filter the results to only display requests from a specific requester account."]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Args"})}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$VERIFIER"}),": The verifier\u2019s address."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"$ACCOUNT"}),": (Optional) The specific requester\u2019s address."]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:'# For all requests of a verifier\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq\n\n# For all requests of a verifier of a specific requester account\nsekaid query customgov identity-record-verify-requests-by-approver $VERIFIER $FLAGS_QR | jq ".verify_records | .[] | select(.address==\\\\"$ACCOUNT\\\\")"\n'})})]}),(0,s.jsxs)(d.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(r.h2,{id:"f1324a890dd64b178343e16d2b8e8127",children:"Governance"}),(0,s.jsx)(r.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function f(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,r,i)=>{i.d(r,{Z:()=>d});i(7294);var s=i(6905);const n={tabItem:"tabItem_Ymn6"};var t=i(5893);function d(e){let{children:r,hidden:i,className:d}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(n.tabItem,d),hidden:i,children:r})}},4866:(e,r,i)=>{i.d(r,{Z:()=>I});var s=i(7294),n=i(6905),t=i(2466),d=i(6550),c=i(469),a=i(1980),o=i(7392),l=i(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:r,children:i}=e;return(0,s.useMemo)((()=>{const e=r??function(e){return h(e).map((e=>{let{props:{value:r,label:i,attributes:s,default:n}}=e;return{value:r,label:i,attributes:s,default:n}}))}(i);return function(e){const r=(0,o.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,i])}function f(e){let{value:r,tabValues:i}=e;return i.some((e=>e.value===r))}function x(e){let{queryString:r=!1,groupId:i}=e;const n=(0,d.k6)(),t=function(e){let{queryString:r=!1,groupId:i}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:r,groupId:i});return[(0,a._X)(t),(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace({...n.location,search:r.toString()})}),[t,n])]}function j(e){const{defaultValue:r,queryString:i=!1,groupId:n}=e,t=u(e),[d,a]=(0,s.useState)((()=>function(e){let{defaultValue:r,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(r){if(!f({value:r,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const s=i.find((e=>e.default))??i[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:t}))),[o,h]=x({queryString:i,groupId:n}),[j,p]=function(e){let{groupId:r}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(r),[n,t]=(0,l.Nk)(i);return[n,(0,s.useCallback)((e=>{i&&t.set(e)}),[i,t])]}({groupId:n}),y=(()=>{const e=o??j;return f({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{y&&a(y)}),[y]);return{selectedValue:d,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),p(e)}),[h,p,t]),tabValues:t}}var p=i(2389);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=i(5893);function b(e){let{className:r,block:i,selectedValue:s,selectValue:d,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),l=e=>{const r=e.currentTarget,i=a.indexOf(r),n=c[i].value;n!==s&&(o(r),d(n))},h=e=>{let r=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const i=a.indexOf(e.currentTarget)+1;r=a[i]??a[0];break}case"ArrowLeft":{const i=a.indexOf(e.currentTarget)-1;r=a[i]??a[a.length-1];break}}r?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":i},r),children:c.map((e=>{let{value:r,label:i,attributes:t}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:s===r?0:-1,"aria-selected":s===r,ref:e=>a.push(e),onKeyDown:h,onClick:l,...t,className:(0,n.Z)("tabs__item",y.tabItem,t?.className,{"tabs__item--active":s===r}),children:i??r},r)}))})}function g(e){let{lazy:r,children:i,selectedValue:n}=e;const t=(Array.isArray(i)?i:[i]).filter(Boolean);if(r){const e=t.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:t.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function m(e){const r=j(e);return(0,v.jsxs)("div",{className:(0,n.Z)("tabs-container",y.tabList),children:[(0,v.jsx)(b,{...e,...r}),(0,v.jsx)(g,{...e,...r})]})}function I(e){const r=(0,p.Z)();return(0,v.jsx)(m,{...e,children:h(e.children)},String(r))}},1151:(e,r,i)=>{i.d(r,{Z:()=>c,a:()=>d});var s=i(7294);const n={},t=s.createContext(n);function d(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fa0894ec.db1a2d83.js b/assets/js/fa0894ec.db1a2d83.js new file mode 100644 index 0000000..0b27476 --- /dev/null +++ b/assets/js/fa0894ec.db1a2d83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[8122],{3832:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=r(5893),a=r(1151);r(4866),r(5162);const s={title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},i=void 0,o={id:"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure",title:"Rewards and Incentives Structure",description:"Staking Rewards",source:"@site/tabs/learn/KIRA\u2019s-Economics/Rewards-and-Incentives-Structure.mdx",sourceDirName:"KIRA\u2019s-Economics",slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",permalink:"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Rewards and Incentives Structure",sidebar_position:2,slug:"/5b32eede-3889-4f8e-baf5-0f0dc9179a6b"},sidebar:"defaultSidebar",previous:{title:"KEX- KIRA\u2019s Native Token",permalink:"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326"},next:{title:"Initial Liquidity Offering",permalink:"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351"}},l={},d=[{value:"Staking Rewards",id:"a63d9225f2ad4a229025a0fdfba77c92",level:3},{value:"Application Incentives",id:"f5729db77406472a86817be36ff4dd9f",level:3},{value:"Auxiliary Rewards",id:"2c07de1a942a4fe18e1c7457e24525e5",level:3},{value:"Recap",id:"4b2b2809dbac4bbd8bb8964de7b10160",level:2}];function c(e){const t={code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h3,{id:"a63d9225f2ad4a229025a0fdfba77c92",children:"Staking Rewards"}),"\n",(0,n.jsxs)(t.p,{children:["KIRA consensus nodes earn trifold rewards: ",(0,n.jsx)(t.strong,{children:"block rewards, fee rewards, and app incentives."})," They are distributed in slightly different ways but follow a simple generic pattern. They are awarded per block. The selected block proposer first takes a commission before the remainder is shared among its respective delegators who have entrusted their assets to the consensus nodes to participate in consensus on their behalf."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Block rewards"})," are a fixed amount of KEX tokens minted in each block \u2014 shared between delegators according to the total value of all the tokens they have delegated among all active staking pools. ",(0,n.jsx)(t.strong,{children:"Hence, block rewards compensate delegators proportionally to the risk they are taking network-wise"})," \u2014 this is similar to Cosmos reward distribution."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Fee rewards"})," are a portion of the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," paid by users for each transactions shared between its delegators according to their share of the staking pool. ",(0,n.jsx)(t.strong,{children:"Hence, fee rewards only compensate delegators proportionally to the risk they are taking locally"})," \u2014 this is similar to Polkadot reward distribution. Note that fee rewards are not limited to KEX and can also include a variety of different tokens that are whitelisted for fee payment. The composition of the rewards basket may vary based on the type and volume of activity conducted on the network."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"f5729db77406472a86817be36ff4dd9f",children:"Application Incentives"}),"\n",(0,n.jsxs)(t.p,{children:["A portion of the swap fees generated by the AMM pool of any app will be paid to consensus nodes serving as active app executors and verifiers for said apps, and by extension their delegators. dApp deployers may choose to offer additional incentives for consensus nodes to serve as the execution layer for these apps. ",(0,n.jsx)(t.strong,{children:"Application incentives are paid in similar fashion to fee rewards."})]}),"\n",(0,n.jsx)(t.h3,{id:"2c07de1a942a4fe18e1c7457e24525e5",children:"Auxiliary Rewards"}),"\n",(0,n.jsx)(t.p,{children:"In addition, KIRA has two subsidiary sources of extrinsic rewards which are more circumstantial:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Universal Basic Income"})," (from KEX inflation) \u2014 The ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," module allows to create various incentivization schemes for a specific network purposes (e.g. increasing block rewards if the network security subsidy becomes too low), or a specific role (e.g. community managers)."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)("u",{children:"Stake grants"})," (from KIRA\u2019s treasury) \u2014 Winners of the incentivized games will be allocated some amount of ",(0,n.jsx)("u",{children:"staked"})," KEX from the treasury to help them bootstrapping their nodes."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"4b2b2809dbac4bbd8bb8964de7b10160",children:"Recap"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS TYPE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"REWARDS ORIGIN"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"BLOCK PROPOSER SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"DELEGATORS SHARE"})}),(0,n.jsx)(t.th,{children:(0,n.jsx)(t.strong,{children:"SEKAI MODULE"})})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Block rewards"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsxs)(t.td,{children:["According to its staking pool ",(0,n.jsx)(t.code,{children:"commission"})," rate",(0,n.jsx)("br",{}),"(",(0,n.jsx)(t.em,{children:"min 1%, max 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked network-wise (all staking pools)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Fee rewards"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," (multiple tokens)"]}),(0,n.jsxs)(t.td,{children:["According the ",(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})," ",(0,n.jsx)(t.code,{children:"validators_fee_share"})," ",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"(default 50%)"})]}),(0,n.jsx)(t.td,{children:"Split according to the total amount of assets they have staked locally (in the block proposer\u2019s staking pool)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Universal Basic Income"}),(0,n.jsx)(t.td,{children:"KEX inflation"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:"Set by governance proposal"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"[Problem Internal Link]"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Stake grants"}),(0,n.jsx)(t.td,{children:"KEX treasury"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"TBD"}),(0,n.jsx)(t.td,{children:"N/A"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"App Incentive"}),(0,n.jsx)(t.td,{children:"L2 AMMs"}),(0,n.jsx)(t.td,{children:"applications"}),(0,n.jsx)(t.td,{children:"25% share of swap fees originating from dApp token swaps"}),(0,n.jsx)(t.td,{children:"application dependent"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},5162:(e,t,r)=>{r.d(t,{Z:()=>i});r(7294);var n=r(6905);const a={tabItem:"tabItem_Ymn6"};var s=r(5893);function i(e){let{children:t,hidden:r,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.Z)(a.tabItem,i),hidden:r,children:t})}},4866:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(7294),a=r(6905),s=r(2466),i=r(6550),o=r(469),l=r(1980),d=r(7392),c=r(12);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function f(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:r}=e;const a=(0,i.k6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,l._X)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function b(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=h(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!f({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[d,u]=p({queryString:r,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Nk)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),x=(()=>{const e=d??b;return f({value:e,tabValues:s})?e:null})();(0,o.Z)((()=>{x&&l(x)}),[x]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,s]),tabValues:s}}var m=r(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=r(5893);function j(e){let{className:t,block:r,selectedValue:n,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,s.o5)(),c=e=>{const t=e.currentTarget,r=l.indexOf(t),a=o[r].value;a!==n&&(d(t),i(a))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;t=l[r]??l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;t=l[r]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},t),children:o.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:c,...s,className:(0,a.Z)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function v(e){let{lazy:t,children:r,selectedValue:a}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function k(e){const t=b(e);return(0,g.jsxs)("div",{className:(0,a.Z)("tabs-container",x.tabList),children:[(0,g.jsx)(j,{...e,...t}),(0,g.jsx)(v,{...e,...t})]})}function w(e){const t=(0,m.Z)();return(0,g.jsx)(k,{...e,children:u(e.children)},String(t))}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>i});var n=r(7294);const a={},s=n.createContext(a);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb5308ca.9533bff8.js b/assets/js/fb5308ca.9533bff8.js deleted file mode 100644 index f31ace1..0000000 --- a/assets/js/fb5308ca.9533bff8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9949],{447:e=>{e.exports=JSON.parse('{"pluginId":"learn","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"category","label":"What is KIRA ?","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/learn/","docId":"What-is-KIRA/Overview","unlisted":false},{"type":"category","label":"SEKAI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e","docId":"What-is-KIRA/SEKAI/Overview","unlisted":false},{"type":"link","label":"Consensus","href":"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418","docId":"What-is-KIRA/SEKAI/Consensus","unlisted":false},{"type":"link","label":"Governance","href":"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa","docId":"What-is-KIRA/SEKAI/Governance","unlisted":false}]},{"type":"link","label":"Middleware - INTERX","href":"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851","docId":"What-is-KIRA/Middleware---INTERX","unlisted":false},{"type":"link","label":"Frontend - MIRO","href":"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a","docId":"What-is-KIRA/-Frontend---MIRO","unlisted":false},{"type":"link","label":"Orchestrator - RYOKAI","href":"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f","docId":"What-is-KIRA/Orchestrator---RYOKAI","unlisted":false},{"type":"category","label":"Layer 2","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5","docId":"What-is-KIRA/Layer-2/Overview","unlisted":false},{"type":"link","label":"Virtual Finality Gadget","href":"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671","docId":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","unlisted":false},{"type":"link","label":"Building on KIRA","href":"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f","docId":"What-is-KIRA/Layer-2/Building-on-KIRA","unlisted":false}]}]},{"type":"category","label":"KIRA\u2019s Economics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c","docId":"KIRA\u2019s-Economics/Overview","unlisted":false},{"type":"link","label":"KEX- KIRA\u2019s Native Token","href":"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326","docId":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","unlisted":false},{"type":"link","label":"Rewards and Incentives Structure","href":"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b","docId":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","unlisted":false},{"type":"link","label":"Initial Liquidity Offering","href":"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351","docId":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","unlisted":false},{"type":"link","label":"Unified Liquid Staking","href":"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3","docId":"KIRA\u2019s-Economics/Unified-Liquid-Staking","unlisted":false}]},{"type":"link","label":"Glossary","href":"/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b","docId":"Glossary","unlisted":false}]},"docs":{"Glossary":{"id":"Glossary","title":"Glossary","description":"- dApp: Decentralized application","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Initial-Liquidity-Offering":{"id":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","title":"Initial Liquidity Offering","description":"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token":{"id":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","title":"KEX- KIRA\u2019s Native Token","description":"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Overview":{"id":"KIRA\u2019s-Economics/Overview","title":"Overview","description":"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure":{"id":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","title":"Rewards and Incentives Structure","description":"Staking rewards","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Unified-Liquid-Staking":{"id":"KIRA\u2019s-Economics/Unified-Liquid-Staking","title":"Unified Liquid Staking","description":"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.","sidebar":"defaultSidebar"},"What-is-KIRA/-Frontend---MIRO":{"id":"What-is-KIRA/-Frontend---MIRO","title":"Frontend - MIRO","description":"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Building-on-KIRA":{"id":"What-is-KIRA/Layer-2/Building-on-KIRA","title":"Building on KIRA","description":"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Overview":{"id":"What-is-KIRA/Layer-2/Overview","title":"Overview","description":"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Virtual-Finality-Gadget":{"id":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","title":"Virtual Finality Gadget","description":"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.","sidebar":"defaultSidebar"},"What-is-KIRA/Middleware---INTERX":{"id":"What-is-KIRA/Middleware---INTERX","title":"Middleware - INTERX","description":"Overview","sidebar":"defaultSidebar"},"What-is-KIRA/Orchestrator---RYOKAI":{"id":"What-is-KIRA/Orchestrator---RYOKAI","title":"Orchestrator - RYOKAI","description":"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.","sidebar":"defaultSidebar"},"What-is-KIRA/Overview":{"id":"What-is-KIRA/Overview","title":"Overview","description":"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Consensus":{"id":"What-is-KIRA/SEKAI/Consensus","title":"Consensus","description":"Tendermint","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Governance":{"id":"What-is-KIRA/SEKAI/Governance","title":"Governance","description":"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter\'s stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Overview":{"id":"What-is-KIRA/SEKAI/Overview","title":"Overview","description":"SEKAI (\u4e16\u754c) is KIRA\'s core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or \'validators,\' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/fb5308ca.d1b17a46.js b/assets/js/fb5308ca.d1b17a46.js new file mode 100644 index 0000000..80a58e2 --- /dev/null +++ b/assets/js/fb5308ca.d1b17a46.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[9949],{447:e=>{e.exports=JSON.parse('{"pluginId":"learn","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"category","label":"What is KIRA ?","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/","docId":"What-is-KIRA/Overview","unlisted":false},{"type":"category","label":"SEKAI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/bd45c7be-937d-4648-a162-5574b6a1c23e","docId":"What-is-KIRA/SEKAI/Overview","unlisted":false},{"type":"link","label":"Consensus","href":"/docs.kira.network/cf661a9f-09e0-4bc3-8248-bf0e545f0418","docId":"What-is-KIRA/SEKAI/Consensus","unlisted":false},{"type":"link","label":"Governance","href":"/docs.kira.network/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa","docId":"What-is-KIRA/SEKAI/Governance","unlisted":false}]},{"type":"link","label":"Middleware - INTERX","href":"/docs.kira.network/8a93bc9c-ce24-4129-96d5-9bbe381f6851","docId":"What-is-KIRA/Middleware---INTERX","unlisted":false},{"type":"link","label":"Frontend - MIRO","href":"/docs.kira.network/b5188aa1-563f-45e3-906a-9d71b80bd47a","docId":"What-is-KIRA/-Frontend---MIRO","unlisted":false},{"type":"link","label":"Orchestrator - RYOKAI","href":"/docs.kira.network/2ac3bfb7-478c-4207-a290-051d9fa6124f","docId":"What-is-KIRA/Orchestrator---RYOKAI","unlisted":false},{"type":"category","label":"Layer 2","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5","docId":"What-is-KIRA/Layer-2/Overview","unlisted":false},{"type":"link","label":"Virtual Finality Gadget","href":"/docs.kira.network/bba461ae-7c67-4b66-8f1b-c51c887f2671","docId":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","unlisted":false},{"type":"link","label":"Building on KIRA","href":"/docs.kira.network/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f","docId":"What-is-KIRA/Layer-2/Building-on-KIRA","unlisted":false}]}]},{"type":"category","label":"KIRA\u2019s Economics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/docs.kira.network/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c","docId":"KIRA\u2019s-Economics/Overview","unlisted":false},{"type":"link","label":"KEX- KIRA\u2019s Native Token","href":"/docs.kira.network/39d6465e-61d4-4aff-868f-123b65c86326","docId":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","unlisted":false},{"type":"link","label":"Rewards and Incentives Structure","href":"/docs.kira.network/5b32eede-3889-4f8e-baf5-0f0dc9179a6b","docId":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","unlisted":false},{"type":"link","label":"Initial Liquidity Offering","href":"/docs.kira.network/a6a660a6-3e5c-4a53-9ec3-14aa07f00351","docId":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","unlisted":false},{"type":"link","label":"Unified Liquid Staking","href":"/docs.kira.network/492e443f-5703-4d95-8508-a101405efde3","docId":"KIRA\u2019s-Economics/Unified-Liquid-Staking","unlisted":false}]},{"type":"link","label":"Glossary","href":"/docs.kira.network/22c36797-10c8-40e4-9457-d8f1b6b4563b","docId":"Glossary","unlisted":false}]},"docs":{"Glossary":{"id":"Glossary","title":"Glossary","description":"- RollApp: Decentralized application","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Initial-Liquidity-Offering":{"id":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","title":"Initial Liquidity Offering","description":"The Initial Liquidity Offering is a bootstrapping procedure for dApps deployed on KIRA. It is designed to ensure that dApp tokens have sufficient liquidity, and that developers, users, verifiers, and executors are commonly aligned towards the dApps\u2019 success.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token":{"id":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","title":"KEX- KIRA\u2019s Native Token","description":"For a better understanding regarding network rewards distribution, please refer to the [Problem Internal Link] section.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Overview":{"id":"KIRA\u2019s-Economics/Overview","title":"Overview","description":"KIRA\u2019s economics are designed to ensure that its applications have access to the necessary infrastructure required to run, as well as the liquid capital required to boost economic activity. This is accomplished through a system of incentive engineering that rewards users, developers, executors, and verifiers.","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure":{"id":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","title":"Rewards and Incentives Structure","description":"Staking Rewards","sidebar":"defaultSidebar"},"KIRA\u2019s-Economics/Unified-Liquid-Staking":{"id":"KIRA\u2019s-Economics/Unified-Liquid-Staking","title":"Unified Liquid Staking","description":"KIRA allows validators to stake any combination of multiple whitelisted assets through its MBPoS (Multiple Bonded Proof of Stake) mechanism. Depositors are automatically issued redeemable receipt tokens representing their staked assets, making them LSDs by default.","sidebar":"defaultSidebar"},"What-is-KIRA/-Frontend---MIRO":{"id":"What-is-KIRA/-Frontend---MIRO","title":"Frontend - MIRO","description":"MIRO \u770b (\u898b\u308b) is KIRA\u2019s frontend application and web wallet. It provides a straightforward interface for users to interact with the KIRA blockchain via the decentralized API, INTERX. This allows for efficient management of KIRA accounts and assets.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Building-on-KIRA":{"id":"What-is-KIRA/Layer-2/Building-on-KIRA","title":"Building on KIRA","description":"Building on KIRA is intended to replicate classical Web2 design patterns where the developer creates a new REST-API project (server side) and pairs it with his frontend application (client side). The KIRA network acts as a decentralized middleware and infrastructure layer ensuring that applications are accessible and have the resources needed to run. As long the server application remains deterministic and can be re-executed or otherwise proven that execution happened in the expected way (e.g. by using a set of sequenced inputs, ZK proofs, or even AI) it is possible to trustlessly verify the execution and thus transition the application from one state of its database to another. Submitting state hashes of the application database into the KIRA base layer by the application leader elected in each session (database snapshot) allows for achieving consensus and thus for composability (value transfer and data communication) between the apps.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Overview":{"id":"What-is-KIRA/Layer-2/Overview","title":"Overview","description":"KIRA\u2019s base layer (SEKAI) handles governance, token transfers, multi-staking, and all other system security-related on-chain logic. At the same time, SEKAI assists in the execution of decentralized applications taking place on their dedicated off-chain subnets by enabling their orchestration, communication, and settlement. This separation enables parallel scaling of execution, storage, and networking capabilities of each application. KIRA applications, also known as RollApps, consist of an execution container defining application logic, and a verification container defining how changes in an application state can be verified.","sidebar":"defaultSidebar"},"What-is-KIRA/Layer-2/Virtual-Finality-Gadget":{"id":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","title":"Virtual Finality Gadget","description":"The Virtual Finality Gadget (VFG) is a programmable finality mechanism that grants each application on KIRA the ability to establish its own verification and consensus rules. It divides application logic into execution (operated by Executors) and verification (overseen by Fishermen) components. VFG allows developers to customize their finality logic, such as choosing an optimistic model of execution (rollups - valid by default), pessimistic (rolldowns - invalid until verified), or any bespoke verification logic, even allowing for the creation of recursive appchains and human judgment by a defined set of network actors. VFG\u2019s ability to support non-deterministic verification binaries makes it particularly useful for complex, blockchain-less, Web2-scale applications, such as AI and gaming as well as makes it impossible for an attacker to predict if his attack attempt would be successful as the verification rules can be customized by each Fisherman individually.","sidebar":"defaultSidebar"},"What-is-KIRA/Middleware---INTERX":{"id":"What-is-KIRA/Middleware---INTERX","title":"Middleware - INTERX","description":"Overview","sidebar":"defaultSidebar"},"What-is-KIRA/Orchestrator---RYOKAI":{"id":"What-is-KIRA/Orchestrator---RYOKAI","title":"Orchestrator - RYOKAI","description":"RYOKAI \u4e86\u89e3 (\u308a\u3087\u304b\u3044), previously known as KIRA Manager, is KIRA\u2019s orchestration tool, a physical infrastructure manager that facilitates backend operations of KIRA stack components for consensus nodes. It automates critical processes such as SEKAI system upgrades, auto-deployment of containerized Layer 2 applications, and INTERX configuration.","sidebar":"defaultSidebar"},"What-is-KIRA/Overview":{"id":"What-is-KIRA/Overview","title":"Overview","description":"KIRA is a hypermodular network with a programmable consensus framework designed to support the execution of trustless, blockchain-less applications that function as L2s to the network.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Consensus":{"id":"What-is-KIRA/SEKAI/Consensus","title":"Consensus","description":"Tendermint","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Governance":{"id":"What-is-KIRA/SEKAI/Governance","title":"Governance","description":"KIRA introduces a governance system that fundamentally departs from the conventional stake-weighted voting mechanisms prevalent in blockchain networks. Instead, it adopts a per-capita approach, ensuring that every vote carries equal weight, irrespective of the voter\'s stake. Within this system, Consensus nodes hold a foundational role by serving as the primary decision-makers. They form the initial group of Councilors, which defines any network participants endowed with the right to propose and vote on network decisions. Anyone can become a Councilor; the group is open to all users, contingent upon receiving endorsement from the existing council.","sidebar":"defaultSidebar"},"What-is-KIRA/SEKAI/Overview":{"id":"What-is-KIRA/SEKAI/Overview","title":"Overview","description":"SEKAI (\u4e16\u754c) is KIRA\'s core blockchain, managing all on-chain logic, including processing transactions and state transitions. SEKAI iterates upon Tendermint consensus with its own Multi-Bonded Proof of Stake (MBPoS), which enables the staking of multiple whitelisted assets as well as KEX, KIRA\u2019s native token and natively supported Liquid Staking Derivatives. Consensus Nodes, or \'validators,\' propose new states of SEKAI blockchain application derived from blocks that contain an ordered list of transactions carrying instructions (user requests). Those instructions are then executed by each full node following the SEKAI codebase which defines how to interpret and apply them.","sidebar":"defaultSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/fb7ff77c.e5ed8d23.js b/assets/js/fb7ff77c.e5ed8d23.js deleted file mode 100644 index 60c4915..0000000 --- a/assets/js/fb7ff77c.e5ed8d23.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[3820],{9004:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(5893),a=n(1151);n(4866),n(5162);const o={title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},s=void 0,l={id:"Stack/SEKAI--Backend/Modules/Tokens-Module/index",title:"Tokens Module",description:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/index.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Tokens-Module",slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19",permalink:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Tokens Module",sidebar_position:9,slug:"/b57b0d4e-7c38-4969-9654-d9193eb7fa19"},sidebar:"defaultSidebar",previous:{title:"Universal Basic Income",permalink:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e"},next:{title:"Token Rates Registrar",permalink:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24"}},i={},u=[];function c(e){const t={a:"a",code:"code",p:"p",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"The Tokens Module facilitates seamless integration of foreign tokens, establishing their exchange rates, outlining staking reward limits, and supporting a dynamic network ecosystem. Empowering governance to control token parameters ensures Kira's native token's value, while concurrently providing robust safeguards against potentially harmful foreign token transfers through manageable blacklist and whitelist filters"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://github.com/KiraCore/sekai/tree/master/x/tokens",children:(0,r.jsx)(t.code,{children:"x/tokens"})})})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},5162:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(6905);const a={tabItem:"tabItem_Ymn6"};var o=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.Z)(a.tabItem,s),hidden:n,children:t})}},4866:(e,t,n)=>{n.d(t,{Z:()=>x});var r=n(7294),a=n(6905),o=n(2466),s=n(6550),l=n(469),i=n(1980),u=n(7392),c=n(12);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function b(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=f(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!b({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[u,d]=p({queryString:n,groupId:a}),[m,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=u??m;return b({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,o]),tabValues:o}}var h=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=n(5893);function v(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==r&&(u(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.Z)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function y(e){const t=m(e);return(0,k.jsxs)("div",{className:(0,a.Z)("tabs-container",g.tabList),children:[(0,k.jsx)(v,{...e,...t}),(0,k.jsx)(w,{...e,...t})]})}function x(e){const t=(0,h.Z)();return(0,k.jsx)(y,{...e,children:d(e.children)},String(t))}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var r=n(7294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe4e5f3d.db6ccd4a.js b/assets/js/fe4e5f3d.db6ccd4a.js deleted file mode 100644 index aeeeb80..0000000 --- a/assets/js/fe4e5f3d.db6ccd4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[6222],{5845:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>d,metadata:()=>l,toc:()=>h});var s=a(5893),t=a(1151),i=a(4866),r=a(5162);const d={title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},o=void 0,l={id:"Stack/SEKAI--Backend/Modules/Multistaking/Delegators",title:"Delegators",description:"Concept",source:"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/Delegators.mdx",sourceDirName:"Stack/SEKAI--Backend/Modules/Multistaking",slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",permalink:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Delegators",sidebar_position:3,slug:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381"},sidebar:"defaultSidebar",previous:{title:"Consensus nodes & staking pools",permalink:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b"},next:{title:"Slashing",permalink:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193"}},c={},h=[{value:"Concept",id:"5c4703c095ef4be7a1ba267af6071f66",level:2},{value:"Native liquid staking",id:"fdb23dc5af87468898b340eda95f2ede",level:3},{value:"Staking pools & consensus nodes status",id:"c898af44293e44ef96a6c6cae5ed1186",level:3},{value:"Delegating and associated parameters",id:"c3d993328dfe4b9e85b1f93f390796af",level:3},{value:"Registration mechanism for offshore staking pool delegators",id:"08bfc2b8fbcf411bae24ca442fa49e6a",level:3},{value:"Managing staking rewards",id:"df8d14384a764c199e8d69de637577af",level:3},{value:"Claiming rewards",id:"7e84cbf07ad941c8b29dad7f14b4884f",level:4},{value:"Enabling auto-compounding",id:"8095488798c1432baa345bae81d3dd4e",level:4},{value:"Undelegating & cooling period",id:"55d34613a10e460bb772b415455b2038",level:4},{value:"Delegators push out",id:"0a9ed94ceee64117a44cf6658c22a213",level:4},{value:"Cli syntax & examples",id:"bf9bed7d9d334bfd9d3d2af659f3437b",level:2},{value:"Transactions",id:"82a71b23509544a2a7ed389e996d72b3",level:2},{value:"Delegating",id:"9f9b21196a384f8984764f64df053d49",level:4},{value:"Undelegating",id:"5a5b0ec50c254a57804362266ba59c01",level:4},{value:"Set compounding mode",id:"4a865e4b207d4b01b5d42a932989412f",level:4},{value:"Claim rewards/pool\u2019s derivatives",id:"a20c73c980d645b697ce49666e11ffee",level:4},{value:"Claim undelegation",id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",level:4},{value:"Claiming matured undelegations",id:"1c2c1213febd4a98b8c3d3e4edda0f39",level:4},{value:"Delegator registration",id:"7e12db69b62845f19f519ccf675e7eb2",level:4},{value:"Queries",id:"ba7958814c1e4cec8d89051b5bce8d0d",level:2},{value:"Staking pool delegators",id:"d4c36c977d1242f4b0955e6ff9c5b439",level:4},{value:"All staking pool information",id:"2570ce21001f4c8591815b04d233f18f",level:4},{value:"All pending undelegations",id:"78231b53b6694172857f1c9ed8917be0",level:4},{value:"Compounding information",id:"8310aaae479a4f4e807e83e7a7db5e91",level:4},{value:"Outstanding rewards",id:"ded77962e7e84ed398e024bfb5744e30",level:4},{value:"Governance",id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"5c4703c095ef4be7a1ba267af6071f66",children:"Concept"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators are KIRA token holders who want to participate in network security by delegating assets as collateral to one or more consensus nodes' staking pools in exchange for a share of their revenue. Because delegators share revenue and responsibility with their chosen consensus nodes, they should carefully consider which nodes to delegate to and monitor their stakes regularly. Consensus nodes can also be delegators, but they ",(0,s.jsx)("u",{children:"are not required to"}),". Staked assets are directly affected by the conduct of the elected nodes, so it is important for delegators to exercise diligence and diversification in their choices."]}),"\n",(0,s.jsx)(n.h3,{id:"fdb23dc5af87468898b340eda95f2ede",children:"Native liquid staking"}),"\n",(0,s.jsxs)(n.p,{children:["Consensus nodes on the Kira Network have staking pools that are designed equivalently to regular AMM liquidity pools like Uniswap, in order to achieve native liquid staking. When a certain number of tokens ",(0,s.jsx)(n.code,{children:""})," are deposited in the staking pool of a consensus node ",(0,s.jsx)(n.code,{children:"V"}),", an equal number of derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," are issued in return (similar to AMM LP tokens). These derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," can be freely moved and traded on and off-chain, while the underlying ",(0,s.jsx)(n.code,{children:""})," tokens remain staked. If V1 is slashed for double signing, the staked ",(0,s.jsx)(n.code,{children:""})," tokens can either be moved to the treasury, a governance ",(0,s.jsx)(n.a,{href:"/812fdf31-d225-4daf-a4cd-4501cbc00d95",children:"spending pool"})," or destroyed, while the derivative tokens ",(0,s.jsx)(n.code,{children:"V/"})," representing them would lose their 1-to-1 peg (similar to impermanent loss in AMM)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["E.g.: If 50% of ",(0,s.jsx)(n.code,{children:"XYZ"})," tokens staked with block proposer ",(0,s.jsx)(n.code,{children:"V1"})," get slashed, unstaking 2 ",(0,s.jsx)(n.code,{children:"V1/XYZ"})," from ",(0,s.jsx)(n.code,{children:"V1"}),"'s pool would only return 1 ",(0,s.jsx)(n.code,{children:"XYZ"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"c898af44293e44ef96a6c6cae5ed1186",children:"Staking pools & consensus nodes status"}),"\n",(0,s.jsxs)(n.p,{children:["In KIRA's network, each consensus node operates its own staking pool where delegators can stake their assets. The staking pool has a unique ID and is linked to the consensus node's address. The consensus node has control over the staking pool's status and can enable or disable it, as well as set the commission rate on block rewards. In addition, a consensus node can be ",(0,s.jsx)(n.code,{children:"active"}),", ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," depending on its performance, behavior or choice. While it is important to understand that the status of the staking pool is independent of the status of the consensus node, if a consensus node's status is ",(0,s.jsx)(n.code,{children:"inactive"}),", ",(0,s.jsx)(n.code,{children:"paused"}),", or ",(0,s.jsx)(n.code,{children:"jailed"})," , and/or if its staking pool is ",(0,s.jsx)(n.code,{children:"disabled"}),", delegators are not able to delegate any additional tokens to that node\u2019s staking pool. They will only be able to undelegate their existing stake."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding consensus nodes status and ranking system please refer to the"})," ",(0,s.jsx)(n.a,{href:"/9f763be9-fbd3-452f-8c6e-6e418f34856f",children:(0,s.jsx)(n.em,{children:"Consensus nodes ranks & statuses"})})," ",(0,s.jsx)(n.em,{children:"module.\nFor more information regarding consensus nodes staking pool status please refer to the"})," ",(0,s.jsx)(n.a,{href:"/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",children:(0,s.jsx)(n.em,{children:"Consensus nodes & staking pools"})})," ",(0,s.jsx)(n.em,{children:"section."})]}),"\n",(0,s.jsx)(n.h3,{id:"c3d993328dfe4b9e85b1f93f390796af",children:"Delegating and associated parameters"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA allows users to delegate and pay ",(0,s.jsx)(n.a,{href:"/184c11ed-4849-4ec5-acd0-f795b7abf467",children:"execution fees"})," with any token that has been whitelisted by governance. To ensure proper network functionality and security, specific management rules and limitations are defined and curated for each foreign token, such as exchange rates and staking pool rewards allowance. These rules are monitored by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," module, which sets bounds on the staking mechanism through the use of three parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_cap"})," : Sets the maximum share (%) of staking reward a given whitelisted staking token will be entitled per staking pool to prevent a malicious user from diluting the pool with any particular token in order to claim all the rewards. Setting specific shares also simplifies reward distribution by sidestepping the need to track how much eligible staking tokens are worth in terms of USD or KEX."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stake_min"}),": Sets the minimum delegation and undelegation amount per transaction for a particular token. This is designed to prevent dust spam attacks, where an attacker might attempt to disrupt block production by continuously staking or withdrawing trivial amounts of tokens with numerous accounts. Importantly, this parameter also ensures that a user cannot undelegate an amount that would leave behind a residual stake less than this minimum. Such a residual would be locked and become non-withdrawable. Detailed considerations related to dust-spam can be found in the ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:"Fees and staking rewards distribution"})," section."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"fee_rate"})," : Sets the conversation rate for foreign tokens in terms of KEX to use them as execution fees. ",(0,s.jsx)(n.code,{children:"fee_rate"})," is also used to determine if the ",(0,s.jsx)(n.code,{children:"stake_min"})," value is respected in case of delegation or if ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," is reached when a staking pool reaches its ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"maximum delegators capacity"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"For more information regarding delegators staking rewards distribution please refer to"}),(0,s.jsxs)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:[" ",(0,s.jsx)(n.em,{children:"this section"})]})," ",(0,s.jsx)(n.em,{children:"of the"})," ",(0,s.jsx)(n.a,{href:"/85d4757d-f36d-4a39-b7ab-62866c1689ba",children:(0,s.jsx)(n.em,{children:"Fees and staking rewards distribution"})})," ",(0,s.jsx)(n.em,{children:"module."})]}),"\n",(0,s.jsx)(n.h3,{id:"08bfc2b8fbcf411bae24ca442fa49e6a",children:"Registration mechanism for offshore staking pool delegators"}),"\n",(0,s.jsxs)(n.p,{children:["As explained earlier, owning some staking pool's derivatives ",(0,s.jsx)(n.code,{children:"V/"})," is equivalent to having some token ",(0,s.jsx)(n.code,{children:""})," staked with consensus node ",(0,s.jsx)(n.code,{children:"V"}),". However, because the Cosmos SDK does not provide a hook on token transfers (yet?) and derivatives can be traded freely inside or outside the KIRA network, it is impossible to track staking pool delegators' shares in real time. To solve this problem, KIRA has implemented a registration mechanism where \"offshore\" delegators, such as users or smart contracts that acquired KIRA's native staking derivative tokens on the open market, can register those derivatives to the corresponding staking pool to earn the corresponding rewards. Additionally, each staking pool performs a balance check on its current delegators whenever it receives rewards (whenever the consensus nodes produces a block) and will automatically deregister any registered delegators that do not hold more than the minimum ",(0,s.jsx)(n.code,{children:"stake_min"})," of derivative tokens."]}),"\n",(0,s.jsx)(n.h3,{id:"df8d14384a764c199e8d69de637577af",children:"Managing staking rewards"}),"\n",(0,s.jsx)(n.h4,{id:"7e84cbf07ad941c8b29dad7f14b4884f",children:"Claiming rewards"}),"\n",(0,s.jsx)(n.p,{children:"With auto-compounding activated, rewards are automatically reinvested, increasing the delegator's stake. However, the staking derivatives, representing these newly compounded rewards, aren't instantly transferred to the delegator's address to reduce overhead. They accumulate in the staking pool and must be claimed manually. Conversely, if a delegator decides not to use auto-compounding, they will have to manually claim all the rewards they accrue. Hence, in both scenarios, the delegator must manually intervene to include their rewards or rewards\u2019 derivatives into their active balance."}),"\n",(0,s.jsx)(n.h4,{id:"8095488798c1432baa345bae81d3dd4e",children:"Enabling auto-compounding"}),"\n",(0,s.jsxs)(n.p,{children:["Delegators have the flexibility to decide how they manage rewards earned from staking. They can opt for automatic reinvestment through the auto-compounding feature or claim them manually. This decision can be made for any token eligible for staking, as determined by the ",(0,s.jsx)(n.a,{href:"/f19a45b3-88c4-469c-8642-772b941a1b24",children:"Token Rates Registrar"})," . When enabled, rewards are automatically added to the delegator's stake. However, the corresponding staking derivatives are not sent to the delegator's address, as this would be too much of an overhead for the module to handle. Instead, they are simply accumulated in the staking pool and become claimable in the same way as standard rewards. In other words, when a user disables auto compounding, it will have to claim ",(0,s.jsx)("u",{children:"its rewards"})," manually; when it is enabled, it will have to claim ",(0,s.jsx)("u",{children:"its newly issued staking derivatives"})," manually. Each delegator has their unique auto-compounding schedule, distributing the computational demands and preventing the network from being overwhelmed by simultaneous compounding events. Configurations for this feature are maintained per user. Delegators can enable this feature for all tokens or for particular ones."]}),"\n",(0,s.jsxs)(n.p,{children:["Auto-compounding operates based on a consistent interval set across the network by the ",(0,s.jsx)(n.code,{children:"autocompound_interval_num_blocks"})," ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"}),". The exact block at which a user's rewards get compounded depends on when they activate this feature. For example, with a network interval set at 10,000 blocks, a delegator enabling auto-compounding at block ",(0,s.jsx)(n.code,{children:"3"})," will see their rewards compounded at blocks ",(0,s.jsx)(n.code,{children:"10003"}),", ",(0,s.jsx)(n.code,{children:"20003"})," and so on. This property is set to ",(0,s.jsx)(n.code,{children:"17280"})," blocks at genesis."]}),"\n",(0,s.jsx)(n.h4,{id:"55d34613a10e460bb772b415455b2038",children:"Undelegating & cooling period"}),"\n",(0,s.jsxs)(n.p,{children:["A delegator can undelegate their stake at anytime to get back its original tokens. Any undelegation will trigger a fixed cooling period during which the stake remain locked and do not yield any reward. Once the cooling period expires, staked tokens ",(0,s.jsx)(n.code,{children:""})," can be claimed by providing the respective pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"})," which are then burned. The cooling period is the same for all staking tokens and defined by the governance through the following ",(0,s.jsx)(n.code,{children:"unstaking_period"})," network property (1 month by default)."]}),"\n",(0,s.jsx)(n.h4,{id:"0a9ed94ceee64117a44cf6658c22a213",children:"Delegators push out"}),"\n",(0,s.jsxs)(n.p,{children:["KIRA has a feature that protects against dust spam attacks by limiting the maximum number of delegators for each individual staking pool with a network property called ",(0,s.jsx)(n.code,{children:"max_delegators"})," (which is set to 100 by default). If this maximum number of delegators is reached, new delegators will need to provide a higher stake than the smallest delegator in the pool in order to push them out. To prevent large stakeholders from easily pushing out smaller delegators from good consensus nodes, the minimum required stake to push out a delegator is set by the ",(0,s.jsx)(n.code,{children:"min_delegation_pushout"})," property (which is a multiplier of the smallest stake value, 10 by default). This ",(0,s.jsx)(n.a,{href:"/b9b95792-b936-4603-8a46-15566f24e3c0",children:"network property"})," can be adjusted by KIRA's governance and increased as the network grows. When a delegator is pushed out, they automatically receive any outstanding rewards they are owed."]}),"\n",(0,s.jsx)(n.h2,{id:"bf9bed7d9d334bfd9d3d2af659f3437b",children:"Cli syntax & examples"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Each CLI command and proposal process in KIRA requires specific permissions. These permissions must be added to the account's whitelist or obtained as sudo permissions for direct changes. Refer to the"})," ",(0,s.jsx)(n.a,{href:"/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",children:(0,s.jsx)(n.em,{children:"Roles & Permissions"})})," ",(0,s.jsx)(n.em,{children:"documentation for more details."})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$SIGNER"})})," ",(0,s.jsx)(n.em,{children:"represents the transaction signer's account name or address. For instructions on setting common flags as environment variables, such as"})," ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.code,{children:"$FLAGS_TX"})})," ",(0,s.jsx)(n.em,{children:"and"})," ",(0,s.jsxs)(n.em,{children:[(0,s.jsx)(n.code,{children:"$FLAGS_QR"}),"__, see the"]})," ",(0,s.jsx)(n.em,{children:"section"})]})}),"\n",(0,s.jsxs)(i.Z,{children:[(0,s.jsxs)(r.Z,{value:"transactions",label:"Transactions",children:[(0,s.jsx)(n.h2,{id:"82a71b23509544a2a7ed389e996d72b3",children:"Transactions"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"delegate"})}),(0,s.jsx)(n.th,{children:"Delegate to a pool."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"undelegate"})}),(0,s.jsx)(n.td,{children:"Start undelegation from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-rewards"})}),(0,s.jsx)(n.td,{children:"Claim rewards from a pool."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-undelegation"})}),(0,s.jsx)(n.td,{children:"Claim matured undelegation."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"claim-matured-undelegations"})}),(0,s.jsx)(n.td,{children:"Claim all matured undelegations in a single transaction."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"set-compound-info"})}),(0,s.jsx)(n.td,{children:"Set auto compounding mode."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"register-delegator"})}),(0,s.jsx)(n.td,{children:"Register as a pool delegator when acquiring pool derivatives externally."})]})]})]}),(0,s.jsx)(n.h4,{id:"9f9b21196a384f8984764f64df053d49",children:"Delegating"}),(0,s.jsxs)(n.p,{children:["Delegate tokens to a specific staking pool. This action locks the specified amount of ",(0,s.jsx)(n.code,{children:""})," tokens to a staking pool using the consensus node\u2019s address. It returns the corresponding pool\u2019s derivative ",(0,s.jsx)(n.code,{children:"V/"}),". The delegation amount cannot be lower than ",(0,s.jsx)(n.code,{children:"stake_min"}),". Delegation is only possible to an active consensus node."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to delegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking delegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"5a5b0ec50c254a57804362266ba59c01",children:"Undelegating"}),(0,s.jsxs)(n.p,{children:["Undelegating burns the corresponding ",(0,s.jsx)(n.code,{children:"V/"})," derivatives and initiates the claim of any outstanding rewards/compounds. The undelegated ",(0,s.jsx)(n.code,{children:""})," tokens are assigned an undelegation ID and become claimable after the ",(0,s.jsx)(n.code,{children:"unstaking_period"}),". The undelegation amount must meet the ",(0,s.jsx)(n.code,{children:"stake_min"})," requirements."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VAL"}),": Consensus node\u2019s address (",(0,s.jsx)(n.code,{children:"kiravaloper..."}),")."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$COIN"}),": Comma-separated list of coins and their amounts to undelegate in the format ",(0,s.jsx)(n.code,{children:""})," (e.g., ",(0,s.jsx)(n.code,{children:"20000ukex"}),")."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking undelegate \\\n--from=$SIGNER $FLAGS_TX \\\n$VAL $COIN\n"})}),(0,s.jsx)(n.h4,{id:"4a865e4b207d4b01b5d42a932989412f",children:"Set compounding mode"}),(0,s.jsx)(n.p,{children:"Delegators can activate or deactivate auto compounding for their staked tokens. This can be set for all tokens or specific denominations."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ALL"}),": Set compound mode on all tokens (true/false)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DENOM"}),": Set compound mode on a specific token denomination (e.g., ukex)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking set-compound-info \\\n--from=$SIGNER $FLAGS_TX \\\n$ALL $DENOM\n"})}),(0,s.jsx)(n.h4,{id:"a20c73c980d645b697ce49666e11ffee",children:"Claim rewards/pool\u2019s derivatives"}),(0,s.jsx)(n.p,{children:"Delegators can claim all outstanding rewards (or pool\u2019s derivatives if auto-compounding is active)."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-rewards \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"d81199ad78c94ef1a1aac0d9b8d4cb3f",children:"Claim undelegation"}),(0,s.jsxs)(n.p,{children:["Undelegations can be claimed using corresponding ",(0,s.jsx)(n.a,{href:"/94e4d0a6-8e45-469c-89a5-8ec65ca16381",children:"delegation ID"})," and at the end of their respective ",(0,s.jsx)(n.code,{children:"unstaking_period"}),"."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ID"}),": Undelegation ID."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-undelegation \\\n--from=$SIGNER $FLAGS_TX \\\n$ID\n"})}),(0,s.jsx)(n.h4,{id:"1c2c1213febd4a98b8c3d3e4edda0f39",children:"Claiming matured undelegations"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"claim-matured-undelegations"}),", allows users to submit a transaction to claim all matured undelegations in one action. It's a convenient way to handle multiple matured undelegations without specifying each ID individually."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking claim-matured-undelegations \\\n--from=$SIGNER $FLAGS_TX\n"})}),(0,s.jsx)(n.h4,{id:"7e12db69b62845f19f519ccf675e7eb2",children:"Delegator registration"}),(0,s.jsxs)(n.p,{children:["Users or smart contracts that have acquired KIRA\u2019s native staking derivative tokens can register as delegators to the respective staking pools. Registration is subject to the minimum staking amount requirement ",(0,s.jsx)(n.code,{children:"stake_min"}),"."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid tx multistaking register-delegator \\\n--from=$SIGNER $FLAGS_TX\n"})})]}),(0,s.jsxs)(r.Z,{value:"queries",label:"Queries",children:[(0,s.jsx)(n.h2,{id:"ba7958814c1e4cec8d89051b5bce8d0d",children:"Queries"}),(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"undelegations"})}),(0,s.jsx)(n.th,{children:"Query all the undelegation records."})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"staking-pool-delegators"})}),(0,s.jsx)(n.td,{children:"Query staking pool delegators."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"compound-info"})}),(0,s.jsx)(n.td,{children:"Query compound information of a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"outstanding-rewards"})}),(0,s.jsx)(n.td,{children:"Query outstanding rewards for a delegator."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pools"})}),(0,s.jsx)(n.td,{children:"Query all existing staking pools and their parameters and metrics."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"query-delegations"})}),(0,s.jsx)(n.td,{children:"Query delegations and rewards by delegator address and specific pool id or validator's address."})]})]})]}),(0,s.jsx)(n.h4,{id:"d4c36c977d1242f4b0955e6ff9c5b439",children:"Staking pool delegators"}),(0,s.jsx)(n.p,{children:"Retrieve delegators associated with a specific staking pool."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Address of the staking pool node."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking staking-pool-delegators $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"2570ce21001f4c8591815b04d233f18f",children:"All staking pool information"}),(0,s.jsx)(n.p,{children:"Query metrics and parameters of staking pools."}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking pools $FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"78231b53b6694172857f1c9ed8917be0",children:"All pending undelegations"}),(0,s.jsxs)(n.p,{children:["Retrieve information about pending undelegations using the ",(0,s.jsx)(n.code,{children:"undelegations"})," query. This query allows for filtering based on the delegator's address and the validator's address."]}),(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If both ",(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"})," and ",(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"})," are left as empty strings, the query will return all existing undelegations. To specify an empty string as an argument in the command line, use ",(0,s.jsx)(n.code,{children:'""'}),"."]})}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address (optional)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$VALIDATOR_ADDRESS"}),": Validator's address (optional)."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"sekaid query multistaking undelegations $DELEGATOR_ADDRESS $VALIDATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"8310aaae479a4f4e807e83e7a7db5e91",children:"Compounding information"}),(0,s.jsx)(n.p,{children:"Retrieve a delegator's compounding information."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking compound-info $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})}),(0,s.jsx)(n.h4,{id:"ded77962e7e84ed398e024bfb5744e30",children:"Outstanding rewards"}),(0,s.jsx)(n.p,{children:"Query a delegator's outstanding rewards."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Args"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$DELEGATOR_ADDRESS"}),": Delegator's address."]}),"\n"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sekaid query multistaking outstanding-rewards $DELEGATOR_ADDRESS \\\n$FLAGS_QR | jq\n"})})]}),(0,s.jsxs)(r.Z,{value:"governance",label:"Governance",children:[(0,s.jsx)(n.h2,{id:"aea5c0245c4e4bea8ecfe4c4d2b9c177",children:"Governance"}),(0,s.jsx)(n.p,{children:"There is no governance proposal for this sub-module."})]})]})]})}function g(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},5162:(e,n,a)=>{a.d(n,{Z:()=>r});a(7294);var s=a(6905);const t={tabItem:"tabItem_Ymn6"};var i=a(5893);function r(e){let{children:n,hidden:a,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,s.Z)(t.tabItem,r),hidden:a,children:n})}},4866:(e,n,a)=>{a.d(n,{Z:()=>w});var s=a(7294),t=a(6905),i=a(2466),r=a(6550),d=a(469),o=a(1980),l=a(7392),c=a(12);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:t}}=e;return{value:n,label:a,attributes:s,default:t}}))}(a);return function(e){const n=(0,l.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,a])}function g(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:a}=e;const t=(0,r.k6)(),i=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,o._X)(i),(0,s.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function f(e){const{defaultValue:n,queryString:a=!1,groupId:t}=e,i=u(e),[r,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!g({value:n,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:i}))),[l,h]=m({queryString:a,groupId:t}),[f,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Nk)(a);return[t,(0,s.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:t}),x=(()=>{const e=l??f;return g({value:e,tabValues:i})?e:null})();(0,d.Z)((()=>{x&&o(x)}),[x]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),p(e)}),[h,p,i]),tabValues:i}}var p=a(2389);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=a(5893);function j(e){let{className:n,block:a,selectedValue:s,selectValue:r,tabValues:d}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),c=e=>{const n=e.currentTarget,a=o.indexOf(n),t=d[a].value;t!==s&&(l(n),r(t))},h=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=o.indexOf(e.currentTarget)+1;n=o[a]??o[0];break}case"ArrowLeft":{const a=o.indexOf(e.currentTarget)-1;n=o[a]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":a},n),children:d.map((e=>{let{value:n,label:a,attributes:i}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:h,onClick:c,...i,className:(0,t.Z)("tabs__item",x.tabItem,i?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function k(e){let{lazy:n,children:a,selectedValue:t}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function v(e){const n=f(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",x.tabList),children:[(0,b.jsx)(j,{...e,...n}),(0,b.jsx)(k,{...e,...n})]})}function w(e){const n=(0,p.Z)();return(0,b.jsx)(v,{...e,children:h(e.children)},String(n))}},1151:(e,n,a)=>{a.d(n,{Z:()=>d,a:()=>r});var s=a(7294);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.449e397f.js b/assets/js/main.449e397f.js deleted file mode 100644 index db86676..0000000 --- a/assets/js/main.449e397f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.449e397f.js.LICENSE.txt */ -(self.webpackChunkkira_documentation=self.webpackChunkkira_documentation||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={"0008b51c":[()=>Promise.all([n.e(532),n.e(9375)]).then(n.bind(n,7947)),"@site/tabs/Learn/What-is-KIRA/SEKAI/Governance.mdx",7947],"01913bc9":[()=>Promise.all([n.e(532),n.e(9290)]).then(n.bind(n,4806)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Distributor/index.mdx",4806],"03ac81e5":[()=>Promise.all([n.e(532),n.e(4533)]).then(n.bind(n,8406)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses.mdx",8406],"03b8d6be":[()=>Promise.all([n.e(532),n.e(2547)]).then(n.bind(n,6206)),"@site/src/pages/links.mdx",6206],"088b4ce6":[()=>Promise.all([n.e(532),n.e(8631)]).then(n.bind(n,5256)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers.mdx",5256],"0a486fbd":[()=>Promise.all([n.e(532),n.e(5333)]).then(n.bind(n,489)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Auth/index.mdx",489],"0b387740":[()=>n.e(8467).then(n.t.bind(n,9676,19)),"~docs/docs/version-current-metadata-prop-751.json",9676],"0b82c4a8":[()=>Promise.all([n.e(532),n.e(3958)]).then(n.bind(n,8048)),"@site/tabs/docs/Stack/SEKAI--Backend/Installation.mdx",8048],"0d323c38":[()=>Promise.all([n.e(532),n.e(3198)]).then(n.bind(n,831)),"@site/tabs/Testnet/Testnet-History/testnet-9.mdx",831],"0d6db0d3":[()=>Promise.all([n.e(532),n.e(2634)]).then(n.bind(n,2819)),"@site/tabs/docs/Stack/SEKAI--Backend/System-Requirements.mdx",2819],"0ffaf1e6":[()=>Promise.all([n.e(532),n.e(2038)]).then(n.bind(n,2445)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar.mdx",2445],"10b3e108":[()=>Promise.all([n.e(532),n.e(3673)]).then(n.bind(n,8914)),"@site/tabs/Docs/Stack/SEKAI--Backend/Command-Line-Interface.mdx",8914],"14fe96fc":[()=>Promise.all([n.e(532),n.e(4475)]).then(n.bind(n,8422)),"@site/tabs/Docs/Stack/INTERX--Middleware/Endpoints.mdx",8422],"15db6baf":[()=>Promise.all([n.e(532),n.e(6123)]).then(n.bind(n,8737)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing.mdx",8737],17896441:[()=>Promise.all([n.e(532),n.e(325),n.e(7918)]).then(n.bind(n,903)),"@theme/DocItem",903],"1824c5ff":[()=>Promise.all([n.e(532),n.e(9745)]).then(n.bind(n,52)),"@site/tabs/docs/Stack/TORII--Bridge.mdx",52],"18a5fb55":[()=>Promise.all([n.e(532),n.e(7199)]).then(n.bind(n,7784)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling.mdx",7784],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,2027)),"@theme/SearchPage",2027],"1c403f1d":[()=>Promise.all([n.e(532),n.e(8644)]).then(n.bind(n,6638)),"@site/tabs/Learn/KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token.mdx",6638],"1e8ac2c0":[()=>Promise.all([n.e(532),n.e(2288)]).then(n.bind(n,3196)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/index.mdx",3196],"1ebd32ca":[()=>Promise.all([n.e(532),n.e(3666)]).then(n.bind(n,5258)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/index.mdx",5258],"1f391b9e":[()=>Promise.all([n.e(532),n.e(325),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"2220f485":[()=>Promise.all([n.e(532),n.e(5520)]).then(n.bind(n,9703)),"@site/tabs/Testnet/Overview.mdx",9703],"257c4ba5":[()=>Promise.all([n.e(532),n.e(8977)]).then(n.bind(n,9467)),"@site/tabs/docs/Tools/Cosign.mdx",9467],"27883f5b":[()=>Promise.all([n.e(532),n.e(786)]).then(n.bind(n,3523)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Spending-Pool/index.mdx",3523],"28a3620e":[()=>Promise.all([n.e(532),n.e(2296)]).then(n.bind(n,2623)),"@site/tabs/docs/Stack/INTERX--Middleware/System-Requirements.mdx",2623],"2c292493":[()=>Promise.all([n.e(532),n.e(3172)]).then(n.bind(n,1041)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index.mdx",1041],"2e2d1ac9":[()=>Promise.all([n.e(532),n.e(709)]).then(n.bind(n,7683)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar.mdx",7683],"308d30b5":[()=>Promise.all([n.e(532),n.e(814)]).then(n.bind(n,280)),"@site/tabs/Learn/What-is-KIRA/Layer-2/Virtual-Finality-Gadget.mdx",280],"31b14546":[()=>Promise.all([n.e(532),n.e(9211)]).then(n.bind(n,2500)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/index.mdx",2500],"32268a14":[()=>Promise.all([n.e(532),n.e(7135)]).then(n.bind(n,1834)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module.mdx",1834],"3299a548":[()=>Promise.all([n.e(532),n.e(2656)]).then(n.bind(n,1634)),"@site/tabs/Learn/What-is-KIRA/Overview.mdx",1634],"32afdd64":[()=>Promise.all([n.e(532),n.e(4748)]).then(n.bind(n,1843)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Evidence/Evidence-module.mdx",1843],"334589a4":[()=>Promise.all([n.e(532),n.e(5259)]).then(n.bind(n,6784)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Bank.mdx",6784],"33e81a2f":[()=>Promise.all([n.e(532),n.e(8011)]).then(n.bind(n,3575)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Staking-Collectives/index.mdx",3575],"34220abf":[()=>Promise.all([n.e(532),n.e(2721)]).then(n.bind(n,8451)),"@site/tabs/Docs/Tools/Cosign.mdx",8451],"34520de9":[()=>Promise.all([n.e(532),n.e(8086)]).then(n.bind(n,8957)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Fee-processing/index.mdx",8957],"352b6c34":[()=>Promise.all([n.e(532),n.e(3384)]).then(n.bind(n,3426)),"@site/tabs/Learn/What-is-KIRA/Middleware---INTERX.mdx",3426],"360291cb":[()=>n.e(5876).then(n.t.bind(n,7371,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/docusaurus-plugin-content-docs/docs/plugin-route-context-module-100.json",7371],"360afd07":[()=>Promise.all([n.e(532),n.e(1070)]).then(n.bind(n,6801)),"@site/tabs/Docs/Stack/INTERX--Middleware/Command-Line-Interface.mdx",6801],"3b54d8e9":[()=>Promise.all([n.e(532),n.e(9198)]).then(n.bind(n,2772)),"@site/tabs/Docs/Community.mdx",2772],"3e84f229":[()=>Promise.all([n.e(532),n.e(4923)]).then(n.bind(n,4497)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar.mdx",4497],"42c1b037":[()=>Promise.all([n.e(532),n.e(3771)]).then(n.bind(n,8149)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Recovery/index.mdx",8149],"42e9d411":[()=>Promise.all([n.e(532),n.e(1229)]).then(n.bind(n,3858)),"@site/tabs/docs/Tools/Bash-utils.mdx",3858],"4345186d":[()=>Promise.all([n.e(532),n.e(9637)]).then(n.bind(n,5376)),"@site/tabs/Docs/Overview.mdx",5376],"43724f32":[()=>Promise.all([n.e(532),n.e(2139)]).then(n.bind(n,2692)),"@site/tabs/Learn/What-is-KIRA/Orchestrator---RYOKAI.mdx",2692],"46d7d864":[()=>Promise.all([n.e(532),n.e(1557)]).then(n.bind(n,5950)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Bank.mdx",5950],"46f1d4f2":[()=>Promise.all([n.e(532),n.e(6116)]).then(n.bind(n,7898)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Data-Registry.mdx",7898],"491c125d":[()=>Promise.all([n.e(532),n.e(8588)]).then(n.bind(n,5300)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking.mdx",5300],"4a67030b":[()=>Promise.all([n.e(532),n.e(71)]).then(n.bind(n,7476)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Upgrade/index.mdx",7476],"4d8a2e04":[()=>Promise.all([n.e(532),n.e(2611)]).then(n.bind(n,282)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution.mdx",282],"568bfbc0":[()=>Promise.all([n.e(532),n.e(4560)]).then(n.bind(n,2507)),"@site/tabs/docs/Stack/MIRO--Frontend/Installation.mdx",2507],"57614a44":[()=>Promise.all([n.e(532),n.e(6336)]).then(n.bind(n,2768)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers.mdx",2768],"5be0416b":[()=>Promise.all([n.e(532),n.e(3010)]).then(n.bind(n,5863)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/index.mdx",5863],"5c5d267a":[()=>Promise.all([n.e(532),n.e(5448)]).then(n.bind(n,7649)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Evidence/Evidence-module.mdx",7649],"5d87bd6c":[()=>Promise.all([n.e(532),n.e(3908)]).then(n.bind(n,5606)),"@site/tabs/Learn/KIRA\u2019s-Economics/Overview.mdx",5606],"5e95c892":[()=>n.e(9661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"5eb9d434":[()=>Promise.all([n.e(532),n.e(5576)]).then(n.bind(n,905)),"@site/tabs/Docs/Stack/MIRO--Frontend/Installation.mdx",905],"611dcbcd":[()=>Promise.all([n.e(532),n.e(3408)]).then(n.bind(n,2169)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar.mdx",2169],"617128fa":[()=>Promise.all([n.e(532),n.e(5587)]).then(n.bind(n,4604)),"@site/tabs/Learn/What-is-KIRA/Layer-2/Building-on-KIRA.mdx",4604],"62c83391":[()=>Promise.all([n.e(532),n.e(7949)]).then(n.bind(n,1389)),"@site/tabs/Docs/Stack/SEKAI--Backend/index.mdx",1389],"63094d1c":[()=>Promise.all([n.e(532),n.e(4427)]).then(n.bind(n,4606)),"@site/tabs/docs/Stack/INTERX--Middleware/Installation.mdx",4606],"65cd35fc":[()=>Promise.all([n.e(532),n.e(4367)]).then(n.bind(n,9201)),"@site/tabs/Testnet/Testnet-History/testnet-2.mdx",9201],"65e071a3":[()=>n.e(1754).then(n.t.bind(n,3769,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"66109a59":[()=>Promise.all([n.e(532),n.e(702)]).then(n.bind(n,9389)),"@site/tabs/docs/Overview.mdx",9389],"6717ac16":[()=>Promise.all([n.e(532),n.e(8369)]).then(n.bind(n,1755)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure.mdx",1755],"68476f6a":[()=>Promise.all([n.e(532),n.e(4221)]).then(n.bind(n,3710)),"@site/tabs/Testnet/Testnet-History/testnet-4.mdx",3710],69812931:[()=>Promise.all([n.e(532),n.e(6028)]).then(n.bind(n,2040)),"@site/tabs/Learn/KIRA\u2019s-Economics/Rewards-and-Incentives-Structure.mdx",2040],"69cfcbb6":[()=>Promise.all([n.e(532),n.e(6181)]).then(n.bind(n,6061)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing.mdx",6061],"6ab03a46":[()=>Promise.all([n.e(532),n.e(4056)]).then(n.bind(n,4111)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/index.mdx",4111],"6c649b9d":[()=>Promise.all([n.e(532),n.e(7736)]).then(n.bind(n,4854)),"@site/tabs/Testnet/Active-Testnets/chaosnet-1.mdx",4854],"6ea49aa9":[()=>Promise.all([n.e(532),n.e(9372)]).then(n.bind(n,3595)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Layer-2/index.mdx",3595],"7134a84b":[()=>Promise.all([n.e(532),n.e(3731)]).then(n.bind(n,8400)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions.mdx",8400],"718e434a":[()=>Promise.all([n.e(532),n.e(9734)]).then(n.bind(n,6826)),"@site/tabs/docs/Stack/SEKAI--Backend/Command-Line-Interface.mdx",6826],"729cbade":[()=>Promise.all([n.e(532),n.e(4443)]).then(n.bind(n,1922)),"@site/tabs/Testnet/Testnet-System-Requirements.mdx",1922],"7a834501":[()=>Promise.all([n.e(532),n.e(2119)]).then(n.bind(n,6334)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Data-Registry.mdx",6334],"7b2921fe":[()=>Promise.all([n.e(532),n.e(5237)]).then(n.bind(n,1081)),"@site/tabs/Learn/What-is-KIRA/SEKAI/Overview.mdx",1081],"7cb27edf":[()=>Promise.all([n.e(532),n.e(1497)]).then(n.bind(n,7871)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index.mdx",7871],"7d1585d2":[()=>Promise.all([n.e(532),n.e(5435)]).then(n.bind(n,4820)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Params/index.mdx",4820],"7e49dc83":[()=>n.e(3852).then(n.t.bind(n,9288,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/docusaurus-plugin-content-docs/testnet/plugin-route-context-module-100.json",9288],"7ebdef3a":[()=>Promise.all([n.e(532),n.e(6631)]).then(n.bind(n,7517)),"@site/tabs/Docs/Stack/SEKAI--Backend/Configuration.mdx",7517],"81ad07a0":[()=>Promise.all([n.e(532),n.e(3242)]).then(n.bind(n,8067)),"@site/tabs/Testnet/Evangelist.mdx",8067],"884ae49b":[()=>n.e(1864).then(n.t.bind(n,5745,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"88e8816b":[()=>Promise.all([n.e(532),n.e(3444)]).then(n.bind(n,757)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing.mdx",757],"891cc8bb":[()=>Promise.all([n.e(532),n.e(9502)]).then(n.bind(n,965)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools.mdx",965],"89f483db":[()=>Promise.all([n.e(532),n.e(287)]).then(n.bind(n,7384)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools.mdx",7384],"8b922280":[()=>Promise.all([n.e(532),n.e(9833)]).then(n.bind(n,5991)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses.mdx",5991],"8bb30d63":[()=>Promise.all([n.e(532),n.e(5949)]).then(n.bind(n,9843)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling.mdx",9843],"8bef1ec2":[()=>Promise.all([n.e(532),n.e(660)]).then(n.bind(n,415)),"@site/tabs/docs/Stack/INTERX--Middleware/Command-Line-Interface.mdx",415],"8c8ba2fe":[()=>n.e(8669).then(n.t.bind(n,2776,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],"8daae4c3":[()=>Promise.all([n.e(532),n.e(2949)]).then(n.bind(n,7315)),"@site/tabs/Learn/KIRA\u2019s-Economics/Initial-Liquidity-Offering.mdx",7315],"9059b3fd":[()=>Promise.all([n.e(532),n.e(315)]).then(n.bind(n,1641)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/index.mdx",1641],"90d45f8c":[()=>Promise.all([n.e(532),n.e(1366)]).then(n.bind(n,7146)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Network-Properties.mdx",7146],"912c70ca":[()=>Promise.all([n.e(532),n.e(3028)]).then(n.bind(n,9203)),"@site/tabs/docs/Stack/SEKAI--Backend/Configuration.mdx",9203],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9409451b":[()=>Promise.all([n.e(532),n.e(8167)]).then(n.bind(n,7247)),"@site/tabs/Testnet/BU-Setup.mdx",7247],"960d39dd":[()=>Promise.all([n.e(532),n.e(8970)]).then(n.bind(n,4025)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income.mdx",4025],"972e1259":[()=>Promise.all([n.e(532),n.e(3489)]).then(n.bind(n,9962)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income.mdx",9962],"9834c4d1":[()=>Promise.all([n.e(532),n.e(1036)]).then(n.bind(n,1359)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking.mdx",1359],"987660e5":[()=>Promise.all([n.e(532),n.e(1902)]).then(n.bind(n,391)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools.mdx",391],"989dce03":[()=>Promise.all([n.e(532),n.e(9296)]).then(n.bind(n,4326)),"@site/tabs/Testnet/COSIGN-Setup.mdx",4326],"98fa813a":[()=>Promise.all([n.e(532),n.e(5643)]).then(n.bind(n,4647)),"@site/tabs/Testnet/Testnet-History/testnet-5.mdx",4647],"99a08ffb":[()=>Promise.all([n.e(532),n.e(4226)]).then(n.bind(n,8619)),"@site/tabs/docs/Stack/INTERX--Middleware/Endpoints.mdx",8619],"9b69848b":[()=>Promise.all([n.e(532),n.e(4636)]).then(n.bind(n,5909)),"@site/tabs/Testnet/Testnet-History/testnet-1.mdx",5909],"9be18526":[()=>Promise.all([n.e(532),n.e(3405)]).then(n.bind(n,4406)),"@site/tabs/Docs/Wallet.mdx",4406],"9e760a2d":[()=>Promise.all([n.e(532),n.e(3975)]).then(n.bind(n,658)),"@site/tabs/Docs/Stack/SEKAI--Backend/Installation.mdx",658],a017177c:[()=>Promise.all([n.e(532),n.e(4919)]).then(n.bind(n,587)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Spending-Pool/index.mdx",587],a1152711:[()=>Promise.all([n.e(532),n.e(7394)]).then(n.bind(n,1261)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Custody/index.mdx",1261],a34cd734:[()=>Promise.all([n.e(532),n.e(364)]).then(n.bind(n,3197)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Polls.mdx",3197],a3d9f2e2:[()=>Promise.all([n.e(532),n.e(6460)]).then(n.bind(n,121)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure.mdx",121],a46b0ecc:[()=>Promise.all([n.e(532),n.e(4230)]).then(n.bind(n,8673)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/index.mdx",8673],a5498f08:[()=>Promise.all([n.e(532),n.e(7301)]).then(n.bind(n,9461)),"@site/tabs/docs/Stack/INTERX--Middleware/index.mdx",9461],a577e181:[()=>Promise.all([n.e(532),n.e(3124)]).then(n.bind(n,2194)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Token-Basketing/index.mdx",2194],a5d67342:[()=>Promise.all([n.e(532),n.e(7716)]).then(n.bind(n,1942)),"@site/tabs/Docs/Tools/Bash-utils.mdx",1942],a6339593:[()=>Promise.all([n.e(532),n.e(4071)]).then(n.bind(n,5288)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts.mdx",5288],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a91ecbd6:[()=>Promise.all([n.e(532),n.e(1181)]).then(n.bind(n,4705)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution.mdx",4705],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],aa0fd5ad:[()=>Promise.all([n.e(532),n.e(9959)]).then(n.bind(n,6036)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module.mdx",6036],ab01cef8:[()=>n.e(2612).then(n.t.bind(n,2061,19)),"~docs/testnet/version-current-metadata-prop-751.json",2061],ac024f28:[()=>Promise.all([n.e(532),n.e(700)]).then(n.bind(n,8363)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions.mdx",8363],b078c616:[()=>Promise.all([n.e(532),n.e(3987)]).then(n.bind(n,8226)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Polls.mdx",8226],b2d1e94f:[()=>Promise.all([n.e(532),n.e(2091)]).then(n.bind(n,4614)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools.mdx",4614],b4558825:[()=>Promise.all([n.e(532),n.e(6113)]).then(n.bind(n,6634)),"@site/tabs/Learn/What-is-KIRA/-Frontend---MIRO.mdx",6634],b9bae124:[()=>Promise.all([n.e(532),n.e(2621)]).then(n.bind(n,9050)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/index.mdx",9050],b9c4b4b0:[()=>Promise.all([n.e(532),n.e(9697)]).then(n.bind(n,4563)),"@site/tabs/Docs/Stack/INTERX--Middleware/index.mdx",4563],bc73d675:[()=>Promise.all([n.e(532),n.e(30)]).then(n.bind(n,4814)),"@site/tabs/docs/Community.mdx",4814],bd930d6d:[()=>Promise.all([n.e(532),n.e(2365)]).then(n.bind(n,803)),"@site/tabs/docs/Stack/MIRO--Frontend/index.mdx",803],bda39025:[()=>Promise.all([n.e(532),n.e(1338)]).then(n.bind(n,1658)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts.mdx",1658],c0bdbdf6:[()=>Promise.all([n.e(532),n.e(6703)]).then(n.bind(n,7008)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module.mdx",7008],c63d9c91:[()=>Promise.all([n.e(532),n.e(3698)]).then(n.bind(n,3086)),"@site/tabs/Learn/KIRA\u2019s-Economics/Unified-Liquid-Staking.mdx",3086],c75c9226:[()=>Promise.all([n.e(532),n.e(4639)]).then(n.bind(n,6511)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing.mdx",6511],c7ef4c20:[()=>Promise.all([n.e(532),n.e(7346)]).then(n.bind(n,6067)),"@site/tabs/Docs/Stack/MIRO--Frontend/index.mdx",6067],ca182306:[()=>Promise.all([n.e(532),n.e(9426)]).then(n.bind(n,4761)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Layer-2/index.mdx",4761],ca20e08e:[()=>Promise.all([n.e(532),n.e(9248)]).then(n.bind(n,1856)),"@site/tabs/Testnet/Testnet-History/testnet-7.mdx",1856],ca83c2d4:[()=>Promise.all([n.e(532),n.e(9570)]).then(n.bind(n,5989)),"@site/tabs/Docs/Stack/INTERX--Middleware/System-Requirements.mdx",5989],ca9744ca:[()=>Promise.all([n.e(532),n.e(9824)]).then(n.bind(n,2438)),"@site/tabs/Testnet/Key-Management.mdx",2438],cac4d0ba:[()=>Promise.all([n.e(532),n.e(503)]).then(n.bind(n,8644)),"@site/tabs/Learn/What-is-KIRA/SEKAI/Consensus.mdx",8644],ce4193d2:[()=>Promise.all([n.e(532),n.e(2919)]).then(n.bind(n,1472)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Distributor/index.mdx",1472],d0c50a7c:[()=>Promise.all([n.e(532),n.e(8125)]).then(n.bind(n,2233)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Network-Properties.mdx",2233],d1ac71f9:[()=>Promise.all([n.e(532),n.e(1179)]).then(n.bind(n,1982)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/index.mdx",1982],d1dee7b5:[()=>Promise.all([n.e(532),n.e(588)]).then(n.bind(n,7686)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/index.mdx",7686],d378fb37:[()=>Promise.all([n.e(532),n.e(3203)]).then(n.bind(n,4722)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar.mdx",4722],d3ceadd4:[()=>Promise.all([n.e(532),n.e(6617)]).then(n.bind(n,1183)),"@site/tabs/Docs/Stack/TORII--Bridge.mdx",1183],d4607a0f:[()=>Promise.all([n.e(532),n.e(7064)]).then(n.bind(n,657)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Fee-processing/index.mdx",657],d8fd502b:[()=>Promise.all([n.e(532),n.e(5961)]).then(n.bind(n,6358)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Recovery/index.mdx",6358],dab0f481:[()=>Promise.all([n.e(532),n.e(1519)]).then(n.bind(n,2538)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Custody/index.mdx",2538],dc0c660c:[()=>Promise.all([n.e(532),n.e(9541)]).then(n.bind(n,5971)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module.mdx",5971],dc96c512:[()=>Promise.all([n.e(532),n.e(1529)]).then(n.bind(n,6390)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Auth/index.mdx",6390],dd153907:[()=>Promise.all([n.e(532),n.e(5573)]).then(n.bind(n,1253)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions.mdx",1253],dd5e184a:[()=>Promise.all([n.e(532),n.e(7459)]).then(n.bind(n,1055)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing.mdx",1055],de179965:[()=>Promise.all([n.e(532),n.e(4261)]).then(n.bind(n,3721)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Evidence/index.mdx",3721],e131ac00:[()=>Promise.all([n.e(532),n.e(8234)]).then(n.bind(n,1956)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Multistaking/Delegators.mdx",1956],e3fe73b4:[()=>Promise.all([n.e(532),n.e(8990)]).then(n.bind(n,8241)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions.mdx",8241],e4f4b9fb:[()=>Promise.all([n.e(532),n.e(9193)]).then(n.bind(n,3211)),"@site/tabs/Learn/Glossary.mdx",3211],e688febf:[()=>Promise.all([n.e(532),n.e(254)]).then(n.bind(n,6523)),"@site/tabs/Testnet/Testnet-History/testnet-3.mdx",6523],e989e75b:[()=>Promise.all([n.e(532),n.e(2261)]).then(n.bind(n,5903)),"@site/tabs/Learn/What-is-KIRA/Layer-2/Overview.mdx",5903],ea7deaf3:[()=>Promise.all([n.e(532),n.e(6981)]).then(n.bind(n,8002)),"@site/tabs/Testnet/Testnet-History/testnet-8.mdx",8002],eb3c1158:[()=>Promise.all([n.e(532),n.e(3762)]).then(n.bind(n,2292)),"@site/tabs/docs/Wallet.mdx",2292],ec22ab48:[()=>Promise.all([n.e(532),n.e(3655)]).then(n.bind(n,9172)),"@site/tabs/Testnet/Testnet-History/testnet-6.mdx",9172],ecd786be:[()=>Promise.all([n.e(532),n.e(4268)]).then(n.bind(n,8214)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Staking-Collectives/index.mdx",8214],ee7c1b2b:[()=>n.e(9487).then(n.t.bind(n,6238,19)),"/Users/kamil/Dev/kmlbgn/docs.kira.network/.docusaurus/docusaurus-plugin-content-docs/learn/plugin-route-context-module-100.json",6238],ef63544c:[()=>Promise.all([n.e(532),n.e(3629)]).then(n.bind(n,6706)),"@site/tabs/Docs/Stack/INTERX--Middleware/Installation.mdx",6706],f31f9958:[()=>Promise.all([n.e(532),n.e(6002)]).then(n.bind(n,5119)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Token-Basketing/index.mdx",5119],f5e8ec95:[()=>Promise.all([n.e(532),n.e(7549)]).then(n.bind(n,2956)),"@site/tabs/Docs/Stack/SEKAI--Backend/System-Requirements.mdx",2956],f76ae480:[()=>Promise.all([n.e(532),n.e(199)]).then(n.bind(n,1180)),"@site/tabs/Docs/Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing.mdx",1180],f9d3cec8:[()=>Promise.all([n.e(532),n.e(3347)]).then(n.bind(n,7610)),"@site/tabs/docs/Stack/SEKAI--Backend/index.mdx",7610],f9e3313d:[()=>Promise.all([n.e(532),n.e(7475)]).then(n.bind(n,8855)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar.mdx",8855],fb5308ca:[()=>n.e(9949).then(n.t.bind(n,447,19)),"~docs/learn/version-current-metadata-prop-751.json",447],fb7ff77c:[()=>Promise.all([n.e(532),n.e(3820)]).then(n.bind(n,9004)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Tokens-Module/index.mdx",9004],fd831d91:[()=>Promise.all([n.e(532),n.e(3697)]).then(n.bind(n,4387)),"@site/tabs/Testnet/WSL2-Support.mdx",4387],fe4e5f3d:[()=>Promise.all([n.e(532),n.e(6222)]).then(n.bind(n,5845)),"@site/tabs/docs/Stack/SEKAI--Backend/Modules/Multistaking/Delegators.mdx",5845]};var s=n(5893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(9670),u=n(226);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(1772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],b=(0,c.Z)(r);return Object.entries(b).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:l,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(o,{...a,...n})})}})}const f=[{path:"/docs.kira.network/links",component:d("/docs.kira.network/links","949"),exact:!0},{path:"/docs.kira.network/search",component:d("/docs.kira.network/search","b06"),exact:!0},{path:"/docs.kira.network/learn/",component:d("/docs.kira.network/learn/","167"),routes:[{path:"/docs.kira.network/learn/",component:d("/docs.kira.network/learn/","99c"),routes:[{path:"/docs.kira.network/learn/",component:d("/docs.kira.network/learn/","7c2"),routes:[{path:"/docs.kira.network/learn/",component:d("/docs.kira.network/learn/","0ea"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b",component:d("/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b","8b8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f",component:d("/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f","816"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326",component:d("/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326","70b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3",component:d("/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3","0a6"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b",component:d("/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b","291"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851",component:d("/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851","323"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5",component:d("/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5","5a1"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f",component:d("/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f","a9d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351",component:d("/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351","208"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa",component:d("/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa","511"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a",component:d("/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a","4a3"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671",component:d("/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671","cbb"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e",component:d("/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e","752"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418",component:d("/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418","54a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c",component:d("/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c","7aa"),exact:!0,sidebar:"defaultSidebar"}]}]}]},{path:"/docs.kira.network/testnet/",component:d("/docs.kira.network/testnet/","9ae"),routes:[{path:"/docs.kira.network/testnet/",component:d("/docs.kira.network/testnet/","630"),routes:[{path:"/docs.kira.network/testnet/",component:d("/docs.kira.network/testnet/","382"),routes:[{path:"/docs.kira.network/testnet/",component:d("/docs.kira.network/testnet/","006"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/085fa60c-91e1-448a-a11d-44b5221332e0",component:d("/docs.kira.network/testnet/085fa60c-91e1-448a-a11d-44b5221332e0","b37"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8",component:d("/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8","a35"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03",component:d("/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03","506"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae",component:d("/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae","f5a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/442bf26d-c72a-4548-acf1-2cf9d3c8fa31",component:d("/docs.kira.network/testnet/442bf26d-c72a-4548-acf1-2cf9d3c8fa31","f2b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585",component:d("/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585","f0a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa",component:d("/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa","345"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce",component:d("/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce","092"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f",component:d("/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f","e48"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20",component:d("/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20","029"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d",component:d("/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d","4ac"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766",component:d("/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766","6e6"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99",component:d("/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99","2be"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951",component:d("/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951","80c"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac",component:d("/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac","e36"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/testnet/fc224b7a-3406-46db-ad7a-5c179d06703c",component:d("/docs.kira.network/testnet/fc224b7a-3406-46db-ad7a-5c179d06703c","76c"),exact:!0,sidebar:"defaultSidebar"}]}]}]},{path:"/docs.kira.network/",component:d("/docs.kira.network/","ef1"),routes:[{path:"/docs.kira.network/",component:d("/docs.kira.network/","987"),routes:[{path:"/docs.kira.network/",component:d("/docs.kira.network/","59e"),routes:[{path:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa",component:d("/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","352"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce",component:d("/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","4af"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00",component:d("/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","a10"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467",component:d("/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467","2ff"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",component:d("/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","131"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05",component:d("/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","589"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896",component:d("/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","7e0"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073",component:d("/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073","305"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",component:d("/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4","ae2"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7",component:d("/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","e68"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5",component:d("/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","836"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a",component:d("/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","a2e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",component:d("/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","f53"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",component:d("/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","a47"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",component:d("/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","4ae"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193",component:d("/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193","96a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",component:d("/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","87d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",component:d("/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef","49d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f",component:d("/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","14e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790",component:d("/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790","9a0"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d",component:d("/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","f9b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f",component:d("/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f","b86"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69",component:d("/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69","b0c"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95",component:d("/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","c36"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba",component:d("/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","4df"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e",component:d("/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","67e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73",component:d("/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","629"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381",component:d("/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","322"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",component:d("/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","433"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",component:d("/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf","994"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f",component:d("/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","8a2"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66",component:d("/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","3ac"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",component:d("/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","57d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19",component:d("/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19","051"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",component:d("/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9","5ef"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25",component:d("/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","9ed"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",component:d("/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","c95"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0",component:d("/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","a5c"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae",component:d("/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae","0aa"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438",component:d("/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","4e4"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746",component:d("/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746","ea7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",component:d("/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","c72"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",component:d("/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e","bb3"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",component:d("/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","a67"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115",component:d("/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115","a74"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b",component:d("/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","312"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399",component:d("/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","5c9"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92",component:d("/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","107"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9",component:d("/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","ced"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",component:d("/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","d1b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b",component:d("/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","ab1"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84",component:d("/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","87e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9",component:d("/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","a50"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",component:d("/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722","b09"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49",component:d("/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","b28"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",component:d("/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","3bc"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",component:d("/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","462"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24",component:d("/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","939"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243",component:d("/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","677"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671",component:d("/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","afc"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/",component:d("/docs.kira.network/","6b0"),exact:!0,sidebar:"defaultSidebar"}]}]}]},{path:"/docs.kira.network/",component:d("/docs.kira.network/","ef4"),routes:[{path:"/docs.kira.network/",component:d("/docs.kira.network/","b70"),routes:[{path:"/docs.kira.network/",component:d("/docs.kira.network/","d80"),routes:[{path:"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa",component:d("/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","67b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce",component:d("/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","056"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00",component:d("/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","c27"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467",component:d("/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467","48d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c",component:d("/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","f44"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05",component:d("/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","b94"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896",component:d("/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","e5e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073",component:d("/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073","258"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4",component:d("/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4","05f"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7",component:d("/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","7eb"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5",component:d("/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","956"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a",component:d("/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","655"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee",component:d("/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","9e9"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86",component:d("/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","26b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5",component:d("/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","f19"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193",component:d("/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193","491"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b",component:d("/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","715"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef",component:d("/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef","d44"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f",component:d("/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","3bb"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790",component:d("/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790","281"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d",component:d("/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","906"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f",component:d("/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f","8c8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69",component:d("/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69","a6c"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95",component:d("/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","98e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba",component:d("/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","edd"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e",component:d("/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","4c8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73",component:d("/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","adf"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381",component:d("/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","7b7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536",component:d("/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","09e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf",component:d("/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf","f03"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f",component:d("/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","e92"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66",component:d("/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","e39"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7",component:d("/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","a8b"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19",component:d("/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19","8b6"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9",component:d("/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9","d14"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25",component:d("/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","772"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478",component:d("/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","5c7"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0",component:d("/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","4a9"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae",component:d("/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae","49d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438",component:d("/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","4cd"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746",component:d("/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746","faf"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77",component:d("/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","c8d"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e",component:d("/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e","ba5"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc",component:d("/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","891"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115",component:d("/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115","e48"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b",component:d("/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","02a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399",component:d("/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","208"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92",component:d("/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","6ba"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9",component:d("/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","b3e"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e",component:d("/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","b4a"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b",component:d("/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","bb0"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84",component:d("/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","8c8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9",component:d("/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","c40"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722",component:d("/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722","558"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49",component:d("/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","4cd"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd",component:d("/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","698"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051",component:d("/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","c8f"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24",component:d("/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","170"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243",component:d("/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","257"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671",component:d("/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","4a8"),exact:!0,sidebar:"defaultSidebar"},{path:"/docs.kira.network/",component:d("/docs.kira.network/","de0"),exact:!0,sidebar:"defaultSidebar"}]}]}]},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(745),o=n(3727),i=n(405),s=n(412);const l=[n(2497),n(3310),n(8320),n(3068),n(3956)];var c=n(723),u=n(6550),d=n(8790),f=n(5893);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var b=n(5742),h=n(2263),m=n(4996),g=n(6668),k=n(1944),y=n(4711),v=n(9727),w=n(3320),S=n(8780),x=n(197);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,y.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(b.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,S.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(b.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,g.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(b.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:v.h})]}),n&&(0,f.jsx)(k.d,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(x.Z,{tag:w.HX,locale:e}),(0,f.jsx)(b.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var I=n(8934),P=n(8940),R=n(469);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,R.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class M extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(j,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(u.AW,{location:t,render:()=>e})})}}const O=M,D="__docusaurus-base-url-issue-banner-container",B="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var V=n(9670);const X=new Set,Y=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Y.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Y.has(e))(e)&&(Y.add(e),N(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.B6,{children:(0,f.jsx)(o.VK,{children:(0,f.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};N(window.location.pathname).then(s)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs.kira.network/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs.kira.network/","mainDocId":"Overview","docs":[{"id":"Community","path":"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","sidebar":"defaultSidebar"},{"id":"Overview","path":"/docs.kira.network/","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Command-Line-Interface","path":"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Endpoints","path":"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/index","path":"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Installation","path":"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/System-Requirements","path":"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","sidebar":"defaultSidebar"},{"id":"Stack/MIRO--Frontend/index","path":"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9","sidebar":"defaultSidebar"},{"id":"Stack/MIRO--Frontend/Installation","path":"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Command-Line-Interface","path":"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Configuration","path":"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/index","path":"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Installation","path":"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Auth/index","path":"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","path":"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Bank","path":"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","path":"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Custody/index","path":"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","path":"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Distributor/index","path":"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","path":"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Evidence/index","path":"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing","path":"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/index","path":"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","path":"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","path":"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","path":"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/index","path":"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","path":"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Polls","path":"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","path":"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","path":"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","path":"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Layer-2/index","path":"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","path":"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","path":"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/index","path":"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Params/index","path":"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","path":"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Recovery/index","path":"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","path":"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/index","path":"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","path":"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/index","path":"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","path":"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","path":"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/index","path":"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","path":"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","path":"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/index","path":"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","path":"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","path":"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","path":"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income","path":"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Upgrade/index","path":"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","path":"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/System-Requirements","path":"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","sidebar":"defaultSidebar"},{"id":"Stack/TORII--Bridge","path":"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","sidebar":"defaultSidebar"},{"id":"Tools/Bash-utils","path":"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","sidebar":"defaultSidebar"},{"id":"Tools/Cosign","path":"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","sidebar":"defaultSidebar"},{"id":"Wallet","path":"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs.kira.network/","label":"Overview"}}}}],"breadcrumbs":true},"testnet":{"path":"/docs.kira.network/testnet/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs.kira.network/testnet/","mainDocId":"Overview","docs":[{"id":"Active-Testnets/chaosnet-1","path":"/docs.kira.network/testnet/e031ab39-4738-4895-ab21-e27ebebfe9ac","sidebar":"defaultSidebar"},{"id":"BU-Setup","path":"/docs.kira.network/testnet/085fa60c-91e1-448a-a11d-44b5221332e0","sidebar":"defaultSidebar"},{"id":"COSIGN-Setup","path":"/docs.kira.network/testnet/442bf26d-c72a-4548-acf1-2cf9d3c8fa31","sidebar":"defaultSidebar"},{"id":"Evangelist","path":"/docs.kira.network/testnet/7445fb12-93e8-4539-bfb9-6a20a0156b20","sidebar":"defaultSidebar"},{"id":"Key-Management","path":"/docs.kira.network/testnet/775c220a-d41a-481c-9de9-febc1d08a17d","sidebar":"defaultSidebar"},{"id":"Overview","path":"/docs.kira.network/testnet/","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-1","path":"/docs.kira.network/testnet/58b6678b-62d7-42fc-9c34-cd5b23eeb4fa","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-2","path":"/docs.kira.network/testnet/ad9b9f6c-1852-4c12-ae5b-17b4f0ac6951","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-3","path":"/docs.kira.network/testnet/3e7816a0-1648-4ef9-ac9b-21b9aa0fffae","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-4","path":"/docs.kira.network/testnet/2318d048-5113-48d0-8ca6-3f5a775e83c8","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-5","path":"/docs.kira.network/testnet/ab0460ce-bf1f-4bca-b3a9-506f1b76ae99","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-6","path":"/docs.kira.network/testnet/5b45b575-7a7e-419f-94db-fbf90c944cce","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-7","path":"/docs.kira.network/testnet/a97e6ef7-36ec-4f79-94c1-33f8dcf0d766","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-8","path":"/docs.kira.network/testnet/484978b2-367f-444f-8622-677973bbc585","sidebar":"defaultSidebar"},{"id":"Testnet-History/testnet-9","path":"/docs.kira.network/testnet/6095fd88-0fde-43c9-ba84-2aee548a1d2f","sidebar":"defaultSidebar"},{"id":"Testnet-System-Requirements","path":"/docs.kira.network/testnet/3525f452-8421-48ce-aab6-10a2955a3e03","sidebar":"defaultSidebar"},{"id":"WSL2-Support","path":"/docs.kira.network/testnet/fc224b7a-3406-46db-ad7a-5c179d06703c","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs.kira.network/testnet/","label":"Overview"}}}}],"breadcrumbs":true},"docs":{"path":"/docs.kira.network/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs.kira.network/","mainDocId":"Overview","docs":[{"id":"Community","path":"/docs.kira.network/6196d806-d61d-4013-b317-d9f2f8f4008f","sidebar":"defaultSidebar"},{"id":"Overview","path":"/docs.kira.network/","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Command-Line-Interface","path":"/docs.kira.network/39242b54-c86a-4406-82f9-49cad4ed7c5a","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Endpoints","path":"/docs.kira.network/27ca73f9-ea33-4ca3-994a-cba651a2c896","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/index","path":"/docs.kira.network/be25ed12-b476-4a07-8966-9bc4062bd746","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/Installation","path":"/docs.kira.network/cf419aea-20dc-4421-951b-2579c3026e6b","sidebar":"defaultSidebar"},{"id":"Stack/INTERX--Middleware/System-Requirements","path":"/docs.kira.network/c65ccc87-599b-4ae3-9e7d-dfb95129fb77","sidebar":"defaultSidebar"},{"id":"Stack/MIRO--Frontend/index","path":"/docs.kira.network/b5d02b0a-e94b-4253-baf2-6f1a8c0040c9","sidebar":"defaultSidebar"},{"id":"Stack/MIRO--Frontend/Installation","path":"/docs.kira.network/f0dd6c48-d9bd-44d5-809c-b2f6069b1051","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Command-Line-Interface","path":"/docs.kira.network/d98b0e99-34c0-4267-a51a-0ec9dab606b9","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Configuration","path":"/docs.kira.network/b85c7808-d42e-474f-a9b6-0f87d1f59e25","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/index","path":"/docs.kira.network/27fe8d79-00c0-4e0b-872b-3d72a246c073","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Installation","path":"/docs.kira.network/a026f2da-ef09-4092-af96-aad8db6baf66","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Auth/index","path":"/docs.kira.network/cb04c86c-93bc-47bd-8a40-510e60bd7115","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Auth/Transaction-validation-&-processing","path":"/docs.kira.network/f7f02009-1f78-426b-8915-f503cdda9671","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Bank","path":"/docs.kira.network/04e8b755-d259-40f9-b66c-ddf5223c66fa","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/BaseApp/Keys-&-accounts","path":"/docs.kira.network/31613d97-abfb-4911-b17a-0c83cdba58a7","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Custody/index","path":"/docs.kira.network/0e1ccab2-5425-473e-be93-5b4a87de5d00","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Distributor/Fees-and-staking-rewards-distribution","path":"/docs.kira.network/85d4757d-f36d-4a39-b7ab-62866c1689ba","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Distributor/index","path":"/docs.kira.network/ba4d5a3e-3caa-431e-940e-87187fbc3bae","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Evidence/Evidence-module","path":"/docs.kira.network/bd4cce67-2cee-4d9f-9b81-e5643d130438","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Evidence/index","path":"/docs.kira.network/6a318dbd-2d44-4f1f-9729-5e608286289f","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/Fee-processing","path":"/docs.kira.network/184c11ed-4849-4ec5-acd0-f795b7abf467","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Fee-processing/index","path":"/docs.kira.network/d820877a-9fe7-424f-8866-8e822bf9ba84","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Councilors-&-governance-ranking","path":"/docs.kira.network/d6f8543a-3b76-44a8-8fab-eeafcef56c8e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Data-Registry","path":"/docs.kira.network/1a3a9dbd-3c24-454b-b353-ee6a1c2c7a5c","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Identity-Registrar","path":"/docs.kira.network/d482180d-165a-4c09-8c32-167f061ceb92","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/index","path":"/docs.kira.network/58e7de4a-1887-48be-b4d0-93c9f9ecb8ef","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Network-Properties","path":"/docs.kira.network/b9b95792-b936-4603-8a46-15566f24e3c0","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Polls","path":"/docs.kira.network/f5e18e49-927a-4a4f-ae70-bb9fc5606243","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Poor-Network-Conditions","path":"/docs.kira.network/65e3e6fe-040a-4716-b13b-9e27def6ff9d","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Proposals-&-governance-structure","path":"/docs.kira.network/25d26925-50ce-4a4f-836b-fc8486ef8b05","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Governance/Roles-&-Permissions","path":"/docs.kira.network/980ceb2f-9bc1-4133-aad0-bfb8a5c55536","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Layer-2/index","path":"/docs.kira.network/8aad2626-40b5-42d6-9504-0c1287216a73","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Consensus-nodes-&-staking-pools","path":"/docs.kira.network/4b7f76b2-83c1-4f7f-91cf-77f1105fbc6b","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/Delegators","path":"/docs.kira.network/94e4d0a6-8e45-469c-89a5-8ec65ca16381","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Multistaking/index","path":"/docs.kira.network/64eb7e84-ab20-454d-953f-57b1cf457790","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Params/index","path":"/docs.kira.network/2c0ff397-9a46-4ea5-9b70-92d67ae00aa4","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Params/Network-Parameter-Handling","path":"/docs.kira.network/e9523d9e-40b5-40ed-9773-7fc36af1cdcd","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Recovery/index","path":"/docs.kira.network/0b33153c-9b3e-410f-abd7-2877ccb870ce","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/Consensus-nodes-ranks-&-statuses","path":"/docs.kira.network/9f763be9-fbd3-452f-8c6e-6e418f34856f","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/index","path":"/docs.kira.network/4672bb94-ed2b-4e45-9d33-af999825c193","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Slashing/Jailing-&-slashing","path":"/docs.kira.network/d6fee8b3-1948-493e-bbdd-796bcc996c2b","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/index","path":"/docs.kira.network/9be59d47-9b80-48e6-b7d3-089e7b6fc8bf","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Spending-Pool/Spending-Pools","path":"/docs.kira.network/812fdf31-d225-4daf-a4cd-4501cbc00d95","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Staking-Collectives/index","path":"/docs.kira.network/3997e5c8-f744-4e83-9e22-f6845cc6c3ee","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/index","path":"/docs.kira.network/6c6d144f-f315-43f7-8fe7-289d98890a69","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Token-Basketing/Token-Basketing-Module","path":"/docs.kira.network/3aa15c97-02e9-4d62-a84a-cc99b8a90f86","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Governance-regulated-Foreign-Token-Transfers","path":"/docs.kira.network/34367cb0-ee71-418f-9dc5-bcc8823b71e5","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/index","path":"/docs.kira.network/b57b0d4e-7c38-4969-9654-d9193eb7fa19","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Aliases-Registrar","path":"/docs.kira.network/e163e1d7-f16e-4c0d-945c-db2efc13ea49","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Tokens-Module/Token-Rates-Registrar","path":"/docs.kira.network/f19a45b3-88c4-469c-8642-772b941a1b24","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/index","path":"/docs.kira.network/865cb42c-7ed4-4607-a446-c7ef3882056e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Universal-Basic-Income/Universal-Basic-Income","path":"/docs.kira.network/c8f1129d-1fa0-4f24-bc4d-b9fa32b28c0e","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Upgrade/index","path":"/docs.kira.network/dd144b3a-8f4e-45cb-8133-b6ccda5f7722","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/Modules/Upgrade/Upgrade-Module","path":"/docs.kira.network/b87fd14e-b3d8-4a25-b0d2-0cda6bdc6478","sidebar":"defaultSidebar"},{"id":"Stack/SEKAI--Backend/System-Requirements","path":"/docs.kira.network/d1a56903-4e24-47ce-b39f-f28be9123399","sidebar":"defaultSidebar"},{"id":"Stack/TORII--Bridge","path":"/docs.kira.network/d5d8036d-f978-4053-b7e8-57d9244c09e9","sidebar":"defaultSidebar"},{"id":"Tools/Bash-utils","path":"/docs.kira.network/c9443dd6-5f97-45fe-a3f1-48caa3bed0dc","sidebar":"defaultSidebar"},{"id":"Tools/Cosign","path":"/docs.kira.network/a2a22565-f7fd-46ca-9c91-d60101c3b2c7","sidebar":"defaultSidebar"},{"id":"Wallet","path":"/docs.kira.network/3bbb154b-e4f7-4444-b96b-04aa6a4ff5c5","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs.kira.network/","label":"Overview"}}}}],"breadcrumbs":true},"learn":{"path":"/docs.kira.network/learn/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs.kira.network/learn/","mainDocId":"What-is-KIRA/Overview","docs":[{"id":"Glossary","path":"/docs.kira.network/learn/22c36797-10c8-40e4-9457-d8f1b6b4563b","sidebar":"defaultSidebar"},{"id":"KIRA\u2019s-Economics/Initial-Liquidity-Offering","path":"/docs.kira.network/learn/a6a660a6-3e5c-4a53-9ec3-14aa07f00351","sidebar":"defaultSidebar"},{"id":"KIRA\u2019s-Economics/KEX-KIRA\u2019s-Native-Token","path":"/docs.kira.network/learn/39d6465e-61d4-4aff-868f-123b65c86326","sidebar":"defaultSidebar"},{"id":"KIRA\u2019s-Economics/Overview","path":"/docs.kira.network/learn/f591f6e3-56ba-4f56-ba96-b1eb35c9ed2c","sidebar":"defaultSidebar"},{"id":"KIRA\u2019s-Economics/Rewards-and-Incentives-Structure","path":"/docs.kira.network/learn/5b32eede-3889-4f8e-baf5-0f0dc9179a6b","sidebar":"defaultSidebar"},{"id":"KIRA\u2019s-Economics/Unified-Liquid-Staking","path":"/docs.kira.network/learn/492e443f-5703-4d95-8508-a101405efde3","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/-Frontend---MIRO","path":"/docs.kira.network/learn/b5188aa1-563f-45e3-906a-9d71b80bd47a","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Layer-2/Building-on-KIRA","path":"/docs.kira.network/learn/a113064a-eca8-4e1a-8f72-a3ac6fcb4f5f","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Layer-2/Overview","path":"/docs.kira.network/learn/9a5aaea6-1b50-41fe-9c54-cd035a26d0a5","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Layer-2/Virtual-Finality-Gadget","path":"/docs.kira.network/learn/bba461ae-7c67-4b66-8f1b-c51c887f2671","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Middleware---INTERX","path":"/docs.kira.network/learn/8a93bc9c-ce24-4129-96d5-9bbe381f6851","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Orchestrator---RYOKAI","path":"/docs.kira.network/learn/2ac3bfb7-478c-4207-a290-051d9fa6124f","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/Overview","path":"/docs.kira.network/learn/","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/SEKAI/Consensus","path":"/docs.kira.network/learn/cf661a9f-09e0-4bc3-8248-bf0e545f0418","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/SEKAI/Governance","path":"/docs.kira.network/learn/aa3b3aee-8e8d-4c5d-bb2c-3f4bf2462afa","sidebar":"defaultSidebar"},{"id":"What-is-KIRA/SEKAI/Overview","path":"/docs.kira.network/learn/bd45c7be-937d-4648-a162-5574b6a1c23e","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/docs.kira.network/learn/","label":"What-is-KIRA/Overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en-US","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.0.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.1"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.40.1"}}}');var c=n(5893);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function f(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(412),o=n(5742),i=n(8780),s=n(8862),l=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(p,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const f=e=>(0,l.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(405),a=n(5893);function o(e){return(0,a.jsx)(r.ql,{...e})}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(3727),o=n(8780),i=n(2263),s=n(3919),l=n(412),c=n(5893);const u=r.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:b,isActive:h,"data-noBrokenLinkCheck":m,autoAddBaseUrl:g=!0,...k}=e;const{siteConfig:{trailingSlash:y,baseUrl:v}}=(0,i.Z)(),{withBaseUrl:w}=(0,d.C)(),S=(0,r.useContext)(u),x=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>x.current));const E=f||p;const _=(0,s.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(A=C,g&&(e=>e.startsWith("/"))(A)?w(A):A):void 0;var A;T&&_&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:v}));const I=(0,r.useRef)(!1),P=n?a.OL:a.rU,R=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),j=()=>{I.current||null==T||(window.docusaurus.preload(T),I.current=!0)};(0,r.useEffect)((()=>(!R&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&L.current&&L.current.disconnect()})),[L,T,R,_]);const N=T?.startsWith("#")??!1,M=!T||!_||N;return M||m||S.collectLink(T),M?(0,c.jsx)("a",{ref:x,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...k}):(0,c.jsx)(P,{...k,onMouseEnter:j,onTouchStart:j,innerRef:e=>{x.current=e,R&&e&&_&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),L.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:b}})}const p=r.forwardRef(f)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7294),a=n(5893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>f,_r:()=>u,Jo:()=>m,zh:()=>d,yW:()=>b,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function b(e){const t=d(e);return s(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function m(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(4965),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(6905),a=n(5999),o=n(6668),i=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var l=n(5893);function c(e){let{as:t,id:n,...c}=e;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===t||!n)return(0,l.jsx)(t,{...c,id:void 0});const d=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,l.jsxs)(t,{...c,className:(0,r.Z)("anchor",u?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,l.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(5893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},8862:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Mt});var r=n(7294),a=n(6905),o=n(4763),i=n(1944),s=n(6550),l=n(5999),c=n(5936),u=n(5893);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const b=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??b,{containerRef:n,onClick:r}=p();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":b,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(5281),g=n(9727);const k={skipToContent:"skipToContent_fXgn"};function y(){return(0,u.jsx)(h,{className:k.skipToContent})}var v=n(6668),w=n(9689);function S(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const x={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",x.closeButton,e.className),children:(0,u.jsx)(S,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,v.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,v.L)(),{isActive:t,close:n}=(0,w.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),o&&(0,u.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var I=n(3163),P=n(2466);var R=n(902),L=n(3102);const j=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,I.e)(),t=(0,L.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,R.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(j.Provider,{value:n,children:t})}function M(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function O(){const e=(0,r.useContext)(j);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=O();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var B=n(2949),F=n(2389);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function K(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,F.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.Z)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,a.Z)($.toggleIcon,$.darkToggleIcon)})]})})}const q=r.memo(K),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Q(e){let{className:t}=e;const n=(0,v.L)().navbar.style,r=(0,v.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,B.I)();return r?null:(0,u.jsx)(q,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(1327);function W(){return(0,u.jsx)(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Z(){const e=(0,I.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(S,{color:"var(--ifm-color-emphasis-600)"})})}function V(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(W,{}),(0,u.jsx)(Q,{className:"margin-right--md"}),(0,u.jsx)(Z,{})]})}var X=n(9960),Y=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,Y.Z)(r),f=(0,Y.Z)(t),p=(0,Y.Z)(a,{forcePrependBaseUrl:!0}),b=o&&a&&!(0,J.Z)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,b&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(X.Z,{href:l?p:a,...c,...h}):(0,u.jsx)(X.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),se=n(8596),le=n(2263);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ge,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:b}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&b(!d)}),[c,d,b]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(Ge,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,u.jsx)(r,{...n})}var be=n(4711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_nlXk";var ge=n(1029),ke=n(6010),ye=n(373),ve=n(143),we=n(22),Se=n(8202),xe=n(3926),Ee=n(1073),_e=n(2539),Ce=n(726);const Te='',Ae='',Ie='',Pe='',Re='',Le='',je='',Ne={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Me(e){let{document:t,type:n,page:r,metadata:a,tokens:o,isInterOfTree:i,isLastOfTree:s}=e;const l=0===n,c=1===n,u=[];i?u.push(Le):s&&u.push(je);const d=u.map((e=>`${e}`)),f=`${l?Te:c?Ae:Ie}`,p=[`${(0,Ce.o)(t.t,(0,Ee.m)(a,"t"),o)}`];if(!i&&!s&&ge.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;p.push(`${(0,xe.e)(e??[])}`)}else l||p.push(`${(0,_e.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),o)}`);const b=`${Pe}`;return[...d,f,``,...p,"",b].join("")}function Oe(){return`${Re}${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}`}var De=n(311),Be=n(51);async function Fe(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const ze="_highlight";const Ue=function(e){let{handleSearchBarToggle:t}=e;const n=(0,F.Z)(),{siteConfig:{baseUrl:a},i18n:{currentLocale:o}}=(0,le.Z)(),i=(0,ve.gA)();let c=a;try{const{preferredVersion:e}=(0,ye.J)(i?.pluginId??ge.gQ);e&&!e.isLast&&(c=e.path+"/")}catch(D){if(ge.l9&&!(D instanceof R.i6))throw D}const d=(0,s.k6)(),f=(0,s.TH)(),p=(0,r.useRef)(null),b=(0,r.useRef)(new Map),h=(0,r.useRef)(!1),[m,g]=(0,r.useState)(!1),[k,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(""),S=(0,r.useRef)(null),x=(0,r.useRef)(""),[E,_]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ge.Kc))return;let e="";if(f.pathname.startsWith(c)){const t=f.pathname.substring(c.length);let n;for(const e of ge.Kc){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}x.current!==e&&(b.current.delete(e),x.current=e),_(e)}),[f.pathname,c]);const C=!!ge.hG&&Array.isArray(ge.Kc)&&""===E,T=(0,r.useCallback)((async()=>{if(C||b.current.get(E))return;b.current.set(E,"loading"),S.current?.autocomplete.destroy(),g(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,we.w)(c,E),Fe()]);if(S.current=n(p.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ke.Z)(Ne.searchBar,{[Ne.searchBarLeft]:"left"===ge.pu}),noPrefix:!0,dropdownMenu:Ne.dropdownMenu,input:Ne.input,hint:Ne.hint,suggestions:Ne.suggestions,suggestion:Ne.suggestion,cursor:Ne.cursor,dataset:Ne.dataset,empty:Ne.empty}},[{source:(0,Se.v)(e,t,ge.qo),templates:{suggestion:Me,empty:Oe,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!E||!ge.pQ))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),i=new URLSearchParams;let s;if(i.set("q",t),E){const e=E&&Array.isArray(ge.Kc)?ge.Kc.find((e=>"string"==typeof e?e===E:e.path===E)):E,t=e?(0,Be._)(e,o).label:E;s=ge.pQ&&n?(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:t}):(0,l.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:t})}else s=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!E||!Array.isArray(ge.Kc)||ge.pQ&&n||i.set("ctx",E),c!==a){if(!c.startsWith(a))throw new Error(`Version url '${c}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);i.set("version",c.substring(a.length))}const u=`${a}search?${i.toString()}`;return r.href=u,r.textContent=s,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),S.current?.autocomplete.close(),d.push(u))})),r})({query:t,isEmpty:n}),i=document.createElement("div");return i.className=Ne.hitFooter,i.appendChild(r),i}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:a}=t;p.current?.blur();let o=n;if(ge.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append(ze,t);o+=`?${e.toString()}`}r&&(o+=r),d.push(o)})).on("autocomplete:closed",(()=>{p.current?.blur()})),b.current.set(E,"done"),g(!1),h.current){const e=p.current;e.value&&S.current?.autocomplete.open(),e.focus()}}),[C,E,c,a,d]);(0,r.useEffect)((()=>{if(!ge.vc)return;const e=n?new URLSearchParams(f.search).getAll(ze):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.vc(t);n.unmark(),0!==e.length&&n.mark(e),w(e.join(" ")),S.current?.autocomplete.setVal(e.join(" "))}))}),[n,f.search,f.pathname]);const[A,I]=(0,r.useState)(!1),P=(0,r.useCallback)((()=>{h.current=!0,T(),I(!0),t?.(!0)}),[t,T]),L=(0,r.useCallback)((()=>{I(!1),t?.(!1)}),[t]),j=(0,r.useCallback)((()=>{T()}),[T]),N=(0,r.useCallback)((e=>{w(e.target.value),e.target.value&&y(!0)}),[]),M=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ge.AY)return;const e=e=>{!(M?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),p.current?.focus(),P())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[M,P]);const O=(0,r.useCallback)((()=>{const e=new URLSearchParams(f.search);e.delete(ze);const t=e.toString(),n=f.pathname+(""!=t?`?${t}`:"")+f.hash;n!=f.pathname+f.search+f.hash&&d.push(n),w(""),S.current?.autocomplete.setVal("")}),[f.pathname,f.search,f.hash,d]);return(0,u.jsxs)("div",{className:(0,ke.Z)("navbar__search",Ne.searchBarContainer,{[Ne.searchIndexLoading]:m&&k,[Ne.focused]:A}),hidden:C,children:[(0,u.jsx)("input",{placeholder:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:j,onFocus:P,onBlur:L,onChange:N,ref:p,value:v}),(0,u.jsx)(De.Z,{className:Ne.searchBarLoadingRing}),ge.AY&&ge.t_&&(""!==v?(0,u.jsx)("button",{className:Ne.searchClearButton,onClick:O,children:"\u2715"}):n&&(0,u.jsxs)("div",{className:Ne.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Ne.searchHint,children:M?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Ne.searchHint,children:"K"})]}))]})},$e={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ke(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.Z)(n,$e.navbarSearchContainer),children:t})}var qe=n(3438);const He=e=>e.docs.find((t=>t.id===e.mainDocId));const Qe={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),f=(0,be.l)(),{search:p,hash:b}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${b}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:me}),m]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Ke,{className:n,children:(0,u.jsx)(Ue,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ve.Iw)(r),i=(0,qe.vY)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ve.Iw)(r),i=(0,qe.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,qe.lO)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.TH)(),f=(0,ve.Iw)(n),p=(0,ve.gB)(n),{savePreferredVersionName:b}=(0,ye.J)(n),h=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??He(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>b(e.name)}})),...o],m=(0,qe.lO)(n)[0],g=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,k=t&&h.length>1?void 0:He(m).path;return h.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:g,to:k,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:g,to:k,items:h,isActive:r?()=>!1:void 0})}};function Ge(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Qe[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function We(){const e=(0,I.e)(),t=(0,v.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ge,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ze(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ve(){const e=0===(0,v.L)().navbar.items.length,t=O();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ze,{onClick:()=>t.hide()}),t.content]})}function Xe(){const e=(0,I.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(V,{}),primaryMenu:(0,u.jsx)(We,{}),secondaryMenu:(0,u.jsx)(Ve,{})}):null}const Ye={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Je(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function et(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,v.L)(),i=(0,I.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ye.navbarHideable,!d&&Ye.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Je,{onClick:i.toggle}),(0,u.jsx)(Xe,{})]})}var tt=n(8780);const nt={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function rt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function at(e){let{error:t}=e;const n=(0,tt.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:nt.errorBoundaryError,children:n})}class ot extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const it="right";function st(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function lt(){const{toggle:e,shown:t}=(0,I.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(st,{})})}const ct={colorModeToggle:"colorModeToggle_DEke"};function ut(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(ot,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ge,{...e})},t)))})}function dt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ft(){const e=(0,I.e)(),t=(0,v.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??it)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(dt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(lt,{}),(0,u.jsx)(W,{}),(0,u.jsx)(ut,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ut,{items:r}),(0,u.jsx)(Q,{className:ct.colorModeToggle}),!a&&(0,u.jsx)(Ke,{children:(0,u.jsx)(Ue,{})})]})})}function pt(){return(0,u.jsx)(et,{children:(0,u.jsx)(ft,{})})}function bt(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,Y.Z)(n),l=(0,Y.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function ht(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(bt,{item:t})},t.href??t.to)}function mt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ht,{item:e},t)))})]})}function gt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(mt,{column:e},t)))})}function kt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function yt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(bt,{item:t})}function vt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(yt,{item:e}),t.length!==n+1&&(0,u.jsx)(kt,{})]},n)))})})}function wt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(gt,{columns:t}):(0,u.jsx)(vt,{links:t})}var St=n(9965);const xt={footerLogoLink:"footerLogoLink_BH7S"};function Et(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Y.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(St.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function _t(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.Z,{href:t.href,className:xt.footerLogoLink,target:t.target,children:(0,u.jsx)(Et,{logo:t})}):(0,u.jsx)(Et,{logo:t})}function Ct(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Tt(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function At(){const{footer:e}=(0,v.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(Tt,{style:a,links:n&&n.length>0&&(0,u.jsx)(wt,{links:n}),logo:r&&(0,u.jsx)(_t,{logo:r}),copyright:t&&(0,u.jsx)(Ct,{copyright:t})})}const It=r.memo(At),Pt=(0,R.Qc)([B.S,w.pl,P.OC,ye.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(L.n2,{children:(0,u.jsx)(I.M,{children:(0,u.jsx)(N,{children:t})})})}]);function Rt(e){let{children:t}=e;return(0,u.jsx)(Pt,{children:t})}var Lt=n(2503);function jt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Lt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(rt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(at,{error:t})})]})})})}const Nt={mainWrapper:"mainWrapper_z2l0"};function Mt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,g.t)(),(0,u.jsxs)(Rt,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(y,{}),(0,u.jsx)(A,{}),(0,u.jsx)(pt,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Nt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:e=>(0,u.jsx)(jt,{...e}),children:t})}),!n&&(0,u.jsx)(It,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(9960),a=n(4996),o=n(2263),i=n(6668),s=n(9965),l=n(5893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,a.Z)(s?.href||"/"),b=n?"":t,h=s?.alt??b;return(0,l.jsxs)(r.Z,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(5742),a=n(5893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),a=n(788),o=n(2389),i=n(2949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(5893);function c(e){let{className:t,children:n}=e;const c=(0,o.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>g});var r=n(7294),a=n(412),o=n(469),i=n(1442),s=n(5893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function b(e){if(!a.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:b(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(u.current,n),i?.(n))},className:l,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(h,{...n,collapsed:l}):null}function g(e){let{lazy:t,...n}=e;const r=t?m:h;return(0,s.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>b});var r=n(7294),a=n(2389),o=n(12),i=n(902),s=n(6668),l=n(5893);const c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),f=e=>c.set(String(e)),p=r.createContext(null);function b(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>m});var r=n(7294),a=n(412),o=n(902),i=n(12),s=n(6668),l=n(5893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,b=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),h=e=>{d.set(p(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(b(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>g});var r=n(7294),a=n(143),o=n(9935),i=n(6668),s=n(3438),l=n(902),c=n(12),u=n(5893);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const b=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,u.jsx)(b.Provider,{value:n,children:t})}function g(e){let{children:t}=e;return s.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function k(){const e=(0,r.useContext)(b);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=k(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7294),a=n(902),o=n(5893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(7294),a=n(902),o=n(5893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),s=n(6668),l=n(902),c=n(5893);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function f(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function p(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(7294),a=n(902),o=n(5893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?o.desktop:o.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{LM:()=>p,SN:()=>E,_F:()=>m,cE:()=>f,f:()=>k,lO:()=>w,oz:()=>S,s1:()=>v,vY:()=>x});var r=n(7294),a=n(6550),o=n(8790),i=n(143),s=n(373),l=n(4477),c=n(1116),u=n(7392),d=n(8596);const f=!!i._r;function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}const b=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),h=(e,t)=>e.some((e=>m(e,t)));function m(e,t){return"link"===e.type?b(e.href,t):"category"===e.type&&(b(e.href,t)||h(e.items,t))}function g(e,t){switch(e.type){case"category":return m(e,t)||e.items.some((e=>g(e,t)));case"link":return!e.unlisted||m(e,t);default:return!0}}function k(e,t){return(0,r.useMemo)((()=>e.filter((e=>g(e,t)))),[e,t])}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function v(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function S(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,a.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.H)(i),sidebarName:c,sidebarItems:u}}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>i,_X:()=>s});var r=n(7294),a=n(6550),o=n(902);function i(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>b});var r=n(7294),a=n(788),o=n(5742),i=n(226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);var u=n(5893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),f=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),s=(0,a.Z)(i,t);return(0,u.jsxs)(f.Provider,{value:s,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function b(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(7294),a=n(469),o=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>h,OC:()=>u,RF:()=>p,o5:()=>b});var r=n(7294),a=n(412),o=n(2389),i=n(469),s=n(902),l=n(5893);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const f=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(f()),o=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=f();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function b(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function h(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>c});var r=n(7294);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var r=n(6010);const a={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var o=n(5893);function i(e){let{className:t}=e;return(0,o.jsxs)("div",{className:(0,r.Z)(a.loadingRing,t),children:[(0,o.jsx)("div",{}),(0,o.jsx)("div",{}),(0,o.jsx)("div",{}),(0,o.jsx)("div",{})]})}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>s});var r=n(1336),a=n.n(r),o=n(1029);const i=new Map;function s(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${o.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:a().Index.load(r)}})),s=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(s)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>l});var r=n(1336),a=n.n(r);var o=n(1029);function i(e){return s(e).concat(s(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function s(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:a().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?a().Query.wildcard.TRAILING:a().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,s){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return a()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,o.dK);if(0===l.length)return void s([]);const c=function(e,t){const n=function(e,t){const n=[];return function e(r,a){if(0===r.length)return void n.push(a);const o=r[0];if(/\p{Unified_Ideograph}/u.test(o)){const n=function(e,t){const n=[];return function e(r,a){let o=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:a.missed,term:a.term.concat({value:s})};r.length>s.length?e(r.substr(s.length),t):n.push(t),i=!0}else for(let t=s.length-1;t>o;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){o=t;const s={missed:a.missed,term:a.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),s):n.push(s),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:a.missed+1,term:a.term}):a.term.length>0&&n.push(a))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(o,t);for(const t of n){const n=a.concat(...t);e(r.slice(1),n)}}else{const t=a.concat({value:o});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:a().Query.presence.REQUIRED,wildcard:a().Query.wildcard.LEADING|a().Query.wildcard.TRAILING})))}];for(const a of n)a[a.length-1].maybeTyping=!0;const r=[];for(const i of o.dK)if("en"===i)o._k||r.unshift(a().stopWordFilter);else{const e=a()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let s;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);s=[];const t=[];for(const r of n){const n=e(r);s.push(n),n.length0&&t.push(n)}n.push(...t)}else s=n.slice();const l=[];for(const a of s)if(a.length>2)for(let e=a.length-1;e>=0;e-=1)l.push(a.slice(0,e).concat(a.slice(e+1)));return i(n).concat(i(l))}(l,t),u=[];e:for(const{term:t,tokens:a}of c)for(const{documents:r,index:o,type:i}of e)if(u.push(...o.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!u.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-u.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:a,score:t.score}}))),u.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,a=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===a&&(a=n.index),r===a?0===t.type?-1:0===n.type?1:t.index-n.index:r-a}))}(u),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>a});var r=n(1690);function a(e,t,n){const o=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&o.push(a(e.substr(0,n),t)),o.push(`${(0,r.X)(e.substr(n,i.length))}`);const s=n+i.length;s${(0,r.X)(e)}`:(0,r.X)(e):o.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),a=n(2539);const o=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const a=r.match(o);if(!a){t.push(r);break}a.index>0&&t.push(r.substring(0,a.index)),t.push(a[0]),n+=a.index+a[0].length,r=e.substring(n)}return t}var s=n(1029);function l(e,t,n,o){void 0===o&&(o=s.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const o=[];let s=0,l=0,c=-1;for(;sl){const t=i(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)o.push(e)}-1===c&&(c=o.length),l=u+d,o.push({html:(0,a.C)(e.substring(u,l),n,!0),textLength:d})}}if(l({html:(0,r.X)(e),textLength:e.length})));for(const e of t)o.push(e)}return{chunkIndex:c,chunks:o}}(e,t,n),u=c.slice(0,l),d=c[l],f=[d.html],p=c.slice(l+1);let b=d.textLength,h=0,m=0,g=!1,k=!1;for(;b0){const e=u.pop();b+e.textLength<=o?(f.unshift(e.html),h+=e.textLength,b+=e.textLength):(g=!0,u.length=0)}else{if(!(p.length>0))break;{const e=p.shift();b+e.textLength<=o?(f.push(e.html),m+=e.textLength,b+=e.textLength):(k=!0,p.length=0)}}return(g||u.length>0)&&f.unshift("\u2026"),(k||p.length>0)&&f.push("\u2026"),f.join("")}},51:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{_:()=>r})},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>o,gQ:()=>p,H6:()=>c,hG:()=>m,l9:()=>b,dK:()=>r,_k:()=>a,pu:()=>f,AY:()=>u,t_:()=>d,Kc:()=>h,J:()=>i,Hk:()=>l,qo:()=>s,pQ:()=>g});n(1336);const r=["en"],a=!1,o=null,i="search-index{dir}.json",s=8,l=50,c=!1,u=!0,d=!0,f="right",p=void 0,b=!0,h=null,m=!1,g=!1},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>v,q_:()=>C,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var b=i.join("/");return n&&"/"!==b.substr(-1)&&(b+="/"),b};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),v.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(v.entries[v.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=v.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,b=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(b){var a=p(n);a&&a!==b&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),m=0;m{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,a;!function(){var o,i,s,l,c,u,d,f,p,b,h,m,g,k,y,v,w,S,x,E,_,C,T,A,I,P,R,L,j,N,M=function(e){var t=new M.Builder;return t.pipeline.add(M.trimmer,M.stopWordFilter,M.stemmer),t.searchPipeline.add(M.stemmer),e.call(t,t),t.build()};M.version="2.3.9",M.utils={},M.utils.warn=(o=this,function(e){o.console&&console.warn&&console.warn(e)}),M.utils.asString=function(e){return null==e?"":e.toString()},M.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var l=M.utils.clone(t)||{};l.position=[i,s],l.index=a.length,a.push(new M.Token(n.slice(i,o),l))}i=o+1}}return a},M.tokenizer.separator=/[\s\-]+/,M.Pipeline=function(){this._stack=[]},M.Pipeline.registeredFunctions=Object.create(null),M.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&M.utils.warn("Overwriting existing registered function: "+t),e.label=t,M.Pipeline.registeredFunctions[e.label]=e},M.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||M.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},M.Pipeline.load=function(e){var t=new M.Pipeline;return e.forEach((function(e){var n=M.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},M.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){M.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},M.Pipeline.prototype.after=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},M.Pipeline.prototype.before=function(e,t){M.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},M.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},M.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(oe&&(n=a),o!=e);)r=n-t,a=t+Math.floor(r/2),o=this.elements[2*a];return o==e||o>e?2*a:os?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},M.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},M.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var o,i=a.str.charAt(0);i in a.node.edges?o=a.node.edges[i]:(o=new M.TokenSet,a.node.edges[i]=o),1==a.str.length&&(o.final=!0),r.push({node:o,editsRemaining:a.editsRemaining,str:a.str.slice(1)})}if(0!=a.editsRemaining){if("*"in a.node.edges)var s=a.node.edges["*"];else{s=new M.TokenSet;a.node.edges["*"]=s}if(0==a.str.length&&(s.final=!0),r.push({node:s,editsRemaining:a.editsRemaining-1,str:a.str}),a.str.length>1&&r.push({node:a.node,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)}),1==a.str.length&&(a.node.final=!0),a.str.length>=1){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new M.TokenSet;a.node.edges["*"]=l}1==a.str.length&&(l.final=!0),r.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.str.length>1){var c,u=a.str.charAt(0),d=a.str.charAt(1);d in a.node.edges?c=a.node.edges[d]:(c=new M.TokenSet,a.node.edges[d]=c),1==a.str.length&&(c.final=!0),r.push({node:c,editsRemaining:a.editsRemaining-1,str:u+a.str.slice(2)})}}}return n},M.TokenSet.fromString=function(e){for(var t=new M.TokenSet,n=t,r=0,a=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},M.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},M.Index.prototype.search=function(e){return this.query((function(t){new M.QueryParser(e,t).parse()}))},M.Index.prototype.query=function(e){for(var t=new M.Query(this.fields),n=Object.create(null),r=Object.create(null),a=Object.create(null),o=Object.create(null),i=Object.create(null),s=0;s1?1:e},M.Builder.prototype.k1=function(e){this._k1=e},M.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var a=0;a=this.length)return M.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},M.QueryLexer.prototype.width=function(){return this.pos-this.start},M.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},M.QueryLexer.prototype.backup=function(){this.pos-=1},M.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=M.QueryLexer.EOS&&this.backup()},M.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(M.QueryLexer.TERM)),e.ignore(),e.more())return M.QueryLexer.lexText},M.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.EDIT_DISTANCE),M.QueryLexer.lexText},M.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(M.QueryLexer.BOOST),M.QueryLexer.lexText},M.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(M.QueryLexer.TERM)},M.QueryLexer.termSeparator=M.tokenizer.separator,M.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==M.QueryLexer.EOS)return M.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return M.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(M.QueryLexer.TERM),M.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(M.QueryLexer.PRESENCE),M.QueryLexer.lexText;if(t.match(M.QueryLexer.termSeparator))return M.QueryLexer.lexTerm}else e.escapeCharacter()}},M.QueryParser=function(e,t){this.lexer=new M.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},M.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=M.QueryParser.parseClause;e;)e=e(this);return this.query},M.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},M.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},M.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},M.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case M.QueryLexer.PRESENCE:return M.QueryParser.parsePresence;case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new M.QueryParseError(n,t.start,t.end)}},M.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=M.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=M.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new M.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new M.QueryParseError(n,t.start,t.end)}switch(r.type){case M.QueryLexer.FIELD:return M.QueryParser.parseField;case M.QueryLexer.TERM:return M.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new M.QueryParseError(n,r.start,r.end)}}},M.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var a=e.peekLexeme();if(null==a){r="expecting term, found nothing";throw new M.QueryParseError(r,t.start,t.end)}if(a.type===M.QueryLexer.TERM)return M.QueryParser.parseTerm;r="expecting term, found '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}},M.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new M.QueryParseError(r,n.start,n.end)}else e.nextClause()}},M.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}else e.nextClause()}},M.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new M.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case M.QueryLexer.TERM:return e.nextClause(),M.QueryParser.parseTerm;case M.QueryLexer.FIELD:return e.nextClause(),M.QueryParser.parseField;case M.QueryLexer.EDIT_DISTANCE:return M.QueryParser.parseEditDistance;case M.QueryLexer.BOOST:return M.QueryParser.parseBoost;case M.QueryLexer.PRESENCE:return e.nextClause(),M.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new M.QueryParseError(r,a.start,a.end)}else e.nextClause()}},void 0===(a="function"==typeof(r=function(){return M})?r.call(t,n,t,e):r)||(e.exports=a)}()},3956:(e,t,n)=>{"use strict";n.r(t)},3068:(e,t,n)=>{"use strict";n.r(t)},2497:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),b=f.indexOf(p);if(b>-1){++a;var h=f.substring(0,b),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),g=f.substring(b+p.length),k=[];h&&k.push.apply(k,i([h])),k.push(m),g&&k.push.apply(k,i([g])),"string"==typeof c?s.splice.apply(s,[l,1].concat(k)):c.content=k}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in a(t,o),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(l),b=u;a(b);){for(var h in f={},b){var m=l[h];t(m&&m.modify,(function(e){e in d&&(f[e]=!0)}))}for(var g in d)if(!(g in u))for(var k in p(g))if(k in u){f[g]=!0;break}for(var y in b=f)u[y]=!0}var v={getIds:function(){var e=[];return v.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var f=i(u.map((function(e){var t=c(e);return delete l[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return s[e]=a}for(var u in n)c(u);var d=[];for(var f in l)d.push(s[f]);return i(d)}(p,u,t,n)}};return v}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n