arrow-left

All pages
gitbookPowered by GitBook
1 of 10

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

List of ADRs

This page lists the ADRs for cheqd-node that have been Accepted, Proposed, or in Draft stage.

hashtag
Accepted

  1. ADR 001: Payment mechanism for issuing credentials

hashtag
Proposed

hashtag
Draft

hashtag
Moved

The following ADRs have been moved to the cheqd identity documentation site

ADR 002: Importing/exporting mnemonic keys from Cosmos
ADR 003: Command Line Interface (CLI) tools
ADR 004: Token fractions
ADR 005: Genesis parameters
ADR 006: Community tax
ADR 007: Revocation registry
ADR 011: AnonCreds: Schemas and Credential Definitions
ADR 001: did:cheqd methodarrow-up-right
ADR 002: On-Ledger DID-Linked Resourcesarrow-up-right

ADR 002: Importing/exporting mnemonic keys from Cosmos

hashtag
Status

Category
Status

Authors

hashtag
Summary

This ADR describes how cheqd/Cosmos account keys can be imported/exported into identity wallet applications built on Evernym VDR Tools SDK.

hashtag
Context

Client SDK applications such as need to work with cheqd accounts in identity wallets to be able to interact with the cheqd network ledger.

For example, an identity wallet application or backend application would need to pay network transaction fees for writing . This may also need to be extended in the future to support .

hashtag
Assumptions / Considerations

Cosmos SDK uses . This can be replicated using standard crypto libraries to carry out the same steps as in Cosmos SDK:

The mnemonic above is assumed to be a pre-existing one . The "passphrase" above is user-defined, and defaults to blank if not defined.

hashtag
Decision

Mnemonic import/export can be achieved using pre-existing packages and .

Using these pre-existing libraries, cheqd accounts can be recovered using the standard for Cosmos SDK chains described below:

hashtag
Consequences

Functionality will be added to VDR Tools SDK to import/export cheqd accounts using mnemonics paired with the --recover flag as done with Cosmos wallets.

hashtag
Backwards Compatibility

Not applicable, since this is an entirely new feature in VDR Tools SDK for integration with the new blockchain framework.

hashtag
Positive

  • Adding/recovering cheqd accounts in VDR Tools SDK will follow a similar, familiar process that users have for Cosmos wallets.

hashtag
Negative

N/A

hashtag
Neutral

N/A

hashtag
References

Andrew Nikitn, Ankur Banerjee

ADR Stage

ACCEPTED

Implementation Status

Implemented

Start Date

2021-09-23

Evernym VDR Toolsarrow-up-right
cheqd DIDs to the ledgerarrow-up-right
peer-to-peer payments for credential exchange
known algorithms for deriving private keys from mnemonicsarrow-up-right
cheqd/Cosmos CLI
BIP39arrow-up-right
Cosmos SDK's Rust library cosmrsarrow-up-right
BIP44 HDPatharrow-up-right
Cosmos SDK account generation and keyringsarrow-up-right
rounds of iteration :    2048
length              :    64
algorithm           :    sha512
salt                :    "mnemonic" + passphrase
"m/44'/118'/0'/0/0"

ADR 004: Token fractions

This is the suggested template to be used for ADRs on the cheqd-node project.

hashtag
Status

Category
Status

Authors

hashtag
Summary

The aim of this ADR is to define the smallest fraction for CHEQ tokens.

hashtag
Context

Cosmos SDK doesn't provide native support for token fractions. The lowest denomination out-of-the-box that can be used in transactions is 1token.

To address this issue, similar Cosmos networks assume that they use N digits after the decimal point and multiply all values by 10^(-N) in UI.

hashtag
Examples of lowest token denominations in Cosmos

Popular Cosmos networks were compared to check how many digits after the decimal point are used by them:

  • Cosmos: 6

  • IRIS: 6

  • Fetch.ai: 18

hashtag
Decision

Fractions of CHEQ tokens will be referred by their , based on the power of 10 of CHEQ tokens being referred to in context. This notation system is common across other Cosmos networks as well.

It was decided to go with 10^-9 as the smallest fraction, with the whole number token being 1 CHEQ. Based on the SI prefix system, the lowest denomination would therefore be called "nanocheq".

hashtag
Consequences

hashtag
Backward Compatibility

  • There is no backward compatibility. To adjust the number of digits after the decimal point (lowest token denomination), the network should be restarted.

hashtag
Positive

  • The power of 10 chosen for the lowest denomination of CHEQ tokens is more precise than for Cosmos ATOMs, which allows transactions to be defined in smaller units.

hashtag
Negative

  • This decision is hard to change in the future, as changes to denominations require significant disruption when a network is already up and running.

hashtag
Neutral

  • N/A

hashtag
References

ADR Template

This is the suggested template to be used for ADRs on the cheqd-node project.

hashtag
Status

Category
Status
Binance: 8

Alexandr Kolesov

ADR Stage

ACCEPTED

Implementation Status

Implemented

Start Date

2021-09-08

SI/metric prefixarrow-up-right
Cosmos ADR proposal to add coin metadataarrow-up-right

ADR Stage

{DRAFT | PROPOSED | ACCEPTED | REJECTED | SUPERSEDED by ADR-xxx | ABANDONED}

Implementation Status

{Implemented | In Progress | Not Implemented}

Start Date

{yyyy-mm-dd}

Last Updated

{yyyy-mm-dd}

What is the status, such as proposed, accepted, rejected, deprecated, superseded, etc.?

hashtag
Summary

A short (~100 word) description of the issue being addressed. "If you can't explain it simply, you don't understand it well enough." Provide a simplified and layman-accessible explanation of the ADR.

hashtag
Context

This section describes the forces at play, such as business, technological, social, and project local. These forces are probably in tension, and should be called out as such. The language in this section is value-neutral. It is simply describing facts. It should clearly explain the problem and motivation that the proposal aims to resolve.

hashtag
ADR-specific Details

This section describes the implementation and/or architecture approach for the proposed changes in detail.

hashtag
Consequences

This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future.

hashtag
Backwards Compatibility

All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright.

hashtag
Positive

{positive consequences}

hashtag
Negative

{negative consequences}

hashtag
Neutral

{neutral consequences}

hashtag
References

  • {reference link}

hashtag
Unresolved questions

{list of questions or action items}

Authors

{Author or list of authors}

ADR 006: Community tax

This is the suggested template to be used for ADRs on the cheqd-node project.

hashtag
Status

Category
Status

Authors

hashtag
Summary

The aim of this ADR is to define how will work on cheqd network.

hashtag
Context

hashtag
What is "community tax"?

communityTax is a value set in genesis for each Cosmos network and defined as a percentage that is applied to the fees collected in each block.

Tokens collected through this process accumulate in the community pool. The percentage charged as communityTax can be changed by by the network.

hashtag
Community tax collection

From :

The community pool gets community_tax * fees, plus any remaining dust after validators get their rewards that are always rounded down to the nearest integer value.

hashtag
Community tax distribution

To spend tokens from the community pool:

  1. community-pool-spend proposal can be submitted on the network.

    1. Recipient address and amount of tokens should be specified.

    2. The purpose for which the requested community pools tokens will be spent should be described.

More information about fee distribution is available in the documentation.

hashtag
Decision

  • cheqd's network will keep the communityTax parameter enabled, i.e., non-zero.

  • The value of communityTax, based on a review of similar Cosmos networks will be set to 2%.

hashtag
Consequences

hashtag
Backward Compatibility

  • The behavior of communityTax is the across Cosmos SDK v0.42 and v0.43.

hashtag
Positive

  • The cheqd network will have a pool of tokens that can be used to spend on initiatives valued by the community.

hashtag
Negative

  • N/A

hashtag
Neutral

  • cheqd's Governance Framework should provide guidance on how to submit proposals and recommended areas of investment in community efforts.

hashtag
References

If proposal is approved using the voting process, the recipient address specified will receive the requested tokens.

  • The expectation on the recipient is that they spend the tokens for the purpose specified in their proposal.

  • Alexandr Kolesov

    ADR Stage

    ACCEPTED

    Implementation Status

    Implemented

    Start Date

    2021-09-08

    "community tax" as described in the Cosmos blockchain frameworkarrow-up-right
    making proposals on the network and voting for acceptancearrow-up-right
    Cosmos SDK documentation, distribution modulearrow-up-right
    End Block section of Cosmos's distribution modulearrow-up-right
    Cosmos SDK distribution module parametersarrow-up-right
    Cosmos SDK governance modulearrow-up-right
    communityFunding = feesCollectedDec * communityTax
    feePool.CommunityFund += communityFunding

    ADR 001: Payment mechanism for issuing credentials

    hashtag
    Status

    Category
    Status

    Authors

    hashtag
    Summary

    The protocol describes a payment mechanism that can used to pay for the issuance of credentials.

    It is necessary to establish which public APIs from Hyperledger Aries can be implemented in cheqd-node to provide an implementation of payments using CHEQ tokens using a well-understood SSI protocol.

    hashtag
    Decision

    Hyperledger Aries protocol has the concept of payment "decorators" ~payment_request and ~payment_receipt in requests, that can be used to pay using tokens for credential issuance.

    hashtag
    Step 1: Credential Offer

    A message is sent by the Issuer to the potential Holder, describing the credential they intend to offer and optionally, the price the issuer would be expected to be paid for said credential. This is based on the .

    A payment request can then be defined using the to add information about an issuing price and address where payment should be sent.

    • details.id field contains an invoice number that unambiguously identifies a credential for which payment is requested. When paying, this value should be placed in memo field for the cheqd payment transaction.

    • payeeId field contains a cheqd account address in the correct format for cheqd network.

    hashtag
    Step 2: Payment transaction flow

    The payment flow can be broken down into five steps:

    1. Build a request for transferring tokens. Example: cheqd_ledger::bank::build_msg_send(from_account, to_account, amount_for_transfer, denom)

      • from_account: The prospective credential holder's cheqd account address

    hashtag
    Response format

    Key fields in the response above are:

    • hash: Transaction hash

    • height: Ledger height

    hashtag
    Step 3: Credential Request

    This is a message sent by the potential Holder to the Issuer, to request the issuance of a credential after tokens are transferred to the nominated account using a Payment Transaction.

    request_id should be the same as details.id from Payment Request and memo from Payment Transaction.

    hashtag
    Step 4: Check payment_receipt

    Issuer receives Credential Request + payment_receipt with payment transaction_id. It allows the Issuer to:

    • Get the payment transaction by hash from cheqd network ledger using get_tx_by_hash(hash) method, where hash is transaction_id from previous steps.

    • Check that memo field from received transaction contains the correct request_id.

    hashtag
    Step 5: Credential issuing

    If steps 1-4 are successful, the Issuer is able to confirm that the requested payment has been made using CHEQ tokens. The credential issuing process can then proceed using standard Hyperledger Aries protocol procedures.

    hashtag
    Overview of steps 1-5

    REPLACE WITH PNG

    hashtag
    UML version

    Editable version available on or as text for compatible UML diagram generators below:

    hashtag
    Consequences

    hashtag
    Backward Compatibility

    • Credential issuance outside of the payment flow is compatible with and carried out using existing Hyperledger Aries protocol procedures. This should provide a level of compatibility with existing apps/SDKs that implement Aries protocol.

    • Defining the transaction in CHEQ tokens is specific to the cheqd network.

    hashtag
    Positive

    • By defining the payment mechanism using Hyperledger Aries protocols, this allows the possibility in the future to support payments on multiple networks.

    • Existing SSI app developers should already be familiar with Hyperledger Aries (if building on Hyperledger Indy) and provides a transition path to add new functionality.

    hashtag
    Negative

    • Hyperledger Aries may not be a familiar protocol for other Cosmos projects.

    • Using the Payment Decorator in practice means there could be interoperability challenges at in implementations that impact credential issuance and exchange.

    hashtag
    Neutral

    • N/A

    hashtag
    References

    ADR 007: Revocation registry

    hashtag
    Status

    Category
    Status

    Authors

    hashtag
    Summary

    Issued credentials need to be revocable by their issuers. Revocation needs to be straightforward and fast. Testing of revocation needs to preserve privacy (be non-correlating), and it should be possible to do without contacting the issuer.

    hashtag
    Context

    This has obvious use cases for professional credentials being revoked for fraud or misconduct, e.g., a driver’s license could be revoked for criminal activity. However, it’s also important if a credential gets issued in error (e.g., has a typo in it that misidentifies the subject). The latter case is important even for immutable and permanent credentials such as a birth certificate.

    In addition, it seems likely that the data inside credentials will change over time (e.g., a person’s mailing address or phone number updates). This is likely to be quite common, revocation can be used to guarantee currency of credential data when it happens. In other words, revocation may be used to force updated data, not just to revoke authorization.

    hashtag
    Decision

    hashtag
    REVOC_REG_DEF

    Adds a Revocation Registry Definition, that Issuer creates and publishes for a particular Credential Definition. It contains public keys, maximum number of credentials the registry may contain, reference to the Credential Definition, plus some revocation registry specific data.

    • value (dict):

      Dictionary with Revocation Registry Definition's data:

      • max_cred_num (integer): The maximum number of credentials the Revocation Registry can handle

    Note: REVOC_REG_DEF can be updated.

    hashtag
    State format

    (owner, cred_def_id, revoc_def_type, tag) -> {data, tx_hash, tx_timestamp }

    Request Example:

    Reply Example:

    hashtag
    REVOC_REG_ENTRY

    The Revocation Registry Entry contains the new accumulator value and issued/revoked indices. This is just a delta of indices, not the whole list. It can be sent each time a new credential is issued/revoked.

    • value (dict):

      Dictionary with revocation registry's data:

      • accum (string): The current accumulator value

    Note: REVOC_REG_ENTRY can be updated.

    hashtag
    State format

    1. MARKER_REVOC_REG_ENTRY_ACCUM:revoc_reg_def_id -> {data, tx_hash, tx_timestamp }

    2. MARKER_REVOC_REG_ENTRY:revoc_reg_def_id -> {data, tx_hash, tx_timestamp }

    Request Example:

    Reply Example:

    hashtag
    References

    to_account: Same as payeeId from the Payment Request
  • amount_for_transfer: Price of credential issuance defined as details.total.amount.value from the Payment Request

  • denom: Defined in details.total.amount.currency from the Payment Request

  • Build a transaction with the request from the previous step Example: cheqd_ledger::auth::build_tx(pool_alias, pub_key, builded_request, account_number, account_sequence, max_gas, max_coin_amount, denom, timeout_height, memo)

    • memo: This should be the same as details.id from the Payment Request

  • Sign the transaction Example:cheqd_keys::sign(wallet_handle, key_alias, tx).

  • Broadcast the signed transaction Example: cheqd_pool::broadcast_tx_commit(pool_alias, signed).

  • Ankur Banerjee

    ADR Stage

    PROPOSED

    Implementation Status

    Not Implemented

    Start Date

    2021-09-01

    Hyperledger Ariesarrow-up-right
    Hyperledger Aries credential offer RFCarrow-up-right
    Hyperledger Aries Payment Decoratorarrow-up-right
    swimlanes.ioarrow-up-right
    Hyperledger Aries RFC 0036: Issue Credential Protocol 1.0arrow-up-right
    Hyperledger Aries RFC 0075: Payment Decoratorsarrow-up-right
    Evernym VDR Tools cheqd network payments ADRarrow-up-right

    tails_hash (string): Tails file digest

  • tails_location (string): Tails file location (URL)

  • issuance_type (string enum): Defines credential revocation strategy. Can have the following values:

    • ISSUANCE_BY_DEFAULT: All credentials are assumed to be issued and active initially, so that Revocation Registry needs to be updated (REVOC_REG_ENTRY transaction sent) only when revoking. Revocation Registry stores only revoked credentials indices in this case. Recommended to use if expected number of revocation actions is less than expected number of issuance actions.

    • ISSUANCE_ON_DEMAND: No credentials are issued initially, so that Revocation Registry needs to be updated (REVOC_REG_ENTRY transaction sent) on every issuance and revocation. Revocation Registry stores only issued credentials indices in this case. Recommended to use if expected number of issuance actions is less than expected number of revocation actions.

  • public_keys (dict): Revocation Registry's public key

  • id (string): Revocation Registry Definition's unique identifier (a key from state trie is currently used) owner:cred_def_id:revoc_def_type:tag

  • cred_def_id (string): The corresponding Credential Definition's unique identifier (a key from state tree is currently used)

  • revoc_def_type (string enum): Revocation Type. CL_ACCUM (Camenisch-Lysyanskaya Accumulator) is the only supported type now.

  • tag (string): A unique tag to have multiple Revocation Registry Definitions for the same Credential Definition and type issued by the same DID.

  • prev_accum (string): The previous accumulator value. It is compared with the current value, and transaction is rejected if they don't match. This is necessary to avoid dirty writes and updates of accumulator.

  • issued (list of integers): An array of issued indices (may be absent/empty if the type is ISSUANCE_BY_DEFAULT). This is delta, and will be accumulated in state.

  • revoked (list of integers): An array of revoked indices. This is delta; will be accumulated in state)

  • revoc_reg_def_id (string): The corresponding Revocation Registry Definition's unique identifier (a key from state trie is currently used)

  • revoc_def_type (string enum): Revocation Type. CL_ACCUM (Camenisch-Lysyanskaya Accumulator) is the only supported type now.

  • Renata Toktar

    ADR Stage

    DRAFT

    Implementation Status

    Not Implemented

    Start Date

    2021-09-10

    Hyperledger Indy Credential Revocation Hypearrow-up-right
        "@type": "https://didcomm.org/issue-credential/1.0/offer-credential",
        "@id": "<uuid-of-offer-message>",
        "comment": "some comment",
        "credential_preview": <json-ld object>,
        "offers~attach": [
                            {
                                "@id": "libindy-cred-offer-0",
                                "mime-type": "application/json",
                                "data": {
                                            "base64": "<bytes for base64>"
                                        }
                            }
                        ]
        "~payment_request": { ... }
    }
       "~payment_request": {
            "methodData": [
              {
                "supportedMethods": "cheqd",
                "data": {
                  "payeeId": "cheqd1fknpjldck6n3v2wu86arpz8xjnfc60f99ylcjd"
                },
              }
            ],
            "details": {
              "id": "0a2bc4a6-1f45-4ff0-a046-703c71ab845d",
              "displayItems": [
                {
                  "label": "commercial driver's license",
                  "amount": { "currency": "ncheq", "value": "1000" },
                }
              ],
              "total": {
                "label": "Total due",
                "amount": { "currency": "ncheq", "value": "1000" }
              }
            }
          }
      Response {
       check_tx: TxResult {
          code: 0,
          data: None,
          log: "",
          info: "",
          gas_wanted: 0,
          gas_used: 0,
          events: [
          ],
          codespace: ""
       },
       deliver_tx: TxResult {
          code: 0,
          data: Some(Data([...])),
          log: "[{\"events\":[{\"type\":\"message\",\"attributes\":[{\"key\":\"action\",\"value\":\"send\"},{\"key\":\"sender\",\"value\":\"cheqd1fknpjldck6n3v2wu86arpz8xjnfc60f99ylcjd\"},{\"key\":\"module\",\"value\":\"bank\"}]},{\"type\":\"transfer\",\"attributes\":[{\"key\":\"recipient\",\"value\":\"cheqd1pvnjjy3vz0ga6hexv32gdxydzxth7f86mekcpg\"},{\"key\":\"sender\",\"value\":\"cheqd1fknpjldck6n3v2wu86arpz8xjnfc60f99ylcjd\"},{\"key\":\"amount\",\"value\":\"1000ncheq\"}]}]}]",
          info: "",
          gas_wanted: 0,
          gas_used: 0,
          events: [...], 
          codespace: ""
       },
       hash: "1B3B00849B4D50E8FCCF50193E35FD6CA5FD4686ED6AD8F847AC8C5E466CFD3E",
       height: 353
    }
    {
        "@type": "https://didcomm.org/issue_credential/1.0/request_credential",
        "@id": "94af9be9-5248-4a65-ad14-3e7a6c3489b6",
        "~thread": { "this": "5bc1989d-f5c1-4eb1-89dd-21fd47093d96" },
        "cred_def_id": "KTwaKJkvyjKKf55uc6U8ZB:3:CL:59:tag1",
        "~payment_receipt": {
          "request_id": "0a2bc4a6-1f45-4ff0-a046-703c71ab845d",
          "selected_method": "cheqd",
          "transaction_id": "1B3B00849B4D50E8FCCF50193E35FD6CA5FD4686ED6AD8F847AC8C5E466CFD3E",
          "payeeId": "0xD15239C7e7dDd46575DaD9134a1bae81068AB2A4",
          "amount": { "currency": "ncheq", "value": "1000.0" }
        }
    }
    Issuer -> Holder: Credential Offer (+ payment_request)
    Holder -> Ledger: payment transaction (with payment_request id in memo)
    Ledger -> Holder: payment transaction response (with transaction_hash)
    Holder -> Issuer: Credential Request (+ payment_receipt)
    Issuer -> Ledger: Get payment transaction by hash
    Ledger -> Issuer: Payment transaction
    Issuer -> Issuer: Check `memo` field from received transaction
    Issuer -> Holder: Credential
    Holder -> Issuer: Accept
    {
        "data": {
            "id": "L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1",
            "cred_def_id": "FC4aWomrA13YyvYC1Mxw7:CL:5ZTp9g4SP6t73rH2s8z:some_tag"
            "revoc_def_type": "CL_ACCUM",
            "tag": "tag1",
            "value": {
                "max_cred_num": 1000000,
                "tails_hash": "6619ad3cf7e02fc29931a5cdc7bb70ba4b9283bda3badae297",
                "tails_location": "http://tails.location.com",
                "issuance_type": "ISSUANCE_BY_DEFAULT",
                "public_keys": {},
            },
        },
    
        "owner": "L5AD5g65TDQr1PPHHRoiGf",
        "signature": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS",
        "metadata": {}
    }
    {}
    {
        "data": {
                "revoc_reg_def_id": "L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1"
                "revoc_def_type": "CL_ACCUM",
                "value": {
                    "accum": "accum_value",
                    "prev_accum": "prev_acuum_value",
                    "issued": [],
                    "revoked": [10, 36, 3478],
                },
        },
        "owner": "L5AD5g65TDQr1PPHHRoiGf",
        "signature": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS",
        "metadata": {}
    }
    {}

    ADR 003: Command Line Interface (CLI) tools

    hashtag
    Status

    Category
    Status

    ADR Stage

    ACCEPTED

    Implementation Status

    Implemented

    Start Date

    2021-09-10

    hashtag
    Summary

    Due to the nature of the cheqd project merging concepts from the Cosmos blockchain frameworkarrow-up-right and self-sovereign identity (SSI), there are two potential options for creating Command Line Interface (CLI) tools for developers to use:

    1. Cosmos-based CLI: Most likely route for Cosmos projects for their node application. Most existing Cosmos node validators will be familiar with this method of managing their node.

    2. VDR CLI: Traditionally, a lot of SSI networks have used Hyperledger Indyarrow-up-right and therefore the Indy CLI tool for managing and interacting with the ledger. This has now been renamed to Verifiable Data Registry (VDR) Tools CLIarrow-up-right and is the tool that most existing SSI node operators ("stewards") would be familiar with.

    Ideally, the cheqd-node project would provide a consistent set of CLI tools rather than two separate tools with varying feature sets between them.

    This ADR will focus on the CLI tool architecture choice for cheqd-node.

    hashtag
    Context

    hashtag
    Assumptions / Considerations

    hashtag
    Likelihood of introducing bugs or security vulnerabilities

    1. Any CLI tool architecture chosen should not increase the likelihood of introducing bugs, security vulnerabilities, or design pattern deviations from upstream Cosmos SDK.

    2. Actions that are carried out on ledger through a CLI tool in cheqd-node now include token functionality as well as identity functionality. E.g., if a DID gets compromised, there could be mechanisms to recover or signal that fact to issuers/verifiers. If tokens or the staking balance of node operators get compromised, this may potentially have more severe consequences for them.

    hashtag
    User / Node Operator preferences

    1. Would node operators want a single CLI to manage everything?

      1. This might be the case with node operators from an SSI / digital identity background, or node operators familiar with Hyperledger Indy CLI / VDR Tools CLI.

      2. A “single CLI” could be a single tool as far as the user sees, but actually consist of multiple modules beneath it in how it’s implemented.

    2. Would node operators be okay with having two separate CLIs?

      1. One for Cosmos-ledger functions, and one for identity-specific functions.

      2. Unlike existing Hyperledger Indy networks, it is anticipated that some of the node operators on the cheqd network will have experience running Cosmos validator nodes. For this group, having to learn a new “single” CLI tool could cause a steeper learning curve and a worse user experience than what they have now.

    hashtag
    Options considered

    hashtag
    1. Keep both Cosmos CLI and VDR Tools CLI, but use them for different purposes

    Pros:

    • Simple to do, no changes needed in code developed.

    • Differences in functionality between the two CLIs can be explained in documentation.

    • Node operators with good technical skills will understand the difference.

    • Cosmos CLI design patterns would be consistent the wider Cosmos open source ecosystem.

    • No steep learning curve for potential node operators who only want to run a node, without implementing SSI functionality in apps.

    Cons:

    • Key storage for Cosmos accounts may need to be done in two different keystores.

    • Potentially confusing for node operators who use both CLIs to know which one to use for what purpose.

    • Potentially a steeper learning curve for existing SSI node operators.

    hashtag
    2. Implement overlapping functionality in both CLI tools

    Pros:

    • Both Cosmos CLI and VDR Tools CLI would have native support for identity as well as token transactions.

    • Node operators/developers could pick their preferred CLI tool.

    Cons:

    • Significant development effort required to implement very similar functionality two separate times, with little difference to the end user in actions that can be executed.

    • VDR Tools CLI has DID / VC modules that would take significant effort to recreate in Cosmos CLI

    • Cosmos CLI has token related functionality that would take significant development effort to replicate in VDR Tools CLI, and opens up the possibility that errors in implementation could introduce security vulnerabilities.

    hashtag
    3. Create aliases for commands in one of the CLI tools in the other CLI tool

    Commands in the Cosmos CLI could be made available as aliases in the VDR Tools CLI, or vice versa.

    Pros:

    • Single CLI tool to learn and understand for node operators.

    • Development effort is simplified, as overlapping functionality is not implemented in two separate tools.

    Cons:

    • Less development effort required than Option 2, but greater than Option 1.

    • Opens up the possibility that there's deviation in feature coverage between the two CLIs if aliases are not created to make 1:1 feature parity in both tools.

    hashtag
    Decision

    Based on the options considerations above and an analysis of development required, the decision was taken to maintain two separate CLI tools:

    1. cheqd-node Cosmos CLI: Any Cosmos-specific features, such as network & node management, token functionality required by node operators, etc.

    2. VDR Tools CLI: Any identity-specific features required by issuers, verifiers, holders on SSI networks.

    hashtag
    CLI tools feature matrix

    Only available in Cosmos CLI
    In both Cosmos CLI and VDR CLI
    Only available in VDR CLI

    Cosmos transactions + Queries

    Signing service + Key storage

    Identity transactions + Queries

    MultiSig

    (Transaction + Query) sending + Proof validation

    hashtag
    CLI components overview

    Editable versions of the diagramsarrow-up-right (in Excalidraw format)

    hashtag
    Consequences

    hashtag
    Positive

    • Faster time-to-market on the CLI tools, while freeing up time to build out user-facing functionality.

    hashtag
    Negative

    • Cosmos account keys may need to be replicated in two separate key storages. A potential resolution for this in the future is to integrate the ability to use a single keyring for both CLI tools.

    hashtag
    Neutral

    • Seek feedback from cheqd's open source community and node operators during testnet phase on whether the documentation and user experience is easy to understand and appropriate tools are available.

    hashtag
    References

    Authors

    Alexandr Kolesov

    Node operators may want one/separate CLIs for security and operational reasons, i.e., for a separation of concerns in terms of functionality.

    DIDs + VCs (+ DID storage)

    Network bootstrapping commands

    ADR 011: AnonCreds

    hashtag
    Status

    Category
    Status

    Authors

    hashtag
    Summary

    This ADR will define how Verifiable Credential schemas can be represented through the use of a DID URL, which when dereferenced, fetches the credential schemas a resource. The identity entities and transactions for the cheqd network are designed to support usage scenarios and functionality currently supported by .

    hashtag
    Context

    Hyperledger Indy is a verifiable data registry (VDR) built for DIDs with a strong focus on privacy-preserving techniques. It is one of the most widely-adopted SSI blockchain ledgers. Most notably, Indy is used by the .

    hashtag
    Identity-domain transaction types in Hyperledger Indy

    Our aim is to support the functionality enabled by into cheqd-node. This will partly enable the goal of allowing use cases of existing SSI networks on Hyperledger Indy to be supported by the cheqd network.

    The following identity-domain transactions from Indy were considered:

    1. NYM: Equivalent to "DIDs" on other networks

    2. ATTRIB: Payload for DID Document generation

    3. SCHEMA: Schema used by a credential

    Revocation registries for credentials are not covered under the scope of this ADR. This topic is discussed separately in as there is ongoing research by the cheqd project on how to improve the privacy and scalability of credential revocations.

    hashtag
    Decision

    hashtag
    CL Schema

    CL-Schema resource can be created via CreateResource transaction with the follow list of parameters:

    MsgCreateResource:

    • Collection ID: UUID âžť (did:cheqd:...:) âžť Parent DID identifier without a prefix

    • ID: UUID âžť specific to resource, also effectively a version number (supplied client-side)

    • Name: String (e.g., CL-Schema1 ) âžť Schema name

    CLI Example:

    hashtag
    Credential Definition

    [TODO: explain that a Cred Def is simply an additional property inside of the Issuer's DID Doc]

    Adds a Credential Definition (in particular, public key), which is created by an Issuer and published for a particular Credential Schema.

    It is not possible to update Credential Definitions. If a Credential Definition needs to be evolved (for example, a key needs to be rotated), then a new Credential Definition needs to be created for a new Issuer DIDdoc. Credential Definitions is added to the ledger in as verification method for Issuer DIDDoc

    • id: DID as base58-encoded string for 16 or 32 byte DID value with Cheqd DID Method prefix did:cheqd:<namespace>: and a resource type at the end.

    • value (dict): Dictionary with Credential Definition's data if signature_type is CL:

    CRED_DEF entity transaction format:

    Don't store Schema DIDDoc in the State.

    CredDef URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue

    CredDef Entity URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue?service=CL-CredDef

    CRED_DEF DID Document transaction format:

    CRED_DEF state format:

    "credDef:<id>" -> {CredDefEntity, txHash, txTimestamp}

    Note: CRED_DEF cannot be updated.

    hashtag
    Rationale and Alternatives

    hashtag
    Schema options not used

    Schema. Option 2

    Schema URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue#<schema_entity_id>

    SCHEMA DID Document transaction format:

    Schema. Option 3

    Schema URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue

    SCHEMA DID Document transaction format:

    Schema. Option 4

    Schema URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue#<schema_entity_id>

    SCHEMA DID Document transaction format:

    SCHEMA State format:

    • "schema:<id>" -> {SchemaEntity, txHash, txTimestamp}

    id example: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue

    hashtag
    Cred Def options not used

    Cred Def. Option 2

    Store inside Issuer DID Document

    CredDef URL: did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue#<cred_def_entity_id>

    CRED_DEF DID Document transaction format:

    CRED_DEF state format:

    Positive

    • Credential Definition is a set of Issuer keys. So storing them in Issuer's DIDDoc reasonable.

    Negative

    • Credential Definition name means that it contains more than just a key and value field provides this flexibility.

    • Adding all Cred Defs to Issuer's DIDDoc makes it too large. For every DIDDoc or Cred Def request a client will receive the whole list of Issuer's Cred Defs.

    • Impossible to put a few controllers for Cred Def.

    hashtag
    References

    • official project background on Hyperledger Foundation wiki

      • GitHub repository: Server-side blockchain node for Indy ()

      • GitHub repository: Plenum Byzantine Fault Tolerant consensus protocol; used by indy-node

  • CRED_DEF: Credential definition by an issuer for a particular schema

  • REVOC_REG_DEF: Credential revocation registry definition

  • REVOC_REG_ENTRY: Credential revocation registry entry

  • ResourceType âžť CL-Schema

  • MimeType âžť application/json

  • Data: Byte[] âžť JSON string with the follow structure:

    • attrNames: Array of attribute name strings (125 attributes maximum)

    {
      "attrNames": ["undergrad", "last_name", "first_name", "birth_date", "postgrad", "expiry_date"]
    }
  • primary (dict): Primary credential public key

  • revocation (dict, optional): Revocation credential public key

  • schemaId (string): id of a Schema the credential definition is created for.

  • signatureType (string): Type of the credential definition (that is credential signature). CL-Sig-Cred_def (Camenisch-Lysyanskaya) is the only supported type now. Other signature types are being explored for future releases.

  • tag (string, optional): A unique tag to have multiple public keys for the same Schema and type issued by the same DID. A default tag tag will be used if not specified.

  • controller: DIDs list of strings or only one string of a credential definition controller(s). All DIDs must exist.

  • In theory, we need to make Credential Definitions mutable.

    (
    )
  • Indy DID methodarrow-up-right (did:indy)

  • Indy identity-domain transactionsarrow-up-right

  • Hyperledger Ariesarrow-up-right official project background on Hyperledger Foundation wiki

    • ariesarrow-up-right GitHub repository: Provides links to implementations in various programming languages

    • aries-rfcsarrow-up-right GitHub repository: Contains Requests for Comment (RFCs) that define the Aries protocol behaviour

  • W3C Decentralized Identifiers (DIDs)arrow-up-right specification

    • DID Core Specification Test Suitearrow-up-right

  • Cosmos blockchain frameworkarrow-up-right official project website

    • cosmos-sdkarrow-up-right GitHub repository (documentationarrow-up-right)

  • Sovrin Foundationarrow-up-right

    • Sovrin Networksarrow-up-right

    • libsovtokenarrow-up-right: Sovrin Network token library

  • Renata Toktar, Alexander Kolesov, Ankur Banerjee

    ADR Stage

    DRAFT

    Implementation Status

    Draft

    Start Date

    2022-06-23

    cheqd-noded tx resource create-cl-schema <collection_id> <id> <name> <schema-data-json>
                                              --private-key <private-identity-key-by-collection-id-diddoc>
    
    cheqd-noded tx resource create-cl-schema zF7rhDBfUt9d1gJPjx7s1JXfUY7oVWkY\
                                             9cc97dc8-ab3a-4a2e-a18a-13f5a54e9096\
                                             CLSchema1\
                                             "{\"attrNames\":[\"last_name\", \"first_name\"]}"\
                                              --private-key <private-identity-key-by-collection-id-diddoc>
    
    {
        "id": "<cred_def_url>",
        "type": "CL-CredDef",
        "controller": "did:cheqd:mainnet-1:123456789abcdefghi",
        "schemaId": "did:cheqd:mainnet-1:5ZTp9g4SP6t73rH2s8zgmtqdXyT?service=CL-Schema",
        "tag": "some_tag",
        "value": {
          "primary": "...",
          "revocation": "..."
        }
    }
    {
      "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
      "controller": "did:cheqd:mainnet-1:IK22KY2Dyvmuu2PyyqSFKu", // CredDef Issuer DID
      "service":[
        {
          "id": "cheqd-cred-def",
          "type": "CL-CredDef",
          "serviceEndpoint": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue?service=CL-CredDef"
        }
      ]
    }
    {
      "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
      "schema":[
        {
          "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue#schema1",
          "type": "CL-Schema",
          "controller": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
          "value": {
                    "version": "1.0",
                    "name": "Degree",
                    "attrNames": ["undergrad", "last_name", "first_name", "birth_date", "postgrad", "expiry_date"]
                  },
        },
      ]
    }
    {
      "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
      "schema": {
                  "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
                  "type": "CL-Schema",
                  "controller": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
                  "value": {
                    "version": "1.0",
                    "name": "Degree",
                    "attrNames": ["undergrad", "last_name", "first_name", "birth_date", "postgrad", "expiry_date"]
                  },
                },
    }
    {
      "id": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue",
      "schema":[
                  {
                    "id": "cheqd-schema",
                    "type": "CL-Schema",
                    "schemaRef": "did:cheqd:mainnet-1:N22KY2Dyvmuu2PyyqSFKue?resource=true"
                  }
              ]
    }
    {
      "@context": [
        "https://www.w3.org/ns/did/v1",
        "https://w3id.org/security/suites/jws-2020/v1",
        "https://w3id.org/security/suites/ed25519-2020/v1"
      ],
      "verificationMethod": [
        {
          "id": "did:cheqd:mainnet-1:IK22KY2Dyvmuu2PyyqSFKu#creddef-1", // Cred Def ID
          "type": "CamLysCredDefJwk2021", // TODO: define and register this key type
          "controller": "did:cheqd:mainnet-1:IK22KY2Dyvmuu2PyyqSFKu"
          "publicKeyJwk":
          {
            [TODO: Define structure for CL JWK]
          }
        }
      ],
      "assertionMethod": [
        "#creddef-1"
      ]
    
    }
    Hyperledger Indyarrow-up-right
    Sovrin Networkarrow-up-right
    identity-domain transactions in by Hyperledger Indyarrow-up-right
    ADR 007: Revocation registry
    Hyperledger Indyarrow-up-right
    indy-nodearrow-up-right
    documentationarrow-up-right
    indy-plenumarrow-up-right
    documentationarrow-up-right
    Sovrin Ledger token pluginarrow-up-right

    ADR 005: Genesis parameters

    hashtag
    Status

    Category
    Status

    Authors

    hashtag
    Summary

    The aim of this document is to define the genesis parameters that will be used in cheqd network testnet and mainnet.

    Cosmos v0.44.3 parameters are described.

    hashtag
    Context

    Genesis consists of Tendermint consensus engine parameters and Cosmos app-specific parameters.

    hashtag
    Tendermint consensus parameters

    Tendermint requires to be defined for basic consensus conditions on any Cosmos network.

    hashtag
    Block parameters

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    Evidence parameters

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    Validator key parameters

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    Cosmos SDK module parameters

    Cosmos application is divided . Each module has parameters that help to adjust the module's behaviour.

    hashtag
    auth module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    bank module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    cheqd module (DID module)

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    crisis module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    distribution module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    gov module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    mint module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    resource module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    slashing module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    staking module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    ibc module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    ibc-transfer module

    Parameter
    Description
    Mainnet
    Testnet

    hashtag
    Decision

    The parameters above were agreed separate the cheqd mainnet and testnet parameters. We have bolded the testnet parameters that differ from mainnet.

    hashtag
    Consequences

    hashtag
    Backward Compatibility

    • The token denomination has been changed to make the smallest denomination 10^-9 CHEQ (= 1 ncheq) instead of 1 CHEQ. This is a breaking change from the earliest versions of the cheqd testnet that which required issuing new tokens to be transferred and issued to testnet node operators.

    hashtag
    Positive

    • Inflation allows fees to be collected from block rewards in addition to transaction fees.

    • In production/mainnet, parameters can only be changed via a majority vote without veto defeat according to the cheqd network governance principles. This allows for more democratic governance frameworks to be created for a self-sovereign identity network.

    hashtag
    Negative

    • Existing node operators will need to re-establish staking with new staking denomination and staking parameters.

    hashtag
    Neutral

    • Unbonding period, and deposit period have all been reduced to 2 weeks to balance the speed at which decisions can be reached vs giving enough time to validators to participate.

    hashtag
    References

    200,000 (~200 KB)

    time_iota_ms

    Unused. This has been deprecated and will be removed in a future version of Cosmos SDK.

    1,000 (1 second)

    1,000 (1 second)

    59,200,000,000,000 (expressed in nanoseconds, ~72 hours)

    max_bytes

    This sets the maximum size of total evidence in bytes that can be committed in a single block and should fall comfortably under max_bytes for a block.

    50,000 (~ 50 KB)

    5,000 (~ 5 KB)

    7

    tx_size_cost_per_byte

    Gas cost of transaction byte

    10

    10

    sig_verify_cost_ed25519

    Cost of ed25519 signature verification

    590

    590

    sig_verify_cost_secp256k1

    Cost of secp256k1 signature verification

    1,000

    1,000

    25,000,000,000 ncheq (25 CHEQ)

    deactivate_did

    The specified transaction fee for deactivating an existing Decentralized Identifier (DID) on the cheqd network

    10,000,000,000 ncheq (10 CHEQ)

    10,000,000,000 ncheq (10 CHEQ)

    burn_factor

    The percentage of the transaction fee for create_did, update_did or deactivate_did that is burnt, i.e., destroyed from the cheqd network

    50%

    50%

    0.01 (1%)

    bonus_proposer_reward

    Bonus reward that proposer gets for proposing block. This depends on the number of pre-commits included to the block

    0.04 (4%)

    0.04 (4%)

    withdraw_addr_enabled

    Whether withdrawal address can be changed or not. By default, it's the delegator's address.

    True

    True

    [{ "denom": "ncheq", "amount": "8,000,000,000,000" }] (8,000 cheq)

    max_deposit_period

    The maximum period for Atom holders to deposit on a proposal. Initial value: 2 months.

    604,800s (1 week)

    172,800s (48 hours)

    voting_params

    voting_period

    The defined period for an on-ledger vote from start to finish.

    259,200s (3 days)

    86.40s (1.2 minutes)

    tally_params

    quorum

    Minimum percentage of total stake needed to vote for a result to be considered valid.

    0.334 (33.4%)

    0.334 (33.4%)

    threshold

    Minimum proportion of Yes votes for proposal to pass.

    0.5 (50%)

    0.5 (50%)

    veto_threshold

    The minimum value of veto votes to total votes ratio for proposal to be vetoed. Default value: 1/3.

    0.334 (33.4%)

    0.334 (33.4%)

    0.045 (4.5%)

    inflation_max

    Inflation aims to this value if bonded_ratio < bonded_goal

    0.04 (4%)

    0.04 (4%)

    inflation_min

    Inflation aims to this value if bonded_ratio > bonded_goal

    0.01 (1%)

    0.01 (1%)

    goal_bonded

    Percentage of bonded tokens at which inflation rate will neither increase nor decrease

    0.60 (60%)

    0.60 (60%)

    blocks_per_year

    Number of blocks generated per year

    3,155,760 (1 block every ~10 seconds)

    3,155,760 (1 block every ~10 seconds)

    2,500,000,000 ncheq (2.5 CHEQ)

    default

    The specified transaction fee for creating any other type of DID-Linked Resource on the cheqd network, other than images or JSON files

    5,000,000,000 ncheq (5 CHEQ)

    5,000,000,000 ncheq (5 CHEQ)

    burn_factor

    The percentage of the transaction fee for image, json or default DID-Linked Resources that are burnt, i.e., destroyed from the cheqd network

    50%

    50%

    0.50 (50%)

    downtime_jail_duration

    The minimal time validator have to stay in jail

    600s (~10 minutes)

    600s (~10 minutes)

    slash_fraction_double_sign

    Slashed amount as a percentage for a double sign infraction

    0.05 (5%)

    0.05 (5%)

    slash_fraction_downtime

    Slashed amount as a percentage for downtime

    0.01 (1%)

    0.01 (1%)

    125

    max_entries

    Max amount of unbound/redelegation operations in progress per account

    7

    7

    historical_entries

    Amount of unbound/redelegate entries to store

    10,000

    10,000

    bond_denom

    Denomination used in staking

    ncheq

    ncheq

    [ "06-solomachine", "07-tendermint" ]

    true

    Alexandr Kolesov, Ankur Banerjee, Alex Tweeddale

    ADR Stage

    ACCEPTED

    Implementation Status

    Implemented

    Start Date

    2021-09-15

    Last Updated

    2022-12-08

    max_bytes

    This sets the maximum size of total bytes that can be committed in a single block. This should be larger than max_bytes for evidence.

    200,000 (~200 KB)

    200,000 (~200 KB)

    max_gas

    This sets the maximum gas that can be used in any single block.

    max_age_num_blocks

    Maximum age of evidence, in blocks. The basic formula for calculating this is: MaxAgeDuration / {average block time}.

    12,100

    25,920

    max_age_duration

    Maximum age of evidence, in time. It should correspond with an app's "unbonding period".

    pub_key_types

    Types of public keys supported for validators on the network.

    Ed25519

    Ed25519

    max_memo_characters

    Maximum number of characters in the memo field

    512

    512

    tx_sig_limit

    Max number of signatures

    default_send_enabled

    The default send enabled value allows send transfers for all coin denominations

    True

    True

    create_did

    The specified transaction fee for creating a Decentralized Identifier (DID) on the cheqd network

    50,000,000,000 ncheq (50 CHEQ)

    50,000,000,000 ncheq (50 CHEQ)

    update_did

    The specified transaction fee for updating an existing Decentralized Identifier (DID) on the cheqd network

    constant_fee

    The fee is used to verify the invariant(s)

    10,000,000,000,000 ncheq (10,000 CHEQ)

    10,000,000,000,000 ncheq (10,000 CHEQ)

    community_tax

    The percent of rewards that goes to the community fund pool

    0.02 (2%)

    0.02 (2%)

    base_proposer_reward

    Base reward that proposer of a block receives

    deposit_params

    min_deposit

    The minimum deposit for a proposal to enter the voting period.

    mint_denom

    Name of the cheq smallest denomination

    ncheq

    ncheq

    inflation_rate_change

    Maximum inflation rate change per year. In Cosmos Hub they use 1.0. Formula: inflationRateChangePerYear = (1 - BondedRatio / GoalBonded) * MaxInflationRateChange

    image

    The specified transaction fee for creating an image as a DID-Linked Resource on the cheqd network

    10,000,000,000 ncheq (10 CHEQ)

    10,000,000,000 ncheq (10 CHEQ)

    json

    The specified transaction fee for creating a JSON file as a DID-Linked Resource on the cheqd network

    signed_blocks_window

    Number of blocks a validator can miss signing before it is slashed.

    25,920 (expressed in blocks, equates to 259,200 seconds or ~3 days)

    17,280 (expressed in blocks, equates to 172,800 seconds or ~2 days)

    min_signed_per_window

    This percentage of blocks must be signed within the window.

    unbonding_time

    A delegator must wait this time after unbonding before tokens become available

    1,210,000s (~2 weeks)

    259,200s (~3 days)

    max_validators

    The maximum number of validators in the network

    max_expected_time_per_block

    Maximum expected time per block, used to enforce block delay. This parameter should reflect the largest amount of time that the chain might reasonably take to produce the next block under normal operating conditions. A safe choice is 3-5x the expected time per block.

    30,000,000,000 (expressed in nanoseconds, ~ 30 seconds)

    30,000,000,000 (expressed in nanoseconds, ~ 30 seconds)

    allowed_clients

    Defines the list of allowed client state types. We allow connections from other chains using the Tendermint clientarrow-up-right, and with light clients using the Solo Machine clientarrow-up-right.

    send_enabled

    Enables or disables all cross-chain token transfers from this chain

    true

    true

    receive_enabled

    Enables or disables all cross-chain token transfers to this chain

    genesis parametersarrow-up-right
    into a list of modulesarrow-up-right
    List of Cosmos modulesarrow-up-right
    Tendermint genesis parametersarrow-up-right

    200,000 (~200 KB)

    1,209,600,000,000,000 (expressed in nanoseconds, ~2 weeks)

    7

    25,000,000,000 ncheq (25 CHEQ)

    0.01 (1%)

    [{ "denom": "ncheq", "amount": "8,000,000,000,000" }] (8,000 cheq)

    0.045 (4.5%)

    2,500,000,000 ncheq (2.5 CHEQ)

    0.50 (50%)

    125

    [ "06-solomachine", "07-tendermint" ]

    true